X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fcamera.hpp;h=061fe4d1b26a87313b1cdc8788f9042b75d229dc;hb=7e15c4f871809033278711a6e9327616da00c4c9;hp=260a612caba009f29c0aea87125cd5e08b36c7b3;hpb=7b74666be6929322c6a603a6edd0131378f4c144;p=supertux.git diff --git a/src/object/camera.hpp b/src/object/camera.hpp index 260a612ca..061fe4d1b 100644 --- a/src/object/camera.hpp +++ b/src/object/camera.hpp @@ -16,7 +16,6 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - #ifndef SUPERTUX_CAMERA_H #define SUPERTUX_CAMERA_H @@ -38,6 +37,7 @@ class Lisp; class Sector; class Path; class PathWalker; +class CameraConfig; class Camera : public GameObject, public Serializable, public ScriptInterface { @@ -50,18 +50,15 @@ public: /// write camera mode to a lisp file virtual void write(lisp::Writer& writer); - /// reset camera postion - virtual void reset(const Vector& tuxpos); - virtual void reset_kd(const Vector& tuxpos); + /// reset camera position + void reset(const Vector& tuxpos); /** return camera position */ const Vector& get_translation() const; virtual void update(float elapsed_time); - virtual void draw(DrawingContext& ) - { - } + virtual void draw(DrawingContext& ); virtual void expose(HSQUIRRELVM vm, SQInteger table_idx); virtual void unexpose(HSQUIRRELVM vm, SQInteger table_idx); @@ -81,24 +78,32 @@ public: */ void scroll_to(const Vector& goal, float scrolltime); + void reload_config(); + enum CameraMode { NORMAL, AUTOSCROLL, SCROLLTO, MANUAL }; CameraMode mode; + /** + * get the coordinates of the point directly in the center of this camera + */ + Vector get_center() const; + private: void update_scroll_normal(float elapsed_time); - void update_scroll_normal_kd(float elapsed_time); - void update_scroll_normal_exp(float elapsed_time); void update_scroll_autoscroll(float elapsed_time); void update_scroll_to(float elapsed_time); void keep_in_bounds(Vector& vector); void shake(); - enum LeftRightScrollChange - { - NONE, LEFT, RIGHT + /** + * The camera basically provides lookahead on the left or right side + * or is undecided. + */ + enum LookaheadMode { + LOOKAHEAD_NONE, LOOKAHEAD_LEFT, LOOKAHEAD_RIGHT }; Vector translation; @@ -106,8 +111,11 @@ private: Sector* sector; // normal mode - bool do_backscrolling; - LeftRightScrollChange scrollchange; + LookaheadMode lookahead_mode; + float changetime; + Vector lookahead_pos; + Vector peek_pos; + Vector cached_translation; // autoscroll mode std::auto_ptr autoscroll_path; @@ -124,6 +132,8 @@ private: Vector scroll_goal; float scroll_to_pos; float scrollspeed; + + CameraConfig *config; }; #endif /*SUPERTUX_CAMERA_H*/