source:
code/branches/presentation/src/orxonox/objects/worldentities/triggers/Trigger.h
@
2506
Line | |
---|---|
1 | /* |
2 | * ORXONOX - the hottest 3D action shooter ever to exist |
3 | * > www.orxonox.net < |
4 | * |
5 | * |
6 | * License notice: |
7 | * |
8 | * This program is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU General Public License |
10 | * as published by the Free Software Foundation; either version 2 |
11 | * of the License, or (at your option) any later version. |
12 | * |
13 | * This program is distributed in the hope that it will be useful, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * GNU General Public License for more details. |
17 | * |
18 | * You should have received a copy of the GNU General Public License |
19 | * along with this program; if not, write to the Free Software |
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
21 | * |
22 | * Author: |
23 | * Benjamin Knecht |
24 | * Co-authors: |
25 | * ... |
26 | * |
27 | */ |
28 | |
29 | #ifndef _Trigger_H__ |
30 | #define _Trigger_H__ |
31 | |
32 | #include <set> |
33 | #include <queue> |
34 | |
35 | #include "OrxonoxPrereqs.h" |
36 | |
37 | #include "objects/Tickable.h" |
38 | #include "objects/worldentities/StaticEntity.h" |
39 | #include "tools/BillboardSet.h" |
40 | |
41 | namespace orxonox |
42 | { |
43 | enum TriggerMode |
44 | { |
45 | TM_EventTriggerAND, |
46 | TM_EventTriggerOR, |
47 | TM_EventTriggerXOR, |
48 | }; |
49 | |
50 | class _OrxonoxExport Trigger : public StaticEntity, public Tickable |
51 | { |
52 | public: |
53 | Trigger(BaseObject* creator); |
54 | virtual ~Trigger(); |
55 | |
56 | virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); |
57 | virtual void tick(float dt); |
58 | |
59 | inline bool isActive() const |
60 | { return bActive_; } |
61 | |
62 | void addTrigger(Trigger* trigger); |
63 | const Trigger* getTrigger(unsigned int index) const; |
64 | |
65 | void setMode(const std::string& modeName); |
66 | inline void setMode(TriggerMode mode) |
67 | { this->mode_ = mode; } |
68 | inline TriggerMode getMode() const |
69 | { return mode_; } |
70 | |
71 | inline void setInvert(bool bInvert) |
72 | { this->bInvertMode_ = bInvert; } |
73 | inline bool getInvert() const |
74 | { return this->bInvertMode_; } |
75 | |
76 | inline void setSwitch(bool bSwitch) |
77 | { this->bSwitch_ = bSwitch; } |
78 | inline bool getSwitch() const |
79 | { return this->bSwitch_; } |
80 | |
81 | inline void setStayActive(bool bStayActive) |
82 | { this->bStayActive_ = bStayActive; } |
83 | inline bool getStayActive() const |
84 | { return this->bStayActive_; } |
85 | |
86 | inline void setActivations(int activations) |
87 | { this->remainingActivations_ = activations; } |
88 | inline int getActivations() const |
89 | { return this->remainingActivations_; } |
90 | |
91 | void setDelay(float delay); |
92 | inline float getDelay() const |
93 | { return this->delay_; } |
94 | |
95 | bool switchState(); |
96 | |
97 | static void debugFlares(bool bVisible); |
98 | virtual void changedVisibility(); |
99 | |
100 | protected: |
101 | inline bool isTriggered() { return this->isTriggered(this->mode_); } |
102 | virtual bool isTriggered(TriggerMode mode); |
103 | |
104 | private: |
105 | bool checkAnd(); |
106 | bool checkOr(); |
107 | bool checkXor(); |
108 | void setBillboardColour(const ColourValue& colour); |
109 | void storeState(); |
110 | std::string getModeString() const; |
111 | |
112 | bool bActive_; |
113 | bool bTriggered_; |
114 | bool bFirstTick_; |
115 | |
116 | TriggerMode mode_; |
117 | bool bInvertMode_; |
118 | bool bSwitch_; |
119 | bool bStayActive_; |
120 | float delay_; |
121 | int remainingActivations_; |
122 | |
123 | char latestState_; |
124 | float remainingTime_; |
125 | float timeSinceLastEvent_; |
126 | |
127 | // bool bUpdating_; |
128 | BillboardSet debugBillboard_; |
129 | |
130 | std::set<Trigger*> children_; |
131 | std::queue<std::pair<float, char> > stateChanges_; |
132 | }; |
133 | |
134 | } |
135 | |
136 | #endif /* _Trigger_H__ */ |
Note: See TracBrowser
for help on using the repository browser.