X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fpath.hpp;h=5ac0fe032b6fef8f23385eca83c4e908b9e131dc;hb=1c148c20eede15d02659203c417d01a9877103de;hp=452e942fa24e424f6576e8d955bce2ceac54d761;hpb=38515dd2d87530d28a45151e6463d1ac91a6519c;p=supertux.git diff --git a/src/object/path.hpp b/src/object/path.hpp index 452e942fa..5ac0fe032 100644 --- a/src/object/path.hpp +++ b/src/object/path.hpp @@ -3,6 +3,7 @@ // 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 @@ -21,58 +22,48 @@ #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" - -/** - * Helper class that stores an individual node of a Path - */ -class PathNode -{ -public: - Vector position; /**< position (in pixels) of this node */ - float time; /**< time (in seconds) to get to this node */ -}; - - -/** - * Path an object can travel along. Made up of multiple nodes of type PathNode. - */ -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); - const Vector& GetPosition(); - const Vector& GetLastMovement(); + Vector get_base() const; - // WARNING: returns NULL if not found ! - static Path* GetByName(const std::string& name); + /** + * 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 */ + }; -private: - std::string name; /**< name this path can be referenced with, stored in PathRegistry */ - bool circular; /**< true: start with the first node once the last one has been reached. false: path will stop at last node */ - bool forward; /**< true: travel to nodes in the order they were defined. false: inverse order */ - std::vector pathNodes; /**< list of nodes that make up this path */ + std::vector nodes; - Vector position; /**< current position */ - Vector velocity; /**< current velocity */ - Vector last_movement; /**< amount of pixels we moved in the last call to update */ +private: + friend class PathWalker; - int destinationNode; /**< current destination Node */ - float timeToGo; /**< seconds until we arrive at the destination */ + 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 std::map registry; + WalkMode mode; }; #endif +