From 9c7f862f2c2ba11aafdbc0d75e9352558224e11b Mon Sep 17 00:00:00 2001 From: Allanis <allanis@saracraft.net> Date: Tue, 18 Jun 2013 22:21:05 +0100 Subject: [PATCH] [Add] <resedit> You may now add fleets to systems. --- utils/resedit/data.pyc | Bin 3567 -> 0 bytes utils/resedit/faction.pyc | Bin 3817 -> 0 bytes utils/resedit/fleet.py | 22 +++++++++++++ utils/resedit/resedit.py | 10 ++++-- utils/resedit/space.glade | 49 +++++++++++++++++++++++++---- utils/resedit/space.py | 63 ++++++++++++++++++++++++++++++-------- utils/resedit/space.pyc | Bin 21797 -> 0 bytes 7 files changed, 123 insertions(+), 21 deletions(-) delete mode 100644 utils/resedit/data.pyc delete mode 100644 utils/resedit/faction.pyc create mode 100644 utils/resedit/fleet.py delete mode 100644 utils/resedit/space.pyc diff --git a/utils/resedit/data.pyc b/utils/resedit/data.pyc deleted file mode 100644 index 20a6c5aee8ef99f8997a695d1aea303d35f79209..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3567 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 Zdq1@w>b<bK9yc?=RORHUxyvWd{sWpHt`h(N diff --git a/utils/resedit/faction.pyc b/utils/resedit/faction.pyc deleted file mode 100644 index 950f52a7aff33335ca84ca85a4ecb7179ad831c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3817 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 X(Vv%Xg4#WY(|wXaaJ{KpUd#Ij-`o&& diff --git a/utils/resedit/fleet.py b/utils/resedit/fleet.py new file mode 100644 index 0000000..f6f399f --- /dev/null +++ b/utils/resedit/fleet.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python + +import data + +class Fleets: + def __init__(self): + self.fleets = {} + self.fleetsXML = "../../dat/fleet.xml" + + def loadFleets(self, xmlfile=None): + if xmlfile == None: + xmlFile = self.fleetsXML + self.fleets = data.load(xmlfile, "fleet", True) + + def data(self): + return self.fleets + + def debug(self): + print "---FACTIONS---" + print self.fleets + print "--------------" + diff --git a/utils/resedit/resedit.py b/utils/resedit/resedit.py index 059c9b1..a20a128 100755 --- a/utils/resedit/resedit.py +++ b/utils/resedit/resedit.py @@ -4,20 +4,24 @@ try: import gtk, gtk.glade import gobject except: - print "You do not have python gtk bindings, or you're missin glade libs" + print "You do not have python gtk bindings, or you're missing glade libs" print "To use Lephisto's resedit you must install them" print "http://pygtk.org/" raise SystemExit -import space, faction +import space, faction, fleet # Load the factions factions = faction.Factions() factions.loadFactions("../../dat/faction.xml") factions.window() +# Load the fleets. +fleets = fleet.Fleets() +fleets.loadFleets("../../dat/fleet.xml") + # Load the universe. -universe = space.Space(factions.data()) +universe = space.Space(factions.data(), fleets.data()) universe.loadSystems("../../dat/ssys.xml") universe.loadPlanets("../../dat/planet.xml") universe.window() diff --git a/utils/resedit/space.glade b/utils/resedit/space.glade index 9b30dcf..c27ed3d 100644 --- a/utils/resedit/space.glade +++ b/utils/resedit/space.glade @@ -406,7 +406,7 @@ </widget> <packing> <property name="x">270</property> - <property name="y">460</property> + <property name="y">480</property> </packing> </child> <child> @@ -421,7 +421,7 @@ </widget> <packing> <property name="x">360</property> - <property name="y">460</property> + <property name="y">480</property> </packing> </child> <child> @@ -441,14 +441,14 @@ </packing> </child> <child> - <widget class="GtkComboBox" id="comFleet"> - <property name="width_request">183</property> - <property name="height_request">20</property> + <widget class="GtkComboBox" id="comFleets"> + <property name="width_request">189</property> + <property name="height_request">25</property> <property name="visible">True</property> </widget> <packing> <property name="x">270</property> - <property name="y">425</property> + <property name="y">445</property> </packing> </child> <child> @@ -473,6 +473,43 @@ <property name="y">556</property> </packing> </child> + <child> + <widget class="GtkLabel" id="label5"> + <property name="width_request">72</property> + <property name="height_request">20</property> + <property name="visible">True</property> + <property name="label" translatable="yes">Fleet</property> + </widget> + <packing> + <property name="x">278</property> + <property name="y">421</property> + </packing> + </child> + <child> + <widget class="GtkLabel" id="label6"> + <property name="width_request">84</property> + <property name="height_request">23</property> + <property name="visible">True</property> + <property name="label" translatable="yes">Chance</property> + </widget> + <packing> + <property name="x">430</property> + <property name="y">416</property> + </packing> + </child> + <child> + <widget class="GtkSpinButton" id="spiFleets"> + <property name="width_request">50</property> + <property name="height_request">20</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="adjustment">0 0 100 1 10 10</property> + </widget> + <packing> + <property name="x">472</property> + <property name="y">445</property> + </packing> + </child> </widget> <packing> <property name="resize">True</property> diff --git a/utils/resedit/space.py b/utils/resedit/space.py index da9c403..5f32667 100644 --- a/utils/resedit/space.py +++ b/utils/resedit/space.py @@ -21,6 +21,7 @@ class Space: self.factions = factions if fleets==None: self.fleets = {} + else: self.fleets = fleets def loadSystems(self, xmlfile): @@ -92,6 +93,18 @@ class Space: area.connect("button-press-event", self.__space_down) area.connect("motion-notify-event", self.__space_drag) + # Factions. + wgt = self.__swidget("comFleets") + combo = gtk.ListStore(str) + combo.append(["None"]) + for f in self.fleets.keys(): + node = combo.append([f]) + cell = gtk.CellRendererText() + wgt.pack_start(cell, True) + wgt.add_attribute(cell, 'text', 0) + wgt.set_model(combo) + wgt.set_active(0) + # Display the window and such. self.__swidget("winSystems").show_all() self.cur_system = "" @@ -129,6 +142,7 @@ class Space: wgt.pack_start(cell, True) wgt.add_attribute(cell, 'text', 0) wgt.set_model(combo) + wgt.set_active(0) # Factions. wgt = self.__pwidget("comFaction") @@ -140,6 +154,7 @@ class Space: wgt.pack_start(cell, True) wgt.add_attribute(cell, "text", 0) wgt.set_model(combo) + wgt.set_active(0) # --------------------------------------------- @@ -599,6 +614,9 @@ class Space: # Draw the frame at the end. area.window.draw_rectangle(sys_gc, False, 0, 0, ww-1, wh-1) + """ + Add or remove jumps from a star system. + """ def __jump_add(self, wgt=None, event=None): if self.space_sel in self.systems.keys() and self.cur_system in self.systems.keys(): self.systems[self.cur_system]["jumps"].append(self.space_sel) @@ -611,25 +629,40 @@ class Space: def __jump_rm(self, wgt=None, event=None): if self.space_sel in self.systems.keys() and self.cur_system in self.systems.keys(): - i = 0 - for e in self.systems[self.cur_system]["jumps"]: - if e == self.space_sel: - self.systems[self.cur_system]["jumps"].pop(i) - i = i + 1 - i = 0 - for e in self.systems[self.space_sel]["jumps"]: - if e == self.cur_system: - self.systems[self.space_sel]["jumps"].pop(i) - i = i + 1 + self.systems[self.cur_system]["jumps"].remove(self.space_sel) + self.systems[self.space_sel]["jumps"].remove(self.cur_system) self.__supdate() self.__space_draw() + """ + Add or remove fleets from a star system. + """ + def __fleet_sel(self): + tree = self.__swidget("treFleets") + model = tree.get_model() + try: + iter = tree.get_selection().get_selected()[1] + except: + return "" + return model.get_value(iter, 0) + def __fleet_add(self, wgt=None, event=None): - return + fleet = self.__swidget("comFleets").get_active_text() + value = self.__swidget("spiFleets").get_value_as_int() + if fleet != "None" and value > 0: + self.systems[self.cur_system]["fleets"][fleet] = str(value) + self.__supdate() def __fleet_rm(self, wgt=None, event=None): - reutrn + sel = self.__fleet_sel() + if sel is "": + return + del self.systems[self.cur_system]["fleets"][sel] + self.__supdate() + """ + Create a new star system. + """ def __snew(self, wgt=None, event=None): name = "new system" gen = { "asteroids":0, "interference":0, "stars":100 } @@ -639,6 +672,9 @@ class Space: self.__create_treSystems() self.__selSys(name) + """ + Create a new planet. + """ def __pnew(self, wgt=None, event=None): name = "new planet" gfx = { "space":"none.png" } @@ -695,6 +731,9 @@ class Space: self.__pupdate() def __pnewFact(self, wgt=None, event=None): + if self.cur_planet == "": + return + combo = self.__pwidget("comFaction") fact = combo.get_active_text() planet = self.planets[self.cur_planet] diff --git a/utils/resedit/space.pyc b/utils/resedit/space.pyc deleted file mode 100644 index d9ca801a75fc31f1c77824d44fb31251cd293611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21797 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