summaryrefslogtreecommitdiff
path: root/lua/entities/info_townieshop
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-08-07 18:22:29 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2017-08-07 18:22:29 -0400
commitdaa59a7835c350a09dcb207c714acf57828137f3 (patch)
treeae2c00da0e546447ca17a9c5d8492310e5e93f27 /lua/entities/info_townieshop
downloadartery_editor-daa59a7835c350a09dcb207c714acf57828137f3.tar.gz
artery_editor-daa59a7835c350a09dcb207c714acf57828137f3.tar.bz2
artery_editor-daa59a7835c350a09dcb207c714acf57828137f3.zip
Inital Commit
Diffstat (limited to 'lua/entities/info_townieshop')
-rw-r--r--lua/entities/info_townieshop/cl_init.lua173
-rw-r--r--lua/entities/info_townieshop/init.lua59
-rw-r--r--lua/entities/info_townieshop/shared.lua13
3 files changed, 245 insertions, 0 deletions
diff --git a/lua/entities/info_townieshop/cl_init.lua b/lua/entities/info_townieshop/cl_init.lua
new file mode 100644
index 0000000..2caccd4
--- /dev/null
+++ b/lua/entities/info_townieshop/cl_init.lua
@@ -0,0 +1,173 @@
+if engine.ActiveGamemode() ~= "sandbox" then return end
+
+include('shared.lua')
+
+function ENT:Draw()
+ --self:DrawModel() -- Draws Model Client Side
+end
+
+function ENT:Hint()
+ AddWorldTip( self:EntIndex(), "Spawnpoint", 0.5, self:GetPos(), self )
+end
+
+local function syncentity(ent,data)
+ print("sending data to server")
+ PrintTable(data)
+ net.Start("edit_towniespawn_update")
+ net.WriteEntity(ent)
+ net.WriteTable(data)
+ net.SendToServer()
+end
+
+local navnode_info = {}
+
+concommand.Add("artery_getnavnodes",function()
+ net.Start("edit_requestnavnodes")
+ net.SendToServer()
+end)
+
+net.Receive("edit_respondnavnodes",function()
+ navnode_info = net.ReadTable()
+ print("client received navnode info:")
+ PrintTable(navnode_info)
+end)
+
+local function draw_edit_panel(who, data)
+ if not GCompute then error("GCompute not installed!") end
+ if not GCompute.IDE then error("GCompute was initalized wrong or has changed, update this file!") end
+ local inst = GCompute.IDE.GetInstance()
+ inst:SetVisible (true)
+
+ print("Opening file browser!")
+ PrintTable(data)
+
+ --Remove donation panel
+ for k,v in pairs(inst.ViewManager.Views) do
+ if type(k) == "Table" and k.Title == "Donate!" then
+ k:SetVisible(false)
+ end
+ end
+
+ --Open up the npc's file (create it if it dosen't already exist)
+ local filename = "artery/maps/" .. game.GetMap() .. "/npcs/" .. data.Name .. ".txt"
+ if not file.Exists(filename, "DATA") then
+ local pos = who:GetPos()
+ local npctxt = string.format(default_townie,pos.x,pos.y,pos.z,data.Model,data.Name,table.concat(data.NavNodes),data.Name)
+ file.Write(filename,npctxt)
+ end
+
+ --Open up this npc's file
+ inst:OpenUri("game/data/" .. filename,function(succ,res,view)
+ view:Select()
+ end)
+
+ --Set our file browser to the right place
+ for k,v in pairs(inst.ViewManager.Views) do
+ if k.Title == "File Browser" then
+ k.FolderListView:SetPath("/game/data/artery/maps/" .. game.GetMap() .. "/npcs")
+ end
+ end
+
+ --Add a list of nav nodes we found
+ local p = ents.FindByClass("info_townienode")
+
+end
+
+net.Receive("edit_towniespawn",function()
+
+ print('got request to edit someone')
+ local who = net.ReadEntity()
+ local data = net.ReadTable()
+
+ draw_edit_panel(who,data)
+
+ --[[
+ local editorframe = vgui.Create("DFrame")
+ editorframe.OnClose = function(self)
+ syncentity(who,data)
+ end
+ editorframe:SetSize(640,640)
+ editorframe:SetTitle("Townie spawn")
+ editorframe:SetDraggable(true)
+ editorframe:MakePopup()
+ local editor = vgui.Create("DPanel",editorframe)
+ editor:Dock(FILL)
+
+ --Edit name
+ local namelabel = vgui.Create("DLabel",editor)
+ namelabel:SetText("Townie Name:")
+ namelabel:Dock(TOP)
+ namelabel:SetDark(true)
+ local nameentry = vgui.Create("DTextEntry",editor)
+ nameentry:Dock(TOP)
+ nameentry:SetText(data.Name)
+ nameentry:SetUpdateOnType(true)
+ nameentry.OnValueChange = function(self,value)
+ data.Name = value
+ end
+
+ --Edit model
+ local modellabel = vgui.Create("DLabel",editor)
+ modellabel:SetText("Townie Model:")
+ modellabel:Dock(TOP)
+ modellabel:SetDark(true)
+ local modelentry = vgui.Create("DTextEntry",editor)
+ modelentry:Dock(TOP)
+ modelentry:SetText(data.Model)
+ modelentry:SetUpdateOnType(true)
+ modelentry.OnValueChange = function(self,value)
+ data.Model = value
+ end
+
+ --Edit navnodes
+ local navnodelist = vgui.Create("DListLayout",editor)
+ navnodelist:Dock(FILL)
+ local allnavents = ents.FindByClass("info_townienode")
+
+ local function create_navnode_panel(v)
+ local navnodeitm = vgui.Create("DPanel")
+
+ local navname = vgui.Create("DComboBox",navnodeitm)
+ for i,j in pairs(navnode_info) do
+ navname:AddChoice(j.Name)
+ end
+ navname:SetValue(v)
+ navname:Dock(LEFT)
+ navname.OnSelect = function(self,index,value)
+ data.NavNodes[index] = value
+ end
+
+ local navdelete = vgui.Create("DButton",navnodeitm)
+ navdelete:SetText("-")
+ navdelete.DoClick = function()
+ print('Tryint to get rid of nav node', v)
+ --delete it from the data
+ for i,j in pairs(data.NavNodes) do
+ if j == v then
+ for k = i, #data.NavNodes do
+ data.NavNodes[i] = data.NavNodes[i+1]
+ end
+ break
+ end
+ end
+ --and remove the panel
+ navnodeitm:Remove()
+ end
+ navdelete:Dock(RIGHT)
+
+ return navnodeitm
+ end
+
+ for k,v in pairs(data.NavNodes) do
+ local navnodeitm = create_navnode_panel(v)
+ navnodelist:Add(navnodeitm)
+ end
+ local addbutton = vgui.Create("DButton",editor)
+ addbutton:SetText("+")
+ addbutton.DoClick = function()
+ local navnodeitm = create_navnode_panel("select")
+ navnodelist:Add(navnodeitm)
+ end
+ addbutton:Dock(BOTTOM)
+ ]]
+end)
diff --git a/lua/entities/info_townieshop/init.lua b/lua/entities/info_townieshop/init.lua
new file mode 100644
index 0000000..1e93d93
--- /dev/null
+++ b/lua/entities/info_townieshop/init.lua
@@ -0,0 +1,59 @@
+if engine.ActiveGamemode() ~= "sandbox" then return end
+
+AddCSLuaFile( "cl_init.lua" ) -- Make sure clientside
+AddCSLuaFile( "shared.lua" ) -- and shared scripts are sent.
+
+include('shared.lua')
+
+ENT.default_data = {
+ Model = "models/humans/Group02/Male_03.mdl",
+ NavNodes = {},
+ Pos = nil
+}
+
+ENT.edit_data = {
+ Size = HULL_HUMAN,
+ Type = "npc",
+ Model = "models/editor/playerstart.mdl",
+ get_default_code = function(who)
+ local default_townie = [[
+
+
+
+
+local npc = {
+ ["Pos"] = Vector(%f,%f,%f),
+ ["Model"] = %q,
+ ["Name"] = "%s",
+ ["NavNodes"] = {},
+ ["OnSpawn"] = function(nnpc)
+ print("At time onspawn was called, nnpc was",nnpc)
+ nnpc:StartActivity(ACT_IDLE)
+ end
+}
+
+npc.shopitems = {
+ {"Scrap Hammer",10}, --Items of the form {string_itemname,number_cost}
+ {"Rat Meat",5},
+}
+
+nrequire("sv_npcsystem.lua").CreateShop(npc)
+ ]]
+ local pos = who:GetPos()
+ local model = "models/humans/Group02/Male_03.mdl"
+ local name = "Default Shopkeep"
+ return string.format(default_townie,pos.x,pos.y,pos.z,model,name,"{}",name)
+ end
+}
+--[[
+local init = ENT.Initalize
+function ENT:Initalize()
+ print("In towniespawn's initalize")
+ init(self)
+end
+]]
+
+hook.Add("OnPhysgunFreeze",function(wep,phys,ent,ply)
+ print("Detected freeze")
+ --See if we should update position and andgle
+end)
diff --git a/lua/entities/info_townieshop/shared.lua b/lua/entities/info_townieshop/shared.lua
new file mode 100644
index 0000000..8202b26
--- /dev/null
+++ b/lua/entities/info_townieshop/shared.lua
@@ -0,0 +1,13 @@
+if engine.ActiveGamemode() ~= "sandbox" then return end
+
+ENT.Type = "anim"
+ENT.Base = "info_progammable_base"
+
+ENT.PrintName= "Townie Shopkeep"
+ENT.Author= "Apickx"
+ENT.Contact= "cogarr.net"
+ENT.Purpose= "Set a spawn point"
+ENT.Instructions= "Make sure there's a 32x32 box for players to spawn!"
+ENT.Spawnable = true
+ENT.AdminSpawnable = false
+ENT.Category = "Artery"