Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ai/src/orxonox/controllers/ArtificialController.h @ 8711

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

Bots are ready for rocket usage. (The hit rate for rockets is just about 60% though.). Note that this is just a proof of concept implementation. The next goal is a more generic implementation that adjusts the AI to any spaceship, not only the assff and similar ones.

  • Property svn:eol-style set to native
File size: 5.5 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 <vector>
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
87        protected:
88
89            int team_;
90            bool formationFlight_;
91            bool passive_;
92            unsigned int maxFormationSize_;
93            int freedomCount_;
94            enum State {SLAVE, MASTER, FREE};
95            State state_;
96            std::vector<ArtificialController*> slaves_;
97            ArtificialController *myMaster_;
98            enum SpecificMasterAction {NONE, HOLD, SPIN, TURN180, FOLLOW};
99            SpecificMasterAction specificMasterAction_;
100            int specificMasterActionHoldCount_;
101            float speedCounter_; //for speed adjustment when following
102
103            void moveToPosition(const Vector3& target);
104            void moveToTargetPosition();
105
106            void removeFromFormation();
107            void unregisterSlave();
108            void searchNewMaster();
109            void commandSlaves();
110            void setNewMasterWithinFormation();
111
112            void freeSlaves();
113            void forceFreeSlaves();
114            void loseMasterState();
115            void forceFreedom();
116            bool forcedFree();
117
118            void specificMasterActionHold();
119            void turn180Init();
120            void turn180();
121            void spinInit();
122            void spin();
123            void followInit(Pawn* pawn, const bool always = false, const int secondsToFollow = 100);
124            void followRandomHumanInit();
125            void follow();
126            void followForSlaves(const Vector3& target);
127
128            void setTargetPosition(const Vector3& target);
129            void searchRandomTargetPosition();
130
131            void setTarget(Pawn* target);
132            void searchNewTarget();
133            void forgetTarget();
134            void aimAtTarget();
135
136            bool isCloseAtTarget(float distance) const;
137            bool isLookingAtTarget(float angle) const;
138
139            void targetDied();
140
141            static bool sameTeam(ControllableEntity* entity1, ControllableEntity* entity2, Gametype* gametype); // hack
142
143            bool bHasTargetPosition_;
144            Vector3 targetPosition_;
145            WeakPtr<Pawn> target_;
146            bool bShooting_;
147           
148            int numberOfWeapons;//< Used for weapon init function. Displayes number of weapons available for a bot.
149            int weapons[WeaponSystem::MAX_WEAPON_MODES];
150            int projectiles[WeaponSystem::MAX_WEAPON_MODES];
151            float botlevel_; //< Makes the level of a bot configurable.
152            float timeout_; //< Timeout for rocket usage. (If a rocket misses, a bot should stop using it.)
153
154            enum Mode {DEFAULT, ROCKET, DEFENCE, MOVING};//TODO; implement DEFENCE, MOVING modes
155            Mode mode_;
156            void setPreviousMode();
157
158        private:
159            void setupWeapons();
160            bool bSetupWorked;
161    };
162}
163
164#endif /* _ArtificialController_H__ */
165
Note: See TracBrowser for help on using the repository browser.