mainly changed #includes to work with the new SuperTux library
[supertux.git] / src / camera.h
1 //  $Id$
2 //
3 //  SuperTux -  A Jump'n Run
4 //  Copyright (C) 2004 Matthias Braun <matze@braunis.de
5 //
6 //  This program is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU General Public License
8 //  as published by the Free Software Foundation; either version 2
9 //  of the License, or (at your option) any later version.
10 //
11 //  This program is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 //  GNU General Public License for more details.
15 //
16 //  You should have received a copy of the GNU General Public License
17 //  along with this program; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19
20 #ifndef SUPERTUX_CAMERA_H
21 #define SUPERTUX_CAMERA_H
22
23 #include <vector>
24 #include <cassert>
25
26 #include "app/defines.h"
27 #include "math/vector.h"
28 #include "special/game_object.h"
29 #include "serializable.h"
30
31 class LispReader;
32 class Sector;
33
34 class Camera : public GameObject, public Serializable
35 {
36 public:
37   Camera(Sector* sector);
38   virtual ~Camera();
39
40   /// parse camera mode from lisp file
41   void read(LispReader& reader);
42   /// write camera mode to a lisp file
43   virtual void write(LispWriter& writer);
44
45   /// reset camera postion
46   virtual void reset(const Vector& tuxpos);
47
48   /** @deprecated@ */
49   const Vector& get_translation() const;
50
51   virtual void action(float elapsed_time);
52
53   virtual void draw(DrawingContext& context)
54   {
55     UNUSED_ARG(context);
56   }
57
58   void set_scrolling(int scroll_x, int scroll_y)
59   {
60     translation.x = scroll_x;
61     translation.y = scroll_y;
62   }
63
64   enum CameraMode
65   {
66     NORMAL, AUTOSCROLL, MANUAL
67   };
68   CameraMode mode;
69
70 private:
71   void scroll_normal(float elapsed_time);
72   void scroll_autoscroll(float elapsed_time);
73   void keep_in_bounds();
74
75   enum LeftRightScrollChange
76   {
77     NONE, LEFT, RIGHT
78   };
79     
80   Vector translation;
81
82   Sector* sector;
83
84   // normal mode
85   bool do_backscrolling;
86   LeftRightScrollChange scrollchange;
87
88   // autoscroll mode
89   class ScrollPoint {
90   public:
91     Vector position;
92     float speed;
93   };
94   std::vector<ScrollPoint> scrollpoints;
95   size_t auto_idx;
96   float auto_t;
97   Vector current_dir;
98 };
99
100 #endif /*SUPERTUX_CAMERA_H*/
101