mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
230 lines
7.5 KiB
Lua
230 lines
7.5 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
local PANEL = {}
|
|
|
|
function PANEL:Init()
|
|
self:SetSize(ScrW(), ScrH())
|
|
self:SetAlpha(0)
|
|
self:AlphaTo(255, 0.5, 0)
|
|
|
|
self.innerContent = self:Add("EditablePanel")
|
|
self.innerContent:SetSize(SScaleMin(700 / 3), SScaleMin(240 / 2.5))
|
|
self.innerContent:Center()
|
|
self.innerContent:MakePopup()
|
|
self.innerContent.Paint = function(self, w, h)
|
|
surface.SetDrawColor(0, 0, 0, 130)
|
|
surface.DrawRect(0, 0, w, h)
|
|
end
|
|
|
|
local topbar = self.innerContent:Add("Panel")
|
|
topbar:SetHeight(SScaleMin(50 / 3))
|
|
topbar:Dock(TOP)
|
|
topbar.Paint = function(self, width, height)
|
|
surface.SetDrawColor(0, 0, 0, 130)
|
|
surface.DrawRect(0, 0, width, height)
|
|
end
|
|
|
|
local titleText = topbar:Add("DLabel")
|
|
titleText:SetFont("CharCreationBoldTitleNoClamp")
|
|
titleText:Dock(LEFT)
|
|
titleText:SetText("NPC Spawner Editor")
|
|
titleText:DockMargin(SScaleMin(10 / 3), 0, 0, 0)
|
|
titleText:SetContentAlignment(4)
|
|
titleText:SizeToContents()
|
|
|
|
local exit = topbar:Add("DImageButton")
|
|
exit:SetImage("willardnetworks/tabmenu/navicons/exit.png")
|
|
exit:SetSize(SScaleMin(20 / 3), SScaleMin(20 / 3))
|
|
exit:DockMargin(0, SScaleMin(15 / 3), SScaleMin(10 / 3), SScaleMin(15 / 3))
|
|
exit:Dock(RIGHT)
|
|
exit.DoClick = function()
|
|
if (self.ExitCallback) then
|
|
self.ExitCallback()
|
|
end
|
|
|
|
self:Remove()
|
|
surface.PlaySound("helix/ui/press.wav")
|
|
end
|
|
|
|
local divider = topbar:Add("Panel")
|
|
divider:SetSize(1, topbar:GetTall())
|
|
divider:Dock(RIGHT)
|
|
divider:DockMargin(0, SScaleMin(10 / 3), SScaleMin(10 / 3), SScaleMin(10 / 3))
|
|
divider.Paint = function(self, w, h)
|
|
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
|
surface.DrawLine(0, 0, 0, h)
|
|
end
|
|
|
|
self.rowEnabled = self.innerContent:Add("ixSettingsRowBool")
|
|
self.rowEnabled:Dock(TOP)
|
|
self.rowEnabled:DockMargin(0, 0, 6, 0)
|
|
self.rowEnabled:SetText("Enabled")
|
|
self.rowEnabled.OnResetClicked = function()
|
|
self.rowEnabled:SetShowReset(false)
|
|
self.rowEnabled:SetValue(false, true)
|
|
end
|
|
self.rowEnabled.OnValueChanged = function()
|
|
local newValue = self.rowEnabled:GetValue()
|
|
|
|
self.rowEnabled:SetShowReset(newValue != false, "Spawn Range", false)
|
|
end
|
|
self.rowEnabled:GetLabel():SetHelixTooltip(function(tooltip)
|
|
local title = tooltip:AddRow("name")
|
|
title:SetImportant()
|
|
title:SetText("Enabled")
|
|
title:SizeToContents()
|
|
title:SetMaxWidth(math.max(title:GetMaxWidth(), ScrW() * 0.5))
|
|
|
|
local description = tooltip:AddRow("description")
|
|
description:SetText("Whether the NPC Spawner is enabled.")
|
|
description:SizeToContents()
|
|
end)
|
|
|
|
self.rowClass = self.innerContent:Add("ixSettingsRowString")
|
|
self.rowClass:Dock(TOP)
|
|
self.rowClass:DockMargin(0, 0, 6, 0)
|
|
self.rowClass:SetText("NPC Class")
|
|
self.rowClass:GetLabel():SetHelixTooltip(function(tooltip)
|
|
local title = tooltip:AddRow("name")
|
|
title:SetImportant()
|
|
title:SetText("NPC Class")
|
|
title:SizeToContents()
|
|
title:SetMaxWidth(math.max(title:GetMaxWidth(), ScrW() * 0.5))
|
|
|
|
local description = tooltip:AddRow("description")
|
|
description:SetText("The NPC Class that the spawner will spawn.")
|
|
description:SizeToContents()
|
|
end)
|
|
|
|
self.rowNoSpawnRange = self.innerContent:Add("ixSettingsRowNumber")
|
|
self.rowNoSpawnRange:Dock(TOP)
|
|
self.rowNoSpawnRange:DockMargin(0, 0, 6, 0)
|
|
self.rowNoSpawnRange:SetText("Player No-Spawn Range")
|
|
self.rowNoSpawnRange:SetMin(0)
|
|
self.rowNoSpawnRange:SetMax(5000)
|
|
self.rowNoSpawnRange.OnResetClicked = function()
|
|
self.rowNoSpawnRange:SetShowReset(false)
|
|
self.rowNoSpawnRange:SetValue(1000, true)
|
|
end
|
|
self.rowNoSpawnRange.OnValueChanged = function()
|
|
local newValue = self.rowNoSpawnRange:GetValue()
|
|
|
|
self.rowNoSpawnRange:SetShowReset(newValue != 1000, "Player No-Spawn Range", 1000)
|
|
end
|
|
self.rowNoSpawnRange:GetLabel():SetHelixTooltip(function(tooltip)
|
|
local title = tooltip:AddRow("name")
|
|
title:SetImportant()
|
|
title:SetText("PLayer No-Spawn Range")
|
|
title:SizeToContents()
|
|
title:SetMaxWidth(math.max(title:GetMaxWidth(), ScrW() * 0.5))
|
|
|
|
local description = tooltip:AddRow("description")
|
|
description:SetText("The range around the spawner at which it will stop spawning NPCs if a player is within.")
|
|
description:SizeToContents()
|
|
end)
|
|
|
|
self.rowMaxNPCs = self.innerContent:Add("ixSettingsRowNumber")
|
|
self.rowMaxNPCs:Dock(TOP)
|
|
self.rowMaxNPCs:DockMargin(0, 0, 6, 0)
|
|
self.rowMaxNPCs:SetText("Maxiumum NPCs")
|
|
self.rowMaxNPCs:SetMin(1)
|
|
self.rowMaxNPCs:SetMax(10)
|
|
self.rowMaxNPCs.OnResetClicked = function()
|
|
self.rowMaxNPCs:SetShowReset(false)
|
|
self.rowMaxNPCs:SetValue(5, true)
|
|
end
|
|
self.rowMaxNPCs.OnValueChanged = function()
|
|
local newValue = self.rowMaxNPCs:GetValue()
|
|
|
|
self.rowMaxNPCs:SetShowReset(newValue != 5, "Maxiumum NPCs", 5)
|
|
end
|
|
self.rowMaxNPCs:GetLabel():SetHelixTooltip(function(tooltip)
|
|
local title = tooltip:AddRow("name")
|
|
title:SetImportant()
|
|
title:SetText("Maximum NPCs")
|
|
title:SizeToContents()
|
|
title:SetMaxWidth(math.max(title:GetMaxWidth(), ScrW() * 0.5))
|
|
|
|
local description = tooltip:AddRow("description")
|
|
description:SetText("The maximum amount of NPCs that the spawner can spawn at any one time.")
|
|
description:SizeToContents()
|
|
end)
|
|
|
|
self.rowSpawnInterval = self.innerContent:Add("ixSettingsRowNumber")
|
|
self.rowSpawnInterval:Dock(TOP)
|
|
self.rowSpawnInterval:DockMargin(0, 0, 6, 0)
|
|
self.rowSpawnInterval:SetText("Spawn Interval")
|
|
self.rowSpawnInterval:SetMin(1)
|
|
self.rowSpawnInterval:SetMax(1800)
|
|
self.rowSpawnInterval.OnResetClicked = function()
|
|
self.rowSpawnInterval:SetShowReset(false)
|
|
self.rowSpawnInterval:SetValue(300, true)
|
|
end
|
|
self.rowSpawnInterval.OnValueChanged = function()
|
|
local newValue = self.rowSpawnInterval:GetValue()
|
|
|
|
self.rowSpawnInterval:SetShowReset(newValue != 300, "Spawn Interval", 300)
|
|
end
|
|
self.rowSpawnInterval:GetLabel():SetHelixTooltip(function(tooltip)
|
|
local title = tooltip:AddRow("name")
|
|
title:SetImportant()
|
|
title:SetText("Spawn Interval")
|
|
title:SizeToContents()
|
|
title:SetMaxWidth(math.max(title:GetMaxWidth(), ScrW() * 0.5))
|
|
|
|
local description = tooltip:AddRow("description")
|
|
description:SetText("How often the spawner will attempt to spawn an NPC, in seconds.")
|
|
description:SizeToContents()
|
|
end)
|
|
|
|
self.saveChanges = self.innerContent:Add("DButton")
|
|
self.saveChanges:Dock(BOTTOM)
|
|
self.saveChanges:DockMargin(10, 10, 10, 10)
|
|
self.saveChanges:SetTall(SScaleMin(60 / 4))
|
|
self.saveChanges:SetFont("ixMediumFont")
|
|
self.saveChanges:SetColor(ix.config.Get("color", Color(255, 255, 255)))
|
|
self.saveChanges:SetText("SAVE CHANGES")
|
|
self.saveChanges.DoClick = function()
|
|
surface.PlaySound("helix/ui/press.wav")
|
|
|
|
net.Start("NPCSpawner_Edit")
|
|
net.WriteEntity(self.entity)
|
|
net.WriteBool(self.rowEnabled:GetValue())
|
|
net.WriteString(self.rowClass:GetValue())
|
|
net.WriteFloat(self.rowNoSpawnRange:GetValue())
|
|
net.WriteFloat(self.rowMaxNPCs:GetValue())
|
|
net.WriteFloat(self.rowSpawnInterval:GetValue())
|
|
net.SendToServer()
|
|
|
|
self:Remove()
|
|
end
|
|
end
|
|
|
|
function PANEL:Paint(width, height)
|
|
surface.SetDrawColor(Color(63, 58, 115, 220))
|
|
surface.DrawRect(0, 0, width, height)
|
|
|
|
Derma_DrawBackgroundBlur(self, 1)
|
|
end
|
|
|
|
function PANEL:Populate(spawner, bEnabled, sClass, fPlayerNoSpawnRange, fMaxNPCs, fSpawnInterval)
|
|
self.entity = spawner
|
|
|
|
self.rowEnabled:SetValue(bEnabled, true)
|
|
self.rowClass:SetValue(sClass, true)
|
|
self.rowNoSpawnRange:SetValue(fPlayerNoSpawnRange)
|
|
self.rowMaxNPCs:SetValue(fMaxNPCs)
|
|
self.rowSpawnInterval:SetValue(fSpawnInterval)
|
|
end
|
|
|
|
vgui.Register("ixNPCSpawnerEditor", PANEL, "EditablePanel")
|