Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ai2/src/modules/objects/SpaceBoundaries.h @ 8800

Last change on this file since 8800 was 8706, checked in by dafrick, 13 years ago

Merging presentation branch back into trunk.
There are many new features and also a lot of other changes and bugfixes, if you want to know, digg through the svn log.
Not everything is yet working as it should, but it should be fairly stable. If you habe any bug reports, just send me an email.

  • Property svn:eol-style set to native
File size: 5.8 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 *      Maurus Kaufmann
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _SpaceBoundaries_H__
30#define _SpaceBoundaries_H__
31
32#include "objects/ObjectsPrereqs.h"
33
34#include <string>
35#include <list>
36#include <vector>
37
38#include "core/CoreIncludes.h"
39#include "core/WeakPtr.h"
40
41#include "tools/interfaces/Tickable.h"
42#include "worldentities/StaticEntity.h"
43
44namespace orxonox
45{
46
47/**
48@brief SpaceBoundaries gives level creators the possibility to bar Pawns from leaving a defined area (until now this area is a ball).
49
50       Some attributes can/should be defined in the XML-File:
51       - 'position' : absolute position of the object of SpaceBoundaries in the level (usually 0,0,0)
52       - 'maxDistance' : defines the area, where a pawn is allowed to be (radius of a ball).
53       - 'warnDistance' : If the distance between the pawn of the human player and 'position' is bigger than 'warnDistance', a message is displayed to
54                          inform the player that he'll soon be leaving the allowed area. (not implemented yet!)
55       - 'showDistance' : If the distance between the pawn and the boundary of the allowed area is smaller than 'showDistance', the boundary is shown.
56       - 'reactionMode' : Integer-Value. Defines what effect appears if a space ship has crossed the boundaries.
57                            0: Reflect the space ship (default).
58                            1: Decrease Health of the space ship after having left the allowed area.
59                            2: Inverted Version of 0. Prohibit to fly INTO a defined area.
60       - 'healthDecrease' : a measure to define how fast the health of a pawn should decrease after leaving the allowed area (unnecessary if 'reactionMode' == 0).
61                            Recommended values: 0.1 (slow health decrease) to 5 (very fast health decrease)
62
63Follow http://www.orxonox.net/wiki/SpaceBoundaries to get some further information.
64
65Examples:
66Two examples how one could include SpaceBoundaries in the XML-File. The first one uses reflection, the second one health decrease.
67@code
68<SpaceBoundaries position="0,0,0" maxDistance="1000" warnDistance="800" showDistance="100" reactionMode="0" />
69@endcode
70
71@code
72<SpaceBoundaries position="0,0,0" maxDistance="1000" warnDistance="800" showDistance="100" reactionMode="1" healthDecrease="0.2" />
73@endcode
74*/
75
76    class _ObjectsExport SpaceBoundaries : public StaticEntity, public Tickable
77    {
78        public:
79            SpaceBoundaries(BaseObject* creator);
80            ~SpaceBoundaries();
81           
82            void setMaxDistance(float r);
83            float getMaxDistance();
84           
85            void setWarnDistance(float r);
86            float getWarnDistance();
87           
88            void setShowDistance(float r);
89            float getShowDistance();
90           
91            void setHealthDecrease(float amount);
92            float getHealthDecrease();
93           
94            void setReaction(int mode);
95            int getReaction();
96
97            void XMLPort(Element& xmlelement, XMLPort::Mode mode);
98           
99            void tick(float dt);
100
101        private:
102            struct BillboardAdministration{ bool usedYet; Billboard* billy; };
103           
104            // Variabeln::
105            std::list<WeakPtr<Pawn> > pawnsIn_; //!< List of the pawns that this instance of SpaceBoundaries has to handle.
106           
107            std::vector<BillboardAdministration> billboards_;
108       
109            int reaction_; //!< Values: 0, 1, 2.
110                           //!< 0: Reflection on boundary (Standard).
111                           //!< 1: Decrease-Health-Mode.
112                           //!< 2: Inverted Version of 0. Prohibit to fly INTO a defined area.
113            float maxDistance_; //!<  Maximum allowed distance.
114            float warnDistance_; //!< Distance in which a warning is displayed.
115            float showDistance_; //!< Distance at which the boundaries are displayed.
116           
117            float healthDecrease_; //!< Rate of health loss.
118           
119            //RadarViewable* centerRadar_; //!< Representation of the space boundary in the radar.
120       
121            // Funktionen::
122            float computeDistance(WorldEntity *item); //!< Compute distance to center point.
123            void displayWarning(const std::string warnText); //!< TODO: Implement.
124            void displayBoundaries(Pawn *item, float alpha);
125            void conditionalBounceBack(Pawn *item, float currentDistance, float dt);
126            void bounceBack(Pawn *item, Vector3 *normal, Vector3 *velocity);
127            bool isHumanPlayer(Pawn *item);
128           
129            void checkWhoIsIn(); //!< Update the list 'pawnsIn_'.
130           
131            void positionBillboard(const Vector3& position, float alpha); //!< Display a Billboard at the position 'position'.
132            void setBillboardOptions(Billboard *billy);
133            void removeAllBillboards(); //!< Hide all elements of '*billboard_' and set their attribute 'usedYet' to 0.
134           
135    };
136}
137
138#endif /* _SpaceBoundaries_H__ */
Note: See TracBrowser for help on using the repository browser.