X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fcamera.hpp;h=061fe4d1b26a87313b1cdc8788f9042b75d229dc;hb=7e15c4f871809033278711a6e9327616da00c4c9;hp=ed7b5a7e2adf87816fc83c0d044a956b1318e3dd;hpb=f3e5e57c9996168a4889ae8e195be25f8b7e629b;p=supertux.git diff --git a/src/object/camera.hpp b/src/object/camera.hpp index ed7b5a7e2..061fe4d1b 100644 --- a/src/object/camera.hpp +++ b/src/object/camera.hpp @@ -1,7 +1,7 @@ // $Id$ // -// SuperTux - A Jump'n Run -// Copyright (C) 2004 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -37,11 +37,12 @@ class Lisp; class Sector; class Path; class PathWalker; +class CameraConfig; class Camera : public GameObject, public Serializable, public ScriptInterface { public: - Camera(Sector* sector); + Camera(Sector* sector, std::string name = ""); virtual ~Camera(); /// parse camera mode from lisp file @@ -49,20 +50,18 @@ public: /// write camera mode to a lisp file virtual void write(lisp::Writer& writer); - /// reset camera postion - virtual void reset(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, int table_idx); - virtual void unexpose(HSQUIRRELVM vm, int table_idx); + virtual void expose(HSQUIRRELVM vm, SQInteger table_idx); + virtual void unexpose(HSQUIRRELVM vm, SQInteger table_idx); // shake camera in a direction 1 time void shake(float speed, float x, float y); @@ -79,12 +78,19 @@ 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_autoscroll(float elapsed_time); @@ -92,9 +98,12 @@ private: 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; @@ -102,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; @@ -120,7 +132,8 @@ private: Vector scroll_goal; float scroll_to_pos; float scrollspeed; + + CameraConfig *config; }; #endif /*SUPERTUX_CAMERA_H*/ -