~flosoft/s25rttr/trunk

« back to all changes in this revision

Viewing changes to src/RoadSegment.h

  • Committer: FloSoft
  • Date: 2014-04-25 15:35:50 UTC
  • Revision ID: flosoft@siedler25.org-20140425153550-9muu4vodhlqu58m0
committing subversion revision 9357 by FloSoft
astyle

modified:
s25client/trunk/
s25client/trunk/contrib/lua/lin32/include/
s25client/trunk/contrib/lua/lin64/include/
s25client/trunk/contrib/lua/mac/include/
s25client/trunk/contrib/lua/win32/include/
s25client/trunk/contrib/lua/win64/include/
s25client/trunk/driver/audio/SDL/src/
s25client/trunk/driver/src/
s25client/trunk/driver/video/GLFW/src/
s25client/trunk/driver/video/SDL/src/
s25client/trunk/driver/video/WinAPI/src/
s25client/trunk/src/
s25client/trunk/win32/
s25client/trunk/win32/prebuild-mutex/src/

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// $Id: RoadSegment.h 8124 2012-09-01 19:15:43Z jh $
 
1
// $Id: RoadSegment.h 9357 2014-04-25 15:35:25Z FloSoft $
2
2
//
3
3
// Copyright (c) 2005 - 2011 Settlers Freaks (sf-team at siedler25.org)
4
4
//
30
30
 
31
31
class RoadSegment : public GameObject
32
32
{
33
 
public:
34
 
        enum RoadType
35
 
        {
36
 
                RT_NORMAL,      ///< Normale Stra�e bzw. Bergstra�e
37
 
                RT_DONKEY,      ///< Eselstra�e
38
 
                RT_BOAT         ///< Wasserstra�e
39
 
        };
40
 
 
41
 
public:
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);
44
 
 
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; }
79
 
 
80
 
        /// haben wir �berhaupt Carrier?
81
 
        inline bool isOccupied() const
82
 
        {
83
 
                return((carrier[0]) || (carrier[1]));
84
 
        }
85
 
 
86
 
        inline unsigned char GetDir(const bool dir, const unsigned int id) const
87
 
        {
88
 
                if(dir)
89
 
                        return (route[route.size() - id - 1] + 3) % 6;
90
 
                else
91
 
                        return route[id];
92
 
        }
93
 
 
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.
105
 
        void TryGetDonkey();
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);
112
 
 
113
 
protected:
114
 
        /// zerst�rt das Objekt.
115
 
        void Destroy_RoadSegment(void);
116
 
        /// serialisiert das Objekt.
117
 
        void Serialize_RoadSegment(SerializedGameData *sgd) const;
118
 
 
119
 
private:
120
 
        /// Stra�entyp
121
 
        RoadType rt;
122
 
        /// die 2 Roadnodes, die den Weg eingrenzen
123
 
        noRoadNode *f1, *f2;
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];
 
33
    public:
 
34
        enum RoadType
 
35
        {
 
36
            RT_NORMAL,  ///< Normale Stra�e bzw. Bergstra�e
 
37
            RT_DONKEY,  ///< Eselstra�e
 
38
            RT_BOAT     ///< Wasserstra�e
 
39
        };
 
40
 
 
41
    public:
 
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);
 
44
 
 
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; }
 
79
 
 
80
        /// haben wir �berhaupt Carrier?
 
81
        inline bool isOccupied() const
 
82
        {
 
83
            return((carrier[0]) || (carrier[1]));
 
84
        }
 
85
 
 
86
        inline unsigned char GetDir(const bool dir, const unsigned int id) const
 
87
        {
 
88
            if(dir)
 
89
                return (route[route.size() - id - 1] + 3) % 6;
 
90
            else
 
91
                return route[id];
 
92
        }
 
93
 
 
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.
 
105
        void TryGetDonkey();
 
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);
 
112
 
 
113
    protected:
 
114
        /// zerst�rt das Objekt.
 
115
        void Destroy_RoadSegment(void);
 
116
        /// serialisiert das Objekt.
 
117
        void Serialize_RoadSegment(SerializedGameData* sgd) const;
 
118
 
 
119
    private:
 
120
        /// Stra�entyp
 
121
        RoadType rt;
 
122
        /// die 2 Roadnodes, die den Weg eingrenzen
 
123
        noRoadNode* f1, *f2;
 
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];
128
128
};
129
129
 
130
130
#endif // !ROADSEGMENT_H_INCLUDED