Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/output/src/orxonox/controllers/ArtificialController.h @ 9542

Last change on this file since 9542 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: 4.7 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
40namespace orxonox
41{
42    class _OrxonoxExport ArtificialController : public Controller
43    {
44        public:
45            ArtificialController(BaseObject* creator);
46            virtual ~ArtificialController();
47
48            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
49
50            void abandonTarget(Pawn* target);
51
52            inline void setTeam(int team)
53                { this->team_ = team; }
54            inline int getTeam() const
55                { return this->team_; }
56
57            inline void setFormationFlight(bool formation)
58                { this->formationFlight_ = formation; }
59            inline bool getFormationFlight() const
60                { return this->formationFlight_; }
61
62            inline void setFormationSize(int size)
63                { this->maxFormationSize_ = size; }
64            inline int getFormationSize() const
65                { return this->maxFormationSize_; }
66
67            inline void setPassive(bool passive)
68                { this->passive_ = passive; }
69            inline bool getPassive() const
70                { return this->passive_; }
71
72            virtual void changedControllableEntity();
73
74            static void formationflight(const bool form);
75            static void masteraction(const int action);
76            static void followme();
77            static void passivebehaviour(const bool passive);
78            static void formationsize(const int size);
79
80        protected:
81
82            int team_;
83            bool formationFlight_;
84            bool passive_;
85            unsigned int maxFormationSize_;
86            int freedomCount_;
87            enum State {SLAVE, MASTER, FREE};
88            State state_;
89            std::vector<ArtificialController*> slaves_;
90            ArtificialController *myMaster_;
91            enum SpecificMasterAction {NONE, HOLD, SPIN, TURN180, FOLLOW};
92            SpecificMasterAction specificMasterAction_;
93            int specificMasterActionHoldCount_;
94            float speedCounter_; //for speed adjustment when following
95
96            void moveToPosition(const Vector3& target);
97            void moveToTargetPosition();
98
99            virtual void positionReached() {}
100
101            void removeFromFormation();
102            void unregisterSlave();
103            void searchNewMaster();
104            void commandSlaves();
105            void setNewMasterWithinFormation();
106
107            void freeSlaves();
108            void forceFreeSlaves();
109            void loseMasterState();
110            void forceFreedom();
111            bool forcedFree();
112
113            void specificMasterActionHold();
114            void turn180Init();
115            void turn180();
116            void spinInit();
117            void spin();
118            void followInit(Pawn* pawn, const bool always = false, const int secondsToFollow = 100);
119            void followRandomHumanInit();
120            void follow();
121            void followForSlaves(const Vector3& target);
122
123            void setTargetPosition(const Vector3& target);
124            void searchRandomTargetPosition();
125
126            void setTarget(Pawn* target);
127            void searchNewTarget();
128            void forgetTarget();
129            void aimAtTarget();
130
131            bool isCloseAtTarget(float distance) const;
132            bool isLookingAtTarget(float angle) const;
133
134            void targetDied();
135
136            static bool sameTeam(ControllableEntity* entity1, ControllableEntity* entity2, Gametype* gametype); // hack
137
138            bool bHasTargetPosition_;
139            Vector3 targetPosition_;
140            WeakPtr<Pawn> target_;
141            bool bShooting_;
142
143        private:
144    };
145}
146
147#endif /* _ArtificialController_H__ */
Note: See TracBrowser for help on using the repository browser.