windstille-devel
[Top][All Lists]
Advanced

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

[Windstille-devel] rev 400 - trunk/src


From: Ingo Ruhnke
Subject: [Windstille-devel] rev 400 - trunk/src
Date: Mon, 07 Jun 2004 13:08:58 +0200

Author: grumbel
Date: 2004-06-07 13:08:57 +0200 (Mon, 07 Jun 2004)
New Revision: 400

Modified:
   trunk/src/flexlay.rb
   trunk/src/gui.rb
   trunk/src/gui2.rb
   trunk/src/level.rb
   trunk/src/sector.rb
   trunk/src/supertux.rb
Log:
- fixed load/save and multisector support a bit

Modified: trunk/src/flexlay.rb
===================================================================
--- trunk/src/flexlay.rb        2004-06-06 21:57:44 UTC (rev 399)
+++ trunk/src/flexlay.rb        2004-06-07 11:08:57 UTC (rev 400)
@@ -30,8 +30,8 @@
   end
 end
 
+# Very simple FileDialog, mainly a placeholder until the real thing gets ready.
 class SimpleFileDialog
-  """Very simple FileDialog, mainly a placeholder until the real thing gets 
ready."""
   @window   = nil
   @inputbox = nil
   @ok_button     = nil
@@ -145,7 +145,7 @@
 
   def update()
     y = 10
-    for (type, label, comp) in @items
+    @items.each do |(type, label, comp)| 
       if type == "int" or type == "string"
         label.set_position(10, y)
         comp.set_position(110, y)

Modified: trunk/src/gui.rb
===================================================================
--- trunk/src/gui.rb    2004-06-06 21:57:44 UTC (rev 399)
+++ trunk/src/gui.rb    2004-06-07 11:08:57 UTC (rev 400)
@@ -23,7 +23,7 @@
     @objectselector = ObjectSelector.new(CL_Rect.new(0, 0, 128, 256), 42, 42, 
@selector_window)
     @objectselector.show(true)
 
-    for object in $game_objects
+    $game_objects.each do |object|
       @objectselector.add_brush(ObjectBrush.new(make_sprite($datadir + 
object[1]),
                                                 
make_metadata(BadGuy.new(object[0]))))
     end
@@ -46,7 +46,12 @@
 end
 
 def gui_level_save_as()
-  $save_dialog.set_filename(File.dirname($save_dialog.get_filename()) + "/")
+  filename = $save_dialog.get_filename()
+  if filename[-1] == "/"[0]
+    $save_dialog.set_filename(filename)
+  else
+    $save_dialog.set_filename(File.dirname(filename) + "/")
+  end
   $save_dialog.run(proc{|filename| supertux_save_level(filename) })
 end
 
@@ -54,8 +59,13 @@
   filename = $workspace.get_map().get_metadata().parent.filename
   if filename
     $save_dialog.set_filename(filename)
-  else # FIXME
-    $save_dialog.set_filename(File.dirname($save_dialog.get_filename())  + "/")
+  else
+    filename = $save_dialog.get_filename()
+    if filename[-1] == "/"[0]
+      $save_dialog.set_filename(filename)
+    else
+      $save_dialog.set_filename(File.dirname(filename) + "/")
+    end
   end
   
   $save_dialog.run(proc{|filename| supertux_save_level(filename) })
@@ -252,10 +262,17 @@
 
 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) })
+  sector = $workspace.get_map().get_metadata()
+  sector.parent.get_sectors().each do |i|
+    if sector.name == i then
+      current = " [current]"
+    else
+      current = ""
+    end
+    mymenu.add_item($mysprite, ("Sector (%s)%s" % [i, current]), proc { 
+                      print "Switching to %s\n" % i
+                      
$workspace.get_map().get_metadata().parent.activate_sector(i, $workspace) 
+                    })
   end
   mymenu.run()
 end
@@ -273,8 +290,15 @@
   dialog.add_int("Height: ",  height)
   
   dialog.set_callback(proc { |name, w, h|
-                        sector = Sector().new(w, h)
-                        sector.name = name
+                        uniq_name = name
+                        i = 1
+                        while level.get_sectors().index(uniq_name)
+                          uniq_name = name + "<%d>" % i
+                          i += 1
+                        end
+
+                        sector = Sector.new(level)
+                        sector.new_from_size(uniq_name, width, height)
                         level.add_sector(sector) })
 end  
 

Modified: trunk/src/gui2.rb
===================================================================
--- trunk/src/gui2.rb   2004-06-06 21:57:44 UTC (rev 399)
+++ trunk/src/gui2.rb   2004-06-07 11:08:57 UTC (rev 400)
@@ -165,7 +165,7 @@
   print "Connecting path nodes"
   pathnodes = []
   for i in objmap_select_tool.get_selection()
-    obj = get_python_object(i.get_metadata())
+    obj = get_ruby_object(i.get_metadata())
     if obj.__class__ == PathNode
       pathnodes.push(obj.node)
     end

Modified: trunk/src/level.rb
===================================================================
--- trunk/src/level.rb  2004-06-06 21:57:44 UTC (rev 399)
+++ trunk/src/level.rb  2004-06-07 11:08:57 UTC (rev 400)
@@ -1,35 +1,24 @@
 class Level
-  version = 2
-  filename = nil
+  attr_reader :version, :filename, :name, :author, :theme, :time, :objects, 
:sectors, :current_sector
+  attr_writer :version, :filename, :name, :author, :theme, :time, :objects, 
:sectors, :current_sector
   
-  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)
+    @name     = "No Name"
+    @author   = "No Author"
+    @theme    = "antarctica"
+    @time     = 999 
+    @filename = nil
+    @version  = 2
+
     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)
+      @current_sector.new_from_size("main", width, height)
       @sectors = []
       @sectors.push(@current_sector)
       
@@ -39,14 +28,14 @@
       
       tree = sexpr_read_from_file(@filename)
       if tree == nil
-        raise("Couldn't load level: ", filename)
+        raise("Couldn't load level: %s" % filename)
       end
       
       data = tree[1..-1]
       
       @version = get_value_from_tree(["version", "_"], data, 0)
       
-      print "VERSION: ", @version, "\n"
+      print "VERSION: ", @filename, " ",  @version, "\n"
       
       if (@version == 1) then
         parse_v1(data)
@@ -67,7 +56,6 @@
     @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"
@@ -105,7 +93,7 @@
     f.write("  (version 2)\n")
     f.write("  (name   \"%s\")\n" % @name)
     f.write("  (author \"%s\")\n" % @author)
-    f.write("  (time   \"%s\")\n" % @time)   
+    f.write("  (time   %d)\n" % @time)   
     
     for sector in @sectors
       f.write("  (sector\n")
@@ -114,6 +102,7 @@
     end
 
     f.write(" )\n\n;; EOF ;;\n")
+    f.close()
   end
   
   def save_v1(filename)
@@ -123,13 +112,13 @@
     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("  (width  %d)\n"  % @width)
+    f.write("  (height  %d)\n" % @height)
     
     f.write("  (music  \"%s\")\n" % @music)
-    f.write("  (time   \"%s\")\n" % @time)
+    f.write("  (time   %d)\n" % @time)
     
-    f.write("  (gravity %d)\n" % @gravity)
+    f.write("  (gravity %f)\n" % @gravity)
     
     f.write("  (theme \"%s\")\n" % @theme)
     
@@ -155,7 +144,7 @@
     f.write("    (mode \"autoscroll\")\n")
     f.write("    (path\n")
     for obj in @objects.get_objects()
-      pathnode = get_python_object(obj.get_metadata())
+      pathnode = get_ruby_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
@@ -164,7 +153,7 @@
     
     f.write("  (objects\n")
     for obj in @objects.get_objects()
-      badguy = get_python_object(obj.get_metadata())
+      badguy = get_ruby_object(obj.get_metadata())
       if (badguy.__class__ == BadGuy)
         pos    = obj.get_pos()
         if (badguy.type != "resetpoint")
@@ -176,7 +165,7 @@
     
     f.write("  (reset-points\n")
     for obj in @objects.get_objects()
-      badguy = get_python_object(obj.get_metadata())
+      badguy = get_ruby_object(obj.get_metadata())
       if (badguy.__class__ == BadGuy)
         pos    = obj.get_pos()
         if (badguy.type == "resetpoint")
@@ -187,6 +176,7 @@
     f.write("  )\n\n")
     
     f.write(" )\n\n;; EOF ;;\n")
+    f.close()
   end
 
   def activate_sector(sector, workspace)

Modified: trunk/src/sector.rb
===================================================================
--- trunk/src/sector.rb 2004-06-06 21:57:44 UTC (rev 399)
+++ trunk/src/sector.rb 2004-06-07 11:08:57 UTC (rev 400)
@@ -33,8 +33,8 @@
     @foreground.resize(size, pos)
   end
 
-  def new_from_size(width, height)
-    @name = "<No Name>"
+  def new_from_size(name, width, height)
+    @name = name
     @song = "<No Song>"
     @gravity = 10.0
     
@@ -123,9 +123,8 @@
     @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]
@@ -141,7 +140,6 @@
         tilemap = TilemapLayer.new($tileset, width, height)
         tilemap.set_data(get_value_from_tree(["tiles"], data, []))
         
-        print "Solid: ", solid
         if solid
           @interactive = tilemap
           @width       = width
@@ -201,36 +199,43 @@
     connect(@editormap.sig_change(), proc{on_map_change()})
   end
 
+  def save_tilemap(f, tilemap, name, solid = nil)
+    f.write("    (tilemap\n")
+    f.write("      (layer  \"%s\")\n" % name)
+    f.write("      (solid %s)\n" % if solid == :solid then "#t" else "#f" end)
+    f.write("      (speed  %f)\n" % 1.0)
+    f.write("      (width  %d)\n" % tilemap.get_width())
+    f.write("      (height %d)\n" % tilemap.get_height())
+    f.write("      (tiles\n")
+    f.write("        ")
+    x = 0
+    for i in tilemap.get_data()
+      f.write("%d " % i)
+      x += 1
+      if x == width then
+        f.write("\n        ")
+        x = 0
+      end
+    end
+    f.write("))\n")    
+  end
+
   def save(f)   
     f.write("    (name  \"%s\")\n"  % @name)
-    f.write("    (width  %s)\n"  % @width)
-    f.write("    (height  %s)\n" % @height)   
+    f.write("    (width  %d)\n"  % @width)
+    f.write("    (height  %d)\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("    (gravity %f)\n" % @gravity)
     
-    f.write("    (background-tm\n")
-    for i in background.get_data()
-      f.write("%d " % i)
-    end
-    f.write("    )\n\n")
+    save_tilemap(f, @background,  "background")
+    save_tilemap(f, @interactive, "main", :solid)
+    save_tilemap(f, @foreground,  "foreground")
 
-    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())
+      pathnode = get_ruby_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
@@ -239,7 +244,7 @@
 
     f.write("    (objects\n")
     for obj in @objects.get_objects()
-      badguy = get_python_object(obj.get_metadata())
+      badguy = get_ruby_object(obj.get_metadata())
       if (badguy.__class__ == BadGuy)
         pos    = obj.get_pos()
         if (badguy.type != "resetpoint")
@@ -251,7 +256,7 @@
 
     f.write("    (reset-points\n")
     for obj in @objects.get_objects()
-      badguy = get_python_object(obj.get_metadata())
+      badguy = get_ruby_object(obj.get_metadata())
       if (badguy.__class__ == BadGuy)
         pos    = obj.get_pos()
         if (badguy.type == "resetpoint")

Modified: trunk/src/supertux.rb
===================================================================
--- trunk/src/supertux.rb       2004-06-06 21:57:44 UTC (rev 399)
+++ trunk/src/supertux.rb       2004-06-07 11:08:57 UTC (rev 400)
@@ -24,7 +24,7 @@
 $editor = Editor.new()
 $gui = $editor.get_gui_manager()
 
-myrect     = CL_Rect.new(CL_Point.new(0, 56), CL_Size.new(665, 488+56))
+myrect      = CL_Rect.new(CL_Point.new(0, 56), CL_Size.new(665, 488+56))
 $editor_map = EditorMapComponent.new(myrect, $gui.get_component())
 $workspace  = Workspace.new(myrect.get_width(), myrect.get_height())
 $editor_map.set_workspace($workspace)
@@ -63,11 +63,14 @@
   attr_reader :layer, :show_all, :current_only
   attr_writer :layer, :show_all, :current_only
 
-  layer    = INTERACTIVE_LAYER
-  show_all = false
-  current_only = false
+  def initialize()
+    @layer        = INTERACTIVE_LAYER
+    @show_all     = false
+    @current_only = false
+  end
     
   def set(map)
+
     if @current_only
       active   = CL_Color.new(255, 255, 255)
       deactive = CL_Color.new(0, 0, 0, 10)
@@ -102,8 +105,8 @@
   end
 end
 
+# Load game tiles from filename into tileset
 def Tileset_load(tileset, filename)
-  "Load game tiles from filename into tileset"
   tree = sexpr_read_from_file(filename)
   tree = tree[1..-1]
   for i in tree





reply via email to

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