]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/signal.h
Add a common base class for tangible objects
[r2c2.git] / source / libr2c2 / signal.h
index dcaa17a3cd997dba36a5cdedc03badae601cc8df..92e197744ba975f257198cb4984d559963b08e7e 100644 (file)
@@ -4,16 +4,17 @@
 #include <msp/datafile/objectloader.h>
 #include <msp/time/timedelta.h>
 #include "geometry.h"
+#include "object.h"
+#include "signaltype.h"
+#include "track.h"
 
 namespace R2C2 {
 
 class Block;
 class Layout;
-class SignalType;
-class Track;
 class Train;
 
-class Signal
+class Signal: public Object
 {
 public:
        class Loader: public Msp::DataFile::ObjectLoader<Signal>
@@ -23,16 +24,13 @@ public:
 
        private:
                void address(unsigned);
-               void direction(float);
                void position(float, float, float);
+               void rotation(float);
        };
 
 private:
-       Layout &layout;
        const SignalType &type;
        unsigned address;
-       Vector position;
-       float direction;
        Track *track;
        Block *block;
        unsigned entry;
@@ -45,16 +43,18 @@ public:
        Signal(Layout &, const SignalType &);
        ~Signal();
 
-       const SignalType &get_type() const { return type; }
+       virtual Signal *clone(Layout * = 0) const;
+       virtual const SignalType &get_type() const { return type; }
 
        void set_address(unsigned);
-       void set_position(const Vector &);
-       void set_direction(float);
+       virtual void set_position(const Vector &);
+       virtual void set_rotation(float);
 private:
        void normalize_location();
 public:
-       const Vector &get_position() const { return position; }
-       float get_direction() const { return direction; }
+       virtual Track *get_parent() const { return track; }
+
+       virtual bool collide_ray(const Vector &, const Vector &) const;
 
        void tick(const Msp::Time::TimeDelta &);