#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>
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;
+ BlockIter block;
Train *train;
sigc::connection train_conn;
bool check_allocated_blocks;
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: