summaryrefslogtreecommitdiff
path: root/lua/entities/info_townieshop/cl_init.lua
blob: 2caccd4a79880c7cd5b917c2a229ab69d26e9786 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
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)