Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/mergeFS18/src/orxonox/worldentities/Actionpoint.h @ 12047

Last change on this file since 12047 was 11099, checked in by muemart, 9 years ago

Fix loads of doxygen warnings and other documentation issues

  • Property svn:eol-style set to native
File size: 6.3 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 *      Gani Aliguzhinov
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _Actionpoint_H__
30#define _Actionpoint_H__
31
32#include <string>                           //need string for XML input
33
34#include "core/XMLPort.h"                   //need XMLPort
35#include "worldentities/StaticEntity.h"     //this is a child of StaticEntity
36
37namespace orxonox
38{ 
39    /**
40    @brief
41        Actionpoints are used by ActionpointController and all derived classes.
42        Such classes will execute actions set in Actionpoints.
43
44        In XML file one can pass an array of Actionpoints to a controller. Each
45        Actionpoint can take action type, string and boolean or
46        action and two booleans as an argument.
47        If action is set to fly, Actionpoint's position is assumed to be the desired
48        location.
49        Example XML code:
50
51        @code
52        <SpaceShip position="-2000, 1500, -1000" lookat="0,0,0" team=0 name="thisShipName">
53          <templates>
54            <Template link=spaceshipassff />
55          </templates>
56          <controller>
57            <DivisionController team=0 formationMode="WALL">
58              <actionpoints>
59                <Actionpoint position="0,0,0" action="FLY" />
60                <Actionpoint position="-1000,750,-500" action="ATTACK" attack="someShipName" />
61                <Actionpoint position="-1000,750,-500" action="PROTECT" protectMe=true />
62                <Actionpoint position="-1000,750,-500" action="PROTECT" protect="otherShipName" />
63                <Actionpoint position="-1000,750,-500" action="FIGHTALL" />
64               </actionpoints>
65            </DivisionController>
66          </controller>
67        </SpaceShip>
68        @endcode
69
70        Example with loops:
71
72        @code
73        <SpaceShip position="-1500, 1500, -1000" lookat="0,0,0" team=0 name="thisShipName">
74          <templates>
75            <Template link=spaceshipassff />
76          </templates>
77          <controller>
78            <DivisionController team=0 formationMode="finger4">
79              <actionpoints>
80                <Actionpoint position="  0,2000,-600" action="FLY" loopStart=true/>
81                <Actionpoint position="  0,2000,-700" action="FLY"  />
82                <Actionpoint position="100,2000,-700" action="FLY" />
83                <Actionpoint position="100,2000,-600" action="FLY" loopEnd=true />
84              </actionpoints>
85            </DivisionController>
86          </controller>
87        </SpaceShip>
88        @endcode
89       
90        One can also use other Worldentities instead of Actionpoints just like Waypoints, but those points
91        will be included in loop.
92        For more information read descriptions of the methods.
93    */
94    class _OrxonoxExport Actionpoint : public StaticEntity
95    {
96        public:
97            Actionpoint(Context* context);
98            virtual ~Actionpoint() = default;
99
100            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
101
102            /** @brief Decides what AI will do. @param val action to execute */
103            void setActionXML(std::string val)
104                { this->actionName_ = getUppercase (val); }
105            std::string getActionXML() const
106                { return this->actionName_; }
107
108            /** @brief Makes AI follow an entity. @param val name of entity to protect */
109            void setProtectXML(std::string val)
110                { this->name_ = val; }
111            std::string getProtectXML() const
112                { return this->name_; }
113
114            /** @brief Makes AI attack an entity. @param val name of entity to attack */
115            void setAttackXML(std::string val)
116                { this->name_ = val; }
117            std::string getAttackXML() const
118                { return this->name_; }
119
120            /** @brief Makes AI follow human player. @param c protect Human? */
121            void setProtectMeXML(bool c)
122                { this->bProtectMe_ = c; }
123            bool getProtectMeXML() const
124                { return this->bProtectMe_; }
125
126            /** @brief Starts a loop of Actionpoints. @param value start loop? */
127            void setLoopStart(bool value)
128                { this->bLoopStart_ = value; }
129            bool getLoopStart() const
130                { return this->bLoopStart_; }
131            /** @brief Ends a loop of Actionpoints. @param value end loop? */
132            void setLoopEnd (bool value)
133                { this->bLoopEnd_ = value; }
134            bool getLoopEnd() const
135                { return this->bLoopEnd_; }
136
137            std::string getName() const;
138
139        private:   
140            std::string actionName_;    //!< can be set to "FLY", "ATTACK",
141                                        //!< "PROTECT", "FIGHT", "FIGHTALL"
142                                        //!< or "NONE".
143
144            std::string name_;          //!< name of the ship that is to be
145                                        //!< attacked or protected.
146
147            bool bLoopStart_;           //!< if true, this and all following Actionpoints
148                                        //!< until the first Actionpoint with bLoopEnd_
149                                        //!< set to true are executed in a loop.
150
151            bool bLoopEnd_;             //!< if true, this is the last element of
152                                        //!< a loop started by loopStart=true argument
153
154            bool bProtectMe_;           //!< if player is to be protected,
155                                        //!< instead of passing name, one has
156                                        //!< to set protectMe to true.
157    };
158}
159
160#endif /* _Actionpoint_H__ */
Note: See TracBrowser for help on using the repository browser.