[Add] nebulae density and volatility in resource editor.

This commit is contained in:
Allanis 2013-07-21 14:22:00 +01:00
parent 7ea6e809e8
commit a5e6d0e51f
3 changed files with 188 additions and 19 deletions

View File

@ -9,7 +9,7 @@ def uniq(alist): # Fastest order preserving.
for a in s:
alist.append(a)
def load(xmlfile, tag, has_name=True, do_array=None, do_special=None):
def load(xmlfile, tag, has_name=True, do_array=None, do_special=None, do_special2=None):
dom = minidom.parse(xmlfile)
xmlNodes = dom.getElementsByTagName(tag)
@ -22,14 +22,14 @@ def load(xmlfile, tag, has_name=True, do_array=None, do_special=None):
# Append the element to the dictionary.
for bignode in filter(lambda x: x.nodeType==x.ELEMENT_NODE, xmlNode.childNodes):
mdic[bignode.nodeName], size = load_Tag(bignode, do_array, do_special)
mdic[bignode.nodeName], size = load_Tag(bignode, do_array, do_special, do_special2)
dictionary[name] = mdic
dom.unlink()
return dictionary
def load_Tag(node, do_array=None, do_special=None):
def load_Tag(node, do_array=None, do_special=None, do_special2=None):
i = 0
# Figure out if we need an array or dic.
@ -44,24 +44,68 @@ def load_Tag(node, do_array=None, do_special=None):
for child in filter(lambda x: x.nodeType == x.ELEMENT_NODE, node.childNodes):
n = 0
children, n = load_Tag(child, do_array, do_special)
children, n = load_Tag(child, do_array, do_special, do_special2)
# Just slap the children on.
if n > 0:
section[child.nodeName] = children
# Big ugly hack to use list instead of array.
#
# -- PARAMETER FORMAT --
# [KEY, ...]
#
# -- XML INPUT --
# <KEY>
# <foo>xxx</foo>
# <foo>yyy</foo>
# ...
# </KEY>
#
# -- PYTHON OUTPUT --
# key:["xxx", "xxx", ...]
#
elif use_array and node.nodeName in do_array:
array.append(child.firstChild.data)
# Uglier hack for special things.
#
# -- PARAMETER FORMAT --
# {KEY:VALUE, ...}
#
# -- XML INPUT --
# <KEY>
# <foo VALUE="aaa">xxx</foo>
# <foo VALUE="bbb">yyy</foo>
# ...
# </KEY>
#
# -- PYTHON OUTPUT --
# KEY:[{"xxx":"aaa"}, {"yyy":"bbb"}]
#
elif use_array and do_special != None and node.nodeName in do_special.keys():
section[child.firstChild.data] = \
child.attributes[do_special[node.nodeName]].value
array.append(section)
elif n > 0:
section[child.nodeName] = children
# Maybe the ugly hacks are a litle overkill...
#
# -- PARAMETER FORMAT --
# { KEY:VALUE, ... }
#
# -- XML INPUT --
# <KEY VALUE="aaa" ...>"xxx"</KEY>
#
# -- PYTHON OUTPUT --
# KEY:["xxx", "aaa"]
#
elif do_special2 != None and node.nodeName in do_special2.keys():
array2 = []
array2.append(child.firstChild.data)
for item in do_special2[node.nodeName]:
array2.append(child.attributes[do_special[node.nodeName]].value)
section[node.nodeName]
# Normal way (but will overwrite lists).
else:
@ -75,7 +119,8 @@ def load_Tag(node, do_array=None, do_special=None):
else:
return section, i
def save(xmlfile, data, basetag, tag, has_name=True, do_array=None, do_special=None):
def save(xmlfile, data, basetag, tag, has_name=True, do_array=None, do_special=None, \
do_special2=None):
"""
do_array is a DICTIONARY, not a list here
"""
@ -89,7 +134,7 @@ def save(xmlfile, data, basetag, tag, has_name=True, do_array=None, do_special=N
if has_name:
elem.setAttribute("name", key)
save_Tag(xml, elem, value, do_array, do_special)
save_Tag(xml, elem, value, do_array, do_special, do_special2)
base.appendChild(elem)
xml.appendChild(base)
@ -99,11 +144,23 @@ def save(xmlfile, data, basetag, tag, has_name=True, do_array=None, do_special=N
xml.unlink()
def save_Tag(xml, parent, data, do_array=None, do_special=None):
def save_Tag(xml, parent, data, do_array=None, do_special=None, do_special2=None):
for key, value in data.items():
node = xml.createElement(key)
# Check if it needs to parse an array instead of a dictionary.
#
# -- PARAMETER FORMAT --
# { KEY:VALUE, ... }
#
# -- PYTHON INPUT --
# KEY:["xxx", "yyy", ....]
#
# -- XML OUTPUT --
# <KEY>
# <VALUE>xxx</VALUE>
# <VALUE>yyy</VALUE>
# </KEY
if do_array != None and key in do_array.keys():
for text in value:
node2 = xml.createElement(do_array[key])
@ -112,6 +169,19 @@ def save_Tag(xml, parent, data, do_array=None, do_special=None):
node.appendChild(node2)
# Check see if we need to run the ULTRA UBER HACK!
#
# -- PARAMETER FORMAT --
# { KEY:[VALUE1, VALUE2] }
#
# -- PYTHON INPUT --
# KEY:[{"xxx":"aaa"}, {"yyy":"bbb"}]
#
# -- XML OUTPUT --
# <KEY>
# <VALUE1 VALUE2="aaa">xxx</VALUE1>
# <VALUE1 VALUE2="bbb">yyy</VALUE1>
# </KEY>
#
elif do_special != None and key in do_special.keys():
for item in value:
for key2, value2 in item.items(): # Should only be one member.
@ -121,9 +191,24 @@ def save_Tag(xml, parent, data, do_array=None, do_special=None):
node2.appendChild(txtnode)
node.appendChild(node2)
# If you thought the last hack was the ULTRA UBER HACK, think again!
#
# -- PARAMETER FORMAT --
# { KEY1:VALUE, ... }
#
# -- PYTHON INPUT --
# KEY:{"xxx":"aaa"}
#
# -- XML OUTPUT --
# <KEY VALUE="aaa">"xxx"</KEY>
elif do_special2 != None and key in do_special2.keys():
for key2, value2 in value.items(): # Should only be one member.
txtnode = xml.createTextNode(str(key2))
node.appendChild(txtnode)
node.setAttribute(do_special2[key], value2)
elif isinstance(value, dict):
save_Tag(xml, node, value, do_array, do_special)
save_Tag(xml, node, value, do_array, do_special, do_special2)
# Standard dictionary approach.
else:

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Mon Jun 9 18:52:13 2008 -->
<glade-interface>
<widget class="GtkWindow" id="winSystems">
<property name="width_request">750</property>
@ -198,14 +199,14 @@
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="x">4</property>
<property name="y">162</property>
<property name="x">3</property>
<property name="y">219</property>
</packing>
</child>
<child>
<widget class="GtkTreeView" id="treJumps">
<property name="width_request">193</property>
<property name="height_request">240</property>
<property name="height_request">182</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@ -213,7 +214,7 @@
</widget>
<packing>
<property name="x">10</property>
<property name="y">180</property>
<property name="y">238</property>
</packing>
</child>
<child>
@ -499,6 +500,58 @@
<property name="y">494</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label7">
<property name="width_request">114</property>
<property name="height_request">22</property>
<property name="visible">True</property>
<property name="label" translatable="yes">Nebu Density</property>
</widget>
<packing>
<property name="x">3</property>
<property name="y">172</property>
</packing>
</child>
<child>
<widget class="GtkSpinButton" id="spiNebuDensity">
<property name="width_request">73</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="adjustment">0 0 1000 1 10 10</property>
</widget>
<packing>
<property name="x">120</property>
<property name="y">170</property>
</packing>
</child>
<child>
<widget class="GtkSpinButton" id="spiNebuVolatility">
<property name="width_request">73</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="adjustment">0 0 1000 1 10 10</property>
</widget>
<packing>
<property name="x">120</property>
<property name="y">200</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label8">
<property name="width_request">100</property>
<property name="height_request">20</property>
<property name="visible">True</property>
<property name="label" translatable="yes">Nebu Volatility</property>
</widget>
<packing>
<property name="x">13</property>
<property name="y">201</property>
</packing>
</child>
</widget>
<packing>
<property name="resize">True</property>

View File

@ -25,12 +25,14 @@ class Space:
def loadSystems(self, xmlfile):
self.systems = data.load(xmlfile, "ssys", True,
["jumps", "planets"], {"fleets":"chance"} )
["jumps", "planets"], {"fleets":"chance"},
{"nebulae":"volatility"})
def saveSystems(self, xmlfile):
data.save( "ssys.xml", self.systems, "Systems", "ssys", True,
{"jumps":"jump","planets":"planet"}, {"fleets":["fleet","chance"]})
{"jumps":"jump","planets":"planet"}, {"fleets":["fleet","chance"]},
{"nebulae":"volatility"})
def loadPlanets(self, xmlfile):
self.planets = data.load(xmlfile, "planet", True, ["commodities"])
@ -276,7 +278,7 @@ class Space:
def __supdate(self, wgt=None, index=None, iter=None):
"""
Update the window
Update the star system window
"""
# Store the current values.
@ -298,8 +300,20 @@ class Space:
for key, value in dic.items():
self.__swidget(key).set_text(str(value))
# Load jumps.
# Load nebulae properties.
print "LOAD %s" % self.cur_system
print system["general"]
try:
for key, val in system["general"]["nebulae"].items():
self.__swidget("spiNebuDensity").set_text(str(key))
self.__swidget("spiNebuVolatility").set_text(str(val))
except:
system["general"]["nebulae"] = {}
nebu = system["general"]["nebuale"]['0'] = '0'
self.__swidget("spiNebuDensity").set_text("0")
self.__swidget("spiNebuVolatility").set_Text("0")
# Load jumps.
jumps = gtk.ListStore(str)
for jump in system["jumps"]: # Load the planets.
treenode = jumps.append([jump])
@ -336,6 +350,10 @@ class Space:
self.__space_draw()
def __pupdate(self, wgt=None, event=None):
'''
Update the current planet window.
'''
# Store the current values
if self.cur_planet != self.__curPlanet():
self.__pstore()
@ -446,8 +464,11 @@ class Space:
self.__create_treCommodities()
def __sstore(self):
'''
Store the system stuff.
'''
sys_name = self.__swidget("inpName").get_text()
if sys_name == "":
if sys_name == "" or self.cur_system == self.__curSystem():
return
# Renamed the current system.
@ -484,8 +505,18 @@ class Space:
self.__sinpStore(system, "spiStars", "general", "stars")
self.__sinpStore(system, "spiInterference", "general", "interference")
self.__sinpStore(system, "spiAsteroids", "general", "asteroids")
# Nebulae.
print "SAVE %s" % self.cur_system
print system["general"]
system["general"]["nebulae"] = {}
density = self.__swidget("spiNebuDensity").get_text()
volatility = self.__swidget("spiNebuVolatility").get_text()
system["general"]["nebulae"]["density"] = volatility
def __pstore(self):
'''
Store the planet stuff.
'''
planet_name = self.__pwidget("inpName").get_text()
if planet_name == "":
return