RealBadAngel
2013-03-12 832137c5c0eefc5241e1ae92aaa5582d7cd55ef7
commit | author | age
773382 1 -- default GUI page
R 2 stargate.default_page = "main"
d01564 3 stargate_network["players"]={}
773382 4 stargate.current_page={}
R 5
d01564 6 stargate.save_data = function(table_pointer)
R 7     local data = minetest.serialize( stargate_network[table_pointer] )
8     local path = minetest.get_worldpath().."/stargate_"..table_pointer..".data"
773382 9     local file = io.open( path, "w" )
R 10     if( file ) then
11         file:write( data )
12         file:close()
13         return true
14     else return nil
15     end
16 end
17
d01564 18 stargate.restore_data = function(table_pointer)
R 19     local path = minetest.get_worldpath().."/stargate_"..table_pointer..".data"
773382 20     local file = io.open( path, "r" )
R 21     if( file ) then
22         local data = file:read("*all")
d01564 23         stargate_network[table_pointer] = minetest.deserialize( data )
773382 24         file:close()
R 25     return true
26     else return nil
27     end
28 end
29
30 -- load Stargates network data
d01564 31 if stargate.restore_data("registered_players") ~= nil then
R 32     for __,tab in ipairs(stargate_network["registered_players"]) do
33         if stargate.restore_data(tab["player_name"]) == nil  then
34             print ("[stargate] Error loading data!")
35         end
773382 36     end
d01564 37 else
R 38     print ("[stargate] Error loading data! Creating new file.")
39     stargate_network["registered_players"]={}
40     stargate.save_data("registered_players")
773382 41 end
R 42
43 -- register_on_joinplayer
44 minetest.register_on_joinplayer(function(player)
45     local player_name = player:get_player_name()
d01564 46     local registered=nil
R 47     for __,tab in ipairs(stargate_network["registered_players"]) do
48         if tab["player_name"] ==  player_name then registered = true break end
49     end
50     if registered == nil then
51         local new={}
52         new["player_name"]=player_name
53         table.insert(stargate_network["registered_players"],new)
54         stargate.save_data("registered_players")
55         stargate.save_data(player_name)
56     end
57     stargate_network["players"][player_name]={}
58     stargate_network["players"][player_name]["formspec"]=""
59     stargate_network["players"][player_name]["current_page"]=stargate.default_page
60     stargate_network["players"][player_name]["own_gates"]={}
61     stargate_network["players"][player_name]["own_gates_count"]=0
62     stargate_network["players"][player_name]["public_gates"]={}
63     stargate_network["players"][player_name]["public_gates_count"]=0
64     stargate_network["players"][player_name]["current_index"]=0
773382 65 end)
R 66
67 stargate.registerGate = function(player_name,pos)
68     if stargate_network[player_name]==nil then
69         stargate_network[player_name]={}
70     end
71     local new_gate ={}
72     new_gate["pos"]=pos
73     new_gate["type"]="private"
74     new_gate["description"]=""
75     table.insert(stargate_network[player_name],new_gate)
d01564 76     if stargate.save_data(player_name)==nil then
773382 77         print ("[stargate] Couldnt update network file!")
R 78     end
79 end
80
81 stargate.unregisterGate = function(player_name,pos)
82     for __,gates in ipairs(stargate_network[player_name]) do
83         if gates["pos"].x==pos.x and gates["pos"].y==pos.y and gates["pos"].z==pos.z then
84             table.remove(stargate_network[player_name], __)
85             break
86         end
87     end
d01564 88     if stargate.save_data(player_name)==nil then
773382 89         print ("[stargate] Couldnt update network file!")
R 90     end
91 end
92
93 --show formspec to player
94 stargate.gateFormspecHandler = function(pos, node, clicker, itemstack)
95     local player_name = clicker:get_player_name()
96     local meta = minetest.env:get_meta(pos)
97     local owner=meta:get_string("owner")
98     if player_name~=owner then return end
99     local current_gate=nil
d01564 100     stargate_network["players"][player_name]["own_gates"]={}
R 101     stargate_network["players"][player_name]["public_gates"]={}
773382 102     local own_gates_count=0
R 103     for __,gates in ipairs(stargate_network[player_name]) do
104         if gates["pos"].x==pos.x and gates["pos"].y==pos.y and gates["pos"].z==pos.z then
105             current_gate=gates
106         else
107         own_gates_count=own_gates_count+1
d01564 108         table.insert(stargate_network["players"][player_name]["own_gates"],gates)
773382 109         end
R 110     end
d01564 111     stargate_network["players"][player_name]["own_gates_count"]=own_gates_count
773382 112     if current_gate==nil then 
R 113         print ("Gate not registered in network! Please remove it and place once again.")
114         return nil
115     end
d01564 116     stargate_network["players"][player_name]["current_index"]=0
R 117     stargate_network["players"][player_name]["current_gate"]=current_gate
118     stargate_network["players"][player_name]["dest_type"]="own"
773382 119     local formspec=stargate.get_formspec(player_name,"main")
d01564 120     stargate_network["players"][player_name]["formspec"]=formspec
R 121     if formspec ~=nil then minetest.show_formspec(player_name, "stargate_main", formspec) end
773382 122 end
R 123
124 -- get_formspec
125 stargate.get_formspec = function(player_name,page)
d01564 126     if player_name==nil then return nil end
R 127     stargate_network["players"][player_name]["current_page"]=page
128     local current_gate=stargate_network["players"][player_name]["current_gate"]
773382 129     local formspec = "size[14,10]"
R 130     --background
131     formspec = formspec .."background[-0.19,-0.2,;14.38,10.55;ui_form_bg.png]"
132     formspec = formspec.."label[0,0.0;Stargate]"
133     formspec = formspec.."label[0,.5;Position: ("..current_gate["pos"].x..","..current_gate["pos"].y..","..current_gate["pos"].z..")]"
134     formspec = formspec.."image_button[3.5,.6;.6,.6;toggle_icon.png;toggle_type;]"
135     formspec = formspec.."label[4,.5;Type: "..current_gate["type"].."]"
136     formspec = formspec.."image_button[6.5,.6;.6,.6;pencil_icon.png;edit_desc;]"
137     formspec = formspec.."label[0,1.1;Destination: ]"
138     formspec = formspec.."label[0,1.7;Aviable destinations:]"
139     formspec = formspec.."image_button[3.5,1.8;.6,.6;toggle_icon.png;toggle_dest_type;]"
d01564 140     formspec = formspec.."label[4,1.7;Filter: "..stargate_network["players"][player_name]["dest_type"].."]"
773382 141
R 142     if page=="main" then
143     formspec = formspec.."image_button[6.5,.6;.6,.6;pencil_icon.png;edit_desc;]"
144     formspec = formspec.."label[7,.5;Description: "..current_gate["description"].."]"
145     end
146     if page=="edit_desc" then
147     formspec = formspec.."image_button[6.5,.6;.6,.6;ok_icon.png;save_desc;]"
148     formspec = formspec.."field[7.3,.7;5,1;desc_box;Edit gate description:;"..current_gate["description"].."]"
149     end
150     
d01564 151     local list_index=stargate_network["players"][player_name]["current_index"]
832137 152     local page=math.floor(list_index / 24 + 1)
R 153     local pagemax = math.floor((stargate_network["players"][player_name]["own_gates_count"] / 24) + 1)
154     local x,y
d01564 155     for y=0,7,1 do
773382 156     for x=0,2,1 do
d01564 157         local gate_temp=stargate_network["players"][player_name]["own_gates"][list_index+1]
773382 158         if gate_temp then
d01564 159             formspec = formspec.."image_button["..(x*4.5)..","..(2.5+y*.9)..";.6,.6;stargate_icon.png;list_button"..list_index..";]"
R 160             formspec = formspec.."label["..(x*4.5+.5)..","..(2.3+y*.9)..";("..gate_temp["pos"].x..","..gate_temp["pos"].y..","..gate_temp["pos"].z..") "..gate_temp["type"].."]"
161             formspec = formspec.."label["..(x*4.5+.5)..","..(2.7+y*.9)..";"..gate_temp["description"].."]"
773382 162         end
832137 163         print(dump(list_index))
773382 164         list_index=list_index+1
R 165     end
d01564 166     end
R 167     formspec = formspec.."image_button[6.5,1.8;.6,.6;left_icon.png;page_left;]"
168     formspec = formspec.."image_button[6.9,1.8;.6,.6;right_icon.png;page_right;]"
169     formspec=formspec.."label[7.5,1.7;Page: "..page.." of "..pagemax.."]"
773382 170     return formspec
R 171 end
172
173 -- register_on_player_receive_fields
174 minetest.register_on_player_receive_fields(function(player, formname, fields)
832137 175     if not formname == "stargate_main" then return "" end
773382 176     local player_name = player:get_player_name()
d01564 177     local current_gate=stargate_network["players"][player_name]["current_gate"]
773382 178     local formspec
R 179
180     if fields.toggle_type then
181         if current_gate["type"] == "private" then 
d01564 182             current_gate["type"] = "public"
R 183         else current_gate["type"] = "private" end
773382 184         formspec= stargate.get_formspec(player_name,"main")
d01564 185         stargate_network["players"][player_name]["formspec"] = formspec
832137 186         minetest.show_formspec(player_name, "stargate_main", formspec)
773382 187         minetest.sound_play("click", {to_player=player_name, gain = 0.5})
R 188         return
189     end
190     if fields.toggle_dest_type then
d01564 191         if stargate_network["players"][player_name]["dest_type"] == "all own" then 
R 192             stargate_network["players"][player_name]["dest_type"] = "all public"
193         else stargate_network["players"][player_name]["dest_type"] = "all own" end
194         stargate_network["players"][player_name]["current_index"] = 0
195         formspec = stargate.get_formspec(player_name,"main")
196         stargate_network["players"][player_name]["formspec"] = formspec
832137 197         minetest.show_formspec(player_name, "stargate_main", formspec)
773382 198         minetest.sound_play("click", {to_player=player_name, gain = 0.5})
R 199         return
200     end
201     if fields.edit_desc then
202         formspec= stargate.get_formspec(player_name,"edit_desc")
d01564 203         stargate_network["players"][player_name]["formspec"]=formspec
832137 204         minetest.show_formspec(player_name, "stargate_main", formspec)
773382 205         minetest.sound_play("click", {to_player=player_name, gain = 0.5})
R 206         return
207     end
208
209     if fields.save_desc then
210         current_gate["description"]=fields.desc_box
211         formspec= stargate.get_formspec(player_name,"main")
d01564 212         stargate_network["players"][player_name]["formspec"]=formspec
832137 213         minetest.show_formspec(player_name, "stargate_main", formspec)
773382 214         minetest.sound_play("click", {to_player=player_name, gain = 0.5})
R 215         return
216     end
d01564 217     
R 218     -- page controls
832137 219     local start=math.floor(stargate_network["players"][player_name]["current_index"]/24 +1 )
d01564 220     local start_i=start
832137 221     local pagemax = math.floor(((stargate_network["players"][player_name]["own_gates_count"]-1) / 24) + 1)
d01564 222     
R 223     if fields.page_left then
224         minetest.sound_play("paperflip2", {to_player=player_name, gain = 1.0})
225         start_i = start_i - 1
226         if start_i < 1 then    start_i = 1    end
227         if not (start_i    == start) then
832137 228             stargate_network["players"][player_name]["current_index"] = (start_i-1)*24
d01564 229             formspec = stargate.get_formspec(player_name,"main")
R 230             stargate_network["players"][player_name]["formspec"] = formspec
832137 231             minetest.show_formspec(player_name, "stargate_main", formspec)
d01564 232         end
R 233     end
234     if fields.page_right then
235         minetest.sound_play("paperflip2", {to_player=player_name, gain = 1.0})
236         start_i = start_i + 1 
237         if start_i > pagemax then start_i =  pagemax end
238         if not (start_i    == start) then
832137 239             stargate_network["players"][player_name]["current_index"] = (start_i-1)*24
d01564 240             formspec = stargate.get_formspec(player_name,"main")
R 241             stargate_network["players"][player_name]["formspec"] = formspec
832137 242             minetest.show_formspec(player_name, "stargate_main", formspec)
d01564 243         end
R 244     end
832137 245     local list_index=stargate_network["players"][player_name]["current_index"]
R 246     local i
247     for i=0,23,1 do
248     local button="list_button"..i+list_index
249     if fields[button] then 
250         local gate=stargate_network["players"][player_name]["current_gate"]
251         local dest_gate=stargate_network["players"][player_name]["own_gates"][list_index+i+1]
252         gate["destination"]={}
253         gate["destination"].x=dest_gate["pos"].x
254         gate["destination"].y=dest_gate["pos"].y
255         gate["destination"].z=dest_gate["pos"].z
256         activateGate (player,gate["pos"])
257     end
258     end
773382 259 end)