00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef __ACTION_BUILD_H__
00031 #define __ACTION_BUILD_H__
00032
00033 #include "actions.h"
00034
00036
00037 class COrder_Build : public COrder
00038 {
00039 friend COrder *COrder::NewActionBuild(const CUnit &builder, const Vec2i &pos, CUnitType &building);
00040 public:
00041 COrder_Build() : COrder(UnitActionBuild), Type(NULL), State(0), Range(0) {
00042 goalPos.x = -1;
00043 goalPos.y = -1;
00044 }
00045
00046 virtual COrder_Build *Clone() const { return new COrder_Build(*this); }
00047
00048 virtual bool IsValid() const;
00049
00050 virtual void Save(CFile &file, const CUnit &unit) const;
00051 virtual bool ParseSpecificData(lua_State *l, int &j, const char *value, const CUnit &unit);
00052
00053 virtual void Execute(CUnit &unit);
00054 virtual PixelPos Show(const CViewport &vp, const PixelPos &lastScreenPos) const;
00055 virtual void UpdatePathFinderData(PathFinderInput &input);
00056
00057 virtual void AiUnitKilled(CUnit &unit);
00058
00059 const CUnitType &GetUnitType() const { return *Type; }
00060
00061 private:
00062 bool MoveToLocation(CUnit &unit);
00063 CUnit *CheckCanBuild(CUnit &unit);
00064 bool StartBuilding(CUnit &unit, CUnit &ontop);
00065 bool BuildFromOutside(CUnit &unit) const;
00066 private:
00067 CUnitType *Type;
00068 CUnitPtr BuildingUnit;
00069 int State;
00070 int Range;
00071 Vec2i goalPos;
00072 };
00073
00075
00076 #endif // !__ACTION_BUILD_H__