X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fobject%2Fcamera.hpp;h=7158528afe0c186838e37e13f5f017e036ba3579;hb=2da0aee5449da7a482152d9544553d68d70a7bed;hp=d5ca2d0ecd78a032812e382364575b6fe7f0f0cb;hpb=fea3446f05e1e7673607b835c269d3e8d1929ab3;p=supertux.git diff --git a/src/object/camera.hpp b/src/object/camera.hpp index d5ca2d0ec..7158528af 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,43 +12,35 @@ // 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. -#ifndef SUPERTUX_CAMERA_H -#define SUPERTUX_CAMERA_H +// along with this program. If not, see . + +#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); - - /// reset camera postion + void parse(const Reader& reader); + + /// reset camera position void reset(const Vector& tuxpos); /** return camera position */ @@ -86,6 +76,11 @@ public: }; 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,14 +88,16 @@ private: void keep_in_bounds(Vector& vector); void shake(); +private: /** - * The camera basically provides lookeahead on the left or right side + * 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; @@ -108,7 +105,9 @@ private: // normal mode LookaheadMode lookahead_mode; float changetime; - float lookahead_pos; + Vector lookahead_pos; + Vector peek_pos; + Vector cached_translation; // autoscroll mode std::auto_ptr autoscroll_path; @@ -127,6 +126,12 @@ private: float scrollspeed; CameraConfig *config; + +private: + Camera(const Camera&); + Camera& operator=(const Camera&); }; #endif /*SUPERTUX_CAMERA_H*/ + +/* EOF */