Added SpritePtr
authorgrumbel <grumbel@837edb03-e0f3-0310-88ca-d4d4e8b29345>
Mon, 14 Dec 2009 05:59:31 +0000 (05:59 +0000)
committergrumbel <grumbel@837edb03-e0f3-0310-88ca-d4d4e8b29345>
Mon, 14 Dec 2009 05:59:31 +0000 (05:59 +0000)
git-svn-id: http://supertux.lethargik.org/svn/supertux/trunk/supertux@6215 837edb03-e0f3-0310-88ca-d4d4e8b29345

36 files changed:
src/badguy/ghosttree.hpp
src/badguy/root.hpp
src/object/block.cpp
src/object/block.hpp
src/object/bonus_block.cpp
src/object/bouncy_coin.hpp
src/object/broken_brick.cpp
src/object/broken_brick.hpp
src/object/bullet.hpp
src/object/falling_coin.hpp
src/object/floating_image.hpp
src/object/flower.hpp
src/object/lantern.hpp
src/object/light.hpp
src/object/moving_sprite.cpp
src/object/moving_sprite.hpp
src/object/player.hpp
src/object/rainsplash.hpp
src/object/smoke_cloud.hpp
src/object/spotlight.hpp
src/object/sprite_particle.hpp
src/sprite/sprite.cpp
src/sprite/sprite.hpp
src/sprite/sprite_manager.cpp
src/sprite/sprite_manager.hpp
src/sprite/sprite_ptr.hpp [new file with mode: 0644]
src/supertux/levelintro.hpp
src/trigger/door.hpp
src/trigger/switch.hpp
src/trigger/trigger_base.hpp
src/worldmap/level.hpp
src/worldmap/special_tile.hpp
src/worldmap/sprite_change.hpp
src/worldmap/teleporter.hpp
src/worldmap/tux.cpp
src/worldmap/tux.hpp

index a139554..d71cad8 100644 (file)
@@ -53,7 +53,7 @@ private:
   float willo_speed;
   int   willo_color;
 
-  std::auto_ptr<Sprite> glow_sprite;
+  SpritePtr glow_sprite;
   Timer colorchange_timer;
   Timer suck_timer;
   Timer root_timer;
index 2c05bbb..35df91a 100644 (file)
@@ -41,7 +41,7 @@ protected:
 
 private:
   MyState mystate;
-  std::auto_ptr<Sprite> base_sprite;
+  SpritePtr base_sprite;
   float offset_y;
   Timer hatch_timer;
 };
index 7209bd3..c18fef3 100644 (file)
@@ -30,7 +30,7 @@ static const float BOUNCY_BRICK_SPEED = 90;
 static const float EPSILON = .0001f;
 static const float BUMP_ROTATION_ANGLE = 10;
 
-Block::Block(std::auto_ptr<Sprite> newsprite) :
+Block::Block(SpritePtr newsprite) :
   sprite(newsprite), 
   bouncing(false), 
   breaking(false), 
index fecbd0f..767a414 100644 (file)
 
 #include <memory>
 
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/moving_object.hpp"
 #include "util/reader_fwd.hpp"
 
-class Sprite;
 class Player;
 
 class Block : public MovingObject
 {
 public:
-  Block(std::auto_ptr<Sprite> sprite);
+  Block(SpritePtr sprite);
   ~Block();
 
   virtual HitResponse collision(GameObject& other, const CollisionHit& hit);
@@ -43,7 +43,7 @@ protected:
   void start_break(GameObject* hitter);
   void break_me();
 
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   bool bouncing;
   bool breaking;
   float bounce_dir;
index f09cef2..d612c70 100644 (file)
@@ -214,15 +214,15 @@ Block::break_me()
 {
   Sector* sector = Sector::current();
   sector->add_object(
-    new BrokenBrick(std::auto_ptr<Sprite>(new Sprite(*sprite)), get_pos(), Vector(-100, -400)));
+    new BrokenBrick(sprite->clone(), get_pos(), Vector(-100, -400)));
   sector->add_object(
-    new BrokenBrick(std::auto_ptr<Sprite>(new Sprite(*sprite)), get_pos() + Vector(0, 16),
+    new BrokenBrick(sprite->clone(), get_pos() + Vector(0, 16),
                     Vector(-150, -300)));
   sector->add_object(
-    new BrokenBrick(std::auto_ptr<Sprite>(new Sprite(*sprite)), get_pos() + Vector(16, 0),
+    new BrokenBrick(sprite->clone(), get_pos() + Vector(16, 0),
                     Vector(100, -400)));
   sector->add_object(
-    new BrokenBrick(std::auto_ptr<Sprite>(new Sprite(*sprite)), get_pos() + Vector(16, 16),
+    new BrokenBrick(sprite->clone(), get_pos() + Vector(16, 16),
                     Vector(150, -300)));
   remove_me();
 }
index 1fd98eb..8709ac4 100644 (file)
@@ -20,6 +20,7 @@
 #include <memory>
 
 #include "math/vector.hpp"
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/game_object.hpp"
 #include "supertux/timer.hpp"
 #include "video/color.hpp"
@@ -35,7 +36,7 @@ public:
   virtual void draw(DrawingContext& context);
 
 private:
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   Vector position;
   Timer timer;
   float emerge_distance;
index bdf3db2..c907f14 100644 (file)
@@ -19,7 +19,7 @@
 #include "math/random_generator.hpp"
 #include "sprite/sprite.hpp"
 
-BrokenBrick::BrokenBrick(std::auto_ptr<Sprite> sprite,
+BrokenBrick::BrokenBrick(SpritePtr sprite,
                          const Vector& pos, const Vector& nmovement) :
   timer(),
   sprite(sprite), 
index 5543662..6a0bceb 100644 (file)
 #include <memory>
 
 #include "math/vector.hpp"
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/game_object.hpp"
 #include "supertux/timer.hpp"
 #include "video/color.hpp"
 
-class Sprite;
-
 class BrokenBrick : public GameObject
 {
 public:
-  BrokenBrick(std::auto_ptr<Sprite> sprite, const Vector& pos, const Vector& movement);
+  BrokenBrick(SpritePtr sprite, const Vector& pos, const Vector& movement);
   ~BrokenBrick();
 
   virtual void update(float elapsed_time);
@@ -37,7 +36,7 @@ public:
 
 private:
   Timer timer;
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   Vector position;
   Vector movement;
 
index ca90159..90977ea 100644 (file)
@@ -48,7 +48,7 @@ public:
 private:
   Physic physic;
   int life_count;
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   BonusType type;
 };
 
index 3b614c8..629aa36 100644 (file)
@@ -33,7 +33,7 @@ public:
 private:
   Physic physic;
   Vector pos;
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
 };
 
 #endif
index 40b7d4c..85a7697 100644 (file)
@@ -18,8 +18,8 @@
 #define HEADER_SUPERTUX_OBJECT_FLOATING_IMAGE_HPP
 
 #include "object/anchor_point.hpp"
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/game_object.hpp"
-#include <memory>
 
 class Sprite;
 
@@ -68,7 +68,7 @@ public:
   void draw(DrawingContext& context);
 
 private:
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   int layer;
   bool visible;
   AnchorPoint anchor;
index 1437d2e..1f3648a 100644 (file)
@@ -33,7 +33,7 @@ public:
 
 private:
   BonusType type;
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
 
 private:
   Flower(const Flower&);
index 0c47dc3..1177374 100644 (file)
@@ -49,7 +49,7 @@ public:
 
 private:
   Color lightcolor;
-  std::auto_ptr<Sprite> lightsprite;
+  SpritePtr lightsprite;
   void updateColor();
 
 private:
index 5b0b88c..2afbfbd 100644 (file)
 #include <memory>
 
 #include "math/vector.hpp"
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/game_object.hpp"
 #include "video/color.hpp"
 
-class Sprite;
-
 class Light : public GameObject
 {
 public:
@@ -37,7 +36,7 @@ public:
 protected:
   Vector position;
   Color color;
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
 };
 
 #endif
index a797599..4f06e07 100644 (file)
@@ -80,7 +80,7 @@ MovingSprite::MovingSprite(const MovingSprite& other) :
   sprite(),
   layer(other.layer)
 {
-  sprite.reset(new Sprite(*other.sprite));
+  sprite = other.sprite->clone();
 }
 /*
   MovingSprite&
index 95b5c05..a75e2ca 100644 (file)
@@ -21,8 +21,7 @@
 #include "supertux/moving_object.hpp"
 #include "util/reader_fwd.hpp"
 #include "video/drawing_request.hpp"
-
-class Sprite;
+#include "sprite/sprite_ptr.hpp"
 
 /**
  * Abstract base class for MovingObjects that are represented by a Sprite
@@ -54,7 +53,7 @@ public:
 
 protected:
   std::string sprite_name;
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   int layer; /**< Sprite's z-position. Refer to video/drawing_context.hpp for sensible values. */
 
   /** set new action for sprite and resize bounding box.  use with
index ebcf863..f30e454 100644 (file)
@@ -18,6 +18,7 @@
 #define HEADER_SUPERTUX_OBJECT_PLAYER_HPP
 
 #include "scripting/player.hpp"
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/direction.hpp"
 #include "supertux/moving_object.hpp"
 #include "supertux/physic.hpp"
@@ -30,7 +31,6 @@ class Portable;
 class Climbable;
 class Controller;
 class CodeController;
-class Sprite;
 class Surface;
 class Timer;
 
@@ -298,7 +298,7 @@ public:
 
   Portable* grabbed_object;
 
-  std::auto_ptr<Sprite> sprite; /**< The main sprite representing Tux */
+  SpritePtr sprite; /**< The main sprite representing Tux */
 
   SurfacePtr airarrow; /**< arrow indicating Tux' position when he's above the camera */
 
index ad4f85a..279618a 100644 (file)
@@ -34,7 +34,7 @@ protected:
   virtual void draw(DrawingContext& context);
 
 private:
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   Vector position;
   int frame;
 };
index dca316e..4b43672 100644 (file)
@@ -17,9 +17,8 @@
 #ifndef HEADER_SUPERTUX_OBJECT_SMOKE_CLOUD_HPP
 #define HEADER_SUPERTUX_OBJECT_SMOKE_CLOUD_HPP
 
-#include <memory>
-
 #include "math/vector.hpp"
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/game_object.hpp"
 #include "supertux/timer.hpp"
 #include "video/color.hpp"
@@ -36,7 +35,7 @@ public:
   virtual void draw(DrawingContext& context);
 
 private:
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   Timer timer;
   Vector position;
 
index 006a49d..5edf7d9 100644 (file)
 
 #include "util/reader_fwd.hpp"
 #include "math/vector.hpp"
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/game_object.hpp"
 #include "video/color.hpp"
 
-class Sprite;
-
 class Spotlight : public GameObject
 {
 public:
@@ -38,11 +37,11 @@ public:
 private:
   Vector  position;
   float   angle;
-  std::auto_ptr<Sprite> center;
-  std::auto_ptr<Sprite> base;
-  std::auto_ptr<Sprite> lights;
-  std::auto_ptr<Sprite> light;
-  std::auto_ptr<Sprite> lightcone;
+  SpritePtr center;
+  SpritePtr base;
+  SpritePtr lights;
+  SpritePtr light;
+  SpritePtr lightcone;
 
   Color   color;
 };
index 85e7f9f..6a32e05 100644 (file)
@@ -35,7 +35,7 @@ protected:
   virtual void draw(DrawingContext& context);
 
 private:
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   Vector position;
   Vector velocity;
   Vector acceleration;
index d4ac1c5..2e63074 100644 (file)
@@ -51,6 +51,12 @@ Sprite::~Sprite()
 {
 }
 
+SpritePtr
+Sprite::clone() const
+{
+  return SpritePtr(new Sprite(*this));
+}
+
 void
 Sprite::set_action(const std::string& name, int loops)
 {
index 6328f41..a82f05e 100644 (file)
@@ -18,6 +18,7 @@
 #define HEADER_SUPERTUX_SPRITE_SPRITE_HPP
 
 #include "sprite/sprite_data.hpp"
+#include "sprite/sprite_ptr.hpp"
 #include "video/drawing_context.hpp"
 
 class Surface;
@@ -28,9 +29,10 @@ class Sprite
 {
 public:
   Sprite(SpriteData& data);
-  Sprite(const Sprite& other);
   ~Sprite();
 
+  SpritePtr clone() const;
+
   /** Draw sprite, automatically calculates next frame */
   void draw(DrawingContext& context, const Vector& pos, int layer);
 
@@ -125,6 +127,7 @@ private:
   SpriteData::Action* action;
 
 private:
+  Sprite(const Sprite& other);
   Sprite& operator=(const Sprite&);
 };
 
index 8422fda..fd100b1 100644 (file)
@@ -33,7 +33,7 @@ SpriteManager::~SpriteManager()
   }
 }
 
-std::auto_ptr<Sprite>
+SpritePtr
 SpriteManager::create(const std::string& name)
 {
   Sprites::iterator i = sprites.find(name);
@@ -50,7 +50,7 @@ SpriteManager::create(const std::string& name)
     data = i->second;
   }
 
-  return std::auto_ptr<Sprite>(new Sprite(*data));
+  return SpritePtr(new Sprite(*data));
 }
 
 SpriteData*
index 520da88..d769f1d 100644 (file)
@@ -21,8 +21,9 @@
 #include <memory>
 #include <string>
 
+#include "sprite/sprite_ptr.hpp"
+
 class SpriteData;
-class Sprite;
 
 class SpriteManager
 {
@@ -35,7 +36,7 @@ public:
   ~SpriteManager();
 
   /** loads a sprite. */
-  std::auto_ptr<Sprite> create(const std::string& filename);
+  SpritePtr create(const std::string& filename);
 
 private:
   SpriteData* load(const std::string& filename);
diff --git a/src/sprite/sprite_ptr.hpp b/src/sprite/sprite_ptr.hpp
new file mode 100644 (file)
index 0000000..1f6a12a
--- /dev/null
@@ -0,0 +1,28 @@
+//  SuperTux
+//  Copyright (C) 2009 Ingo Ruhnke <grumbel@gmx.de>
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+#ifndef HEADER_SUPERTUX_SPRITE_SPRITE_PTR_HPP
+#define HEADER_SUPERTUX_SPRITE_SPRITE_PTR_HPP
+
+#include <boost/shared_ptr.hpp>
+
+class Sprite;
+
+typedef boost::shared_ptr<Sprite> SpritePtr;
+
+#endif
+
+/* EOF */
index e39decf..336c33e 100644 (file)
@@ -47,7 +47,7 @@ public:
 private:
   const Level* level; /**< The level of which this is the intro screen */
   const Statistics* best_level_statistics; /**< Best level statistics of the level of which is the intro screen */
-  std::auto_ptr<Sprite> player_sprite; /**< Sprite representing the player */
+  SpritePtr player_sprite; /**< Sprite representing the player */
   float player_sprite_py; /**< Position (y axis) for the player sprite */
   float player_sprite_vy; /**< Velocity (y axis) for the player sprite */
   Timer player_sprite_jump_timer; /**< When timer fires, the player sprite will "jump" */
index 0e93611..41e1a14 100644 (file)
@@ -46,7 +46,7 @@ private:
   DoorState state; /**< current state of the door */
   std::string target_sector; /**< target sector to teleport to */
   std::string target_spawnpoint; /**< target spawnpoint to teleport to */
-  std::auto_ptr<Sprite> sprite; /**< "door" sprite to render */
+  SpritePtr sprite; /**< "door" sprite to render */
   Timer stay_open_timer; /**< time until door will close again */
 };
 
index 3bfd59a..8141a8f 100644 (file)
@@ -44,7 +44,7 @@ private:
 
 private:
   std::string sprite_name;
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   std::string script;
   SwitchState state;
 };
index bbb1c16..5d07527 100644 (file)
 #include <list>
 #include <memory>
 
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/moving_object.hpp"
 #include "supertux/object_remove_listener.hpp"
 
 class Player;
-class Sprite;
 
 /** This class is the base class for all objects you can interact with in some
  * way. There are several interaction types defined like touch and activate
@@ -57,7 +57,7 @@ public:
   virtual void object_removed(GameObject* object);
 
 private:
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   bool lasthit;
   bool hit;
 
index 9120bad..54b62e6 100644 (file)
@@ -45,7 +45,7 @@ public:
   bool solved;
   bool auto_play; /**< true if Tux should automatically enter this level if it's unfinished */
 
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
 
   /** Statistics for level tiles */
   Statistics statistics;
index 6fd13de..3a6fa63 100644 (file)
 #include <memory>
 #include <string>
 
-#include "util/reader_fwd.hpp"
 #include "math/vector.hpp"
+#include "sprite/sprite_ptr.hpp"
 #include "supertux/game_object.hpp"
-
-class Sprite;
+#include "util/reader_fwd.hpp"
 
 namespace worldmap {
 
@@ -42,7 +41,7 @@ public:
   Vector pos;
 
   /** Sprite to render instead of guessing what image to draw */
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
 
   /** Message to show in the Map */
   std::string map_message;
index 0f7843e..9493880 100644 (file)
@@ -56,7 +56,7 @@ public:
   bool change_on_touch;
 
   /** sprite to change tux image to */
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
 
   /** stay action can be used for objects like boats or cars, if it is
       != "" then this sprite will be displayed when tux left the tile
index 210e546..f0fa176 100644 (file)
@@ -41,7 +41,7 @@ public:
   Vector pos;
 
   /** Sprite to render, or 0 for no sprite */
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
 
   /** Worldmap filename (relative to data root) to teleport to. Leave empty to use current word */
   std::string worldmap;
index dfbe6ef..7ecfb12 100644 (file)
@@ -185,7 +185,7 @@ Tux::tryContinueWalking(float elapsed_time)
 
   SpriteChange* sprite_change = worldmap->at_sprite_change(tile_pos);
   if(sprite_change != NULL) {
-    sprite.reset(new Sprite( *(sprite_change->sprite.get()) ));
+    sprite = sprite_change->sprite->clone();
     sprite_change->clear_stay_action();
   }
 
@@ -272,7 +272,7 @@ Tux::tryContinueWalking(float elapsed_time)
 
   SpriteChange* next_sprite = worldmap->at_sprite_change(next_tile);
   if(next_sprite != NULL && next_sprite->change_on_touch) {
-    sprite.reset(new Sprite( *(next_sprite->sprite.get()) ));
+    sprite = next_sprite->sprite->clone();
     next_sprite->clear_stay_action();
   }
   SpriteChange* last_sprite = worldmap->at_sprite_change(tile_pos);
@@ -313,7 +313,7 @@ Tux::setup()
   // check if we already touch a SpriteChange object
   SpriteChange* sprite_change = worldmap->at_sprite_change(tile_pos);
   if(sprite_change != NULL) {
-    sprite.reset(new Sprite( *(sprite_change->sprite.get()) ));
+    sprite = sprite_change->sprite->clone();
     sprite_change->clear_stay_action();
   }
 }
index a4a4852..1eb54c6 100644 (file)
@@ -32,7 +32,7 @@ public:
   Direction back_direction;
 private:
   WorldMap* worldmap;
-  std::auto_ptr<Sprite> sprite;
+  SpritePtr sprite;
   Controller* controller;
 
   Direction input_direction;