New Norwegian Translation
[supertux.git] / lib / special / game_object.h
index 8c6c3bf..88e1ccb 100644 (file)
@@ -1,7 +1,7 @@
 //  $Id$
 //
 //  SuperTux -  A Jump'n Run
-//  Copyright (C) 2004 Matthias Braun <matze@braunis.de
+//  Copyright (C) 2004 Matthias Braun <matze@braunis.de>
 //
 //  This program is free software; you can redistribute it and/or
 //  modify it under the terms of the GNU General Public License
 
 #include <string>
 
-class DrawingContext;
+namespace SuperTux
+  {
 
-/**
- * Base class for all game objects. This contains functions for:
- *  -querying the actual type of the object
- *  -a flag that indicates if the object wants to be removed. Objects with this
- *   flag will be removed at the end of each frame. This is alot safer than
- *   having some uncontrollable "delete this" in the code.
- *  -an action function that is called once per frame and allows the object to
- *   update it's state.
- * 
- * Most GameObjects will also implement the DrawableObject interface so that
- * they can actually be drawn on screen.
- */
-class GameObject // TODO rename this once the game has been converted
-{
-public:
-  GameObject();
-  virtual ~GameObject();
+  class DrawingContext;
 
-  /** This function is called once per frame and allows the object to update
-   * it's state. The elapsed_time is the time since the last frame and should be
-   * the base for all timed things.
+  /**
+   * Base class for all game objects. This contains functions for:
+   *  -querying the actual type of the object
+   *  -a flag that indicates if the object wants to be removed. Objects with this
+   *   flag will be removed at the end of each frame. This is alot safer than
+   *   having some uncontrollable "delete this" in the code.
+   *  -an action function that is called once per frame and allows the object to
+   *   update it's state.
+   * 
+   * Most GameObjects will also implement the DrawableObject interface so that
+   * they can actually be drawn on screen.
    */
-  virtual void action(float elapsed_time) = 0;
+  class GameObject
+    {
+    public:
+      GameObject();
+      virtual ~GameObject();
 
-  /** The GameObject should draw itself onto the provided DrawingContext if this
-   * function is called.
-   */
-  virtual void draw(DrawingContext& context) = 0;
+      /** This function is called once per frame and allows the object to update
+       * it's state. The elapsed_time is the time since the last frame in
+       * seconds and should be the base for all timed calculations (don't use
+       * SDL_GetTicks directly as this will fail in pause mode)
+       */
+      virtual void action(float elapsed_time) = 0;
 
-  /** returns true if the object is not scheduled to be removed yet */
-  bool is_valid() const
-  { return !wants_to_die; }
-  /** schedules this object to be removed at the end of the frame */
-  void remove_me()
-  { wants_to_die = true; }
-  
-private:
-  /** this flag indicates if the object should be removed at the end of the
-   * frame
-   */
-  bool wants_to_die;
-};
+      /** The GameObject should draw itself onto the provided DrawingContext if this
+       * function is called.
+       */
+      virtual void draw(DrawingContext& context) = 0;
+
+      /** returns true if the object is not scheduled to be removed yet */
+      bool is_valid() const
+        {
+          return !wants_to_die;
+        }
+      /** schedules this object to be removed at the end of the frame */
+      void remove_me()
+      {
+        wants_to_die = true;
+      }
+
+      // flags
+      enum {
+        /// the tile so you can stand on it
+        FLAG_SOLID       = 0x0001,
+        /// can be used to temporatily disable collision detection
+        FLAG_NO_COLLDET  = 0x0002
+      };                     
+
+      int get_flags() const
+      {
+        return flags;            
+      }
+
+    private:
+      /** this flag indicates if the object should be removed at the end of the
+       * frame
+       */
+      bool wants_to_die;
+
+    protected:
+      int flags;
+    };
 
+}
 #endif /*SUPERTUX_GAMEOBJECT_H*/