X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fpath.hpp;h=ff17c4e4fe6ab65dea12954dc14aa781f6ec0b0f;hb=555d1b7bebb45326d82d934e07463209837309b0;hp=3671ec0e0fbd4e56d41ddcf627a5f1bc2fee1ec5;hpb=1bfcf5a82ac306fa5380c4db2be5109b61fac58e;p=supertux.git diff --git a/src/object/path.hpp b/src/object/path.hpp index 3671ec0e0..ff17c4e4f 100644 --- a/src/object/path.hpp +++ b/src/object/path.hpp @@ -1,7 +1,9 @@ -// $Id:$ -// -// SuperTux +// $Id$ +// +// SuperTux Path // Copyright (C) 2005 Philipp +// Copyright (C) 2006 Christoph Sommer +// 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 @@ -12,7 +14,7 @@ // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // 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 @@ -20,51 +22,57 @@ #ifndef __PATH_HPP__ #define __PATH_HPP__ -#include -#include -#include - +#include #include "math/vector.hpp" -#include "game_object.hpp" #include "lisp/lisp.hpp" +#include "serializable.hpp" - -class Path; -typedef std::map PathRegistry; - - -typedef std::list PathPoints; -typedef std::list::const_iterator PathPointIter; - - -class Path : public GameObject +class Path : public Serializable { public: - Path(const lisp::Lisp& reader); + Path(); ~Path(); - virtual void update(float elapsed_time); - virtual void draw(DrawingContext& context); + void read(const lisp::Lisp& reader); + void write(lisp::Writer& writer); + + Vector get_base() const; + + /** + * Helper class that stores an individual node of a Path + */ + class Node + { + public: + Vector position; /**< the position of this node */ + float time; /**< time (in seconds) to get from this node to next node */ + }; + + std::vector nodes; - const Vector& GetPosition(); - const Vector& GetStart(); - const Vector& GetLastMovement(); + /** + * returns Node index nearest to reference_point or -1 if not applicable + */ + int get_nearest_node_no(Vector reference_point) const; - // WARNING: returns NULL if not found ! - static Path* GetByName(const std::string& name); + /** + * returns Node index farthest from reference_point or -1 if not applicable + */ + int get_farthest_node_no(Vector reference_point) const; private: - std::string name; - float pixels_per_second; - PathPoints points; - PathPointIter next_target; - Vector pos; - Vector velocity; - Vector last_movement; + friend class PathWalker; - void calc_next_velocity(); + enum WalkMode { + // moves from first to last path node and stops + ONE_SHOT, + // moves from first to last node then in reverse order back to first + PING_PONG, + // moves from last node back to the first node + CIRCULAR + }; - static PathRegistry registry; + WalkMode mode; }; #endif