[Top][All Lists]
[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()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Windstille-devel] rev 392 - in trunk/src: . SuperTux,
Ingo Ruhnke <=