[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Windstille-devel] rev 369 - in trunk/src: . scripting
From: |
Ingo Ruhnke |
Subject: |
[Windstille-devel] rev 369 - in trunk/src: . scripting |
Date: |
Sun, 30 May 2004 17:09:19 +0200 |
Author: grumbel
Date: 2004-05-30 17:09:19 +0200 (Sun, 30 May 2004)
New Revision: 369
Modified:
trunk/src/editor.py
trunk/src/scripting/editor.cxx
trunk/src/supertux.py
Log:
- added load/save for levels
Modified: trunk/src/editor.py
===================================================================
--- trunk/src/editor.py 2004-05-30 01:12:23 UTC (rev 368)
+++ trunk/src/editor.py 2004-05-30 15:09:19 UTC (rev 369)
@@ -17,6 +17,7 @@
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+import os
import sys
from flexlay import *
@@ -37,16 +38,12 @@
del Editor_redo
del Editor_undo
-# class FileDialog:
-# window = None
+EditorMap.__get_metadata = EditorMap.get_metadata
+def EditorMap_get_metadata(self):
+ return get_python_object(self.__get_metadata())
+EditorMap.get_metadata = EditorMap_get_metadata
+del EditorMap_get_metadata
-# def __init__(self):
-
-
-# def show(self, filename, func):
-# window = Window(CL_Rect(50, 50, 450, 400), "My Window",
gui.get_component())
-
-
# (define (simple-file-dialog title filename func)
# (let ((window (gui-create-window 200 100 460 125 title)))
# (gui-push-component (gui-window-get-client-area window))
@@ -142,10 +139,29 @@
def do_something():
print "do_something"
+def gui_level_save_as():
+ save_dialog.set_filename(os.path.dirname(save_dialog.get_filename()) + "/")
+ save_dialog.run(supertux_save_level)
+
+def gui_level_save():
+ if workspace.get_map().get_metadata().filename:
+ save_dialog.set_filename(workspace.get_map().get_metadata().filename)
+ else:
+ save_dialog.set_filename(os.path.dirname(save_dialog.get_filename())
+ "/")
+
+ save_dialog.run(supertux_save_level)
+
+def gui_level_load():
+ load_dialog.run(supertux_load_level)
+
load_icon = Icon(CL_Point(32*0+2, 2),
make_sprite("../data/images/icons24/stock_open.png"), "Some tooltip", willow);
save_icon = Icon(CL_Point(32*1+2, 2),
make_sprite("../data/images/icons24/stock_save.png"), "Some tooltip", willow);
save_as_icon = Icon(CL_Point(32*2+2, 2),
make_sprite("../data/images/icons24/stock_save_as.png"), "Some tooltip",
willow);
+load_icon.set_callback(gui_level_load)
+save_icon.set_callback(gui_level_save)
+save_as_icon.set_callback(gui_level_save_as)
+
copy_icon = Icon(CL_Point(32*3.1+2, 2),
make_sprite("../data/images/icons24/stock_copy.png"), "Some tooltip", willow);
paste_icon = Icon(CL_Point(32*4.1+2, 2),
make_sprite("../data/images/icons24/stock_paste.png"), "Some tooltip", willow);
@@ -158,6 +174,13 @@
undo_icon.disable()
redo_icon.disable()
+foreground_icon = Icon(CL_Point(32*8+2, 2),
make_sprite("../data/images/icons24/foreground.png"), "Some tooltip", willow);
+interactive_icon = Icon(CL_Point(32*9+2, 2),
make_sprite("../data/images/icons24/interactive.png"), "Some tooltip", willow);
+background_icon = Icon(CL_Point(32*10+2, 2),
make_sprite("../data/images/icons24/background.png"), "Some tooltip", willow);
+eye_icon = Icon(CL_Point(32*11+2, 2),
make_sprite("../data/images/icons24/eye.png"), "Some tooltip", willow);
+
+layer_menu = Menu(CL_Point(32*11+2, 54), gui.get_component())
+
def on_map_change():
if (workspace.get_map().undo_stack_size() > 0):
undo_icon.enable()
@@ -218,73 +241,55 @@
# erase = Icon(CL_Point(2, 32+1+2),
make_sprite("../data/images/tools/stock-tool-eraser-22.png"), "Some tooltip",
toolbar);
# move = Icon(CL_Point(2, 32*2+2),
make_sprite("../data/images/tools/stock-tool-move-22.png"), "Some tooltip",
toolbar);
-supertux = SuperTuxGUI(load_supertux_tiles(), gui)
-
-def block():
- def CL_Menu_add_item(self, name, func):
- item = self.create_item(name)
- connect(item.sig_clicked(), func)
- CL_Menu.add_item = CL_Menu_add_item
-block()
-
-level = None
-def menu_file_open():
- print "File/Open"
- level =
SuperTuxLevel('/home/ingo/cvs/supertux/supertux/data/levels/world1/level2.stl')
- print "Loading done"
- level.activate(workspace)
- connect(level.editormap.sig_change(), on_map_change)
- print "Activation done"
-
-def menu_file_save():
- print "File/Save"
-
-def menu_file_save_commands():
- print "File/Save As"
-
-def menu_file_save_as():
- print "File/Save As"
-
-menu = CL_Menu(gui.get_component())
-menu.add_item("File/Open...", menu_file_open)
-menu.add_item("File/Save...", menu_file_save)
-menu.add_item("File/Save Commands...", menu_file_save_commands)
-menu.add_item("File/Save As...", menu_file_save_as)
-menu.add_item("File/Quit", do_quit)
-
-display_properties = DisplayProperties()
-
def menu_show_foreground():
display_properties.layer = SuperTuxLevel.FOREGROUND
-
display_properties.set(get_python_object(workspace.get_map().get_metadata()))
-
TilemapLayer_set_current(get_python_object(workspace.get_map().get_metadata()).foreground)
+ display_properties.set(workspace.get_map().get_metadata())
+ TilemapLayer_set_current(workspace.get_map().get_metadata().foreground)
+ foreground_icon.set_down()
+ interactive_icon.set_up()
+ background_icon.set_up()
+ minimap.update_minimap()
def menu_show_background():
display_properties.layer = SuperTuxLevel.BACKGROUND
-
display_properties.set(get_python_object(workspace.get_map().get_metadata()))
-
TilemapLayer_set_current(get_python_object(workspace.get_map().get_metadata()).background)
+ display_properties.set(workspace.get_map().get_metadata())
+ TilemapLayer_set_current(workspace.get_map().get_metadata().background)
+ foreground_icon.set_up()
+ interactive_icon.set_up()
+ background_icon.set_down()
+ minimap.update_minimap()
def menu_show_interactive():
display_properties.layer = SuperTuxLevel.INTERACTIVE
-
display_properties.set(get_python_object(workspace.get_map().get_metadata()))
-
TilemapLayer_set_current(get_python_object(workspace.get_map().get_metadata()).interactive)
+ display_properties.set(workspace.get_map().get_metadata())
+ TilemapLayer_set_current(workspace.get_map().get_metadata().interactive)
+ foreground_icon.set_up()
+ interactive_icon.set_down()
+ background_icon.set_up()
+ minimap.update_minimap()
def menu_show_all():
display_properties.show_all = True
-
display_properties.set(get_python_object(workspace.get_map().get_metadata()))
+ display_properties.set(workspace.get_map().get_metadata())
def menu_show_only_current():
display_properties.show_all = False
-
display_properties.set(get_python_object(workspace.get_map().get_metadata()))
+ display_properties.set(workspace.get_map().get_metadata())
-menu.add_item("Layer/Background", menu_show_background)
-menu.add_item("Layer/Interactive", menu_show_interactive)
-menu.add_item("Layer/Foreground", menu_show_foreground)
+foreground_icon.set_callback(menu_show_foreground)
+interactive_icon.set_callback(menu_show_interactive)
+background_icon.set_callback(menu_show_background)
+eye_icon.set_callback(layer_menu.run)
-# Fixme: make me a toggle item
-menu.add_item("Layer/Show all", menu_show_all)
-menu.add_item("Layer/Show only current", menu_show_only_current)
+mysprite = make_sprite("../data/images/icons16/stock_paste-16.png")
+def block():
+ def CL_Menu_add_item(self, name, func):
+ item = self.create_item(name)
+ connect(item.sig_clicked(), func)
+ CL_Menu.add_item = CL_Menu_add_item
+block()
+
def Menu_add_item(self, sprite, text, func):
i = self.__add_item(sprite, text)
if func != None:
@@ -293,6 +298,38 @@
Menu.add_item = Menu_add_item
del Menu_add_item
+layer_menu.add_item(mysprite, "Show all", menu_show_all)
+layer_menu.add_item(mysprite, "Show only current", menu_show_only_current)
+
+supertux = SuperTuxGUI(load_supertux_tiles(), gui)
+
+level = None
+def menu_file_open():
+ print "File/Open"
+ level =
SuperTuxLevel('/home/ingo/cvs/supertux/supertux/data/levels/world1/level2.stl')
+ print "Loading done"
+ level.activate(workspace)
+ connect(level.editormap.sig_change(), on_map_change)
+ print "Activation done"
+
+def supertux_save_level(filename):
+ workspace.get_map().get_metadata().save(filename)
+
+def supertux_load_level(filename):
+ print "Loading: ", filename
+ level = SuperTuxLevel(filename)
+ level.activate(workspace)
+ connect(level.editormap.sig_change(), on_map_change)
+
+menu = CL_Menu(gui.get_component())
+menu.add_item("File/Open...", gui_level_load)
+menu.add_item("File/Save...", gui_level_save)
+# menu.add_item("File/Save Commands...", menu_file_save_commands)
+menu.add_item("File/Save As...", gui_level_save_as)
+menu.add_item("File/Quit", do_quit)
+
+display_properties = DisplayProperties()
+
mysprite = make_sprite("../data/images/icons16/stock_paste-16.png")
mymenu = Menu(CL_Point(134, 54), gui.get_component())
@@ -312,6 +349,50 @@
minimap_panel = Panel(CL_Rect(CL_Point(0, 600-56), CL_Size(800-134, 56)),
gui.get_component())
minimap = Minimap(editor_map, CL_Rect(CL_Point(3, 3), CL_Size(794-134, 50)),
minimap_panel)
+class FileDialog:
+ window = None
+ inputbox = None
+ ok_button = None
+ cancel_button = None
+ callback = None
+
+ def __init__(self, title, g):
+ self.window = Window(CL_Rect(CL_Point(120, 200), CL_Size(560, 100)),
title, g)
+ self.inputbox = CL_InputBox(CL_Rect(CL_Point(10, 10), CL_Size(530,
25)),
+ self.window.get_client_area())
+ self.ok_button = CL_Button(CL_Rect(CL_Point(490, 35), CL_Size(50,
25)), "Ok",
+ self.window.get_client_area())
+ self.cancel_button = CL_Button(CL_Rect(CL_Point(430, 35), CL_Size(50,
25)), "Cancel",
+ self.window.get_client_area())
+ self.window.hide()
+
+ def set_filename(self, filename):
+ self.inputbox.set_text(filename)
+
+ def get_filename(self):
+ return self.inputbox.get_text()
+
+ def run(self, func):
+ connect(self.ok_button.sig_clicked(), self.on_ok)
+ connect(self.cancel_button.sig_clicked(), self.on_cancel)
+ self.callback = func
+ self.window.show()
+
+ def on_ok(self):
+ self.window.hide();
+ self.callback(self.inputbox.get_text())
+
+ def on_cancel(self):
+ self.window.hide();
+
+def do_something_with_file(filename):
+ print "DoSomething: ", filename
+
+load_dialog = FileDialog("Load SuperTux Level", gui.get_component())
+load_dialog.set_filename(supertux_datadir + "levels/")
+save_dialog = FileDialog("Save SuperTux Level as...", gui.get_component())
+save_dialog.set_filename(supertux_datadir + "levels/")
+
gui.run()
flexlay.deinit()
Modified: trunk/src/scripting/editor.cxx
===================================================================
--- trunk/src/scripting/editor.cxx 2004-05-30 01:12:23 UTC (rev 368)
+++ trunk/src/scripting/editor.cxx 2004-05-30 15:09:19 UTC (rev 369)
@@ -25,6 +25,8 @@
void connect(CL_Signal_v0& sig, PyObject* obj)
{
+ sig = CL_Signal_v0();
+
//std::cout << "Connecting functor: " << std::endl;
new CL_Slot(sig.connect_functor(PythonFunctor(obj)));
}
Modified: trunk/src/supertux.py
===================================================================
--- trunk/src/supertux.py 2004-05-30 01:12:23 UTC (rev 368)
+++ trunk/src/supertux.py 2004-05-30 15:09:19 UTC (rev 369)
@@ -40,26 +40,37 @@
CL_Color(255, 0, 0, 128)))
class SuperTuxLevel:
+ filename = None
+
name = "no name"
author = "no author"
- width = 20
- height = 15
+ width = 200
+ height = 100
+ time = 999
+ music = "Mortimers_chipdisko.mod"
+
foreground = None
interactive = None
background = None
+ gravity = 10
+
objects = None
+ theme = "antarctica"
+
editormap = None
def __init__(self, filename = None):
+ self.filename = filename
+
if filename == None:
self.name = "No Name"
self.author = "No Author"
- self.width = 20
- self.height = 15
+ self.width = 200
+ self.height = 100
self.foreground = TilemapLayer(supertux_tileset, self.width,
self.height)
self.interactive = TilemapLayer(supertux_tileset, self.width,
self.height)
@@ -94,6 +105,41 @@
# FIXME: Data might not get freed since its 'recursively' refcounted
self.editormap.set_metadata(make_metadata(self))
+ def save(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)
+ f.write(" (width %d)\n" % self.width)
+ f.write(" (height %d)\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(" )\n\n;; EOF ;;\n")
+
+ # objects = None
+
def activate(self, workspace):
workspace.set_map(self.editormap)
TilemapLayer.set_current(self.interactive)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Windstille-devel] rev 369 - in trunk/src: . scripting,
Ingo Ruhnke <=