[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Windstille-devel] rev 399 - trunk/src
From: |
Ingo Ruhnke |
Subject: |
[Windstille-devel] rev 399 - trunk/src |
Date: |
Sun, 06 Jun 2004 23:57:44 +0200 |
Author: grumbel
Date: 2004-06-06 23:57:44 +0200 (Sun, 06 Jun 2004)
New Revision: 399
Added:
trunk/src/level.rb
trunk/src/sector.rb
Modified:
trunk/src/gui.rb
trunk/src/gui2.rb
trunk/src/sexpr.rb
trunk/src/supertux.rb
Log:
- some more fixes
Modified: trunk/src/gui.rb
===================================================================
--- trunk/src/gui.rb 2004-06-06 19:28:47 UTC (rev 398)
+++ trunk/src/gui.rb 2004-06-06 21:57:44 UTC (rev 399)
@@ -217,17 +217,17 @@
end
def supertux_load_level(filename)
- print "Loading: ", filename
- level = Level(filename)
- level.activate(workspace)
+ print "Loading: ", filename, "\n"
+ level = Level.new(filename)
+ level.activate($workspace)
- if not(config.recent_files.find(filename)) then
- config.recent_files.append(filename)
+ if not($recent_files.find{|el| el == filename}) then
+ $recent_files.push(filename)
$recent_files_menu.add_item($mysprite, filename,
- proc { supertux_load_level(filename) })
+ proc { supertux_load_level(filename) })
end
- minimap.update_minimap()
+ $minimap.update_minimap()
end
def gui_set_zoom(zoom)
@@ -240,19 +240,20 @@
def menu_file_open()
print "File/Open"
level =
Level('/home/ingo/cvs/supertux/supertux/data/levels/world1/level2.stl')
- print "Loading done"
- level.activate(workspace)
+ print "Loading done\n"
+ level.activate($workspace)
connect(level.editormap.sig_change(), proc{on_map_change()})
print "Activation done"
end
def supertux_save_level(filename)
- $workspace.get_map().get_metadata().save(filename)
+ $workspace.get_map().get_metadata().parent.save(filename)
end
def gui_switch_sector_menu()
mymenu = Menu.new(CL_Point.new(530, 54), $gui.get_component())
for i in $workspace.get_map().get_metadata().parent.get_sectors()
+ print "Sectors: ", i, "\n"
mymenu.add_item($mysprite, "Sector (%s)" % i,
proc {
$workspace.get_map().get_metadata().parent.activate_sector(i, $workspace) })
end
Modified: trunk/src/gui2.rb
===================================================================
--- trunk/src/gui2.rb 2004-06-06 19:28:47 UTC (rev 398)
+++ trunk/src/gui2.rb 2004-06-06 21:57:44 UTC (rev 399)
@@ -104,8 +104,6 @@
$background_icon.set_callback(proc{ gui_show_background() })
$eye_icon.set_callback(proc{ $layer_menu.run() })
-$mysprite = make_sprite("../data/images/icons16/stock_paste-16.png")
-
$layer_menu.add_item($mysprite, "Show all", proc{ gui_show_all() })
$layer_menu.add_item($mysprite, "Show current", proc{ gui_show_current() })
$layer_menu.add_item($mysprite, "Show only current", proc{
gui_show_only_current() })
@@ -169,7 +167,7 @@
for i in objmap_select_tool.get_selection()
obj = get_python_object(i.get_metadata())
if obj.__class__ == PathNode
- pathnodes.append(obj.node)
+ pathnodes.push(obj.node)
end
end
Added: trunk/src/level.rb
===================================================================
--- trunk/src/level.rb 2004-06-06 19:28:47 UTC (rev 398)
+++ trunk/src/level.rb 2004-06-06 21:57:44 UTC (rev 399)
@@ -0,0 +1,214 @@
+class Level
+ version = 2
+ filename = nil
+
+ name = "no name"
+ author = "no author"
+ theme = "antarctica"
+ time = 999
+ music = "Mortimers_chipdisko.mod"
+
+ objects = nil
+ camera = nil
+
+ sectors = nil
+ current_sector = nil
+
+ attr_reader :version, :filename, :name, :author, :theme, :time, :music,
:objects, :camera, :sectors, :current_sector
+ attr_writer :version, :filename, :name, :author, :theme, :time, :music,
:objects, :camera, :sectors, :current_sector
+
+ def initialize(*params)
+ if params.length() == 2 then
+ # New Level
+ (width, height) = params
+
+ @name = "No Name"
+ @author = "No Author"
+
+ @width = width
+ @height = height
+
+ @current_sector = Sector.new(self)
+ @current_sector.new_from_size(width, height)
+ @sectors = []
+ @sectors.push(@current_sector)
+
+ elsif params.length() == 1 then
+ # Load Level from file
+ (@filename,) = params
+
+ tree = sexpr_read_from_file(@filename)
+ if tree == nil
+ raise("Couldn't load level: ", filename)
+ end
+
+ data = tree[1..-1]
+
+ @version = get_value_from_tree(["version", "_"], data, 0)
+
+ print "VERSION: ", @version, "\n"
+
+ if (@version == 1) then
+ parse_v1(data)
+ else
+ parse_v2(data)
+ end
+ else
+ raise "Wrong arguments for SuperTux::___init__"
+ end
+ end
+
+ def parse_v2(data)
+ @name = get_value_from_tree(["name", "_"], data, "no name")
+ @author = get_value_from_tree(["author", "_"], data, "no author")
+ @time = get_value_from_tree(["time", "_"], data, 999)
+
+ @current_sector = nil
+ @sectors = []
+ for sec in sexpr_filter("sector", data)
+ sector = Sector.new(self)
+ print("DATA: ", sec, "\n")
+ sector.load_v2(sec)
+ @sectors.push(sector)
+ if sector.name == "main"
+ @current_sector = sector
+ end
+ end
+
+ if @current_sector == nil
+ print "Error: No main sector defined: ", sectors, "\n"
+ @current_sector = @sectors[0]
+ end
+ end
+
+ def parse_v1(data)
+ sector = Sector.new(self)
+ sector.load_v1(data)
+
+ @sectors = []
+ @sectors.push(sector)
+ @current_sector = sector
+
+ @name = get_value_from_tree(["name", "_"], data, "no name")
+ @author = get_value_from_tree(["author", "_"], data, "no author")
+ @time = get_value_from_tree(["time", "_"], data, 999)
+ end
+
+ def save(filename)
+ save_v2(filename)
+ end
+
+ def save_v2(filename)
+ f = File.new(filename, "w")
+ f.write(";; Generated by Flexlay Editor\n" +
+ "(supertux-level\n")
+ f.write(" (version 2)\n")
+ f.write(" (name \"%s\")\n" % @name)
+ f.write(" (author \"%s\")\n" % @author)
+ f.write(" (time \"%s\")\n" % @time)
+
+ for sector in @sectors
+ f.write(" (sector\n")
+ sector.save(f)
+ f.write(" )\n")
+ end
+
+ f.write(" )\n\n;; EOF ;;\n")
+ end
+
+ def save_v1(filename)
+ f = File.new(filename, "w")
+ f.write(";; Generated by Flexlay Editor\n" +
+ "(supertux-level\n")
+ f.write(" (version 1)\n")
+ f.write(" (name \"%s\")\n" % @name)
+ f.write(" (author \"%s\")\n" % @author)
+ f.write(" (width %s)\n" % @width)
+ f.write(" (height %s)\n" % @height)
+
+ f.write(" (music \"%s\")\n" % @music)
+ f.write(" (time \"%s\")\n" % @time)
+
+ f.write(" (gravity %d)\n" % @gravity)
+
+ f.write(" (theme \"%s\")\n" % @theme)
+
+ f.write(" (interactive-tm\n")
+ for i in @interactive.get_data()
+ f.write("%d " % i)
+ end
+ f.write(" )\n\n")
+
+ f.write(" (background-tm\n")
+ for i in @background.get_data()
+ f.write("%d " % i)
+ end
+ f.write(" )\n\n")
+
+ f.write(" (foreground-tm\n")
+ for i in @foreground.get_data()
+ f.write("%d " % i)
+ end
+ f.write(" )\n\n")
+
+ f.write(" (camera\n")
+ f.write(" (mode \"autoscroll\")\n")
+ f.write(" (path\n")
+ for obj in @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)
+ end
+ end
+ f.write(" ))\n\n")
+
+ f.write(" (objects\n")
+ for obj in @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))
+ end
+ end
+ end
+ f.write(" )\n\n")
+
+ f.write(" (reset-points\n")
+ for obj in @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" % (pos.x.to_i), pos.y.to_i)
+ end
+ end
+ end
+ f.write(" )\n\n")
+
+ f.write(" )\n\n;; EOF ;;\n")
+ end
+
+ def activate_sector(sector, workspace)
+ for sec in @sectors
+ if sec.name == sector
+ sec.activate(workspace)
+ break
+ end
+ end
+ end
+
+ def add_sector(sector)
+ @sectors.push(sector)
+ end
+
+ def get_sectors()
+ return @sectors.map {|sec| sec.name}
+ end
+
+ def activate(workspace)
+ @current_sector.activate(workspace)
+ end
+end
+
+# EOF #
Added: trunk/src/sector.rb
===================================================================
--- trunk/src/sector.rb 2004-06-06 19:28:47 UTC (rev 398)
+++ trunk/src/sector.rb 2004-06-06 21:57:44 UTC (rev 399)
@@ -0,0 +1,266 @@
+class Sector
+ parent = nil
+ name = nil
+ song = nil
+ gravity = 10.0
+
+ width = nil
+ height = nil
+
+ background = nil
+ interactive = nil
+ foreground = nil
+
+ objects = nil
+ editormap = nil
+
+ attr_reader :name, :background, :interactive, :foreground, :parent, :width,
:height
+ attr_writer :name, :song, :gravity
+
+ def initialize(parent)
+ @parent = parent
+ end
+
+ def get_level()
+ return @parent
+ end
+
+ def resize(size, pos)
+ @width = size.width
+ @height = size.height
+ @background.resize(size, pos)
+ @interactive.resize(size, pos)
+ @foreground.resize(size, pos)
+ end
+
+ def new_from_size(width, height)
+ @name = "<No Name>"
+ @song = "<No Song>"
+ @gravity = 10.0
+
+ @width = width
+ @height = height
+
+ @foreground = TilemapLayer.new($tileset, @width, @height)
+ @interactive = TilemapLayer.new($tileset, @width, @height)
+ @background = TilemapLayer.new($tileset, @width, @height)
+ @objects = ObjectLayer.new()
+
+ @editormap = EditorMap.new()
+ @editormap.add_layer(@background.to_layer())
+ @editormap.add_layer(@interactive.to_layer())
+ @editormap.add_layer(@objects.to_layer())
+ @editormap.add_layer(@foreground.to_layer())
+ # FIXME: Data might not get freed since its 'recursively' refcounted
+ @editormap.set_metadata(make_metadata(self))
+ return self
+ end
+
+ def load_v1(data)
+ @name = "<No Name>"
+ @song = "<No Song>"
+ @gravity = 10.0
+
+ @width = get_value_from_tree(["width", "_"], data, 20)
+ @height = get_value_from_tree(["height""_"], data, 15)
+
+ @foreground = TilemapLayer.new($tileset, @width, @height)
+ @foreground.set_data(get_value_from_tree(["foreground-tm"], data, []))
+
+ @interactive = TilemapLayer.new($tileset, @width, @height)
+ @interactive.set_data(get_value_from_tree(["interactive-tm"], data, []))
+
+ @background = TilemapLayer.new($tileset, @width, @height)
+ @background.set_data(get_value_from_tree(["background-tm"], data, []))
+
+ @objects = ObjectLayer.new()
+ for i in get_value_from_tree(["objects"], data, [])
+ type = i[0]
+ x = get_value_from_tree(["x", "_"], i[1..-1], 0)
+ y = get_value_from_tree(["y", "_"], i[1..-1], 0)
+ print("Object position: ", type, " ", x, " ", y, "\n")
+ object = $game_objects.find{|x| x[0] == type}
+ print "Resolved object: ", object, "\n"
+ if object
+ # fixme
+ #
@objects.add_object(ObjMapSpriteObject.new(make_sprite($datadir + object[1]),
+ # CL_Point.new(x, y),
+ #
make_metadata(BadGuy.new(object[0]))).to_object())
+ else
+ print "Error: Couldn't resolve object type: ", type, "\n"
+ end
+ end
+
+ for i in get_value_from_tree(["reset-points"], data, [])
+ type = i[0]
+ x = get_value_from_tree(["x", "_"], i[1..-1], [])
+ y = get_value_from_tree(["y", "_"], i[1..-1], [])
+ object = find($game_objects, "resetpoint")
+ @objects.add_object(ObjMapSpriteObject.new(make_sprite($datadir +
object[1]),
+ CL_Point.new(x, y),
+
make_metadata(BadGuy.new(object[0]))).to_object())
+ end
+
+ @editormap = EditorMap.new()
+ @editormap.add_layer(@background.to_layer())
+ @editormap.add_layer(@interactive.to_layer())
+ @editormap.add_layer(@objects.to_layer())
+ @editormap.add_layer(@foreground.to_layer())
+ # FIXME: Data might not get freed since its 'recursively' refcounted
+ @editormap.set_metadata(make_metadata(self))
+ end
+
+ def load_v2(data)
+ @name = "<No Name>"
+ @song = "<No Song>"
+ @gravity = 10.0
+
+ @width = 20
+ @height = 15
+
+ @background = nil
+ @interactive = nil
+ @foreground = nil
+
+ @objects = ObjectLayer.new()
+ print "Data: ", data, "\n"
+ for i in data
+ print "I: ", i, "\n"
+ (name,data) = i[0], i[1..-1]
+ if name == "name"
+ @name = data[0]
+ elsif name == "gravity"
+ @gravity = data[0]
+ elsif name == "playerspawn"
+ print "playerspawn unhandled"
+ elsif 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.new($tileset, width, height)
+ tilemap.set_data(get_value_from_tree(["tiles"], data, []))
+
+ print "Solid: ", solid
+ if solid
+ @interactive = tilemap
+ @width = width
+ @height = height
+ elsif not(@background)
+ @background = tilemap
+ elsif not(@foreground)
+ @foreground = tilemap
+ else
+ print "Error: Duplicate tilemap in levelfile\n"
+ end
+ elsif name == "background"
+ print "background unhandled\n"
+ else
+ object = $game_objects.find {|x| x[0] == name}
+ if object != nil
+ (name, image) = object
+ x = get_value_from_tree(["x", "_"], data, 0)
+ y = get_value_from_tree(["y", "_"], data, 0)
+ @objects.add_object(ObjMapSpriteObject.new(make_sprite($datadir +
image),
+ CL_Point.new(x, y),
+
make_metadata(BadGuy.new(name))).to_object())
+ else
+ print "Error: Couldn't resolve object type: ", name, "\n"
+ print "Sector: Unhandled tag: ", name, "\n"
+ end
+ end
+ end
+
+ print "Tileset: ", $tileset, " ", width, " ", height, "\n"
+
+ if (@background == nil)
+ @background = TilemapLayer.new($tileset, @width, @height)
+ end
+
+ if (@interactive == nil)
+ @interactive = TilemapLayer.new($tileset, @width, @height)
+ end
+
+ if (@foreground == nil)
+ @foreground = TilemapLayer.new($tileset, @width, @height)
+ end
+
+ @editormap = EditorMap.new()
+ @editormap.add_layer(@background.to_layer()) if @background
+ @editormap.add_layer(@interactive.to_layer()) if @interactive
+ @editormap.add_layer(@foreground.to_layer()) if @foreground
+ @editormap.add_layer(@objects.to_layer())
+
+ @editormap.set_metadata(make_metadata(self))
+ end
+
+ def activate(workspace)
+ workspace.set_map(@editormap)
+ TilemapLayer.set_current(@interactive)
+ ObjectLayer.set_current(@objects)
+ connect(@editormap.sig_change(), proc{on_map_change()})
+ end
+
+ def save(f)
+ f.write(" (name \"%s\")\n" % @name)
+ f.write(" (width %s)\n" % @width)
+ f.write(" (height %s)\n" % @height)
+ f.write(" (music \"%s\")\n" % @song)
+ f.write(" (gravity %d)\n" % @gravity)
+
+ f.write(" (interactive-tm\n")
+ for i in interactive.get_data()
+ f.write("%d " % i)
+ end
+ f.write(" )\n\n")
+
+ f.write(" (background-tm\n")
+ for i in background.get_data()
+ f.write("%d " % i)
+ end
+ f.write(" )\n\n")
+
+ f.write(" (foreground-tm\n")
+ for i in foreground.get_data()
+ f.write("%d " % i)
+ end
+ f.write(" )\n\n")
+
+ f.write(" (camera\n")
+ f.write(" (mode \"autoscroll\")\n")
+ f.write(" (path\n")
+ for obj in @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)
+ end
+ end
+ f.write(" ))\n\n")
+
+ f.write(" (objects\n")
+ for obj in @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))
+ end
+ end
+ end
+ f.write(" )\n\n")
+
+ f.write(" (reset-points\n")
+ for obj in @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))
+ end
+ end
+ end
+ f.write(" )\n\n")
+ end
+end
+
+# EOF #
Modified: trunk/src/sexpr.rb
===================================================================
--- trunk/src/sexpr.rb 2004-06-06 19:28:47 UTC (rev 398)
+++ trunk/src/sexpr.rb 2004-06-06 21:57:44 UTC (rev 399)
@@ -31,7 +31,7 @@
ret = []
for i in tree
if i[0] == name
- ret.push(*i[1..-1])
+ ret.push(i[1..-1])
end
end
Modified: trunk/src/supertux.rb
===================================================================
--- trunk/src/supertux.rb 2004-06-06 19:28:47 UTC (rev 398)
+++ trunk/src/supertux.rb 2004-06-06 21:57:44 UTC (rev 399)
@@ -1,3 +1,5 @@
+require "/home/ingo/.flexlay/supertux.rb"
+
BACKGROUND_LAYER = 1
INTERACTIVE_LAYER = 2
FOREGROUND_LAYER = 3
@@ -35,10 +37,11 @@
$workspace.set_tool($tilemap_paint_tool.to_tool());
-$recent_files = []
+$mysprite = make_sprite("../data/images/icons16/stock_paste-16.png")
+
$recent_files_menu = Menu.new(CL_Point.new(32*2, 54), $gui.get_component())
for filename in $recent_files
- $recent_files_menu.add_item(mysprite, filename, proc{
supertux_load_level(filename) })
+ $recent_files_menu.add_item($mysprite, filename, proc{
supertux_load_level(filename) })
end
$minimap = Minimap.new($editor_map, CL_Rect.new(CL_Point.new(3, 488+3-14),
@@ -140,461 +143,8 @@
["door", "images/shared/door.png"],
["trampoline", "images/shared/trampoline-1.png"]]
-
-class Level
- version = 2
- filename = nil
-
- name = "no name"
- author = "no author"
- theme = "antarctica"
- time = 999
- music = "Mortimers_chipdisko.mod"
-
- objects = nil
- camera = nil
-
- sectors = nil
- current_sector = nil
-
- attr_reader :version, :filename, :name, :author, :theme, :time, :music,
:objects, :camera, :sectors, :current_sector
- attr_writer :version, :filename, :name, :author, :theme, :time, :music,
:objects, :camera, :sectors, :current_sector
-
- def initialize(*params)
- if params.length() == 2 then
- # New Level
- (width, height) = params
-
- @name = "No Name"
- @author = "No Author"
-
- @width = width
- @height = height
-
- @current_sector = Sector.new(self)
- @current_sector.new_from_size(width, height)
- @sectors = []
- @sectors.push(@current_sector)
-
- elsif params.length() == 1 then
- # Load Level from file
- (@filename,) = params
-
- tree = sexpr_read_from_file(@filename)
- if tree == nil
- raise("Couldn't load level: ", filename)
- end
-
- data = tree[1..-1]
-
- @version = get_value_from_tree(["version", "_"], data, 1)
-
- if (@version == 1) then
- parse_v1(data)
- else
- parse_v2(data)
- end
- else
- raise "Wrong arguments for SuperTux::___init__"
- end
- end
-
- def parse_v2(data)
- @name = get_value_from_tree(["name", "_"], data, "no name")
- @author = get_value_from_tree(["author", "_"], data, "no author")
- @time = int(get_value_from_tree(["time", "_"], data, "999"))
-
- @sectors = []
- for sec in sexpr_filter("sector", data)
- sector = Sector.new(self)
- sector.load_v2(sec)
- @sectors.append(sector)
- if sector.name == "main"
- @current_sector = sector
- end
- end
-
- if @current_sector == nil
- print "Error: No main sector defined: ", sectors
- end
- end
-
- def parse_v1(data)
- sector = Sector.new(self)
- sector.load_v1(data)
-
- @sectors = []
- @sectors.append(sector)
- @current_sector = sector
-
- @name = get_value_from_tree(["name", "_"], data, "no name")
- @author = get_value_from_tree(["author", "_"], data, "no author")
- @time = int(get_value_from_tree(["time", "_"], data, "999"))
- end
-
- def save(filename)
- save_v2(filename)
- end
-
- def save_v2(filename)
- f = File.new(filename, "w")
- f.write(";; Generated by Flexlay Editor\n" +
- "(supertux-level\n")
- f.write(" (version 2)\n")
- f.write(" (name \"%s\")\n" % @name)
- f.write(" (author \"%s\")\n" % @author)
- f.write(" (width %s)\n" % @width)
- f.write(" (height %s)\n" % @height)
-
- f.write(" (music \"%s\")\n" % @music)
- f.write(" (time \"%s\")\n" % @time)
-
- f.write(" (gravity %d)\n" % @gravity)
-
- f.write(" (theme \"%s\")\n" % @theme)
-
- f.write(" (interactive-tm\n")
- for i in interactive.get_data()
- f.write("%d " % i)
- end
- f.write(" )\n\n")
-
- f.write(" (background-tm\n")
- for i in background.get_data()
- f.write("%d " % i)
- end
- f.write(" )\n\n")
-
- f.write(" (foreground-tm\n")
- for i in foreground.get_data()
- f.write("%d " % i)
- end
- f.write(" )\n\n")
-
- f.write(" (camera\n")
- f.write(" (mode \"autoscroll\")\n")
- f.write(" (path\n")
- for obj in 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)
- end
- end
- f.write(" ))\n\n")
-
- f.write(" (objects\n")
- for obj in @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))
- end
- end
- end
- f.write(" )\n\n")
-
- f.write(" (reset-points\n")
- for obj in @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))
- end
- end
- end
- f.write(" )\n\n")
-
- f.write(" )\n\n;; EOF ;;\n")
- end
-
- def save_v1(filename)
- f = File.new(filename, "w")
- f.write(";; Generated by Flexlay Editor\n" +
- "(supertux-level\n")
- f.write(" (version 1)\n")
- f.write(" (name \"%s\")\n" % @name)
- f.write(" (author \"%s\")\n" % @author)
- f.write(" (width %s)\n" % @width)
- f.write(" (height %s)\n" % @height)
-
- f.write(" (music \"%s\")\n" % @music)
- f.write(" (time \"%s\")\n" % @time)
-
- f.write(" (gravity %d)\n" % @gravity)
-
- f.write(" (theme \"%s\")\n" % @theme)
-
- f.write(" (interactive-tm\n")
- for i in @interactive.get_data()
- f.write("%d " % i)
- end
- f.write(" )\n\n")
-
- f.write(" (background-tm\n")
- for i in @background.get_data()
- f.write("%d " % i)
- end
- f.write(" )\n\n")
-
- f.write(" (foreground-tm\n")
- for i in @foreground.get_data()
- f.write("%d " % i)
- end
- f.write(" )\n\n")
-
- f.write(" (camera\n")
- f.write(" (mode \"autoscroll\")\n")
- f.write(" (path\n")
- for obj in @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)
- end
- end
- f.write(" ))\n\n")
-
- f.write(" (objects\n")
- for obj in @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))
- end
- end
- end
- f.write(" )\n\n")
-
- f.write(" (reset-points\n")
- for obj in @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" % (pos.x.to_i), pos.y.to_i)
- end
- end
- end
- f.write(" )\n\n")
-
- f.write(" )\n\n;; EOF ;;\n")
- end
-
- def activate_sector(sector, workspace)
- for sec in @sectors
- if sec.name == sector
- sec.activate(workspace)
- break
- end
- end
- end
-
- def add_sector(sector)
- @sectors.push(sector)
- end
-
- def get_sectors()
- return @sectors.map {|sec| sec.name}
- end
-
- def activate(workspace)
- @current_sector.activate(workspace)
- end
-end
-
-class Sector
- parent = nil
- name = nil
- song = nil
- gravity = 10.0
-
- width = nil
- height = nil
-
- background = nil
- interactive = nil
- foreground = nil
-
- objects = nil
- editormap = nil
-
- attr_reader :name, :background, :interactive, :foreground, :parent, :width,
:height
- attr_writer :name, :song, :gravity
-
- def initialize(parent)
- @parent = parent
- end
-
- def get_level()
- return @parent
- end
-
- def resize(size, pos)
- @width = size.width
- @height = size.height
- @background.resize(size, pos)
- @interactive.resize(size, pos)
- @foreground.resize(size, pos)
- end
-
- def new_from_size(width, height)
- @name = "<No Name>"
- @song = "<No Song>"
- @gravity = 10.0
-
- @width = width
- @height = height
-
- @foreground = TilemapLayer.new($tileset, @width, @height)
- @interactive = TilemapLayer.new($tileset, @width, @height)
- @background = TilemapLayer.new($tileset, @width, @height)
- @objects = ObjectLayer.new()
-
- @editormap = EditorMap.new()
- @editormap.add_layer(@background.to_layer())
- @editormap.add_layer(@interactive.to_layer())
- @editormap.add_layer(@objects.to_layer())
- @editormap.add_layer(@foreground.to_layer())
- # FIXME: Data might not get freed since its 'recursively' refcounted
- @editormap.set_metadata(make_metadata(self))
- return self
- end
-
- def load_v1(data)
- @name = "<No Name>"
- @song = "<No Song>"
- @gravity = 10.0
-
- @width = get_value_from_tree(["width", "_"], data, 20)
- @height = get_value_from_tree(["height""_"], data, 15)
-
- @foreground = TilemapLayer($tileset, @width, @height)
- @foreground.set_data(get_value_from_tree(["foreground-tm"], data, []))
-
- @interactive = TilemapLayer($tileset, @width, @height)
- @interactive.set_data(get_value_from_tree(["interactive-tm"], data, []))
-
- @background = TilemapLayer($tileset, @width, @height)
- @background.set_data(get_value_from_tree(["background-tm"], data, []))
-
- @objects = ObjectLayer.new()
- for i in get_value_from_tree(["objects"], data, [])
- type = i[0]
- x = get_value_from_tree(["x", "_"], i[1..-1], [])
- y = get_value_from_tree(["y", "_"], i[1..-1], [])
- object = $game_objects.find{|x| x[0] == type}
- if object != nil
- @objects.add_object(ObjMapSpriteObject(make_sprite($datadir +
object[1]),
- CL_Point(x, y),
-
make_metadata(BadGuy(object[0]))).to_object())
- else
- print "Error: Couldn't resolve object type: ", type
- end
- end
-
- for i in get_value_from_tree(["reset-points"], data, [])
- type = i[0]
- x = get_value_from_tree(["x", "_"], i[1..-1], [])
- y = get_value_from_tree(["y", "_"], i[1..-1], [])
- object = find($game_objects, "resetpoint")
- @objects.add_object(ObjMapSpriteObject(make_sprite($datadir + object[1]),
- CL_Point(x, y),
-
make_metadata(BadGuy(object[0]))).to_object())
- end
-
- @editormap = EditorMap.new()
- @editormap.add_layer(@background.to_layer())
- @editormap.add_layer(@interactive.to_layer())
- @editormap.add_layer(@objects.to_layer())
- @editormap.add_layer(@foreground.to_layer())
- # FIXME: Data might not get freed since its 'recursively' refcounted
- @editormap.set_metadata(make_metadata(self))
- end
-
- def load_v2(data)
- @name = "<No Name>"
- @song = "<No Song>"
- @gravity = 10.0
-
- @objects = ObjectLayer.new()
- for i in data
- (name,data) = i[0], i[1..-1]
- if name == "name"
- @name = data[0]
- elsif name == "gravity"
- @gravity = int(data[0])
- elsif name == "playerspawn"
- print "playerspawn unhandled"
- elsif 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 @interactive == nil
- @interactive = tilemap
- @width = width
- @height = height
- elsif @background == nil
- @background = tilemap
- elsif @foreground == nil
- @foreground = tilemap
- else
- print "Error: Duplicate tilemap in levelfile"
- end
- elsif name == "background"
- print "background unhandled"
- else
- object = $game_objects.find{|x| x[0] == name}
- if object != nil
- (name, image) = object
- x = get_value_from_tree(["x", "_"], data, [])
- y = get_value_from_tree(["y", "_"], data, [])
- @objects.add_object(ObjMapSpriteObject.new(make_sprite($datadir +
image),
- CL_Point.new(x, y),
-
make_metadata(BadGuy.new(name))).to_object())
- else
- print "Error: Couldn't resolve object type: ", name
- print "Sector: Unhandled tag: ", name
- end
- end
- end
-
-
- if (@background == nil)
- @background = TilemapLayer.new($tileset, width, height)
- end
-
- if (@interactive == nil)
- @interactive = TilemapLayer.new($tileset, width, height)
- end
-
- if (@foreground == nil)
- @foreground = TilemapLayer.new($tileset, width, height)
- end
-
- @editormap = EditorMap()
- @editormap.add_layer(@background.to_layer())
- @editormap.add_layer(@interactive.to_layer())
- @editormap.add_layer(@foreground.to_layer())
- @editormap.add_layer(@objects.to_layer())
-
- @editormap.set_metadata(make_metadata(self))
- end
-
- def activate(workspace)
- workspace.set_map(@editormap)
- TilemapLayer.set_current(@interactive)
- ObjectLayer.set_current(@objects)
- connect(@editormap.sig_change(), proc{on_map_change()})
- end
-end
-
+require "level.rb"
+require "sector.rb"
require "gui2.rb"
$gui.run()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Windstille-devel] rev 399 - trunk/src,
Ingo Ruhnke <=