Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/physics/src/orxonox/objects/worldentities/triggers/Trigger.h @ 2506

Last change on this file since 2506 was 2300, checked in by rgrieder, 16 years ago

Still getting physics and its implications straight:

  • Removed PositionableEntity —> StaticEntity is now the way to go. They cannot be translated in any way during physics simulation. The trick will be to remove them and add them again to Bullet. This however is not yet implemented.
  • Forgot a few consts in WorldEntity
  • Fixed a bug with infinite masses
  • WE throws exception if you try to apply physics when the SceneNode is not in the root space of the Scene.
  • Moved velocity_ to MovableEntity
  • Outside world reference of WE/ME are now always the non-physical values. getPosition() will always return node_→getPosition() and when setting it, both RigidBody and SceneNode are translated. This accounts for velocity, orientation and position.
  • Property svn:eol-style set to native
  • Property svn:mergeinfo set to (toggle deleted branches)
    /code/branches/ceguilua/src/orxonox/objects/Trigger.h1802-1808
    /code/branches/core3/src/orxonox/objects/Trigger.h1572-1739
    /code/branches/gcc43/src/orxonox/objects/Trigger.h1580
    /code/branches/gui/src/orxonox/objects/Trigger.h1635-1723
    /code/branches/input/src/orxonox/objects/Trigger.h1629-1636
    /code/branches/objecthierarchy/src/orxonox/objects/worldentities/triggers/Trigger.h2100
    /code/branches/script_trigger/src/orxonox/objects/Trigger.h1295-1953,​1955
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.