pingus-cvs
[Top][All Lists]
Advanced

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

[Pingus-CVS] r3153 - in trunk/pingus: . src/editor


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3153 - in trunk/pingus: . src/editor
Date: Sat, 15 Sep 2007 05:53:37 +0200

Author: grumbel
Date: 2007-09-15 05:53:35 +0200 (Sat, 15 Sep 2007)
New Revision: 3153

Modified:
   trunk/pingus/TODO
   trunk/pingus/src/editor/editor_level.cpp
   trunk/pingus/src/editor/editor_level.hpp
   trunk/pingus/src/editor/editor_screen.cpp
   trunk/pingus/src/editor/editor_viewport.cpp
   trunk/pingus/src/editor/editor_viewport.hpp
   trunk/pingus/src/editor/level_impl.hpp
   trunk/pingus/src/editor/level_objs.cpp
   trunk/pingus/src/editor/object_selector_list.cpp
Log:
- removed the double data holding of objects in both the EditorLevel and the 
EditorViewport

Modified: trunk/pingus/TODO
===================================================================
--- trunk/pingus/TODO   2007-09-15 02:06:52 UTC (rev 3152)
+++ trunk/pingus/TODO   2007-09-15 03:53:35 UTC (rev 3153)
@@ -120,7 +120,7 @@
   f      - flip
   r      - rotate
 
--  
+- implement a minimap (just rects when surfaces are to tricky)
 
 - implement proper tmpfile Support (including backup use?)
 

Modified: trunk/pingus/src/editor/editor_level.cpp
===================================================================
--- trunk/pingus/src/editor/editor_level.cpp    2007-09-15 02:06:52 UTC (rev 
3152)
+++ trunk/pingus/src/editor/editor_level.cpp    2007-09-15 03:53:35 UTC (rev 
3153)
@@ -21,6 +21,7 @@
 #include <iostream>
 #include <string>
 #include <fstream>
+#include "editor_viewport.hpp"
 #include "editor_level.hpp"
 #include "level_impl.hpp"
 #include "level_objs.hpp"
@@ -30,9 +31,15 @@
 
 namespace Editor {
 
+static bool LevelObjSort(LevelObj *a, LevelObj *b)
+{
+  return (a->get_pos().z < b->get_pos().z);
+}
+
 // Default constructor
-EditorLevel::EditorLevel() :
-  impl(new LevelImpl())
+EditorLevel::EditorLevel(EditorScreen* editor_) 
+ : editor(editor_),
+   impl(new LevelImpl())
 {
   impl->levelname   = "none";
   impl->description = "none";
@@ -139,8 +146,9 @@
 
   // Write the objects
   fw.begin_section("objects");
-  for (unsigned i = 0; i < impl->objects.size(); i++)
-    impl->objects[i]->write_properties(fw);
+  std::vector<LevelObj*>* objects = editor->get_viewport()->get_objects();
+  for (unsigned i = 0; i < objects->size(); i++)
+    (*objects)[i]->write_properties(fw);
   fw.end_section();    // objects
 
   fw.end_section();    // pingus-level
@@ -269,20 +277,16 @@
           obj->set_release_rate(tmp_int);
         }
 
-      impl->objects.push_back((LevelObj*)obj);
+      editor->get_viewport()->add_object(obj);
     }
 
   // Sort by Z coordinate
-  impl->sort_objs();
+  std::stable_sort(editor->get_viewport()->get_objects()->begin(),
+                   editor->get_viewport()->get_objects()->end(),
+                   LevelObjSort);
 }
 
 void
-EditorLevel::add_object(LevelObj* obj)
-{
-  impl->objects.push_back(obj);
-}
-
-void
 EditorLevel::set_description(const std::string& str)
 {
   impl->description = str;

Modified: trunk/pingus/src/editor/editor_level.hpp
===================================================================
--- trunk/pingus/src/editor/editor_level.hpp    2007-09-15 02:06:52 UTC (rev 
3152)
+++ trunk/pingus/src/editor/editor_level.hpp    2007-09-15 03:53:35 UTC (rev 
3153)
@@ -29,12 +29,16 @@
 namespace Editor {
 
 class LevelObj;
+class EditorScreen;
 
 class EditorLevel
 {
+private:
+  EditorScreen* editor;
+  
 public:
   /** Construct new blank level */
-  EditorLevel();
+  EditorLevel(EditorScreen* editor);
 
   /** Destructor */
   ~EditorLevel();
@@ -48,12 +52,6 @@
   /** Load an existing level from a file */
   void load_level(const Pathname& pathname);
 
-  /** Return all objects in the level */
-  std::vector<LevelObj*> get_objects() const { return impl->objects; }
-       
-  /** Add an object to the level */
-  void add_object(LevelObj* obj);
-
   Size get_size() const;
   void set_size(const Size& s);
        

Modified: trunk/pingus/src/editor/editor_screen.cpp
===================================================================
--- trunk/pingus/src/editor/editor_screen.cpp   2007-09-15 02:06:52 UTC (rev 
3152)
+++ trunk/pingus/src/editor/editor_screen.cpp   2007-09-15 03:53:35 UTC (rev 
3153)
@@ -49,7 +49,7 @@
 
 // Default constructor
 EditorScreen::EditorScreen()
-  : plf(new EditorLevel()), 
+  : plf(new EditorLevel(this)), 
     panel(0),
     viewport(0),
     object_selector(0),
@@ -206,7 +206,6 @@
 void
 EditorScreen::add_object(LevelObj* obj)
 {
-  plf->add_object(obj);
   viewport->add_object(obj);
 }
 

Modified: trunk/pingus/src/editor/editor_viewport.cpp
===================================================================
--- trunk/pingus/src/editor/editor_viewport.cpp 2007-09-15 02:06:52 UTC (rev 
3152)
+++ trunk/pingus/src/editor/editor_viewport.cpp 2007-09-15 03:53:35 UTC (rev 
3153)
@@ -105,24 +105,25 @@
               selected_objs.clear();
               obj->select();
 
-              obj->set_orig_pos(obj->get_pos());
-
               selected_objs.push_back(obj);
 
               selection_changed(selected_objs);
             }
 
+          for (unsigned i = 0; i < selected_objs.size(); i++)
+            selected_objs[i]->set_orig_pos(selected_objs[i]->get_pos());
+
           // Allow dragging of the currently selected objects
           current_action = DRAGGING;
           drag_world_pos = mouse_world_pos;
         }
       else
         {
-          selected_objs.clear();
           current_action = HIGHLIGHTING;
           highlighted_area.left = highlighted_area.right  = mouse_world_pos.x;
           highlighted_area.top  = highlighted_area.bottom = mouse_world_pos.y;
 
+          selected_objs.clear();
           selection_changed(selected_objs);
         }
     }
@@ -288,7 +289,6 @@
 void
 EditorViewport::refresh()
 {
-  objs = editor->get_level()->get_objects();
   state.set_limit(Rect(Vector2i(0,0), 
editor->get_level()->get_size()).grow(256));
   std::cout << editor->get_level()->get_size().width << ", "
             << editor->get_level()->get_size().height 

Modified: trunk/pingus/src/editor/editor_viewport.hpp
===================================================================
--- trunk/pingus/src/editor/editor_viewport.hpp 2007-09-15 02:06:52 UTC (rev 
3152)
+++ trunk/pingus/src/editor/editor_viewport.hpp 2007-09-15 03:53:35 UTC (rev 
3153)
@@ -27,7 +27,6 @@
 #include <vector>
 #include <string>
 
-
 class Vector3f;
 class DrawingContext;
 class SceneContext;
@@ -149,6 +148,8 @@
 
   void update_layout();
 
+  std::vector<LevelObj*>* get_objects() { return &objs; }
+
   boost::signal<void (const std::vector<LevelObj*>&)> selection_changed;
 private:
   EditorViewport();

Modified: trunk/pingus/src/editor/level_impl.hpp
===================================================================
--- trunk/pingus/src/editor/level_impl.hpp      2007-09-15 02:06:52 UTC (rev 
3152)
+++ trunk/pingus/src/editor/level_impl.hpp      2007-09-15 03:53:35 UTC (rev 
3153)
@@ -25,15 +25,11 @@
 #include <string>
 #include <vector>
 #include <algorithm>
+#include "editor_screen.hpp"
 #include "level_objs.hpp"
 
 namespace Editor {
 
-static bool LevelObjSort(LevelObj *a, LevelObj *b)
-{
-  return (a->get_pos().z < b->get_pos().z);
-}
-
 class LevelImpl
 {
 public:
@@ -48,11 +44,8 @@
   /** Destructor */
   ~LevelImpl()
   {
-    for (unsigned i = 0; i < objects.size(); i++)
-      delete objects[i];
-    objects.clear();
   }
-                    
+                   
   std::string resname;
 
   std::string levelname;
@@ -73,14 +66,6 @@
   std::string comment;
   std::string music;
 
-  std::vector<LevelObj*> objects;
-
-  /** Sort the objects by their z position */
-  void sort_objs()
-  {
-    std::stable_sort(objects.begin(), objects.end(), LevelObjSort);
-  }
-
 private:
   LevelImpl (const LevelImpl&);
   LevelImpl& operator= (const LevelImpl&);

Modified: trunk/pingus/src/editor/level_objs.cpp
===================================================================
--- trunk/pingus/src/editor/level_objs.cpp      2007-09-15 02:06:52 UTC (rev 
3152)
+++ trunk/pingus/src/editor/level_objs.cpp      2007-09-15 03:53:35 UTC (rev 
3153)
@@ -159,7 +159,9 @@
   if (attribs & HAS_SURFACE)
     {
       sprite = Resource::load_sprite(desc);
-      
+    }
+  set_translated_pos();
+
 #if 0                          
       Surface pb;
 
@@ -199,8 +201,6 @@
 
       sprite = Sprite(pb);
 #endif
-    }
-  set_translated_pos();
 }
 
 // Set the modifier and actually modify the sprite loaded in memory

Modified: trunk/pingus/src/editor/object_selector_list.cpp
===================================================================
--- trunk/pingus/src/editor/object_selector_list.cpp    2007-09-15 02:06:52 UTC 
(rev 3152)
+++ trunk/pingus/src/editor/object_selector_list.cpp    2007-09-15 03:53:35 UTC 
(rev 3153)
@@ -125,13 +125,14 @@
 
   LevelObj* create(const Vector2i& pos, LevelImpl* impl) { 
     LevelObj* obj = new LevelObj("surface-background", impl);
-    obj->set_pos(pos);
+    obj->set_pos(Vector3f(pos.x, pos.y, -1000.0f)); // FIXME: Hack, z-pos 
handling is messed up
     obj->set_para_x(1.0f);
     obj->set_para_y(1.0f);
     obj->set_scroll_x(0.0f);
     obj->set_scroll_y(0.0f);
     obj->set_res_desc(desc);
     // obj->set_para();
+
     return obj;
   }
 };





reply via email to

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