windstille-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Windstille-devel] rev 392 - in trunk/src: . SuperTux


From: Ingo Ruhnke
Subject: [Windstille-devel] rev 392 - in trunk/src: . SuperTux
Date: Sat, 05 Jun 2004 21:04:56 +0200

Author: grumbel
Date: 2004-06-05 21:04:56 +0200 (Sat, 05 Jun 2004)
New Revision: 392

Added:
   trunk/src/SuperTux/sector.py
Modified:
   trunk/src/SuperTux/__init__.py
   trunk/src/SuperTux/gui.py
   trunk/src/SuperTux/level.py
   trunk/src/menu.cxx
   trunk/src/menu.hxx
   trunk/src/sexpr_parser.cxx
   trunk/src/supertux.py
Log:
- basic sector support

Modified: trunk/src/SuperTux/__init__.py
===================================================================
--- trunk/src/SuperTux/__init__.py      2004-06-05 15:09:18 UTC (rev 391)
+++ trunk/src/SuperTux/__init__.py      2004-06-05 19:04:56 UTC (rev 392)
@@ -31,6 +31,10 @@
                 ["flyingsnowball", "images/shared/flyingsnowball-left-0.png"],
                 ["bouncingsnowball", 
"images/shared/bouncingsnowball-left-0.png"],
                 ["spiky", "images/shared/spiky-left-0.png"],
-                ["resetpoint", "images/shared/resetpoint.png"]]
+                ["resetpoint", "images/shared/resetpoint.png"],
+                ["playerspawn", "images/shared/resetpoint.png"],
+                ["door", "images/shared/door.png"],
+                ["trampoline", "images/shared/trampoline-1.png"]
+                ]
 
 # EOF #

Modified: trunk/src/SuperTux/gui.py
===================================================================
--- trunk/src/SuperTux/gui.py   2004-06-05 15:09:18 UTC (rev 391)
+++ trunk/src/SuperTux/gui.py   2004-06-05 19:04:56 UTC (rev 392)
@@ -186,11 +186,10 @@
     print "Loading: ", filename
     level = Level(filename)
     level.activate(workspace)
-    connect(level.editormap.sig_change(), on_map_change)
     
     if not(has_element(config.recent_files, filename)):
         config.recent_files.append(filename)
-        recent_files_menu.add_item(mysprite, filename, lambda: 
supertux_load_level(filename))
+        recent_files_menu.add_item(mysprite, filename, lambda 
filename=filename: supertux_load_level(filename))
 
     minimap.update_minimap()
 
@@ -211,4 +210,11 @@
 def supertux_save_level(filename):
     workspace.get_map().get_metadata().save(filename)
 
+def gui_switch_sector_menu():
+    mymenu = Menu(CL_Point(530, 54), gui.get_component())
+    for i in workspace.get_map().get_metadata().parent.get_sectors():
+        mymenu.add_item(mysprite, "Sector (%s)" % i,
+                        lambda i=i: 
workspace.get_map().get_metadata().parent.activate_sector(i, workspace))
+    mymenu.run()
+
 # EOF #

Modified: trunk/src/SuperTux/level.py
===================================================================
--- trunk/src/SuperTux/level.py 2004-06-05 15:09:18 UTC (rev 391)
+++ trunk/src/SuperTux/level.py 2004-06-05 19:04:56 UTC (rev 392)
@@ -10,24 +10,16 @@
     
     name   = "no name"
     author = "no author"
-    width  = 200
-    height = 100
-    gravity = 10
     theme = "antarctica"
     time = 999
     music = "Mortimers_chipdisko.mod"
-
-    foreground  = None
-    interactive = None
-    background  = None
     
     objects = None
     camera  = None
 
-    sectiors = None
+    sectors = None
+    current_sector = None
 
-    editormap = None
-
     def __init__(self, *params):
         if len(params) == 2:
             # New Level
@@ -39,20 +31,11 @@
             self.width  = width
             self.height = height
 
-            self.foreground  = TilemapLayer(tileset, self.width, self.height)
-            self.interactive = TilemapLayer(tileset, self.width, self.height)
-            self.background  = TilemapLayer(tileset, self.width, self.height)
-            self.objects = ObjectLayer()
-
-            self.editormap = EditorMap()
-            self.editormap.add_layer(self.background.to_layer())
-            self.editormap.add_layer(self.interactive.to_layer())
-            self.editormap.add_layer(self.objects.to_layer())
-            self.editormap.add_layer(self.foreground.to_layer())
+            self.current_sector = Sector(self)
+            self.current_sector.new(width, height)
+            self.sectors = []
+            self.sectors.append(self.current_sector)
             
-            # FIXME: Data might not get freed since its 'recursively' 
refcounted
-            self.editormap.set_metadata(make_metadata(self))
-            
         elif len(params) == 1:
             # Load Level from file
             (self.filename,) = params
@@ -79,68 +62,27 @@
         
         self.sectors = []
         for sec in sexpr_filter("sector", data):
-            sector = Sector(self, sec)
+            sector = Sector(self)
+            sector.load_v2(sec)
             self.sectors.append(sector)
-            self.interactive = sector.tilemap
-            self.background  = sector.tilemap
-            self.foreground  = sector.tilemap
-            self.objects     = sector.objects
+            if sector.name == "main":
+                self.current_sector = sector
+                
+        if self.current_sector == None:
+            print "Error: No main sector defined: ", sectors
 
-        self.editormap = EditorMap()
-        self.editormap.add_layer(self.interactive.to_layer())
-        self.editormap.add_layer(self.objects.to_layer())
-        # FIXME: Data might not get freed since its 'recursively' refcounted
-        self.editormap.set_metadata(make_metadata(self))
-
     def parse_v1(self, data):
-        self.name    = get_value_from_tree(["name", "_"], data, "no name")
-        self.author  = get_value_from_tree(["author", "_"], data, "no author")
-        self.time    = int(get_value_from_tree(["time", "_"], data, "999"))
+        sector = Sector(self)
+        sector.load_v1(data)
         
-        self.width  = get_value_from_tree(["width", "_"], data, 20)
-        self.height = get_value_from_tree(["height""_"], data, 15)
+        self.sectors = []
+        self.sectors.append(sector)
+        self.current_sector = sector
         
-        self.foreground  = TilemapLayer(tileset, self.width, self.height)
-        self.foreground.set_data(get_value_from_tree(["foreground-tm"], data, 
[]))
-        
-        self.interactive = TilemapLayer(tileset, self.width, self.height)
-        self.interactive.set_data(get_value_from_tree(["interactive-tm"], 
data, []))
-        
-        self.background  = TilemapLayer(tileset, self.width, self.height)
-        self.background.set_data(get_value_from_tree(["background-tm"], data, 
[]))
-
-        def find(lst, obj):
-            for i in lst:
-                if i[0] == obj:
-                    return i
-            return None
+        self.name    = get_value_from_tree(["name", "_"], data, "no name")
+        self.author  = get_value_from_tree(["author", "_"], data, "no author")
+        self.time    = int(get_value_from_tree(["time", "_"], data, "999"))    
   
             
-        self.objects = ObjectLayer()
-        for i in get_value_from_tree(["objects"], data, []):
-            type = i[0]
-            x = get_value_from_tree(["x", "_"], i[1:], [])
-            y = get_value_from_tree(["y", "_"], i[1:], [])
-            object = find(game_objects, type)
-            
self.objects.add_object(ObjMapSpriteObject(make_sprite(config.datadir + 
object[1]),
-                                                       CL_Point(x, y),
-                                                       
make_metadata(BadGuy(object[0]))).to_object())
-                
-        for i in get_value_from_tree(["reset-points"], data, []):
-            type = i[0]
-            x = get_value_from_tree(["x", "_"], i[1:], [])
-            y = get_value_from_tree(["y", "_"], i[1:], [])
-            object = find(game_objects, "resetpoint")
-            
self.objects.add_object(ObjMapSpriteObject(make_sprite(config.datadir + 
object[1]),
-                                                       CL_Point(x, y),
-                                                       
make_metadata(BadGuy(object[0]))).to_object())
-        self.editormap = EditorMap()
-        self.editormap.add_layer(self.background.to_layer())
-        self.editormap.add_layer(self.interactive.to_layer())
-        self.editormap.add_layer(self.objects.to_layer())
-        self.editormap.add_layer(self.foreground.to_layer())
-        # FIXME: Data might not get freed since its 'recursively' refcounted
-        self.editormap.set_metadata(make_metadata(self))
-            
           
     def resize(self, size, pos):
         self.width  = size.width
@@ -277,22 +219,14 @@
     def activate_sector(self, sector, workspace):
         for sec in self.sectors:
             if sec.name == sector:
-                workspace.set_map(sec.editormap)
-                TilemapLayer.set_current(sec.tilemap)
-                ObjectLayer.set_current(sec.objects)
+                sec.activate(workspace)
                 break
 
+    def get_sectors(self):
+        return map(lambda sec: sec.name, self.sectors)
+
     def activate(self, workspace):
-        workspace.set_map(self.editormap)
-        TilemapLayer.set_current(self.interactive)
-        ObjectLayer.set_current(self.objects)
-        #(tilemap-paint-tool-set-tilemap (supertux:interactive-tm stlv))
-        #(editor-tilemap-set-current     (supertux:interactive-tm stlv))
-        #(editor-objectmap-set-current   (supertux:objmap stlv))
-        #(set! *tilemap* (supertux:interactive-tm stlv))
-        #(set! *objmap* (supertux:objmap stlv))
-        #(tileset-set-current *level-tileset*)
-        #(tile-selector-set-tileset *tileselector* *level-tileset*))
+        self.current_sector.activate(workspace)
 
 Level.BACKGROUND  = 0
 Level.INTERACTIVE = 1

Added: trunk/src/SuperTux/sector.py
===================================================================
--- trunk/src/SuperTux/sector.py        2004-06-05 15:09:18 UTC (rev 391)
+++ trunk/src/SuperTux/sector.py        2004-06-05 19:04:56 UTC (rev 392)
@@ -0,0 +1,170 @@
+class Sector:
+    parent    = None
+    name      = None
+    song      = None
+    gravity   = 10.0
+
+    width  = None
+    height = None
+
+    background  = None
+    interactive = None
+    foreground  = None
+        
+    objects   = None
+    editormap = None
+    
+    def __init__(self, parent):
+        self.parent = parent
+
+    def new(self, width, height):
+        self.name = "<No Name>"
+        self.song = "<No Song>"
+        self.gravity = 10.0
+
+        self.width  = width
+        self.height = height
+        
+        self.foreground  = TilemapLayer(tileset, self.width, self.height)
+        self.interactive = TilemapLayer(tileset, self.width, self.height)
+        self.background  = TilemapLayer(tileset, self.width, self.height)      
 
+        self.objects = ObjectLayer()
+
+        self.editormap = EditorMap()
+        self.editormap.add_layer(self.background.to_layer())
+        self.editormap.add_layer(self.interactive.to_layer())
+        self.editormap.add_layer(self.objects.to_layer())
+        self.editormap.add_layer(self.foreground.to_layer())
+        # FIXME: Data might not get freed since its 'recursively' refcounted
+        self.editormap.set_metadata(make_metadata(self))
+
+    def load_v1(self, data):
+        self.name = "<No Name>"
+        self.song = "<No Song>"
+        self.gravity = 10.0
+        
+        self.width  = get_value_from_tree(["width", "_"], data, 20)
+        self.height = get_value_from_tree(["height""_"], data, 15)
+        
+        self.foreground  = TilemapLayer(tileset, self.width, self.height)
+        self.foreground.set_data(get_value_from_tree(["foreground-tm"], data, 
[]))
+        
+        self.interactive = TilemapLayer(tileset, self.width, self.height)
+        self.interactive.set_data(get_value_from_tree(["interactive-tm"], 
data, []))
+        
+        self.background  = TilemapLayer(tileset, self.width, self.height)
+        self.background.set_data(get_value_from_tree(["background-tm"], data, 
[]))
+
+        def find(lst, obj):
+            for i in lst:
+                if i[0] == obj:
+                    return i
+            return None
+            
+        self.objects = ObjectLayer()
+        for i in get_value_from_tree(["objects"], data, []):
+            type = i[0]
+            x = get_value_from_tree(["x", "_"], i[1:], [])
+            y = get_value_from_tree(["y", "_"], i[1:], [])
+            object = find(game_objects, type)
+            if object != None:
+                
self.objects.add_object(ObjMapSpriteObject(make_sprite(config.datadir + 
object[1]),
+                                                           CL_Point(x, y),
+                                                           
make_metadata(BadGuy(object[0]))).to_object())
+            else:
+                print "Error: Couldn't resolve object type: ", type
+                
+        for i in get_value_from_tree(["reset-points"], data, []):
+            type = i[0]
+            x = get_value_from_tree(["x", "_"], i[1:], [])
+            y = get_value_from_tree(["y", "_"], i[1:], [])
+            object = find(game_objects, "resetpoint")
+            
self.objects.add_object(ObjMapSpriteObject(make_sprite(config.datadir + 
object[1]),
+                                                       CL_Point(x, y),
+                                                       
make_metadata(BadGuy(object[0]))).to_object())
+        self.editormap = EditorMap()
+        self.editormap.add_layer(self.background.to_layer())
+        self.editormap.add_layer(self.interactive.to_layer())
+        self.editormap.add_layer(self.objects.to_layer())
+        self.editormap.add_layer(self.foreground.to_layer())
+        # FIXME: Data might not get freed since its 'recursively' refcounted
+        self.editormap.set_metadata(make_metadata(self))
+
+    def load_v2(self, data):
+        self.name = "<No Name>"
+        self.song = "<No Song>"
+        self.gravity = 10.0
+
+        self.objects = ObjectLayer()
+        for i in data:
+            (name,data) = i[0], i[1:]
+            if name == "name":
+                self.name = data[0]
+            elif name == "gravity":
+                self.gravity = int(data[0])
+            elif name == "playerspawn":
+                print "playerspawn unhandled"
+            elif name == "tilemap":
+                width   = get_value_from_tree(["width", "_"], data, 20)
+                height  = get_value_from_tree(["height", "_"], data, 15)
+                solid   = get_value_from_tree(["solid", "_"], data, False)
+
+                tilemap = TilemapLayer(tileset, width, height)
+                tilemap.set_data(get_value_from_tree(["tiles"], data, []))
+
+                print "Solid: ", solid
+                if solid and self.interactive == None:
+                    self.interactive = tilemap
+                    self.width       = width
+                    self.height      = height
+                elif self.background == None:
+                    self.background = tilemap
+                elif self.foreground == None:
+                    self.foreground = tilemap
+                else:
+                    print "Error: Duplicate tilemap in levelfile"
+            elif name == "background":
+                print "background unhandled"
+            else:
+                def find(lst, obj):
+                    for i in lst:
+                        if i[0] == obj:
+                            return i
+                    return None
+
+                object = find(game_objects, name)
+                if object != None:
+                    (name, image) = object
+                    x = get_value_from_tree(["x", "_"], data, [])
+                    y = get_value_from_tree(["y", "_"], data, [])
+                    
self.objects.add_object(ObjMapSpriteObject(make_sprite(config.datadir + image),
+                                                               CL_Point(x, y),
+                                                               
make_metadata(BadGuy(name))).to_object())
+                else:
+                    print "Error: Couldn't resolve object type: ", name
+                    print "Sector: Unhandled tag: ", name
+
+        if (self.background == None):
+            self.background = TilemapLayer(tileset, width, height)
+
+        if (self.interactive == None):
+            self.interactive = TilemapLayer(tileset, width, height)
+
+        if (self.foreground == None):
+            self.foreground = TilemapLayer(tileset, width, height)
+
+        self.editormap = EditorMap()
+        self.editormap.add_layer(self.background.to_layer())
+        self.editormap.add_layer(self.interactive.to_layer())
+        self.editormap.add_layer(self.foreground.to_layer())
+        self.editormap.add_layer(self.objects.to_layer())
+        
+        self.editormap.set_metadata(make_metadata(self))
+
+    def activate(self, workspace):
+        workspace.set_map(self.editormap)
+        TilemapLayer.set_current(self.interactive)
+        ObjectLayer.set_current(self.objects)
+        connect(self.editormap.sig_change(), on_map_change)
+        
+# EOF #

Modified: trunk/src/menu.cxx
===================================================================
--- trunk/src/menu.cxx  2004-06-05 15:09:18 UTC (rev 391)
+++ trunk/src/menu.cxx  2004-06-05 19:04:56 UTC (rev 392)
@@ -136,6 +136,19 @@
   show(false);
 }
 
+Menu::~Menu()
+{
+  clear();
+}
+
+void
+Menu::clear()
+{
+  for(MenuImpl::Items::iterator i = impl->items.begin(); i != 
impl->items.end(); ++i)
+    delete *i;
+  impl->items.clear();
+}
+
 MenuItemHandle
 Menu::add_seperator()
 {

Modified: trunk/src/menu.hxx
===================================================================
--- trunk/src/menu.hxx  2004-06-05 15:09:18 UTC (rev 391)
+++ trunk/src/menu.hxx  2004-06-05 19:04:56 UTC (rev 392)
@@ -35,7 +35,10 @@
 {
 public:
   Menu(const CL_Point& pos, CL_Component* parent);
+  virtual ~Menu();
 
+  void clear();
+
   MenuItemHandle add_item(const CL_Sprite& sprite, const std::string& name);
   MenuItemHandle add_submenu(const std::string& name, const Menu& submenu);
   MenuItemHandle add_seperator();

Modified: trunk/src/sexpr_parser.cxx
===================================================================
--- trunk/src/sexpr_parser.cxx  2004-06-05 15:09:18 UTC (rev 391)
+++ trunk/src/sexpr_parser.cxx  2004-06-05 19:04:56 UTC (rev 392)
@@ -51,6 +51,19 @@
     {
       return PyFloat_FromDouble(lisp_real(cur));
     }
+  else if (lisp_boolean_p(cur))
+    {
+      if (lisp_boolean(cur))
+        {
+          Py_INCREF(Py_True);
+          return Py_True;
+        }
+      else
+        {
+          Py_INCREF(Py_False);
+          return Py_False;
+        }
+    }
   else
     {
       return Py_None;

Modified: trunk/src/supertux.py
===================================================================
--- trunk/src/supertux.py       2004-06-05 15:09:18 UTC (rev 391)
+++ trunk/src/supertux.py       2004-06-05 19:04:56 UTC (rev 392)
@@ -57,7 +57,7 @@
 recent_files_menu = Menu(CL_Point(32*2, 54), gui.get_component())
 for filename in config.recent_files:
     print filename
-    fun = lambda: sys.stdout.write("bla bla: %s\n" % filename)
+    fun = lambda filename=filename: sys.stdout.write("bla bla: %s\n" % 
filename)
     fun()
     recent_files_menu.add_item(mysprite, filename, fun)
     #supertux_load_level(filename))
@@ -68,7 +68,6 @@
     startlevel = Level(100, 50)
     # startlevel = netpanzer.Level(256, 256)
     startlevel.activate(workspace)
-    connect(startlevel.editormap.sig_change(), on_map_change)
 else:
     supertux_load_level(args[0])
 
@@ -135,6 +134,11 @@
 eye_icon         = Icon(CL_Rect(CL_Point(p.inc(32), 2), CL_Size(32, 32)),
                         make_sprite("../data/images/icons24/eye.png"), "Some 
tooltip", button_panel);
 
+sector_icon         = Icon(CL_Rect(CL_Point(p.inc(48), 2), CL_Size(32, 32)),
+                        make_sprite("../data/images/icons24/sector.png"), 
"Some tooltip", button_panel);
+
+sector_icon.set_callback(lambda: gui_switch_sector_menu())
+
 layer_menu = Menu(CL_Point(32*15+2, 54), gui.get_component())
 
 toolbar = Panel(CL_Rect(CL_Point(0, 23+33), CL_Size(33, 32*4+2)), 
gui.get_component())
@@ -190,14 +194,6 @@
 
 mysprite = make_sprite("../data/images/icons16/stock_paste-16.png")
 
-mymenu = Menu(CL_Point(134, 54), gui.get_component())
-mymenu.add_item(mysprite, "Foobar aeuaeu", None)
-mymenu.add_item(mysprite, "bla", None)
-mymenu.add_seperator()
-mymenu.add_item(mysprite, "Foobar", None)
-mymenu.add_item(mysprite, "blubaoeuau aueau aeu", None)
-mymenu.add_item(mysprite, "bla", None)
-
 load_dialog = SimpleFileDialog("Load SuperTux Level", "Load", "Cancel", 
gui.get_component())
 load_dialog.set_filename(config.datadir + "levels/")
 save_dialog = SimpleFileDialog("Save SuperTux Level as...", "Save", "Cancel", 
gui.get_component())
@@ -252,8 +248,8 @@
 connect_v2(editor_map.sig_on_key("i"),  lambda x, y: insert_path_node(x,y))
 connect_v2(editor_map.sig_on_key("c"),  lambda x, y: connect_path_nodes())
 
-connect_v2(editor_map.sig_on_key("7"),  lambda x, y: 
workspace.get_map().get_metadata().activate_sector("main", workspace))
-connect_v2(editor_map.sig_on_key("8"),  lambda x, y: 
workspace.get_map().get_metadata().activate_sector("another_world", workspace))
+connect_v2(editor_map.sig_on_key("7"),  lambda x, y: 
workspace.get_map().get_metadata().parent.activate_sector("main", workspace))
+connect_v2(editor_map.sig_on_key("8"),  lambda x, y: 
workspace.get_map().get_metadata().parent.activate_sector("another_world", 
workspace))
 
 gui.run()
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]