]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/signal.h
Proper ID management for Signals
[r2c2.git] / source / libr2c2 / signal.h
index 92e197744ba975f257198cb4984d559963b08e7e..801a0b1d6fce596732ddf26309422f7aaab64e34 100644 (file)
@@ -3,18 +3,17 @@
 
 #include <msp/datafile/objectloader.h>
 #include <msp/time/timedelta.h>
+#include "blockiter.h"
 #include "geometry.h"
-#include "object.h"
 #include "signaltype.h"
-#include "track.h"
+#include "trackattachment.h"
 
 namespace R2C2 {
 
-class Block;
 class Layout;
 class Train;
 
-class Signal: public Object
+class Signal: public TrackAttachment
 {
 public:
        class Loader: public Msp::DataFile::ObjectLoader<Signal>
@@ -31,9 +30,8 @@ public:
 private:
        const SignalType &type;
        unsigned address;
-       Track *track;
-       Block *block;
-       unsigned entry;
+       unsigned id;
+       BlockIter block;
        Train *train;
        sigc::connection train_conn;
        bool check_allocated_blocks;
@@ -47,15 +45,20 @@ public:
        virtual const SignalType &get_type() const { return type; }
 
        void set_address(unsigned);
+       unsigned get_address() const { return address; }
        virtual void set_position(const Vector &);
-       virtual void set_rotation(float);
+       virtual void set_rotation(const Angle &);
+       virtual void set_tilt(const Angle &) { }
 private:
-       void normalize_location();
+       void update_attachment();
 public:
-       virtual Track *get_parent() const { return track; }
 
-       virtual bool collide_ray(const Vector &, const Vector &) const;
+       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: