X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fsignal.h;fp=source%2Flibr2c2%2Fsignal.h;h=92e197744ba975f257198cb4984d559963b08e7e;hb=2910db1364914c0ab98a0f80250cc39137821577;hp=dcaa17a3cd997dba36a5cdedc03badae601cc8df;hpb=3e60e64dc914badcd3ead3e6c4a5c3f08204cebe;p=r2c2.git diff --git a/source/libr2c2/signal.h b/source/libr2c2/signal.h index dcaa17a..92e1977 100644 --- a/source/libr2c2/signal.h +++ b/source/libr2c2/signal.h @@ -4,16 +4,17 @@ #include #include #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 @@ -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 &);