pingus-cvs
[Top][All Lists]
Advanced

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

[Pingus-CVS] r3089 - in trunk/pingus: data/controller src/input


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3089 - in trunk/pingus: data/controller src/input
Date: Wed, 5 Sep 2007 21:08:21 +0200

Author: grumbel
Date: 2007-09-05 21:08:21 +0200 (Wed, 05 Sep 2007)
New Revision: 3089

Modified:
   trunk/pingus/data/controller/default.scm
   trunk/pingus/src/input/core_driver.cpp
Log:
- added ButtonScroller

Modified: trunk/pingus/data/controller/default.scm
===================================================================
--- trunk/pingus/data/controller/default.scm    2007-09-05 16:12:07 UTC (rev 
3088)
+++ trunk/pingus/data/controller/default.scm    2007-09-05 19:08:21 UTC (rev 
3089)
@@ -2,6 +2,13 @@
   (standard-pointer
     (sdl:mouse-pointer))
 
+  (standard-scroller
+   (core:button-scroller
+    (up    (sdl:keyboard-button (key "up")))
+    (down  (sdl:keyboard-button (key "down")))
+    (left  (sdl:keyboard-button (key "left")))
+    (right (sdl:keyboard-button (key "right")))))
+
   (primary-button
     (sdl:mouse-button (button 1)))
 

Modified: trunk/pingus/src/input/core_driver.cpp
===================================================================
--- trunk/pingus/src/input/core_driver.cpp      2007-09-05 16:12:07 UTC (rev 
3088)
+++ trunk/pingus/src/input/core_driver.cpp      2007-09-05 19:08:21 UTC (rev 
3089)
@@ -144,6 +144,60 @@
   }
 };
 
+class ButtonScroller : public Scroller
+{
+private:
+  Button* up;
+  Button* down;
+  Button* left;
+  Button* right;
+  float speed; 
+
+public:
+  ButtonScroller(Control* parent)
+    : Scroller(parent),
+      up(0), down(0), left(0), right(0),
+      speed(800.0f)
+  {
+  }
+
+  void setup(Button* up_, Button* down_, Button* left_, Button* right_)
+  {
+    up    = up_;
+    down  = down_;
+    left  = left_;
+    right = right_;
+  }
+
+  void update(Control* ) 
+  {
+  }
+
+  void update(float delta_t)
+  {
+    up->update(delta_t);
+    down->update(delta_t);
+    left->update(delta_t);
+    right->update(delta_t);
+
+    delta.x = delta.y = 0.0f;
+    
+    if (left->get_state() == BUTTON_PRESSED)
+      delta.x += speed * delta_t;
+
+    if (right->get_state() == BUTTON_PRESSED)
+      delta.x += -speed * delta_t;
+
+    if (up->get_state() == BUTTON_PRESSED)
+      delta.y += speed * delta_t;
+
+    if (down->get_state() == BUTTON_PRESSED)
+      delta.y += -speed * delta_t;       
+
+    notify_parent();
+  }
+};
+
 Button*
 CoreDriver::create_button(const FileReader& reader, Control* parent)
 {
@@ -198,7 +252,55 @@
         {
           return 0;
         }
-    } 
+    }
+  else if (reader.get_name() == "core:button-scroller")
+    {
+      ButtonScroller* scroller = new ButtonScroller(parent);
+
+      FileReader left_reader;
+      if (!reader.read_section("left", left_reader))
+        {
+          std::cout << "CoreDriver: core:button-scroller: Couldn't find 
'left'" << std::endl;
+          delete scroller;
+          return 0;
+        }
+
+      FileReader right_reader;
+      if (!reader.read_section("right", right_reader))
+        {
+          std::cout << "CoreDriver: core:button-scroller: Couldn't find 
'right'" << std::endl;
+          delete scroller;
+          return 0;
+        }
+
+      FileReader up_reader;
+      if (!reader.read_section("up", up_reader))
+        {
+          std::cout << "CoreDriver: core:button-scroller: Couldn't find 'up'" 
<< std::endl;
+          delete scroller;
+          return 0;
+        }
+
+      FileReader down_reader;
+      if (!reader.read_section("down", down_reader))
+        {
+          std::cout << "CoreDriver: core:button-scroller: Couldn't find 
'down'" << std::endl;
+          delete scroller;
+          return 0;
+        }
+      
+      // FIXME: Add more error checking
+      Button* up_button    = 
manager->create_button(up_reader.get_sections().front(),    scroller);
+      Button* down_button  = 
manager->create_button(down_reader.get_sections().front(),  scroller);
+      Button* left_button  = 
manager->create_button(left_reader.get_sections().front(),  scroller);
+      Button* right_button = 
manager->create_button(right_reader.get_sections().front(), scroller);
+
+      scroller->setup(up_button,
+                      down_button,
+                      left_button,
+                      right_button);
+      return scroller;
+    }
   else 
     {
       return 0;





reply via email to

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