X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fcamera.hpp;h=07a92d001c20340fb651165240ad0400e0a06c42;hb=113cdbf07f441329690714a53a436503ab1d4b35;hp=5ce5db4709fa317df789bb2c879d9273cb4924a2;hpb=5b7f9214cb929399f1a855ef5807018a9447d510;p=supertux.git diff --git a/src/object/camera.hpp b/src/object/camera.hpp index 5ce5db470..07a92d001 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 @@ -16,25 +16,30 @@ // 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 #include #include +#include #include "math/vector.hpp" #include "game_object.hpp" #include "video/drawing_context.hpp" #include "serializable.hpp" #include "timer.hpp" +#include "script_interface.hpp" namespace lisp { class Lisp; } class Sector; +class Path; +class PathWalker; -class Camera : public GameObject, public Serializable +class Camera : public GameObject, public Serializable, public ScriptInterface { public: Camera(Sector* sector); @@ -57,6 +62,9 @@ public: { } + 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); @@ -66,23 +74,30 @@ public: translation.y = scroll_y; } + /** + * scroll the upper left edge of the camera in scrolltime seconds + * to the position goal + */ + void scroll_to(const Vector& goal, float scrolltime); + enum CameraMode { - NORMAL, AUTOSCROLL, MANUAL + NORMAL, AUTOSCROLL, SCROLLTO, MANUAL }; CameraMode mode; private: - void scroll_normal(float elapsed_time); - void scroll_autoscroll(float elapsed_time); - void keep_in_bounds(); + void update_scroll_normal(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 }; - + Vector translation; Sector* sector; @@ -92,21 +107,20 @@ private: LeftRightScrollChange scrollchange; // autoscroll mode - class ScrollPoint { - public: - Vector position; - float speed; - }; - std::vector scrollpoints; - size_t auto_idx; - float auto_t; - Vector current_dir; + std::auto_ptr autoscroll_path; + std::auto_ptr autoscroll_walker; // shaking Timer shaketimer; float shakespeed; float shakedepth_x; float shakedepth_y; + + // scrollto mode + Vector scroll_from; + Vector scroll_goal; + float scroll_to_pos; + float scrollspeed; }; #endif /*SUPERTUX_CAMERA_H*/