]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/signal.h
Proper ID management for Signals
[r2c2.git] / source / libr2c2 / signal.h
index dcaa17a3cd997dba36a5cdedc03badae601cc8df..801a0b1d6fce596732ddf26309422f7aaab64e34 100644 (file)
@@ -3,17 +3,17 @@
 
 #include <msp/datafile/objectloader.h>
 #include <msp/time/timedelta.h>
+#include "blockiter.h"
 #include "geometry.h"
+#include "signaltype.h"
+#include "trackattachment.h"
 
 namespace R2C2 {
 
-class Block;
 class Layout;
-class SignalType;
-class Track;
 class Train;
 
-class Signal
+class Signal: public TrackAttachment
 {
 public:
        class Loader: public Msp::DataFile::ObjectLoader<Signal>
@@ -23,19 +23,15 @@ 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;
+       unsigned id;
+       BlockIter block;
        Train *train;
        sigc::connection train_conn;
        bool check_allocated_blocks;
@@ -45,17 +41,24 @@ 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);
+       unsigned get_address() const { return address; }
+       virtual void set_position(const Vector &);
+       virtual void set_rotation(const Angle &);
+       virtual void set_tilt(const Angle &) { }
 private:
-       void normalize_location();
+       void update_attachment();
 public:
-       const Vector &get_position() const { return position; }
-       float get_direction() const { return direction; }
 
+       virtual unsigned get_n_snap_nodes() const;
+       virtual Snap get_snap_node(unsigned) const;
+private:
+       virtual SnapType get_default_snap_type_to(const Object &) const;
+
+public:
        void tick(const Msp::Time::TimeDelta &);
 
 private: