[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Windstille-devel] rev 391 - in trunk/src: . SuperTux
From: |
Ingo Ruhnke |
Subject: |
[Windstille-devel] rev 391 - in trunk/src: . SuperTux |
Date: |
Sat, 05 Jun 2004 17:09:19 +0200 |
Author: grumbel
Date: 2004-06-05 17:09:18 +0200 (Sat, 05 Jun 2004)
New Revision: 391
Modified:
trunk/src/SuperTux/__init__.py
trunk/src/SuperTux/level.py
trunk/src/SuperTux/tileset.py
trunk/src/editor.cxx
trunk/src/layer.cxx
trunk/src/layer.hxx
trunk/src/layer_impl.hxx
trunk/src/objmap_object.cxx
trunk/src/objmap_object.hxx
trunk/src/sexpr.py
trunk/src/supertux.py
trunk/src/tileset.cxx
trunk/src/tileset.hxx
Log:
- some basic support to support subsector supertux files
Modified: trunk/src/SuperTux/__init__.py
===================================================================
--- trunk/src/SuperTux/__init__.py 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/SuperTux/__init__.py 2004-06-05 15:09:18 UTC (rev 391)
@@ -13,11 +13,12 @@
execfile("SuperTux/tileset.py")
execfile("SuperTux/gui.py")
execfile("SuperTux/shell.py")
+execfile("SuperTux/sector.py")
execfile("SuperTux/level.py")
execfile("SuperTux/display_properties.py")
tileset = Tileset(32)
-load_game_tiles(tileset,
"/home/ingo/cvs/supertux/supertux/data/images/tilesets/supertux.stgt")
+tileset.load("/home/ingo/cvs/supertux/supertux/data/images/tilesets/supertux.stgt")
game_objects = [["money", "images/shared/jumpy-left-middle-0.png"],
Modified: trunk/src/SuperTux/level.py
===================================================================
--- trunk/src/SuperTux/level.py 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/SuperTux/level.py 2004-06-05 15:09:18 UTC (rev 391)
@@ -5,6 +5,7 @@
from sexpr import *
class Level:
+ version = 2
filename = None
name = "no name"
@@ -19,13 +20,17 @@
foreground = None
interactive = None
background = None
+
objects = None
camera = None
+ sectiors = None
+
editormap = None
def __init__(self, *params):
if len(params) == 2:
+ # New Level
(width, height) = params
self.name = "No Name"
@@ -38,8 +43,18 @@
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))
+
elif len(params) == 1:
+ # Load Level from file
(self.filename,) = params
tree = sexpr_read_from_file(self.filename)
@@ -48,49 +63,76 @@
data = tree[1:]
- self.name = get_value_from_tree(["name", "_"], data, "no name")
- self.author = get_value_from_tree(["author", "_"], data, "no
author")
+ self.version = get_value_from_tree(["version", "_"], data, 1)
- self.width = get_value_from_tree(["width", "_"], data, 20)
- self.height = get_value_from_tree(["height""_"], data, 15)
+ if (self.version == 1):
+ self.parse_v1(data)
+ else:
+ self.parse_v2(data)
+ else:
+ raise "Wrong arguments for SuperTux::___init__"
- self.foreground = TilemapLayer(tileset, self.width, self.height)
- self.foreground.set_data(get_value_from_tree(["foreground-tm"],
data, []))
+ def parse_v2(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"))
+
+ self.sectors = []
+ for sec in sexpr_filter("sector", data):
+ sector = Sector(self, sec)
+ self.sectors.append(sector)
+ self.interactive = sector.tilemap
+ self.background = sector.tilemap
+ self.foreground = sector.tilemap
+ self.objects = sector.objects
- self.interactive = TilemapLayer(tileset, self.width, self.height)
- self.interactive.set_data(get_value_from_tree(["interactive-tm"],
data, []))
+ 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))
- self.background = TilemapLayer(tileset, self.width, self.height)
- self.background.set_data(get_value_from_tree(["background-tm"],
data, []))
+ 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"))
+
+ 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
+ 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)
-
self.objects.add_object(ObjMapSpriteObject(make_sprite(config.datadir +
object[1]),
- CL_Point(x, y),
-
make_metadata(BadGuy(object[0]))).to_object())
+ 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())
-
- else:
- raise "Wrong arguments for SuperTux::___init__"
-
+ 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())
@@ -98,7 +140,8 @@
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
self.height = size.height
@@ -107,9 +150,73 @@
self.foreground.resize(size, pos)
def save(self, filename):
+ self.save_v2(filename)
+
+ def save_v2(self, filename):
f = file(filename, 'w')
f.write(";; Generated by Flexlay Editor\n"
"(supertux-level\n")
+ f.write(" (version 2)\n")
+ f.write(" (name \"%s\")\n" % self.name)
+ f.write(" (author \"%s\")\n" % self.author)
+ f.write(" (width %s)\n" % self.width)
+ f.write(" (height %s)\n" % self.height)
+
+ f.write(" (music \"%s\")\n" % self.music)
+ f.write(" (time \"%s\")\n" % self.time)
+
+ f.write(" (gravity %d)\n" % self.gravity)
+
+ f.write(" (theme \"%s\")\n" % self.theme)
+
+ f.write(" (interactive-tm\n")
+ for i in self.interactive.get_data():
+ f.write("%d " % i)
+ f.write(" )\n\n")
+
+ f.write(" (background-tm\n")
+ for i in self.background.get_data():
+ f.write("%d " % i)
+ f.write(" )\n\n")
+
+ f.write(" (foreground-tm\n")
+ for i in self.foreground.get_data():
+ f.write("%d " % i)
+ f.write(" )\n\n")
+
+ f.write(" (camera\n")
+ f.write(" (mode \"autoscroll\")\n")
+ f.write(" (path\n")
+ for obj in self.objects.get_objects():
+ pathnode = get_python_object(obj.get_metadata())
+ if (pathnode.__class__ == PathNode):
+ f.write(" (point (x %d) (y %d) (speed 1))\n" %
(obj.get_pos().x, obj.get_pos().y))
+ f.write(" ))\n\n")
+
+ f.write(" (objects\n")
+ for obj in self.objects.get_objects():
+ badguy = get_python_object(obj.get_metadata())
+ if (badguy.__class__ == BadGuy):
+ pos = obj.get_pos()
+ if (badguy.type != "resetpoint"):
+ f.write(" (%s (x %d) (y %d))\n" % (badguy.type,
int(pos.x), int(pos.y)))
+ f.write(" )\n\n")
+
+ f.write(" (reset-points\n")
+ for obj in self.objects.get_objects():
+ badguy = get_python_object(obj.get_metadata())
+ if (badguy.__class__ == BadGuy):
+ pos = obj.get_pos()
+ if (badguy.type == "resetpoint"):
+ f.write(" (point (x %d) (y %d))\n" % (int(pos.x),
int(pos.y)))
+ f.write(" )\n\n")
+
+ f.write(" )\n\n;; EOF ;;\n")
+
+ def save_v1(self, filename):
+ f = file(filename, 'w')
+ f.write(";; Generated by Flexlay Editor\n"
+ "(supertux-level\n")
f.write(" (version 1)\n")
f.write(" (name \"%s\")\n" % self.name)
f.write(" (author \"%s\")\n" % self.author)
@@ -167,7 +274,13 @@
f.write(" )\n\n;; EOF ;;\n")
- # objects = None
+ 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)
+ break
def activate(self, workspace):
workspace.set_map(self.editormap)
Modified: trunk/src/SuperTux/tileset.py
===================================================================
--- trunk/src/SuperTux/tileset.py 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/SuperTux/tileset.py 2004-06-05 15:09:18 UTC (rev 391)
@@ -1,7 +1,7 @@
from flexlay import *
from sexpr import *
-def load_game_tiles(tileset, filename):
+def Tileset_load(self, filename):
"Load game tiles from filename into tileset"
tree = sexpr_read_from_file(filename)
tree = tree[1:]
@@ -15,9 +15,10 @@
image = get_value_from_tree(['images', '_'], data,
"notile.png")
if id != 0: # leave tile 0 transparent
- tileset.add_tile(id,
- Tile(config.datadir + 'images/tilesets/' +
image,
+ self.add_tile(id,
+ Tile(config.datadir + 'images/tilesets/' + image,
CL_Color(255, 0, 0, 128)))
-
+Tileset.load = Tileset_load
+del Tileset_load
# EOF #
Modified: trunk/src/editor.cxx
===================================================================
--- trunk/src/editor.cxx 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/editor.cxx 2004-06-05 15:09:18 UTC (rev 391)
@@ -32,8 +32,6 @@
Editor::Editor()
{
- current_ = this;
-
manager = new GUIManager();
}
Modified: trunk/src/layer.cxx
===================================================================
--- trunk/src/layer.cxx 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/layer.cxx 2004-06-05 15:09:18 UTC (rev 391)
@@ -59,4 +59,20 @@
return CL_Rect();
}
+MetaData
+Layer::get_metadata() const
+{
+ if (impl.get())
+ return impl->data;
+ else
+ return MetaData();
+}
+
+void
+Layer::set_metadata(MetaData data_)
+{
+ if (impl.get())
+ impl->data = data_;
+}
+
/* EOF */
Modified: trunk/src/layer.hxx
===================================================================
--- trunk/src/layer.hxx 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/layer.hxx 2004-06-05 15:09:18 UTC (rev 391)
@@ -21,6 +21,7 @@
#define HEADER_LAYER_HXX
#include <ClanLib/Core/Math/rect.h>
+#include "meta_data.hxx"
#include "shared_ptr.hxx"
class EditorMapComponent;
@@ -39,6 +40,9 @@
Layer(SharedPtr<LayerImpl> i);
~Layer();
+ MetaData get_metadata() const;
+ void set_metadata(MetaData data_);
+
void draw(EditorMapComponent* parent);
bool has_bounding_rect() const;
CL_Rect get_bounding_rect();
Modified: trunk/src/layer_impl.hxx
===================================================================
--- trunk/src/layer_impl.hxx 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/layer_impl.hxx 2004-06-05 15:09:18 UTC (rev 391)
@@ -21,13 +21,18 @@
#define HEADER_LAYER_IMPL_HXX
#include <ClanLib/Core/Math/rect.h>
+#include "meta_data.hxx"
class EditorMapComponent;
class LayerImpl
{
-private:
public:
+ MetaData data;
+
+ LayerImpl() {}
+ virtual ~LayerImpl() {}
+
virtual void draw(EditorMapComponent* parent) =0;
virtual bool has_bounding_rect() const =0;
virtual CL_Rect get_bounding_rect() { return CL_Rect(); }
Modified: trunk/src/objmap_object.cxx
===================================================================
--- trunk/src/objmap_object.cxx 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/objmap_object.cxx 2004-06-05 15:09:18 UTC (rev 391)
@@ -96,4 +96,10 @@
return impl.get() == obj.impl.get();
}
+bool
+ObjMapObject::operator<(const ObjMapObject& obj) const
+{
+ return impl.get() < obj.impl.get();
+}
+
/* EOF */
Modified: trunk/src/objmap_object.hxx
===================================================================
--- trunk/src/objmap_object.hxx 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/objmap_object.hxx 2004-06-05 15:09:18 UTC (rev 391)
@@ -47,6 +47,7 @@
bool is_null() const;
bool operator==(const ObjMapObject& obj) const;
+ bool operator<(const ObjMapObject& obj) const;
private:
SharedPtr<ObjMapObjectImpl> impl;
};
Modified: trunk/src/sexpr.py
===================================================================
--- trunk/src/sexpr.py 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/sexpr.py 2004-06-05 15:09:18 UTC (rev 391)
@@ -25,6 +25,13 @@
else:
return assoc_ref(lst[1:], str)
+def sexpr_filter(name, tree):
+ ret = []
+ for i in tree:
+ if i[0] == name:
+ ret.append(i[1:])
+ return ret
+
def get_value_from_tree(spec, tree, default):
if spec == []:
return tree
Modified: trunk/src/supertux.py
===================================================================
--- trunk/src/supertux.py 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/supertux.py 2004-06-05 15:09:18 UTC (rev 391)
@@ -252,6 +252,9 @@
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))
+
gui.run()
del config
Modified: trunk/src/tileset.cxx
===================================================================
--- trunk/src/tileset.cxx 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/tileset.cxx 2004-06-05 15:09:18 UTC (rev 391)
@@ -64,11 +64,6 @@
impl->tile_size = tile_size_;
}
-Tileset::Tileset(const Tileset& copy)
- : impl(copy.impl)
-{
-}
-
Tileset::~Tileset()
{
}
Modified: trunk/src/tileset.hxx
===================================================================
--- trunk/src/tileset.hxx 2004-06-05 12:44:53 UTC (rev 390)
+++ trunk/src/tileset.hxx 2004-06-05 15:09:18 UTC (rev 391)
@@ -39,8 +39,6 @@
scripting to it */
explicit Tileset(int tile_size_);
- Tileset(const Tileset& copy);
-
~Tileset();
/** Check if the tile is already loaded and return it. If it is not
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Windstille-devel] rev 391 - in trunk/src: . SuperTux,
Ingo Ruhnke <=