-renamed ViewPort to Camera
[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 #ifndef __VIEWPORT_H__
20 #define __VIEWPORT_H__
21
22 #include "vector.h"
23 #include "game_object.h"
24 #include "serializable.h"
25
26 class LispReader;
27 class Player;
28 class Level;
29
30 class Camera : public GameObject, public Serializable
31 {
32 public:
33   Camera(Player* player = 0, Level* level = 0);
34   virtual ~Camera();
35
36   /** transforms a coordinate in world space to screen space.
37    * Basically you have to apply this function to each coordinate that you want
38    * to display on screen.
39    */
40   Vector world2screen(const Vector& worldpos) const
41   {
42     return worldpos - translation;                   
43   }                                                  
44
45   /// parse camera mode from lisp file
46   void parse_camera(LispReader& reader);
47   /// write camera mode to a lisp file
48   virtual void write(LispWriter& writer);
49
50   /** returns the current translation (=scroll) vector of the viewport */
51   const Vector& get_translation() const
52   { return translation; }
53   /** set the curren translation vector of the viewport */
54   void set_translation(const Vector& translation);
55
56   virtual void action(float elapsed_time);
57
58   enum CameraMode
59   {
60     NORMAL, AUTOSCROLL, MANUAL
61   };
62
63 private:
64   void scroll_normal(float elapsed_time);
65   void scroll_autoscroll(float elapsed_time);
66
67   enum LeftRightScrollChange
68   {
69     NONE, LEFT, RIGHT
70   };
71     
72   Vector translation;
73
74   Player* player;
75   Level* level;
76   CameraMode mode;
77   LeftRightScrollChange scrollchange;
78 };
79
80 #endif
81