Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ai2/src/orxonox/controllers/ArtificialController.h @ 8781

Last change on this file since 8781 was 8769, checked in by jo, 13 years ago

Moved intern waypoint functionallity from the waypointController to its base class ArtificialController. Further usage of this is planned.

  • Property svn:eol-style set to native
File size: 6.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 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      Dominik Solenicki
26 *
27 */
28
29#ifndef _ArtificialController_H__
30#define _ArtificialController_H__
31
32#include "OrxonoxPrereqs.h"
33
34#include <map>
35
36#include "util/Math.h"
37#include "Controller.h"
38#include "controllers/NewHumanController.h"
39#include "weaponsystem/WeaponSystem.h"
40
41namespace orxonox
42{
43    class _OrxonoxExport ArtificialController : public Controller
44    {
45        public:
46            ArtificialController(BaseObject* creator);
47            virtual ~ArtificialController();
48
49            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
50
51            void abandonTarget(Pawn* target);
52
53            inline void setTeam(int team)
54                { this->team_ = team; }
55            inline int getTeam() const
56                { return this->team_; }
57
58            inline void setFormationFlight(bool formation)
59                { this->formationFlight_ = formation; }
60            inline bool getFormationFlight() const
61                { return this->formationFlight_; }
62
63            inline void setFormationSize(int size)
64                { this->maxFormationSize_ = size; }
65            inline int getFormationSize() const
66                { return this->maxFormationSize_; }
67
68            inline void setPassive(bool passive)
69                { this->passive_ = passive; }
70            inline bool getPassive() const
71                { return this->passive_; }
72
73            virtual void changedControllableEntity();
74
75            static void formationflight(const bool form);
76            static void masteraction(const int action);
77            static void followme();
78            static void passivebehaviour(const bool passive);
79            static void formationsize(const int size);
80
81            virtual void doFire();
82            void setBotLevel(float level=1.0f);
83            inline float getBotLevel() const
84                { return this->botlevel_; }
85            static void setAllBotLevel(float level);
86            //WAYPOINT FUNCTIONS
87            void addWaypoint(WorldEntity* waypoint);
88            WorldEntity* getWaypoint(unsigned int index) const;
89
90            inline void setAccuracy(float accuracy)
91                { this->squaredaccuracy_ = accuracy*accuracy; }
92            inline float getAccuracy() const
93                { return sqrt(this->squaredaccuracy_); }
94            void updatePointsOfInterest(std::string name, float distance);
95
96        protected:
97
98            int team_;
99            bool formationFlight_;
100            bool passive_;
101            unsigned int maxFormationSize_;
102            int freedomCount_;
103            enum State {SLAVE, MASTER, FREE};
104            State state_;
105            std::vector<ArtificialController*> slaves_;
106            ArtificialController *myMaster_;
107            enum SpecificMasterAction {NONE, HOLD, SPIN, TURN180, FOLLOW};
108            SpecificMasterAction specificMasterAction_;
109            int specificMasterActionHoldCount_;
110            float speedCounter_; //for speed adjustment when following
111
112            void moveToPosition(const Vector3& target);
113            void moveToTargetPosition();
114
115            virtual void positionReached() {}
116
117            void removeFromFormation();
118            void unregisterSlave();
119            void searchNewMaster();
120            void commandSlaves();
121            void setNewMasterWithinFormation();
122
123            void freeSlaves();
124            void forceFreeSlaves();
125            void loseMasterState();
126            void forceFreedom();
127            bool forcedFree();
128
129            void specificMasterActionHold();
130            void turn180Init();
131            void turn180();
132            void spinInit();
133            void spin();
134            void followInit(Pawn* pawn, const bool always = false, const int secondsToFollow = 100);
135            void followRandomHumanInit();
136            void follow();
137            void followForSlaves(const Vector3& target);
138
139            void setTargetPosition(const Vector3& target);
140            void searchRandomTargetPosition();
141
142            void setTarget(Pawn* target);
143            void searchNewTarget();
144            void forgetTarget();
145            void aimAtTarget();
146
147            bool isCloseAtTarget(float distance) const;
148            bool isLookingAtTarget(float angle) const;
149
150            void targetDied();
151
152            static bool sameTeam(ControllableEntity* entity1, ControllableEntity* entity2, Gametype* gametype); // hack
153            void boostControl(); //<! Sets and resets the boost parameter of the spaceship. Bots alternate between boosting and saving boost.
154
155            bool bHasTargetPosition_;
156            Vector3 targetPosition_;
157            WeakPtr<Pawn> target_;
158            bool bShooting_;
159
160            float botlevel_; //<! Makes the level of a bot configurable.
161            enum Mode {DEFAULT, ROCKET, DEFENCE, MOVING};//TODO; implement DEFENCE, MOVING modes
162            Mode mode_; //TODO: replace single value with stack-like implementation: std::vector<Mode> mode_;
163            void setPreviousMode();
164
165            //WEAPONSYSTEM DATA
166            std::map<std::string, int> weaponModes_; //<! Links each "weapon" to it's weaponmode- managed by setupWeapons()
167            //std::vector<int> projectiles_; //<! Displays amount of projectiles of each weapon. - managed by setupWeapons()
168            float timeout_; //<! Timeout for rocket usage. (If a rocket misses, a bot should stop using it.)
169            void setupWeapons(); //<! Defines which weapons are available for a bot. Is recalled whenever a bot was killed.
170            bool bSetupWorked; //<! If false, setupWeapons() is called.
171            int getFiremode(std::string name);
172
173            //WAYPOINT DATA
174            std::vector<WorldEntity*> waypoints_;
175            size_t currentWaypoint_;
176            float squaredaccuracy_;
177    };
178}
179
180#endif /* _ArtificialController_H__ */
Note: See TracBrowser for help on using the repository browser.