pingus-cvs
[Top][All Lists]
Advanced

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

[Pingus-CVS] r3140 - in trunk/pingus/src: editor math


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3140 - in trunk/pingus/src: editor math
Date: Thu, 13 Sep 2007 13:55:56 +0200

Author: grumbel
Date: 2007-09-13 13:55:55 +0200 (Thu, 13 Sep 2007)
New Revision: 3140

Modified:
   trunk/pingus/src/editor/editor_screen.cpp
   trunk/pingus/src/editor/editor_viewport.cpp
   trunk/pingus/src/editor/level_objs.cpp
   trunk/pingus/src/editor/object_properties.cpp
   trunk/pingus/src/editor/object_properties.hpp
   trunk/pingus/src/editor/object_selector.cpp
   trunk/pingus/src/editor/object_selector.hpp
   trunk/pingus/src/math/rect.hpp
Log:
- some more object properties hocked up
- added border that shows the level size
- fixed drag&drop bug
- fixed default SurfaceBackground values
- ObjectProperties dialog resizes depending on the number of properties

Modified: trunk/pingus/src/editor/editor_screen.cpp
===================================================================
--- trunk/pingus/src/editor/editor_screen.cpp   2007-09-13 05:36:51 UTC (rev 
3139)
+++ trunk/pingus/src/editor/editor_screen.cpp   2007-09-13 11:55:55 UTC (rev 
3140)
@@ -92,6 +92,7 @@
   level_properties->set_level(plf);
   action_properties->set_level(plf);
   gui_manager->add(level_properties, true);
+  viewport->refresh();
 }
 
 // Destructor
@@ -351,18 +352,28 @@
 EditorScreen::toggle_action_properties()
 {
   if (action_properties->is_visible())
-    action_properties->hide();
+    {
+      action_properties->hide();
+    }
   else
-    action_properties->show();
+    {
+      action_properties->show();
+      level_properties->hide();
+    }
 }
 
 void
 EditorScreen::toggle_level_properties()
 {
   if (level_properties->is_visible())
+    {
     level_properties->hide();
+    }
   else
+    {
     level_properties->show();
+    action_properties->hide();
+    }
 }
 
 void

Modified: trunk/pingus/src/editor/editor_viewport.cpp
===================================================================
--- trunk/pingus/src/editor/editor_viewport.cpp 2007-09-13 05:36:51 UTC (rev 
3139)
+++ trunk/pingus/src/editor/editor_viewport.cpp 2007-09-13 11:55:55 UTC (rev 
3140)
@@ -122,8 +122,12 @@
             {
               for (unsigned i = 0; i < selected_objs.size(); i++)
                 selected_objs[i]->unselect();
+                
               selected_objs.clear();
               obj->select();
+
+              obj->set_orig_pos(obj->get_pos());
+
               selected_objs.push_back(obj);
 
               selection_changed(selected_objs);
@@ -235,8 +239,12 @@
 EditorViewport::draw(DrawingContext &gc)
 {
   drawing_context->clear();
-  drawing_context->fill_screen(Color(255,0,255));
+  drawing_context->fill_screen(Color(155,0,155));
   state.push(*drawing_context);
+  drawing_context->draw_rect(Rect(Vector2i(0,0), 
editor->get_level()->get_size()), Color(255,255,255), 5000.0f);
+  drawing_context->draw_rect(Rect(Vector2i(0,0), 
editor->get_level()->get_size()).grow(1), Color(0,0,0), 5000.0f);
+
+  drawing_context->draw_rect(Rect(Vector2i(0,0), 
editor->get_level()->get_size()).grow(-100), Color(155,155,155), 5000.0f);
        
   // Draw the level objects
   for (unsigned i = 0; i < objs.size(); i++)
@@ -314,7 +322,7 @@
 EditorViewport::refresh()
 {
   objs = editor->get_level()->get_objects();
-  state.set_limit(Rect(Vector2i(0, 0), editor->get_level()->get_size()));
+  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 
             << std::endl;

Modified: trunk/pingus/src/editor/level_objs.cpp
===================================================================
--- trunk/pingus/src/editor/level_objs.cpp      2007-09-13 05:36:51 UTC (rev 
3139)
+++ trunk/pingus/src/editor/level_objs.cpp      2007-09-13 11:55:55 UTC (rev 
3140)
@@ -107,6 +107,7 @@
           for(int x = int(pos.x); x < pos.x + width; x += sprite.get_width())
             gc.draw(sprite, Vector3f(static_cast<float>(x), pos.y, pos.z));
         }
+#if 0
       else if(attribs & HAS_STRETCH)
         {
           // Surface Background - tile it
@@ -114,6 +115,7 @@
             for (int y = 0; y < level->size.height; y += sprite.get_height())
               gc.draw(sprite, Vector3f((float)x, (float)y, pos.z));
         }
+#endif
       else
         {
           gc.draw(sprite, pos);
@@ -157,9 +159,7 @@
   if (attribs & HAS_SURFACE)
     {
       sprite = Resource::load_sprite(desc);
-      ////int x, y;
-      ////sprite.get_alignment(origin, x, y);
-                               
+#if 0                          
       PixelBuffer pb;
 
       // Apply modifier, then change the sprite loaded for this object in 
memory.
@@ -196,11 +196,8 @@
       else             // No stretch involved
         pb = Resource::load_pixelbuffer(desc);
 
-      ////SpriteDescription sprite_desc;
-      ////sprite_desc.add_frame(pb);
-      ////sprite = Sprite(sprite_desc);
       sprite = Sprite(pb);
-      ////sprite.set_alignment(origin, x, y);
+#endif
     }
   set_translated_pos();
 }

Modified: trunk/pingus/src/editor/object_properties.cpp
===================================================================
--- trunk/pingus/src/editor/object_properties.cpp       2007-09-13 05:36:51 UTC 
(rev 3139)
+++ trunk/pingus/src/editor/object_properties.cpp       2007-09-13 11:55:55 UTC 
(rev 3140)
@@ -38,11 +38,11 @@
     editor(editor_)
 {
   add(type_label = new Label(Rect(Vector2i(4, 4), Size(120, 20)), "Object:"), 
true);
-  add(mesg_label = new Label(Rect(Vector2i(40, rect.get_height()/2- 20), 
Size(120, 20)), "nothing selected"), true);
+  add(mesg_label = new Label(Rect(Vector2i(10, 0), Size(180, 20)), "Nothing 
selected"), true);
     
   Rect label_rect(10,0, 80, 20);
   Rect box_rect(80,0, 190, 20);
- 
+ 
   // Groundpiece Type
   add(gptype_label = new Label(label_rect, "GPType:"), true);
   add(gptype_type  = new Combobox(box_rect), true);
@@ -57,7 +57,7 @@
   gptype_type->set_selected_item(Groundtype::GP_GROUND);
 
   
gptype_type->on_select.connect(boost::bind(&ObjectProperties::on_gptype_change, 
this, _1));
-  
+  
   add(entrance_direction_label = new Label(label_rect, "Direction:"), true);
   add(entrance_direction = new Combobox(box_rect), true);
   entrance_direction->add(0, "Left");
@@ -66,10 +66,12 @@
   entrance_direction->set_selected_item(0);
 
   
entrance_direction->on_select.connect(boost::bind(&ObjectProperties::on_entrance_direction_change,
 this, _1));
-
+
   add(release_rate_label = new Label(label_rect, "ReleaseRate:"), true);
   add(release_rate_inputbox = new Inputbox(box_rect), true);
-  
+
+  
release_rate_inputbox->on_change.connect(boost::bind(&ObjectProperties::on_release_rate_change,
 this, _1));
+  
   // Background Stretch
   add(stretch_label = new Label(label_rect, "Stretch:"), true);
   add(stretch_x_checkbox = new Checkbox(Rect(Vector2i(box_rect.left, 
box_rect.top), 
@@ -81,22 +83,29 @@
 
   
stretch_x_checkbox->on_change.connect(boost::bind(&ObjectProperties::on_stretch_x_change,
 this, _1));
   
stretch_y_checkbox->on_change.connect(boost::bind(&ObjectProperties::on_stretch_y_change,
 this, _1));
-  
+  
   add(para_x_label = new Label(label_rect, "Para-X:"), true);
   add(para_y_label = new Label(label_rect, "Para-Y:"), true);
 
   add(para_x_inputbox = new Inputbox(box_rect), true);
   add(para_y_inputbox = new Inputbox(box_rect), true);
-  
+
+  
para_x_inputbox->on_change.connect(boost::bind(&ObjectProperties::on_para_x_change,
 this, _1));
+  
para_y_inputbox->on_change.connect(boost::bind(&ObjectProperties::on_para_y_change,
 this, _1));
+
   add(scroll_x_label = new Label(label_rect, "Scroll-X:"), true);
   add(scroll_y_label = new Label(label_rect, "Scroll-Y:"), true);
 
   add(scroll_x_inputbox = new Inputbox(box_rect), true);
   add(scroll_y_inputbox = new Inputbox(box_rect), true);
-  
+
+  
scroll_x_inputbox->on_change.connect(boost::bind(&ObjectProperties::on_scroll_x_change,
 this, _1));
+  
scroll_y_inputbox->on_change.connect(boost::bind(&ObjectProperties::on_scroll_y_change,
 this, _1));
+  
   add(owner_label    = new Label(label_rect, "Owner Id:"), true);
   add(owner_inputbox = new Inputbox(box_rect), true);
-
+  
owner_inputbox->on_change.connect(boost::bind(&ObjectProperties::on_owner_change,
 this, _1));
+
   set_object(0);
 }
 
@@ -146,6 +155,8 @@
 void
 ObjectProperties::hide_all()
 {
+  y_pos = 30;
+      
   // Hide everything
   mesg_label->hide();
 
@@ -187,7 +198,6 @@
   if (obj)
     {
       unsigned int attr = obj->get_attribs();
-      y_pos = 30;
       if (attr & HAS_TYPE)
         {
           
gptype_type->set_selected_item(Groundtype::string_to_type(obj->get_type()));
@@ -267,8 +277,10 @@
     }
   else
     {
-      mesg_label->show();
+      place(mesg_label);
+      advance();
     }
+  finalize();
 }
 
 void
@@ -303,6 +315,12 @@
 }
 
 void
+ObjectProperties::finalize()
+{
+  set_rect(Rect(rect.left, rect.bottom - y_pos - 10, rect.right, rect.bottom));
+}
+
+void
 ObjectProperties::on_gptype_change(const ComboItem& item)
 {
   for(Objects::iterator i = objects.begin(); i != objects.end(); ++i)
@@ -331,11 +349,53 @@
       if (item.id == 0)
         (*i)->set_direction("left");
       else if (item.id == 1)
-        (*i)->set_direction("left");
+        (*i)->set_direction("misc");
       else // (item.id == 2)
         (*i)->set_direction("right");
     }
 }
+
+void
+ObjectProperties::on_owner_change(const std::string& str)
+{
+  for(Objects::iterator i = objects.begin(); i != objects.end(); ++i)
+    (*i)->set_owner(StringUtil::to<int>(str));
+}
+
+void
+ObjectProperties::on_para_x_change(const std::string& str)
+{
+ for(Objects::iterator i = objects.begin(); i != objects.end(); ++i)
+   (*i)->set_para_x(StringUtil::to<float>(str));
+}
+
+void
+ObjectProperties::on_para_y_change(const std::string& str)
+{
+ for(Objects::iterator i = objects.begin(); i != objects.end(); ++i)
+   (*i)->set_para_y(StringUtil::to<float>(str));
+}
+
+void
+ObjectProperties::on_scroll_x_change(const std::string& str)
+{
+ for(Objects::iterator i = objects.begin(); i != objects.end(); ++i)
+   (*i)->set_scroll_x(StringUtil::to<float>(str));
+}
+
+void
+ObjectProperties::on_scroll_y_change(const std::string& str)
+{
+ for(Objects::iterator i = objects.begin(); i != objects.end(); ++i)
+   (*i)->set_scroll_y(StringUtil::to<float>(str));
+}
+
+void
+ObjectProperties::on_release_rate_change(const std::string& str)
+{
+ for(Objects::iterator i = objects.begin(); i != objects.end(); ++i)
+   (*i)->set_release_rate(StringUtil::to<int>(str));
+}
 
 } // namespace Editor
 

Modified: trunk/pingus/src/editor/object_properties.hpp
===================================================================
--- trunk/pingus/src/editor/object_properties.hpp       2007-09-13 05:36:51 UTC 
(rev 3139)
+++ trunk/pingus/src/editor/object_properties.hpp       2007-09-13 11:55:55 UTC 
(rev 3140)
@@ -81,8 +81,10 @@
 
   void set_objects(const std::vector<LevelObj*>& objs);
 
+  // GUI Placement functions
   void hide_all();
   void advance();
+  void finalize();
   void place(GUI::RectComponent* comp);
   void place(GUI::RectComponent* comp1, GUI::RectComponent* comp2);
 
@@ -90,6 +92,12 @@
   void on_stretch_x_change(bool t);
   void on_stretch_y_change(bool t);
   void on_entrance_direction_change(const ComboItem& item);
+  void on_owner_change(const std::string& str);
+  void on_para_x_change(const std::string& str);
+  void on_para_y_change(const std::string& str);
+  void on_scroll_x_change(const std::string& str);
+  void on_scroll_y_change(const std::string& str);
+  void on_release_rate_change(const std::string& str);
 
 };
 

Modified: trunk/pingus/src/editor/object_selector.cpp
===================================================================
--- trunk/pingus/src/editor/object_selector.cpp 2007-09-13 05:36:51 UTC (rev 
3139)
+++ trunk/pingus/src/editor/object_selector.cpp 2007-09-13 11:55:55 UTC (rev 
3140)
@@ -48,7 +48,8 @@
   std::string   type;
   
   Groundpiece(const std::string& name, const std::string& type)
-    : Object(Resource::load_thumb_sprite(name)),
+    : Object(Resource::load_sprite(name),
+             Resource::load_thumb_sprite(name)),
       desc(name),
       type(type)
   {}      
@@ -65,7 +66,8 @@
 struct Entrance : public ObjectSelector::Object 
 {
   Entrance()
-    : Object(Resource::load_thumb_sprite("entrances/generic"))
+    : Object(Resource::load_sprite("entrances/generic"),
+             Resource::load_thumb_sprite("entrances/generic"))
   {}
 
   LevelObj* create(const Vector2i& pos, LevelImpl* impl) { 
@@ -84,7 +86,8 @@
   ResDescriptor desc;
   
   Exit(const std::string& name)
-    : Object(Resource::load_thumb_sprite(name)),
+    : Object(Resource::load_sprite(name), 
+             Resource::load_thumb_sprite(name)),
       desc(name)
   {}
 
@@ -102,7 +105,8 @@
   ResDescriptor desc;
   
   Hotspot(const std::string& name)
-    : Object(Resource::load_thumb_sprite(name)),
+    : Object(Resource::load_sprite(name),
+             Resource::load_thumb_sprite(name)),
       desc(name)
   {}
 
@@ -120,13 +124,18 @@
   ResDescriptor desc;
   
   SurfaceBackground(const std::string& name)
-    : Object(Resource::load_thumb_sprite(name)),
+    : Object(Resource::load_sprite(name),
+             Resource::load_thumb_sprite(name)),
       desc(name)
   {}
 
   LevelObj* create(const Vector2i& pos, LevelImpl* impl) { 
     LevelObj* obj = new LevelObj("surface-background", impl);
     obj->set_pos(pos);
+    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;
@@ -299,7 +308,7 @@
                              Color(155,155,155), 10000);
               }
 
-            gc.draw((*i)->sprite, 
+            gc.draw((*i)->thumbnail, 
                     Vector2i(x * 48 + std::max(0, (48 - 
(*i)->sprite.get_width())/2), 
                              y * 48 + std::max(0, (48 - 
(*i)->sprite.get_height())/2)));
             ++i;
@@ -441,10 +450,10 @@
   for(std::vector<std::string>::const_iterator i = lst.begin(); i != 
lst.end(); ++i)
     {
       std::cout << "Objects: " << *i << std::endl;
-      Sprite sprite = Resource::load_sprite(*i);
       //sprite.scale(48, 48);
       // need to reset the align to top/left
-      objects.push_back(new Object(sprite));
+      objects.push_back(new Object(Resource::load_sprite(*i),
+                                   Resource::load_thumb_sprite(*i)));
     }
 }
 
@@ -528,7 +537,8 @@
   for(std::vector<std::string>::const_iterator i = lst.begin(); i != 
lst.end(); ++i)
     {
       //sprite.scale(48, 48);
-      objects.push_back(new Hotspot(*i));
+      if (*i != "entrances/generic")
+        objects.push_back(new Hotspot(*i));
     }
 }
 

Modified: trunk/pingus/src/editor/object_selector.hpp
===================================================================
--- trunk/pingus/src/editor/object_selector.hpp 2007-09-13 05:36:51 UTC (rev 
3139)
+++ trunk/pingus/src/editor/object_selector.hpp 2007-09-13 11:55:55 UTC (rev 
3140)
@@ -40,9 +40,11 @@
 public:
   struct Object {
     Sprite  sprite;
+    Sprite  thumbnail;
     
-    Object(const Sprite& sprite_) 
-      : sprite(sprite_)
+    Object(const Sprite& sprite_, const Sprite& thumbnail_) 
+      : sprite(sprite_),
+        thumbnail(thumbnail_)
     {}      
 
     virtual ~Object() {}

Modified: trunk/pingus/src/math/rect.hpp
===================================================================
--- trunk/pingus/src/math/rect.hpp      2007-09-13 05:36:51 UTC (rev 3139)
+++ trunk/pingus/src/math/rect.hpp      2007-09-13 11:55:55 UTC (rev 3140)
@@ -64,6 +64,14 @@
   Rect(const Rect &rect)
   { left = rect.left; top = rect.top; right = rect.right; bottom = 
rect.bottom; }
 
+  // Moves each edge b away from the center, thus width = old_width + 2*b
+  Rect grow(int b) const {
+    return Rect(left   - b, 
+                top    - b,
+                right  + b,
+                bottom + b);
+  }
+
   //: Rect += Rect operator.
   Rect &operator+=(const Rect &r)
   { left += r.left; top += r.top; right += r.right; bottom += r.bottom; return 
*this; }





reply via email to

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