Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

First successful attempt, to make bots shoot rockets. Unfortunately they're shooting the wrong ones.

  • Property svn:eol-style set to native
File size: 5.4 KB
RevLine 
[2362]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:
[7163]25 *      Dominik Solenicki
[2362]26 *
27 */
28
29#ifndef _ArtificialController_H__
30#define _ArtificialController_H__
31
32#include "OrxonoxPrereqs.h"
33
[7163]34#include <vector>
35
[3196]36#include "util/Math.h"
[2362]37#include "Controller.h"
[7163]38#include "controllers/NewHumanController.h"
[7832]39#include "weaponsystem/WeaponSystem.h"
[2362]40
41namespace orxonox
42{
[5929]43    class _OrxonoxExport ArtificialController : public Controller
[2362]44    {
45        public:
46            ArtificialController(BaseObject* creator);
47            virtual ~ArtificialController();
[6417]48
[7163]49            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
50
[5929]51            void abandonTarget(Pawn* target);
[2362]52
[7163]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);
[7832]80           
81            virtual void doFire();
[7833]82            void setBotLevel(float level=1.0f);
83            inline float getBotLevel() const
84                { return this->botlevel_; }
[7842]85            static void setAllBotLevel(float level);
[7163]86
[5929]87        protected:
[2362]88
[7163]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
[3049]103            void moveToPosition(const Vector3& target);
104            void moveToTargetPosition();
105
[7163]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
[3049]128            void setTargetPosition(const Vector3& target);
[2362]129            void searchRandomTargetPosition();
[3049]130
131            void setTarget(Pawn* target);
[2362]132            void searchNewTarget();
133            void forgetTarget();
134            void aimAtTarget();
135
136            bool isCloseAtTarget(float distance) const;
137            bool isLookingAtTarget(float angle) const;
138
[7163]139            void targetDied();
140
[3049]141            static bool sameTeam(ControllableEntity* entity1, ControllableEntity* entity2, Gametype* gametype); // hack
142
[2362]143            bool bHasTargetPosition_;
144            Vector3 targetPosition_;
[5929]145            WeakPtr<Pawn> target_;
[2362]146            bool bShooting_;
[7832]147           
[8701]148            int numberOfWeapons;//< Used for weapon init function. Displayes number of weapons available for a bot.
[7832]149            int weapons[WeaponSystem::MAX_WEAPON_MODES];
[8701]150            int projectiles[WeaponSystem::MAX_WEAPON_MODES];
[7833]151            float botlevel_; //< Makes the level of a bot configurable.
[2362]152
[8701]153            enum Mode {DEFAULT, ROCKET, DEFENCE, MOVING};//TODO; implement DEFENCE, MOVING modes
154            Mode mode_;
155
[2362]156        private:
[7832]157            void setupWeapons();
158            bool bSetupWorked;
[2362]159    };
160}
161
162#endif /* _ArtificialController_H__ */
[8701]163
Note: See TracBrowser for help on using the repository browser.