X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fcamera.hpp;h=061fe4d1b26a87313b1cdc8788f9042b75d229dc;hb=7e15c4f871809033278711a6e9327616da00c4c9;hp=16e320387961d43111c6097e6dfea70ec1ad7841;hpb=07ddaed2a657e4d2a3d038fed223fc5827159caf;p=supertux.git diff --git a/src/object/camera.hpp b/src/object/camera.hpp index 16e320387..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,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 @@ -50,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); @@ -80,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); @@ -93,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; @@ -103,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; @@ -121,7 +132,8 @@ private: Vector scroll_goal; float scroll_to_pos; float scrollspeed; + + CameraConfig *config; }; #endif /*SUPERTUX_CAMERA_H*/ -