]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/vehicle.h
Add a common base class for tangible objects
[r2c2.git] / source / libr2c2 / vehicle.h
index 8990a5b538d68c0f144b2404db636229ec6f9f00..54054bb50e325cb1babf87408fbbf637999a3ca4 100644 (file)
@@ -2,6 +2,7 @@
 #define LIBR2C2_VEHICLE_H_
 
 #include "geometry.h"
+#include "object.h"
 #include "vehicletype.h"
 
 namespace R2C2 {
@@ -17,7 +18,7 @@ public:
 };
 
 
-class Vehicle
+class Vehicle: public Object
 {
 public:
        enum PlaceMode
@@ -68,13 +69,10 @@ private:
                TrackPoint get_point() const;
        };
 
-       Layout &layout;
        const VehicleType &type;
        Vehicle *next;
        Vehicle *prev;
        TrackPosition track_pos;
-       Vector position;
-       float direction;
        std::vector<Axle> axles;
        std::vector<Bogie> bogies;
        std::vector<Rod> rods;
@@ -85,7 +83,8 @@ public:
        Vehicle(Layout &, const VehicleType &);
        ~Vehicle();
 
-       const VehicleType &get_type() const { return type; }
+       virtual Vehicle *clone(Layout * = 0) const;
+       virtual const VehicleType &get_type() const { return type; }
 
        void attach_back(Vehicle &);
        void attach_front(Vehicle &);
@@ -94,14 +93,15 @@ public:
        Vehicle *get_next() const { return next; }
        Vehicle *get_previous() const { return prev; }
 
+       // TODO implement these - should call place() with suitable parameters
+       virtual void set_position(const Vector &) { }
+       virtual void set_rotation(float) { }
        void place(Track &, unsigned, float, PlaceMode = CENTER);
        void unplace();
        void advance(float);
        Track *get_track() const { return track_pos.track; }
        unsigned get_entry() const { return track_pos.ep; }
        float get_offset() const { return track_pos.offs; }
-       const Vector &get_position() const { return position; }
-       float get_direction() const { return direction; }
        const Axle &get_fixed_axle(unsigned) const;
        const Bogie &get_bogie(unsigned) const;
        const Axle &get_bogie_axle(unsigned, unsigned) const;
@@ -119,6 +119,9 @@ private:
        void adjust_for_distance(TrackPosition &, TrackPosition &, float, float = 0.5) const;
        TrackPoint get_point(const Vector &, const Vector &, float = 0.5) const;
        TrackPoint get_point(const TrackPosition &, float, float = 0.5) const;
+
+public:
+       virtual bool collide_ray(const Vector &, const Vector &) const { return false; }
 };
 
 } // namespace R2C2