Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local LangTbl = TBFY_CCTVConfig.Language[TBFY_CCTVConfig.LanguageToUse]
- //Notify support for non-darkrp
- net.Receive("tbfy_notify", function()
- local txt = net.ReadString()
- GAMEMODE:AddNotify(txt, net.ReadFloat(), net.ReadFloat())
- surface.PlaySound("buttons/lightswitch2.wav")
- MsgC(Color(255, 20, 20, 255), "[TBFY] ", Color(200, 200, 200, 255), txt, "\n")
- end)
- net.Receive("cctv_EditCameraMenu", function()
- local Screen = net.ReadEntity()
- local CamEdit = vgui.Create("cctv_camera_edit")
- CamEdit:UpdateSettings(Screen, Screen:GetCamera())
- end)
- local AllowMenu = true
- hook.Add("PhysgunPickup", "cctv_phys_menu", function(Player)
- AllowMenu = false
- end)
- hook.Add("PhysgunDrop", "cctv_phys_dropmenu", function(Player)
- AllowMenu = true
- end)
- local Cconfig = TBFY_CCTVConfig
- hook.Add("KeyPress", "CCTV_UseCCTV", function(Player, Key)
- if Key == IN_USE then
- if !Player:InVehicle() and AllowMenu and (Player:CanCCTVEdit() or (Cconfig.OwnerCanInstall or Cconfig.OwnerCanRepair)) then
- local Trace = {}
- Trace.start = Player:GetShootPos();
- Trace.endpos = Trace.start + Player:GetAimVector() * 100;
- Trace.filter = Player;
- local Tr = util.TraceLine(Trace);
- local TEnt = Tr.Entity
- if IsValid(TEnt) then
- if TEnt:GetClass() == "tbfy_cctv_camera" then
- local IsOwner = TEnt:GetCamOwner() == Player
- if IsOwner or TEnt:GetMarkedService() then
- local CameraM = vgui.Create("DMenu")
- if !TEnt:GetInstalled() then
- local Text = LangTbl.CameraInstall
- if Cconfig.InstallCost > 0 then
- Text = Text .. " ($" .. Cconfig.InstallCost .. ")"
- end
- CameraM:AddOption(Text, function() net.Start("cctv_toggle_install") net.WriteEntity(TEnt) net.WriteBool(true) net.SendToServer() end)
- else
- CameraM:AddOption(LangTbl.CameraUninstall, function() net.Start("cctv_toggle_install") net.WriteEntity(TEnt) net.WriteBool(false) net.SendToServer() end)
- end
- if TEnt:GetBroken() then
- local Text = LangTbl.CameraRepair
- if Cconfig.RepairCost > 0 then
- Text = Text .. " ($" .. Cconfig.RepairCost .. ")"
- end
- CameraM:AddOption(Text, function() net.Start("cctv_repair") net.WriteEntity(TEnt) net.SendToServer() end)
- end
- if IsOwner then
- local SetOwner = CameraM:AddSubMenu(LangTbl.CameraSetOwner)
- for k,v in pairs(player.GetAll()) do
- if v != Player then
- SetOwner:AddOption(v:Nick(), function() net.Start("cctv_setowner") net.WriteEntity(TEnt) net.WriteEntity(v) net.SendToServer() end)
- end
- end
- end
- CameraM:Open()
- CameraM:SetPos(ScrW()/2,ScrH()/2)
- end
- end
- end
- end
- end
- end)
- surface.CreateFont( "cctv_buttontext", {
- font = "Verdana",
- size = 11,
- weight = 1000,
- antialias = true,
- })
- surface.CreateFont( "cctv_paneltext", {
- font = "Verdana",
- size = 17,
- weight = 1000,
- antialias = true,
- })
- local MainPanelColor = Color(255,255,255,200)
- local HeaderColor = Color(50,50,50,255)
- local TabListColors = Color(215,215,220,255)
- local ButtonColor = Color(50,50,50,255)
- local ButtonColorHovering = Color(75,75,75,200)
- local ButtonColorPressed = Color(150,150,150,200)
- local ButtonOutline = Color(0,0,0,200)
- local HeaderH = 25
- local PANEL = {}
- function PANEL:Init()
- self.ButtonText = ""
- self.BColor = ButtonColor
- self:SetText("")
- self.Font = "cctv_buttontext"
- self.DClickC = ButtonColorPressed
- self.DHoverC = ButtonColorHovering
- self.DButtonC = ButtonColor
- end
- function PANEL:UpdateColours()
- if self:IsDown() or self.m_bSelected then self.BColor = self.DClickC return end
- if self.Hovered and !self:GetDisabled() then self.BColor = self.DHoverC return end
- self.BColor = self.DButtonC
- return
- end
- function PANEL:SetBText(Text)
- self.ButtonText = Text
- end
- function PANEL:SetBFont(Font)
- self.Font = Font
- end
- function PANEL:SetBColors(Press,Hover,Normal)
- self.DClickC = Press
- self.DHoverC = Hover
- self.DButtonC = Normal
- end
- function PANEL:Paint(W,H)
- draw.RoundedBox(4, 0, 0, W, H, self.BColor)
- draw.SimpleText(self.ButtonText, self.Font, W/2, H/2, Color(255,255,255,255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
- end
- vgui.Register( "cctv_button", PANEL, "DButton")
- local PANEL = {}
- local PanTypes = {
- [1] = "Pan",
- [2] = "PanLeftMiddleLeft",
- [3] = "PanRightMiddleRight",
- }
- local IdleTypes = {
- [1] = "Idle",
- [2] = "IdleLeft",
- [3] = "IdleRight",
- }
- local ScreenModels = {
- [1] = {N = "Small Screen", M = "models/props_c17/tv_monitor01.mdl", CamPos = Vector(25,0,0), CamLookAt = Vector(0,0,-3), FOV = 90},
- [2] = {N = "Small Monitor", M = "models/props_lab/monitor01b.mdl", CamPos = Vector(25,0,0), CamLookAt = Vector(0,0,0), FOV = 75},
- [3] = {N = "Computer Screen", M = "models/props/cs_office/computer_monitor.mdl", CamPos = Vector(15,0,10), CamLookAt = Vector(0,0,10), FOV = 120},
- [4] = {N = "TV", M = "models/props/cs_office/tv_plasma.mdl", CamPos = Vector(25,0,10), CamLookAt = Vector(0,0,10), FOV = 130},
- [5] = {N = "Old Monitor", M = "models/props_lab/monitor01a.mdl", CamPos = Vector(25,0,-5), CamLookAt = Vector(0,0,-5), FOV = 125},
- [6] = {N = "Hanging Monitor", M = "models/props_wasteland/controlroom_monitor001b.mdl", CamPos = Vector(30,0,0), CamLookAt = Vector(0,0,-10), FOV = 125},
- }
- local CameraTypes = {
- [1] = {N = "Default", M = "models/tobadforyou/surveillance_camera.mdl", CamPos = Vector(25,0,0), CamLookAt = Vector(0,0,0), FOV = 65, BID = {1,2}},
- [2] = {N = "Fisheye", M = "models/freeman/cctv_camera_fisheye.mdl", CamPos = Vector(15,0,10), CamLookAt = Vector(0,0,0), FOV = 65, BID = {0,0}},
- }
- function PANEL:Init()
- self:ShowCloseButton(false)
- self:SetTitle("")
- self:MakePopup()
- self.UpDownAng = 0
- self.LeftRightAng = 0
- self.TypeSelected = 1
- self.ScreenModelID = 1
- self.CTypeSelected = 1
- self.TopDPanel = vgui.Create("DPanel", self)
- self.TopDPanel.Paint = function(selfp, W,H)
- draw.RoundedBoxEx(8, 0, 0, W, H, HeaderColor, true, true, false, false)
- draw.SimpleText(LangTbl.CameraSettingsMenu, "cctv_paneltext", W/2, H/2, Color( 255, 255, 255, 255 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER )
- end
- self.CameraList = vgui.Create("DScrollPanel", self)
- self.CameraList.Paint = function(selfp, W, H)
- draw.RoundedBox(4, 0, 0, W-15, H, TabListColors)
- end
- self.CameraList.VBar.Paint = function() end
- self.CameraList.VBar.btnUp.Paint = function() end
- self.CameraList.VBar.btnDown.Paint = function() end
- self.CameraList.VBar.btnGrip.Paint = function() end
- self.Camera = vgui.Create( "DModelPanel", self.CameraList)
- self.Camera:SetModel("models/tobadforyou/surveillance_camera.mdl")
- self.Camera:SetFOV(65)
- self.Camera:SetLookAt(Vector(0,0,0))
- self.Camera:SetCamPos(Vector(25,0,0))
- local CameraEnt = self.Camera:GetEntity()
- CameraEnt:SetSequence("Idle")
- self.Camera:SetAnimated(true)
- self.Camera.LayoutEntity = function(selfp, Ent)
- if selfp.ShouldPan then
- if CameraEnt:GetCycle() >= 1 then
- CameraEnt:SetCycle(0)
- end
- selfp:RunAnimation()
- else
- return
- end
- end
- local OldPaint = self.Camera.Paint
- self.Camera.Paint = function(selfp,W,H) draw.RoundedBox(8, 0, 0, W, H, Color(150,150,150,200)) OldPaint(selfp,W,H) end
- self.Screen = vgui.Create( "DModelPanel", self.CameraList)
- self.Screen.LayoutEntity = function(selfp, Ent) end
- local OldPaint = self.Screen.Paint
- self.Screen.Paint = function(selfp,W,H) draw.RoundedBox(8, 0, 0, W, H, Color(150,150,150,200)) OldPaint(selfp,W,H) end
- self.UpDown = vgui.Create("DNumSlider", self.CameraList)
- self.UpDown:SetText(LangTbl.CamUpDown)
- self.UpDown:SetMin(-50)
- self.UpDown:SetMax(50)
- self.UpDown:SetDecimals(0)
- self.UpDown.Label:SetTextColor(Color(0,0,0,255))
- self.UpDown.OnValueChanged = function(selfp, NewValue)
- self.UpDownAng = NewValue
- if IsValid(CameraEnt) and self.CTypeSelected == 1 then
- CameraEnt:ManipulateBoneAngles(2, Angle(0, self.UpDownAng, 0))
- end
- end
- self.LeftRight = vgui.Create("DNumSlider", self.CameraList)
- self.LeftRight:SetText(LangTbl.CamLeftRight)
- self.LeftRight:SetMin(-45)
- self.LeftRight:SetMax(45)
- self.LeftRight:SetDecimals(0)
- self.LeftRight.Label:SetTextColor(Color(0,0,0,255))
- self.LeftRight.OnValueChanged = function(selfp, NewValue)
- if self.Camera.ShouldPan then
- self.LeftRightAng = 0
- else
- self.LeftRightAng = NewValue
- end
- if IsValid(CameraEnt) and self.CTypeSelected == 1 then
- CameraEnt:ManipulateBoneAngles(1, Angle(0, 0, self.LeftRightAng))
- end
- end
- self.CamType = vgui.Create("DComboBox", self)
- self.CamType:SetValue("Select Idle Type")
- self.CamType:AddChoice("Middle")
- self.CamType:AddChoice("Left")
- self.CamType:AddChoice("Right")
- self.CamType.OnSelect = function(selfp, index, value)
- self.TypeSelected = index
- if self.Camera.ShouldPan then
- local Seq = CameraEnt:LookupSequence(PanTypes[self.TypeSelected])
- if Seq then
- CameraEnt:SetSequence(CameraEnt:LookupSequence(PanTypes[self.TypeSelected]))
- end
- else
- local Seq = CameraEnt:LookupSequence(IdleTypes[self.TypeSelected])
- if Seq then
- CameraEnt:SetSequence(CameraEnt:LookupSequence(IdleTypes[self.TypeSelected]))
- end
- end
- end
- self.CamType.DoClick = function(selfp)
- if ( selfp:IsMenuOpen() ) then
- return selfp:CloseMenu()
- end
- if self.CTypeSelected == 1 then
- selfp:OpenMenu()
- end
- end
- self.Pan = vgui.Create("DCheckBoxLabel", self.CameraList)
- self.Pan:SetText(LangTbl.CamPan)
- self.Pan:SetValue(0)
- self.Pan.Label:SetTextColor(Color(0,0,0,255))
- self.Pan.Button.DoClick = function() if self.CTypeSelected == 1 then self.Pan:Toggle() end end
- self.Pan.OnChange = function(selfp, val)
- if val then
- self.CamType:Clear()
- self.CamType:SetValue("Select Pan Type")
- self.CamType:AddChoice("Pan Left to Right")
- self.CamType:AddChoice("Pan Left to Middle")
- self.CamType:AddChoice("Pan Right to Middle")
- self.LeftRightAng = 0
- CameraEnt:ManipulateBoneAngles(1, Angle(0, 0, 0))
- CameraEnt:ManipulateBoneAngles(2, Angle(0, self.UpDownAng, 0))
- local Seq = CameraEnt:LookupSequence(PanTypes[self.TypeSelected])
- if Seq then
- CameraEnt:SetSequence(CameraEnt:LookupSequence(PanTypes[self.TypeSelected]))
- end
- self.Camera.ShouldPan = true
- else
- self.CamType:Clear()
- self.CamType:SetValue("Select Idle Type")
- self.CamType:AddChoice("Middle")
- self.CamType:AddChoice("Left")
- self.CamType:AddChoice("Right")
- local Seq = CameraEnt:LookupSequence(IdleTypes[self.TypeSelected])
- if Seq then
- CameraEnt:SetSequence(CameraEnt:LookupSequence(IdleTypes[self.TypeSelected]))
- end
- self.Camera.ShouldPan = false
- end
- end
- self.CType = vgui.Create("DComboBox", self)
- self.CType:SetValue("Select Camera Type")
- for k,v in ipairs(CameraTypes) do
- self.CType:AddChoice(v.N)
- end
- self.CType.OnSelect = function(selfp, index, value)
- local CTbl = CameraTypes[index]
- self.Camera:SetModel(CTbl.M)
- self.Camera:SetCamPos(CTbl.CamPos)
- self.Camera:SetLookAt(CTbl.CamLookAt)
- self.Camera:SetFOV(CTbl.FOV)
- CameraEnt = self.Camera:GetEntity()
- self.CTypeSelected = index
- end
- self.UpdateCType = vgui.Create("cctv_button", self.CameraList)
- self.UpdateCType:SetBText("Update Type($" .. Cconfig.ChangeCTypeCost .. ")")
- self.UpdateCType.DoClick = function()
- net.Start("cctv_update_ctype")
- net.WriteFloat(self.CTypeSelected)
- net.SendToServer()
- end
- self.UName = vgui.Create( "DTextEntry", self.CameraList)
- self.UName:SetText("TV Identifier Name")
- self.UpdateUName = vgui.Create("cctv_button", self.CameraList)
- self.UpdateUName:SetBText("Update Text")
- self.UpdateUName.DoClick = function()
- local Name = self.UName:GetValue()
- net.Start("cctv_update_uname")
- net.WriteString(Name)
- net.SendToServer()
- end
- self.Mixer = vgui.Create("DColorMixer", self.CameraList)
- self.Mixer:SetColor(Color(255,255,255,255))
- self.Mixer:SetAlphaBar(false)
- self.Mixer.ValueChanged = function(selfp, C)
- if IsValid(self.Camera) then
- self.Camera:SetColor(Color(C.r,C.g,C.b,C.a))
- end
- end
- self.MarkService = vgui.Create("DCheckBoxLabel", self.CameraList)
- self.MarkService:SetText(LangTbl.CamMarkForService)
- self.MarkService.Label:SetTextColor(Color(0,0,0,255))
- self.UpdateCam = vgui.Create("cctv_button", self.CameraList)
- self.UpdateCam:SetBText(LangTbl.CameraUpdateSettings)
- self.UpdateCam.DoClick = function()
- local CTbl = self.Mixer:GetColor()
- net.Start("cctv_update_camerasettings")
- net.WriteFloat(self.UpDownAng)
- net.WriteFloat(self.LeftRightAng)
- net.WriteBool(self.Camera.ShouldPan)
- net.WriteFloat(self.TypeSelected)
- net.WriteFloat(CTbl.r)
- net.WriteFloat(CTbl.g)
- net.WriteFloat(CTbl.b)
- net.SendToServer()
- end
- self.ScreenModel = vgui.Create("DComboBox", self)
- self.ScreenModel:SetValue("Select Screen Model")
- for k,v in ipairs(ScreenModels) do
- self.ScreenModel:AddChoice(v.N)
- end
- self.ScreenModel.OnSelect = function(selfp, index, value)
- local STbl = ScreenModels[index]
- self.Screen:SetModel(STbl.M)
- self.Screen:SetCamPos(STbl.CamPos)
- self.Screen:SetLookAt(STbl.CamLookAt)
- self.Screen:SetFOV(STbl.FOV)
- self.ScreenModelID = index
- end
- self.UpdateScreen = vgui.Create("cctv_button", self.CameraList)
- local Text = LangTbl.ScreenUpdateModel
- if Cconfig.ChangeScreenCost > 0 then
- Text = LangTbl.ScreenUpdateModel .. "($" .. Cconfig.ChangeScreenCost .. ")"
- end
- self.UpdateScreen:SetBText(Text)
- self.UpdateScreen.DoClick = function()
- net.Start("cctv_updatescreen")
- net.WriteFloat(self.ScreenModelID)
- net.SendToServer()
- end
- self.CloseButton = vgui.Create("cctv_button", self)
- self.CloseButton:SetBText("X")
- self.CloseButton.DoClick = function() self:Remove() end
- end
- function PANEL:UpdateSettings(Screen, Cam)
- local Marked = Cam:GetMarkedService()
- if Marked then
- self.MarkService:SetValue(1)
- else
- self.MarkService:SetValue(0)
- end
- self.MarkService.OnChange = function(selfp, val)
- net.Start("cctv_markforservice")
- net.WriteBool(val)
- net.SendToServer()
- end
- if IsValid(Screen) then
- local M = Screen:GetModel()
- local STbl = ScreenModels[1]
- for k,v in ipairs(ScreenModels) do
- if v.M == M then
- STbl = v
- break
- end
- end
- self.Screen:SetModel(M)
- self.Screen:SetFOV(STbl.FOV)
- self.Screen:SetLookAt(STbl.CamLookAt)
- self.Screen:SetCamPos(STbl.CamPos)
- end
- local Name = Screen:GetUName()
- if Name then
- self.UName:SetText(Name)
- end
- self.Mixer:SetColor(Cam:GetColor())
- local CType = Cam:GetCType()
- local CTbl = CameraTypes[CType]
- if CTbl then
- local VCam = self.Camera:GetEntity()
- VCam:SetModel(CTbl.M)
- self.CTypeSelected = CType
- local BoneAng = Cam:GetManiB()
- self.LeftRightAng = BoneAng.r
- self.UpDownAng = BoneAng.y
- VCam:ManipulateBoneAngles(CTbl.BID[1], Angle(0, 0, self.LeftRightAng))
- VCam:ManipulateBoneAngles(CTbl.BID[2], Angle(0, self.UpDownAng, 0))
- end
- end
- function PANEL:Paint(W,H)
- draw.RoundedBoxEx(8, 0, HeaderH, W, H-HeaderH, MainPanelColor,false,false,true,true)
- end
- local Width, Height = 425, 395
- function PANEL:PerformLayout()
- self:SetPos(ScrW()/2-Width/2, ScrH()/2-Height/2)
- self:SetSize(Width, Height)
- self.TopDPanel:SetPos(0,0)
- self.TopDPanel:SetSize(Width,HeaderH)
- local HStart = HeaderH+5
- self.CameraList:SetPos(5,HStart)
- self.CameraList:SetSize(Width+5, Height-35)
- self.Camera:SetPos(Width-165, 5)
- self.Camera:SetSize(150,160)
- self.UpdateCam:SetPos(Width-165,135)
- self.UpdateCam:SetSize(150,30)
- self.Screen:SetPos(Width-165, 170)
- self.Screen:SetSize(150,160)
- self.UpdateScreen:SetPos(Width-165,300)
- self.UpdateScreen:SetSize(150,30)
- local MiddleW = (Width-25-self.Camera:GetWide())/2
- self.UpDown:SetPos(MiddleW-100,5)
- self.UpDown:SetSize(200,25)
- self.LeftRight:SetPos(MiddleW-100,40)
- self.LeftRight:SetSize(200,25)
- self.CamType:SetPos(10,105)
- self.CamType:SetSize(125,20)
- self.UpdateCType:SetPos(135, 100)
- self.UpdateCType:SetSize(110,20)
- self.Pan:SetPos(140,75)
- self.Pan:SetSize(50,20)
- self.CType:SetPos(10,130)
- self.CType:SetSize(125,20)
- self.ScreenModel:SetPos(10, 155)
- self.ScreenModel:SetSize(125,20)
- self.MarkService:SetPos(140,125)
- self.MarkService:SetSize(150,20)
- self.UName:SetPos(5,150)
- self.UName:SetSize(125, 20)
- self.UpdateUName:SetPos(135, 150)
- self.UpdateUName:SetSize(110,20)
- self.Mixer:SetPos(5, 175)
- self.Mixer:SetSize(240,180)
- self.CloseButton:SetPos(Width-HeaderH,HeaderH/2-9)
- self.CloseButton:SetSize(20, 20)
- end
- vgui.Register("cctv_camera_edit", PANEL, "DFrame")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement