Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/orxonox/objects/worldentities/triggers/Trigger.h @ 2731

Last change on this file since 2731 was 2710, checked in by rgrieder, 16 years ago

Merged buildsystem3 containing buildsystem2 containing Adi's buildsystem branch back to the trunk.
Please update the media directory if you were not using buildsystem3 before.

File size: 3.6 KB
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
41namespace 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.