_________ __                 __
        /   _____//  |_____________ _/  |______     ____  __ __  ______
        \_____  \\   __\_  __ \__  \\   __\__  \   / ___\|  |  \/  ___/
        /        \|  |  |  | \// __ \|  |  / __ \_/ /_/  >  |  /\___ \
       /_______  /|__|  |__|  (____  /__| (____  /\___  /|____//____  >
               \/                  \/          \//_____/            \/
    ______________________                           ______________________
                          T H E   W A R   B E G I N S
                   Stratagus - A free fantasy real time strategy game engine

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
actions.h
Go to the documentation of this file.
1 // _________ __ __
2 // / _____// |_____________ _/ |______ ____ __ __ ______
3 // \_____ \\ __\_ __ \__ \\ __\__ \ / ___\| | \/ ___/
4 // / \| | | | \// __ \| | / __ \_/ /_/ > | /\___ |
5 // /_______ /|__| |__| (____ /__| (____ /\___ /|____//____ >
6 // \/ \/ \//_____/ \/
7 // ______________________ ______________________
8 // T H E W A R B E G I N S
9 // Stratagus - A free fantasy real time strategy game engine
10 //
12 //
13 // (c) Copyright 1998-2012 by Lutz Sammer and Jimmy Salmon
14 //
15 // This program is free software; you can redistribute it and/or modify
16 // it under the terms of the GNU General Public License as published by
17 // the Free Software Foundation; only version 2 of the License.
18 //
19 // This program is distributed in the hope that it will be useful,
20 // but WITHOUT ANY WARRANTY; without even the implied warranty of
21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 // GNU General Public License for more details.
23 //
24 // You should have received a copy of the GNU General Public License
25 // along with this program; if not, write to the Free Software
26 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
27 // 02111-1307, USA.
28 //
29 
30 #ifndef __ACTIONS_H__
31 #define __ACTIONS_H__
32 
34 
35 #include "unitptr.h"
36 #include "vec2i.h"
37 
38 /*----------------------------------------------------------------------------
39 -- Declarations
40 ----------------------------------------------------------------------------*/
41 
49 enum UnitAction {
51 
60 
62 
67 
68  // Compound actions
73 
77 };
78 
79 class CAnimation;
80 class CConstructionFrame;
81 class CFile;
82 class CUnit;
83 class CUnitType;
84 class CUpgrade;
85 class PathFinderInput;
86 class SpellType;
87 class CViewport;
88 struct lua_State;
89 
93 class COrder
94 {
95 public:
96  explicit COrder(int action) : Goal(), Action(action), Finished(false)
97  {
98  }
99  virtual ~COrder();
100 
101  virtual COrder *Clone() const = 0;
102  virtual void Execute(CUnit &unit) = 0;
103  virtual void Cancel(CUnit &unit) {}
104  virtual bool IsValid() const = 0;
105 
106  virtual PixelPos Show(const CViewport &vp, const PixelPos &lastScreenPos) const = 0;
107 
108  virtual void OnAnimationAttack(CUnit &unit);
109 
110  virtual void Save(CFile &file, const CUnit &unit) const = 0;
111  bool ParseGenericData(lua_State *l, int &j, const char *value);
112  virtual bool ParseSpecificData(lua_State *l, int &j, const char *value, const CUnit &unit) = 0;
113 
114  virtual void UpdateUnitVariables(CUnit &unit) const {}
115  virtual void FillSeenValues(CUnit &unit) const;
116  virtual void AiUnitKilled(CUnit &unit);
117 
118  virtual void UpdatePathFinderData(PathFinderInput &input) = 0;
119 
120  bool HasGoal() const { return Goal != NULL; }
121  CUnit *GetGoal() const { return Goal; };
122  void SetGoal(CUnit *const new_goal);
123  void ClearGoal();
124  virtual const Vec2i GetGoalPos() const;
125 
126  virtual bool OnAiHitUnit(CUnit &unit, CUnit *attacker, int /*damage*/);
127 
128  static COrder *NewActionAttack(const CUnit &attacker, CUnit &target);
129  static COrder *NewActionAttack(const CUnit &attacker, const Vec2i &dest);
130  static COrder *NewActionAttackGround(const CUnit &attacker, const Vec2i &dest);
131  static COrder *NewActionBoard(CUnit &unit);
132  static COrder *NewActionBuild(const CUnit &builder, const Vec2i &pos, CUnitType &building);
133  static COrder *NewActionBuilt(CUnit &builder, CUnit &unit);
134  static COrder *NewActionDefend(CUnit &dest);
135  static COrder *NewActionDie();
136  static COrder *NewActionFollow(CUnit &dest);
137  static COrder *NewActionMove(const Vec2i &pos);
138  static COrder *NewActionPatrol(const Vec2i &currentPos, const Vec2i &dest);
139  static COrder *NewActionRepair(CUnit &unit, CUnit &target);
140  static COrder *NewActionRepair(const Vec2i &pos);
141  static COrder *NewActionResearch(CUnit &unit, CUpgrade &upgrade);
142  static COrder *NewActionResource(CUnit &harvester, const Vec2i &pos);
143  static COrder *NewActionResource(CUnit &harvester, CUnit &mine);
144  static COrder *NewActionReturnGoods(CUnit &harvester, CUnit *depot);
145  static COrder *NewActionSpellCast(const SpellType &spell, const Vec2i &pos, CUnit *target, bool isAutocast = false);
146  static COrder *NewActionStandGround();
147  static COrder *NewActionStill();
148  static COrder *NewActionTrain(CUnit &trainer, CUnitType &type);
149  static COrder *NewActionTransformInto(CUnitType &type);
150  static COrder *NewActionUnload(const Vec2i &pos, CUnit *what);
151  static COrder *NewActionUpgradeTo(CUnit &unit, CUnitType &type);
152 
153 protected:
155 
156 private:
157  CUnitPtr Goal;
158 public:
159  const unsigned char Action;
160  bool Finished;
161 };
162 
163 typedef COrder *COrderPtr;
164 
165 
166 /*----------------------------------------------------------------------------
167 -- Variables
168 ----------------------------------------------------------------------------*/
169 
170 extern unsigned SyncHash;
171 
172 /*----------------------------------------------------------------------------
173 -- Actions: in action_<name>.c
174 ----------------------------------------------------------------------------*/
175 
176 extern int GetNumWaitingWorkers(const CUnit &mine);
177 extern bool AutoAttack(CUnit &unit);
178 extern bool AutoRepair(CUnit &unit);
179 extern bool AutoCast(CUnit &unit);
180 extern void UnHideUnit(CUnit &unit);
181 
183 extern int DoActionMove(CUnit &unit);
185 extern void AnimateActionAttack(CUnit &unit, COrder &order);
186 
187 /*----------------------------------------------------------------------------
188 -- Actions: actions.c
189 ----------------------------------------------------------------------------*/
190 
192 extern void CclParseOrder(lua_State *l, CUnit &unit, COrderPtr *order);
193 
195 extern void UnitActions();
196 
198 
199 #endif // !__ACTIONS_H__
bool AutoCast(CUnit &unit)
Definition: action_still.cpp:197
static COrder * NewActionReturnGoods(CUnit &harvester, CUnit *depot)
Definition: action_resource.cpp:159
unit repairing
Definition: actions.h:75
Construction frame.
Definition: construct.h:112
unit defends unit
Definition: actions.h:56
virtual PixelPos Show(const CViewport &vp, const PixelPos &lastScreenPos) const =0
static COrder * NewActionAttack(const CUnit &attacker, CUnit &target)
Definition: action_attack.cpp:97
unit stand still, does nothing
Definition: actions.h:53
unit follows units
Definition: actions.h:55
static COrder * NewActionStandGround()
Definition: action_still.cpp:60
building is under construction
Definition: actions.h:69
virtual bool IsValid() const =0
Definition: actions.h:93
bool HasGoal() const
Definition: actions.h:120
unit casts spell
Definition: actions.h:63
static COrder * NewActionTrain(CUnit &trainer, CUnitType &type)
Definition: action_train.cpp:58
static COrder * NewActionRepair(CUnit &unit, CUnit &target)
Definition: action_repair.cpp:58
Definition: animation.h:93
unit attacks ground
Definition: actions.h:59
unsigned SyncHash
Definition: actions.cpp:80
static COrder * NewActionFollow(CUnit &dest)
Definition: action_follow.cpp:65
The big unit structure.
Definition: unit.h:119
bool ParseGenericData(lua_State *l, int &j, const char *value)
Definition: script_unit.cpp:157
Definition: pathfinder.h:67
void AnimateActionAttack(CUnit &unit, COrder &order)
Show attack animation.
Definition: action_attack.cpp:81
unit leaving transporter
Definition: actions.h:71
static COrder * NewActionBuild(const CUnit &builder, const Vec2i &pos, CUnitType &building)
Definition: action_build.cpp:72
void ClearGoal()
Definition: actions.cpp:97
const unsigned char Action
Definition: actions.h:159
static COrder * NewActionTransformInto(CUnitType &type)
Definition: action_upgradeto.cpp:59
unit dies
Definition: actions.h:61
unit entering transporter
Definition: actions.h:70
unit builds building
Definition: actions.h:74
virtual COrder * Clone() const =0
static COrder * NewActionResource(CUnit &harvester, const Vec2i &pos)
Definition: action_resource.cpp:133
virtual void FillSeenValues(CUnit &unit) const
Definition: actions.cpp:114
static COrder * NewActionStill()
Definition: action_still.cpp:65
Definition: viewport.h:63
Definition: unittype.h:467
Definition: iolib.h:101
building is researching spell
Definition: actions.h:66
unit paroling area
Definition: actions.h:72
void SetGoal(CUnit *const new_goal)
Definition: actions.cpp:92
unit harvesting resources
Definition: actions.h:76
bool AutoRepair(CUnit &unit)
Definition: action_still.cpp:249
virtual void Cancel(CUnit &unit)
Definition: actions.h:103
void UnitActions()
Handle the actions of all units each game cycle.
Definition: actions.cpp:511
unit attacks position/unit
Definition: actions.h:58
virtual void OnAnimationAttack(CUnit &unit)
Definition: actions.cpp:150
No valid action.
Definition: actions.h:52
static COrder * NewActionAttackGround(const CUnit &attacker, const Vec2i &dest)
Definition: action_attack.cpp:127
virtual ~COrder()
Hash calculated to find sync failures.
Definition: actions.cpp:87
static COrder * NewActionBuilt(CUnit &builder, CUnit &unit)
Definition: action_built.cpp:54
int DoActionMove(CUnit &unit)
Generic move action.
Definition: action_move.cpp:135
virtual void Save(CFile &file, const CUnit &unit) const =0
virtual void UpdateUnitVariables(CUnit &unit) const
Definition: actions.h:114
static COrder * NewActionUnload(const Vec2i &pos, CUnit *what)
Definition: action_unload.cpp:55
Definition: unitptr.h:41
UnitAction
Definition: actions.h:49
void UpdatePathFinderData_NotCalled(PathFinderInput &input)
Definition: actions.cpp:102
virtual const Vec2i GetGoalPos() const
Definition: actions.cpp:169
static COrder * NewActionDie()
Definition: action_die.cpp:49
static COrder * NewActionUpgradeTo(CUnit &unit, CUnitType &type)
Definition: action_upgradeto.cpp:67
building is training
Definition: actions.h:64
int GetNumWaitingWorkers(const CUnit &mine)
Hash calculated to find sync failures.
Definition: action_resource.cpp:802
COrder * COrderPtr
Definition: actions.h:163
virtual bool OnAiHitUnit(CUnit &unit, CUnit *attacker, int)
Definition: actions.cpp:123
static COrder * NewActionBoard(CUnit &unit)
Definition: action_board.cpp:63
CUnit * GetGoal() const
Definition: actions.h:121
unit moves to position/unit
Definition: actions.h:57
bool AutoAttack(CUnit &unit)
Definition: action_still.cpp:318
static COrder * NewActionDefend(CUnit &dest)
Definition: action_defend.cpp:60
static COrder * NewActionResearch(CUnit &unit, CUpgrade &upgrade)
Definition: action_research.cpp:61
Definition: upgrade_structs.h:154
building is upgrading itself
Definition: actions.h:65
void UnHideUnit(CUnit &unit)
Definition: action_still.cpp:154
static COrder * NewActionPatrol(const Vec2i &currentPos, const Vec2i &dest)
Definition: action_patrol.cpp:54
virtual void Execute(CUnit &unit)=0
void CclParseOrder(lua_State *l, CUnit &unit, COrderPtr *order)
Parse order.
Definition: actions.cpp:184
COrder(int action)
Definition: actions.h:96
virtual bool ParseSpecificData(lua_State *l, int &j, const char *value, const CUnit &unit)=0
Definition: actions.h:50
unit stands ground
Definition: actions.h:54
static COrder * NewActionMove(const Vec2i &pos)
Definition: action_move.cpp:60
bool Finished
global action
Definition: actions.h:160
virtual void AiUnitKilled(CUnit &unit)
Definition: actions.cpp:132
static COrder * NewActionSpellCast(const SpellType &spell, const Vec2i &pos, CUnit *target, bool isAutocast=false)
Definition: action_spellcast.cpp:64
Definition: spells.h:205
virtual void UpdatePathFinderData(PathFinderInput &input)=0
(C) Copyright 1998-2012 by The Stratagus Project under the GNU General Public License.
All trademarks and copyrights on this page are owned by their respective owners.