Added support for scrolling backgrounds
authorIngo Ruhnke <grumbel@gmx.de>
Sat, 28 Nov 2009 23:11:36 +0000 (23:11 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Sat, 28 Nov 2009 23:11:36 +0000 (23:11 +0000)
SVN-Revision: 6154

data/levels/world1/13 - Above the Arctic Skies.stl
src/object/background.cpp
src/object/background.hpp

index 12bc1c5..3572fbb 100644 (file)
 
     (background
       (speed 0.75)
+      (scroll-speed-x -25)
       (image "images/background/arcticskies3.png")
     )
 
     (background
       (speed 1.5)
       (layer 100)
+      (scroll-speed-x -50)
       (image "images/background/arcticskies35.png")
     )
 
index b403f3f..aaf28a1 100644 (file)
@@ -27,6 +27,8 @@ Background::Background() :
   pos(),
   speed(),
   speed_y(),
+  scroll_speed(),
+  scroll_offset(),
   image_top(),
   image(),
   image_bottom()
@@ -41,6 +43,8 @@ Background::Background(const Reader& reader) :
   pos(),
   speed(),
   speed_y(),
+  scroll_speed(),
+  scroll_offset(),
   image_top(),
   image(),
   image_bottom()
@@ -55,6 +59,12 @@ Background::Background(const Reader& reader) :
   speed = 1.0;
   speed_y = 1.0;
 
+  reader.get("scroll-offset-x", scroll_offset.x);
+  reader.get("scroll-offset-y", scroll_offset.y);
+
+  reader.get("scroll-speed-x", scroll_speed.x);
+  reader.get("scroll-speed-y", scroll_speed.y);
+
   reader.get("layer", layer);
   if(!reader.get("image", imagefile) || !reader.get("speed", speed))
     throw std::runtime_error("Must specify image and speed for background");
@@ -78,8 +88,9 @@ Background::~Background()
 }
 
 void
-Background::update(float)
+Background::update(float delta)
 {
+  scroll_offset += scroll_speed * delta;
 }
 
 void
@@ -99,8 +110,8 @@ Background::draw(DrawingContext& context)
 
   int w = (int) image->get_width();
   int h = (int) image->get_height();
-  int sx = int(pos.x-context.get_translation().x * speed) % w - w;
-  int sy = int(pos.y-context.get_translation().y * speed_y) % h - h;
+  int sx = int(scroll_offset.x + pos.x-context.get_translation().x * speed) % w - w;
+  int sy = int(scroll_offset.y + pos.y-context.get_translation().y * speed_y) % h - h;
   int center_image_py = int(pos.y-context.get_translation().y * speed_y);
   int bottom_image_py = int(pos.y-context.get_translation().y * speed_y) + h;
   context.push_transform();
index ca97358..426ab52 100644 (file)
@@ -49,6 +49,8 @@ private:
   Vector pos; /**< coordinates of upper-left corner of image */
   float speed; /**< scroll-speed in horizontal direction */
   float speed_y; /**< scroll-speed in vertical direction */
+  Vector scroll_speed;
+  Vector scroll_offset;
   std::auto_ptr<Surface> image_top; /**< image to draw above pos */
   std::auto_ptr<Surface> image; /**< image to draw, anchored at pos */
   std::auto_ptr<Surface> image_bottom; /**< image to draw below pos+screenheight */