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

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
74 
78 };
79 
80 class CAnimation;
81 class CConstructionFrame;
82 class CFile;
83 class CUnit;
84 class CUnitType;
85 class CUpgrade;
86 class PathFinderInput;
87 class SpellType;
88 class CViewport;
89 struct lua_State;
90 
94 class COrder
95 {
96 public:
97  explicit COrder(int action) : Goal(), Action(action), Finished(false), Instant(false)
98  {
99  }
100  virtual ~COrder();
101 
102  virtual COrder *Clone() const = 0;
103  virtual void Execute(CUnit &unit) = 0;
104  virtual void Cancel(CUnit &unit) {}
105  virtual bool IsValid() const = 0;
106 
107  virtual PixelPos Show(const CViewport &vp, const PixelPos &lastScreenPos) const = 0;
108 
109  virtual void OnAnimationAttack(CUnit &unit);
110 
111  virtual void Save(CFile &file, const CUnit &unit) const = 0;
112  bool ParseGenericData(lua_State *l, int &j, const char *value);
113  virtual bool ParseSpecificData(lua_State *l, int &j, const char *value, const CUnit &unit) = 0;
114 
115  virtual void UpdateUnitVariables(CUnit &unit) const {}
116  virtual void FillSeenValues(CUnit &unit) const;
117  virtual void AiUnitKilled(CUnit &unit);
118 
119  virtual void UpdatePathFinderData(PathFinderInput &input) = 0;
120 
121  bool HasGoal() const { return Goal != NULL; }
122  CUnit *GetGoal() const { return Goal; };
123  void SetGoal(CUnit *const new_goal);
124  void ClearGoal();
125  virtual const Vec2i GetGoalPos() const;
126 
127  virtual bool OnAiHitUnit(CUnit &unit, CUnit *attacker, int /*damage*/);
128 
129  static COrder *NewActionAttack(const CUnit &attacker, CUnit &target);
130  static COrder *NewActionAttack(const CUnit &attacker, const Vec2i &dest);
131  static COrder *NewActionAttackGround(const CUnit &attacker, const Vec2i &dest);
132  static COrder *NewActionBoard(CUnit &unit);
133  static COrder *NewActionBuild(const CUnit &builder, const Vec2i &pos, CUnitType &building);
134  static COrder *NewActionBuilt(CUnit &builder, CUnit &unit);
135  static COrder *NewActionDefend(CUnit &dest);
136  static COrder *NewActionDie();
137  static COrder *NewActionExplore(const CUnit &unit);
138  static COrder *NewActionFollow(CUnit &dest);
139  static COrder *NewActionMove(const Vec2i &pos);
140  static COrder *NewActionPatrol(const Vec2i &currentPos, const Vec2i &dest);
141  static COrder *NewActionRepair(CUnit &unit, CUnit &target);
142  static COrder *NewActionRepair(const Vec2i &pos);
143  static COrder *NewActionResearch(CUnit &unit, CUpgrade &upgrade);
144  static COrder *NewActionResource(CUnit &harvester, const Vec2i &pos);
145  static COrder *NewActionResource(CUnit &harvester, CUnit &mine);
146  static COrder *NewActionReturnGoods(CUnit &harvester, CUnit *depot);
147  static COrder *NewActionSpellCast(const SpellType &spell, const Vec2i &pos, CUnit *target, bool isAutocast = false);
148  static COrder *NewActionStandGround();
149  static COrder *NewActionStill();
150  static COrder *NewActionTrain(CUnit &trainer, CUnitType &type);
151  static COrder *NewActionTransformInto(CUnitType &type);
152  static COrder *NewActionUnload(const Vec2i &pos, CUnit *what);
153  static COrder *NewActionUpgradeTo(CUnit &unit, CUnitType &type, bool instant = false);
154 
155 protected:
157 
158 private:
159  CUnitPtr Goal;
160 public:
161  const unsigned char Action;
162  bool Finished;
163  bool Instant;
164 };
165 
166 typedef COrder *COrderPtr;
167 
168 
169 /*----------------------------------------------------------------------------
170 -- Variables
171 ----------------------------------------------------------------------------*/
172 
173 extern unsigned SyncHash;
174 
175 /*----------------------------------------------------------------------------
176 -- Actions: in action_<name>.c
177 ----------------------------------------------------------------------------*/
178 
179 extern int GetNumWaitingWorkers(const CUnit &mine);
180 extern bool AutoAttack(CUnit &unit);
181 extern bool AutoRepair(CUnit &unit);
182 extern bool AutoCast(CUnit &unit);
183 extern void UnHideUnit(CUnit &unit);
184 
186 extern int DoActionMove(CUnit &unit);
188 extern void AnimateActionAttack(CUnit &unit, COrder &order);
189 
190 /*----------------------------------------------------------------------------
191 -- Actions: actions.c
192 ----------------------------------------------------------------------------*/
193 
195 extern void CclParseOrder(lua_State *l, CUnit &unit, COrderPtr *order);
196 
198 extern void UnitActions();
199 
201 
202 #endif // !__ACTIONS_H__
COrder::UpdateUnitVariables
virtual void UpdateUnitVariables(CUnit &unit) const
Definition: actions.h:115
UnitActionTrain
@ UnitActionTrain
unit casts spell
Definition: actions.h:63
UnitActionBuild
@ UnitActionBuild
unit paroling area
Definition: actions.h:72
COrder::Execute
virtual void Execute(CUnit &unit)=0
COrder::NewActionDefend
static COrder * NewActionDefend(CUnit &dest)
Definition: action_defend.cpp:60
COrder::NewActionMove
static COrder * NewActionMove(const Vec2i &pos)
Definition: action_move.cpp:60
COrder::SetGoal
void SetGoal(CUnit *const new_goal)
Definition: actions.cpp:104
CUnitPtr
Definition: unitptr.h:41
COrder::NewActionUnload
static COrder * NewActionUnload(const Vec2i &pos, CUnit *what)
Definition: action_unload.cpp:65
COrder::NewActionSpellCast
static COrder * NewActionSpellCast(const SpellType &spell, const Vec2i &pos, CUnit *target, bool isAutocast=false)
Definition: action_spellcast.cpp:64
COrder::COrder
COrder(int action)
Definition: actions.h:97
vec2i.h
COrder::GetGoalPos
virtual const Vec2i GetGoalPos() const
Definition: actions.cpp:181
COrder
Definition: actions.h:94
UnitActionFollow
@ UnitActionFollow
unit stands ground
Definition: actions.h:54
COrder::NewActionTransformInto
static COrder * NewActionTransformInto(CUnitType &type)
Definition: action_upgradeto.cpp:59
UnitActionStandGround
@ UnitActionStandGround
unit stand still, does nothing
Definition: actions.h:53
UnitActionNone
@ UnitActionNone
Definition: actions.h:50
CViewport
Definition: viewport.h:63
CUnitType
Definition: unittype.h:508
COrder::NewActionDie
static COrder * NewActionDie()
Definition: action_die.cpp:49
SyncHash
unsigned SyncHash
Definition: actions.cpp:92
UnitActionDefend
@ UnitActionDefend
unit follows units
Definition: actions.h:55
AnimateActionAttack
void AnimateActionAttack(CUnit &unit, COrder &order)
Show attack animation.
Definition: action_attack.cpp:85
COrder::FillSeenValues
virtual void FillSeenValues(CUnit &unit) const
Definition: actions.cpp:126
COrder::NewActionBoard
static COrder * NewActionBoard(CUnit &unit)
Definition: action_board.cpp:63
COrder::NewActionResearch
static COrder * NewActionResearch(CUnit &unit, CUpgrade &upgrade)
Definition: action_research.cpp:61
Vec2T
Definition: vec2i.h:36
COrder::NewActionPatrol
static COrder * NewActionPatrol(const Vec2i &currentPos, const Vec2i &dest)
Definition: action_patrol.cpp:54
CUpgrade
Definition: upgrade_structs.h:154
COrder::AiUnitKilled
virtual void AiUnitKilled(CUnit &unit)
Definition: actions.cpp:144
COrder::ParseSpecificData
virtual bool ParseSpecificData(lua_State *l, int &j, const char *value, const CUnit &unit)=0
PathFinderInput
Definition: pathfinder.h:67
UnitActionPatrol
@ UnitActionPatrol
unit leaving transporter
Definition: actions.h:71
COrder::GetGoal
CUnit * GetGoal() const
Definition: actions.h:122
UnitActionSpellCast
@ UnitActionSpellCast
unit dies
Definition: actions.h:61
UnitActionRepair
@ UnitActionRepair
unit explores map
Definition: actions.h:75
unitptr.h
UnitActionMove
@ UnitActionMove
unit defends unit
Definition: actions.h:56
UnitActionUnload
@ UnitActionUnload
unit entering transporter
Definition: actions.h:70
COrder::ClearGoal
void ClearGoal()
Definition: actions.cpp:109
COrder::Finished
bool Finished
global action
Definition: actions.h:162
UnitActions
void UnitActions()
Handle the actions of all units each game cycle.
Definition: actions.cpp:588
COrder::NewActionUpgradeTo
static COrder * NewActionUpgradeTo(CUnit &unit, CUnitType &type, bool instant=false)
Definition: action_upgradeto.cpp:67
COrder::NewActionBuild
static COrder * NewActionBuild(const CUnit &builder, const Vec2i &pos, CUnitType &building)
Definition: action_build.cpp:72
COrder::NewActionStill
static COrder * NewActionStill()
Definition: action_still.cpp:65
AutoRepair
bool AutoRepair(CUnit &unit)
Definition: action_still.cpp:249
COrder::NewActionReturnGoods
static COrder * NewActionReturnGoods(CUnit &harvester, CUnit *depot)
Definition: action_resource.cpp:173
COrder::NewActionStandGround
static COrder * NewActionStandGround()
Definition: action_still.cpp:60
UnitActionResource
@ UnitActionResource
unit repairing
Definition: actions.h:76
COrder::Instant
bool Instant
true when order is finish
Definition: actions.h:163
COrder::NewActionExplore
static COrder * NewActionExplore(const CUnit &unit)
Definition: action_explore.cpp:73
UnitActionDie
@ UnitActionDie
unit attacks ground
Definition: actions.h:59
DoActionMove
int DoActionMove(CUnit &unit)
Generic move action.
Definition: action_move.cpp:135
CAnimation
Definition: animation.h:94
COrder::OnAiHitUnit
virtual bool OnAiHitUnit(CUnit &unit, CUnit *attacker, int)
Definition: actions.cpp:135
COrder::Save
virtual void Save(CFile &file, const CUnit &unit) const =0
COrder::UpdatePathFinderData
virtual void UpdatePathFinderData(PathFinderInput &input)=0
UnitAction
UnitAction
Definition: actions.h:49
GetNumWaitingWorkers
int GetNumWaitingWorkers(const CUnit &mine)
Hash calculated to find sync failures.
Definition: action_resource.cpp:822
COrder::NewActionBuilt
static COrder * NewActionBuilt(CUnit &builder, CUnit &unit)
Definition: action_built.cpp:55
COrderPtr
COrder * COrderPtr
Definition: actions.h:166
COrder::NewActionAttackGround
static COrder * NewActionAttackGround(const CUnit &attacker, const Vec2i &dest)
Definition: action_attack.cpp:140
AutoAttack
bool AutoAttack(CUnit &unit)
Definition: action_still.cpp:327
CConstructionFrame
Construction frame.
Definition: construct.h:112
COrder::NewActionRepair
static COrder * NewActionRepair(CUnit &unit, CUnit &target)
Definition: action_repair.cpp:58
COrder::Show
virtual PixelPos Show(const CViewport &vp, const PixelPos &lastScreenPos) const =0
COrder::HasGoal
bool HasGoal() const
Definition: actions.h:121
COrder::ParseGenericData
bool ParseGenericData(lua_State *l, int &j, const char *value)
Definition: script_unit.cpp:187
COrder::Clone
virtual COrder * Clone() const =0
UnitActionExplore
@ UnitActionExplore
unit builds building
Definition: actions.h:73
COrder::Action
const unsigned char Action
Definition: actions.h:161
CclParseOrder
void CclParseOrder(lua_State *l, CUnit &unit, COrderPtr *order)
Parse order.
Definition: actions.cpp:196
COrder::NewActionResource
static COrder * NewActionResource(CUnit &harvester, const Vec2i &pos)
Definition: action_resource.cpp:132
UnitActionStill
@ UnitActionStill
No valid action.
Definition: actions.h:52
UnitActionBoard
@ UnitActionBoard
building is under construction
Definition: actions.h:69
COrder::NewActionFollow
static COrder * NewActionFollow(CUnit &dest)
Definition: action_follow.cpp:65
COrder::UpdatePathFinderData_NotCalled
void UpdatePathFinderData_NotCalled(PathFinderInput &input)
Definition: actions.cpp:114
UnitActionBuilt
@ UnitActionBuilt
building is researching spell
Definition: actions.h:66
COrder::Cancel
virtual void Cancel(CUnit &unit)
Definition: actions.h:104
COrder::NewActionAttack
static COrder * NewActionAttack(const CUnit &attacker, CUnit &target)
Definition: action_attack.cpp:101
UnHideUnit
void UnHideUnit(CUnit &unit)
Definition: action_still.cpp:154
UnitActionTransformInto
@ UnitActionTransformInto
unit harvesting resources
Definition: actions.h:77
UnitActionAttack
@ UnitActionAttack
unit moves to position/unit
Definition: actions.h:57
COrder::NewActionTrain
static COrder * NewActionTrain(CUnit &trainer, CUnitType &type)
Definition: action_train.cpp:59
SpellType
Definition: spells.h:205
COrder::IsValid
virtual bool IsValid() const =0
CFile
Definition: iolib.h:102
CUnit
The big unit structure.
Definition: unit.h:135
AutoCast
bool AutoCast(CUnit &unit)
Definition: action_still.cpp:197
COrder::~COrder
virtual ~COrder()
Hash calculated to find sync failures.
Definition: actions.cpp:99
UnitActionAttackGround
@ UnitActionAttackGround
unit attacks position/unit
Definition: actions.h:58
UnitActionUpgradeTo
@ UnitActionUpgradeTo
building is training
Definition: actions.h:64
UnitActionResearch
@ UnitActionResearch
building is upgrading itself
Definition: actions.h:65
COrder::OnAnimationAttack
virtual void OnAnimationAttack(CUnit &unit)
Definition: actions.cpp:162
(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.