31
31
class RoadSegment : public GameObject
36
RT_NORMAL, ///< Normale Stra�e bzw. Bergstra�e
37
RT_DONKEY, ///< Eselstra�e
38
RT_BOAT ///< Wasserstra�e
42
RoadSegment(const RoadType rt, noRoadNode *const f1, noRoadNode *const f2, const std::vector<unsigned char>& route);
43
RoadSegment(SerializedGameData *sgd, const unsigned obj_id);
45
/// zerst�rt das Objekt.
46
void Destroy(void) { Destroy_RoadSegment(); }
47
/// serialisiert das Objekt.
48
void Serialize(SerializedGameData *sgd) const { Serialize_RoadSegment(sgd); }
49
/// liefert den GO-Type.
50
inline GO_Type GetGOT() const { return GOT_ROADSEGMENT; }
51
/// Gibt die ID (0 oder 1) eines RoadNodes dieser Stra�e zur�ck (die Flagge muss zu dieser Stra�e geh�ren, sonst kommt M�ll raus!!)
52
inline bool GetNodeID(const noRoadNode *rn) { return (rn == f2); }
53
/// Gibt Stra�en-Typ zur�ck
54
inline RoadType GetRoadType() const { return rt; }
55
/// Gibt die L�nge der Sta�e zur�ck
56
inline unsigned GetLength() const { return route.size(); }
57
/// gibt Flagge 1 zur�ck
58
inline noRoadNode *GetF1() const { return f1; }
59
/// setzt Flagge 1 auf o
60
inline void SetF1(noRoadNode *o) { f1 = o; }
61
/// gibt Flagge 2 zur�ck
62
inline noRoadNode *GetF2() const { return f2; }
63
/// setzt Flagge 2 auf o
64
inline void SetF2(noRoadNode *o) { f2 = o; }
65
/// gibt die Route nr zur�ck
66
inline unsigned char GetRoute(unsigned short nr) const { return route.at(nr); }
67
/// setzt die Route nr auf r
68
inline void SetRoute(unsigned short nr, unsigned char r) { route[nr] = r; }
69
/// gibt den Carrier nr zur�ck
70
inline nofCarrier *getCarrier(unsigned char nr) const { return carrier[nr]; }
71
/// setzt den Carrier nr auf c
72
inline void setCarrier(unsigned char nr, nofCarrier *c) { carrier[nr] = c; }
73
/// haben wir den Carrier "nr"?
74
inline bool hasCarrier(unsigned char nr) const { return (carrier[nr] != NULL); }
75
/// Braucht die Stra�e einen Esel? Nur wenn sie auch einen Tr�ger schon hat!
76
inline bool NeedDonkey() const { return (rt == RT_DONKEY && carrier[0] && !carrier[1]); }
77
/// Hat einen Esel als Arbeiter dazubekommen.
78
inline void GotDonkey(nofCarrier *donkey) { assert(!carrier[1]); carrier[1] = donkey; }
80
/// haben wir �berhaupt Carrier?
81
inline bool isOccupied() const
83
return((carrier[0]) || (carrier[1]));
86
inline unsigned char GetDir(const bool dir, const unsigned int id) const
89
return (route[route.size() - id - 1] + 3) % 6;
94
/// zerteilt die Stra�e in 2 Teile.
95
void SplitRoad(noFlag *splitflag);
96
/// �berpr�ft ob es an den Flaggen noch Waren zu tragen gibt f�r den Tr�ger.
97
bool AreWareJobs(const bool flag, unsigned int carrier_type, const bool take_ware_immediately) const;
98
/// Eine Ware sagt Bescheid, dass sie �ber dem Weg getragen werden will.
99
void AddWareJob(const noRoadNode *rn);
100
/// Eine Ware will nicht mehr bef�rdert werden.
101
void WareJobRemoved(const noFigure *const exception);
102
/// Baut die Stra�e zu einer Eselstra�e aus.
103
void UpgradeDonkeyRoad();
104
/// Soll versuchen einen Esel zu bekommen.
106
/// Ein Tr�ger muss k�ndigen, aus welchen Gr�nden auch immer.
107
void CarrierAbrogated(nofCarrier *carrier);
108
/// given a flag returns the other end location
109
noFlag* GetOtherFlag(const noFlag *flag);
110
/// given a flag returns last direction of the route towards the other flag
111
unsigned char GetOtherFlagDir(const noFlag *flag);
114
/// zerst�rt das Objekt.
115
void Destroy_RoadSegment(void);
116
/// serialisiert das Objekt.
117
void Serialize_RoadSegment(SerializedGameData *sgd) const;
122
/// die 2 Roadnodes, die den Weg eingrenzen
124
/// Beschreibung des Weges, ist length gro� und liegt als Beschreibung der einzelnen Richtungen vor (von f1 zu f2)
125
std::vector<unsigned char> route;
126
/// Tr�ger (und ggf. Esel), der auf diesem Weg arbeitet
127
nofCarrier *carrier[2];
36
RT_NORMAL, ///< Normale Stra�e bzw. Bergstra�e
37
RT_DONKEY, ///< Eselstra�e
38
RT_BOAT ///< Wasserstra�e
42
RoadSegment(const RoadType rt, noRoadNode* const f1, noRoadNode* const f2, const std::vector<unsigned char>& route);
43
RoadSegment(SerializedGameData* sgd, const unsigned obj_id);
45
/// zerst�rt das Objekt.
46
void Destroy(void) { Destroy_RoadSegment(); }
47
/// serialisiert das Objekt.
48
void Serialize(SerializedGameData* sgd) const { Serialize_RoadSegment(sgd); }
49
/// liefert den GO-Type.
50
inline GO_Type GetGOT() const { return GOT_ROADSEGMENT; }
51
/// Gibt die ID (0 oder 1) eines RoadNodes dieser Stra�e zur�ck (die Flagge muss zu dieser Stra�e geh�ren, sonst kommt M�ll raus!!)
52
inline bool GetNodeID(const noRoadNode* rn) { return (rn == f2); }
53
/// Gibt Stra�en-Typ zur�ck
54
inline RoadType GetRoadType() const { return rt; }
55
/// Gibt die L�nge der Sta�e zur�ck
56
inline unsigned GetLength() const { return route.size(); }
57
/// gibt Flagge 1 zur�ck
58
inline noRoadNode* GetF1() const { return f1; }
59
/// setzt Flagge 1 auf o
60
inline void SetF1(noRoadNode* o) { f1 = o; }
61
/// gibt Flagge 2 zur�ck
62
inline noRoadNode* GetF2() const { return f2; }
63
/// setzt Flagge 2 auf o
64
inline void SetF2(noRoadNode* o) { f2 = o; }
65
/// gibt die Route nr zur�ck
66
inline unsigned char GetRoute(unsigned short nr) const { return route.at(nr); }
67
/// setzt die Route nr auf r
68
inline void SetRoute(unsigned short nr, unsigned char r) { route[nr] = r; }
69
/// gibt den Carrier nr zur�ck
70
inline nofCarrier* getCarrier(unsigned char nr) const { return carrier[nr]; }
71
/// setzt den Carrier nr auf c
72
inline void setCarrier(unsigned char nr, nofCarrier* c) { carrier[nr] = c; }
73
/// haben wir den Carrier "nr"?
74
inline bool hasCarrier(unsigned char nr) const { return (carrier[nr] != NULL); }
75
/// Braucht die Stra�e einen Esel? Nur wenn sie auch einen Tr�ger schon hat!
76
inline bool NeedDonkey() const { return (rt == RT_DONKEY && carrier[0] && !carrier[1]); }
77
/// Hat einen Esel als Arbeiter dazubekommen.
78
inline void GotDonkey(nofCarrier* donkey) { assert(!carrier[1]); carrier[1] = donkey; }
80
/// haben wir �berhaupt Carrier?
81
inline bool isOccupied() const
83
return((carrier[0]) || (carrier[1]));
86
inline unsigned char GetDir(const bool dir, const unsigned int id) const
89
return (route[route.size() - id - 1] + 3) % 6;
94
/// zerteilt die Stra�e in 2 Teile.
95
void SplitRoad(noFlag* splitflag);
96
/// �berpr�ft ob es an den Flaggen noch Waren zu tragen gibt f�r den Tr�ger.
97
bool AreWareJobs(const bool flag, unsigned int carrier_type, const bool take_ware_immediately) const;
98
/// Eine Ware sagt Bescheid, dass sie �ber dem Weg getragen werden will.
99
void AddWareJob(const noRoadNode* rn);
100
/// Eine Ware will nicht mehr bef�rdert werden.
101
void WareJobRemoved(const noFigure* const exception);
102
/// Baut die Stra�e zu einer Eselstra�e aus.
103
void UpgradeDonkeyRoad();
104
/// Soll versuchen einen Esel zu bekommen.
106
/// Ein Tr�ger muss k�ndigen, aus welchen Gr�nden auch immer.
107
void CarrierAbrogated(nofCarrier* carrier);
108
/// given a flag returns the other end location
109
noFlag* GetOtherFlag(const noFlag* flag);
110
/// given a flag returns last direction of the route towards the other flag
111
unsigned char GetOtherFlagDir(const noFlag* flag);
114
/// zerst�rt das Objekt.
115
void Destroy_RoadSegment(void);
116
/// serialisiert das Objekt.
117
void Serialize_RoadSegment(SerializedGameData* sgd) const;
122
/// die 2 Roadnodes, die den Weg eingrenzen
124
/// Beschreibung des Weges, ist length gro� und liegt als Beschreibung der einzelnen Richtungen vor (von f1 zu f2)
125
std::vector<unsigned char> route;
126
/// Tr�ger (und ggf. Esel), der auf diesem Weg arbeitet
127
nofCarrier* carrier[2];
130
130
#endif // !ROADSEGMENT_H_INCLUDED