X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fvehicletype.h;h=31b6992a134773c474cf1ab2868b054ccbcaca83;hb=2314cc760b726c5aa0e697c82f3a9051784e0706;hp=b97fb921519212f8b74e7d1681514ed3dacd4971;hpb=1ff06c5bc46a677fa389ef86c6b26664368f1653;p=r2c2.git diff --git a/source/libr2c2/vehicletype.h b/source/libr2c2/vehicletype.h index b97fb92..31b6992 100644 --- a/source/libr2c2/vehicletype.h +++ b/source/libr2c2/vehicletype.h @@ -1,34 +1,35 @@ -/* $Id$ - -This file is part of R²C² -Copyright © 2010 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #ifndef LIBR2C2_VEHICLETYPE_H_ #define LIBR2C2_VEHICLETYPE_H_ #include -#include "articlenumber.h" +#include "geometry.h" +#include "objecttype.h" namespace R2C2 { -class VehicleType +class VehicleType: public ObjectType { public: - class Loader: public Msp::DataFile::ObjectLoader + class Loader: public Msp::DataFile::DerivedObjectLoader { + private: + std::map rod_tags; + public: Loader(VehicleType &); private: + virtual void finish(); void axle(); void bogie(); void function(unsigned, const std::string &); void height(float); void length(float); + void rod(); void width(float); }; + struct Bogie; + struct Axle { class Loader: public Msp::DataFile::ObjectLoader @@ -40,6 +41,9 @@ public: void wheel_diameter(float); }; + unsigned index; + Bogie *bogie; + float local_position; float position; float wheel_dia; bool powered; @@ -52,49 +56,118 @@ public: { class Loader: public Msp::DataFile::ObjectLoader { + private: + VehicleType &parent; + public: - Loader(Bogie &); + Loader(VehicleType &, Bogie &); private: void axle(); void position(float); }; + unsigned index; float position; - std::vector axles; + unsigned first_axle; + std::vector axles; std::string object; bool rotate_object; Bogie(); }; + struct Rod + { + enum Anchor + { + BODY, + AXLE, + BOGIE_AXLE, + ROD + }; + + enum Limit + { + FIXED, + ROTATE, + SLIDE_X + }; + + class Loader: public Msp::DataFile::ObjectLoader + { + private: + const std::map &tags; + std::string tag; + + public: + Loader(Rod &, const std::map &); + const std::string &get_tag() const { return tag; } + private: + void connect(const std::string &, float, float, float, float); + void limit(Limit); + void pivot_body(); + void pivot_axle(unsigned); + void pivot_bogie_axle(unsigned, unsigned); + void pivot_rod(const std::string &); + void position(float, float, float); + void set_tag(const std::string &); + }; + + Anchor pivot; + unsigned pivot_index; + unsigned pivot_index2; + Vector pivot_point; + Limit limit; + int connect_index; + Vector connect_point; + Vector connect_offset; + std::string object; + bool mirror_object; + + Rod(); + }; + + typedef std::vector AxleArray; + typedef std::vector BogieArray; + typedef std::vector RodArray; + typedef std::map FunctionMap; + private: - ArticleNumber art_nr; - std::string name; bool locomotive; - std::map functions; + FunctionMap functions; + bool swap_direction; float length; float width; float height; - std::vector axles; - std::vector bogies; + AxleArray axles; + std::vector fixed_axles; + BogieArray bogies; + RodArray rods; std::string object; + bool rotate_object; public: VehicleType(const ArticleNumber &); - const ArticleNumber &get_article_number() const { return art_nr; } - const std::string &get_name() const { return name; } bool is_locomotive() const { return locomotive; } unsigned get_max_function() const; - const std::map &get_functions() const { return functions; } + const FunctionMap &get_functions() const { return functions; } + bool get_swap_direction() const { return swap_direction; } float get_length() const { return length; } float get_width() const { return width; } float get_height() const { return height; } - const std::vector &get_axles() const { return axles; } - const std::vector &get_bogies() const { return bogies; } + const AxleArray &get_axles() const { return axles; } + const Axle &get_axle(unsigned) const; + const Axle &get_fixed_axle(unsigned) const; + const BogieArray &get_bogies() const { return bogies; } + const Bogie &get_bogie(unsigned) const; + const Axle &get_bogie_axle(unsigned, unsigned) const; + const RodArray &get_rods() const { return rods; } + const Rod &get_rod(unsigned) const; float get_front_axle_offset() const; float get_back_axle_offset() const; const std::string &get_object() const { return object; } + bool get_rotate_object() const { return rotate_object; } }; } // namespace R2C2