X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=inline;f=src%2Fobject%2Fcamera.hpp;h=53aecb73e47b6e4cb0ecdbccc49c995ee0d722cb;hb=7831e810062da90ebb745f8e1a4346bc1e80e3ed;hp=e02c306962183ed2d72e498ede5f55dbed2c9123;hpb=0176ce998a65364f4aaaeb5fdc5418798f6b83d9;p=supertux.git diff --git a/src/object/camera.hpp b/src/object/camera.hpp index e02c30696..53aecb73e 100644 --- a/src/object/camera.hpp +++ b/src/object/camera.hpp @@ -1,12 +1,10 @@ -// $Id$ -// // SuperTux // Copyright (C) 2006 Matthias Braun // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -14,54 +12,43 @@ // GNU General Public License for more details. // // 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. +// along with this program. If not, see . -#ifndef SUPERTUX_CAMERA_H -#define SUPERTUX_CAMERA_H +#ifndef HEADER_SUPERTUX_OBJECT_CAMERA_HPP +#define HEADER_SUPERTUX_OBJECT_CAMERA_HPP -#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; -} +#include "supertux/game_object.hpp" +#include "supertux/script_interface.hpp" +#include "supertux/timer.hpp" +#include "util/reader_fwd.hpp" class Sector; class Path; class PathWalker; +class CameraConfig; -class Camera : public GameObject, public Serializable, public ScriptInterface +class Camera : public GameObject, + public ScriptInterface { public: Camera(Sector* sector, std::string name = ""); virtual ~Camera(); /// parse camera mode from lisp file - void parse(const lisp::Lisp& reader); - /// write camera mode to a lisp file - virtual void write(lisp::Writer& writer); + void parse(const Reader& reader); - /// 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,36 +68,50 @@ 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_autoscroll(float elapsed_time); void update_scroll_to(float elapsed_time); void keep_in_bounds(Vector& vector); void shake(); - enum LeftRightScrollChange - { - NONE, LEFT, RIGHT +private: + /** + * The camera basically provides lookahead on the left or right side + * or is undecided. + */ + enum LookaheadMode { + LOOKAHEAD_NONE, LOOKAHEAD_LEFT, LOOKAHEAD_RIGHT }; +private: Vector translation; 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; - std::auto_ptr autoscroll_walker; + std::unique_ptr autoscroll_path; + std::unique_ptr autoscroll_walker; // shaking Timer shaketimer; @@ -123,6 +124,14 @@ private: Vector scroll_goal; float scroll_to_pos; float scrollspeed; + + CameraConfig *config; + +private: + Camera(const Camera&); + Camera& operator=(const Camera&); }; #endif /*SUPERTUX_CAMERA_H*/ + +/* EOF */