Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 3012 was 2911, checked in by landauf, 16 years ago

Merged r1-2096 of questsystem5 back to trunk

I hope there weren't more "hidden merge changes" in r2909 than the one in OverlayGroup (removeElement) (and related to this the adjustments in NotificationQueue).

The corresponding media commit seems not yet to be done, but it doesn't break the build.

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.