1 /* ScummVM - Graphic Adventure Engine 2 * 3 * ScummVM is the legal property of its developers, whose names 4 * are too numerous to list here. Please refer to the COPYRIGHT 5 * file distributed with this source distribution. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 20 * 21 */ 22 23 #ifndef SCUMM_HE_MOONBASE_AI_DEFENCEUNIT_H 24 #define SCUMM_HE_MOONBASE_AI_DEFENCEUNIT_H 25 26 namespace Scumm { 27 28 class AI; 29 30 enum { 31 DUT_ANTI_AIR = 1, 32 DUT_SHIELD = 2, 33 DUT_MINE = 3, 34 DUT_HUB = 4, 35 DUT_TOWER = 5, 36 DUT_BRIDGE = 6, 37 DUT_ENERGY = 7, 38 DUT_OFFENSE = 8, 39 DUT_CRAWLER = 9 40 }; 41 42 enum { 43 DUS_ON = 1, 44 DUS_OFF = 2, 45 DUS_DESTROYED = 3 46 }; 47 48 class DefenseUnit { 49 private: 50 int _id; 51 Common::Point _pos; 52 int _distanceTo; 53 int _state; 54 int _radius; 55 int _armor; 56 int _cost; 57 58 protected: 59 AI *_ai; 60 61 public: 62 DefenseUnit(AI *ai); 63 DefenseUnit(DefenseUnit *inUnit, AI *ai); 64 65 virtual ~DefenseUnit(); 66 setID(int id)67 void setID(int id) { _id = id; } setDistanceTo(int distanceTo)68 void setDistanceTo(int distanceTo) { _distanceTo = distanceTo; } setState(int state)69 void setState(int state) { _state = state; } setRadius(int radius)70 void setRadius(int radius) { _radius = radius; } setArmor(int armor)71 void setArmor(int armor) { _armor = armor; } setDamage(int damage)72 void setDamage(int damage) { _armor -= damage; } setPos(int x,int y)73 void setPos(int x, int y) { 74 _pos.x = x; 75 _pos.y = y; 76 } setCost(int cost)77 void setCost(int cost) { _cost = cost; } 78 getID()79 int getID() const { return _id; } getDistanceTo()80 int getDistanceTo() const { return _distanceTo; } getState()81 int getState() const { return _state; } getRadius()82 int getRadius() const { return _radius; } getArmor()83 int getArmor() const { return _armor; } getPosX()84 int getPosX() const { return _pos.x; } getPosY()85 int getPosY() const { return _pos.y; } getCost()86 int getCost() const { return _cost; } 87 88 virtual int getType() const = 0; 89 90 virtual Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) = 0; 91 virtual int selectWeapon(int index) = 0; 92 }; 93 94 class AntiAirUnit : public DefenseUnit { 95 private: 96 97 public: 98 AntiAirUnit(AI *ai); 99 AntiAirUnit(DefenseUnit *inUnit, AI *ai); getType()100 int getType() const override { return DUT_ANTI_AIR; } 101 Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) override; 102 int selectWeapon(int index) override; 103 }; 104 105 class ShieldUnit : public DefenseUnit { 106 private: 107 108 public: 109 ShieldUnit(AI *ai); 110 ShieldUnit(DefenseUnit *inUnit, AI *ai); getType()111 int getType() const override { return DUT_SHIELD; } 112 Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) override; 113 int selectWeapon(int index) override; 114 }; 115 116 class MineUnit : public DefenseUnit { 117 private: 118 119 public: 120 MineUnit(AI *ai); 121 MineUnit(DefenseUnit *inUnit, AI *ai); getType()122 int getType() const override { return DUT_MINE; } 123 Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) override; 124 int selectWeapon(int index) override; 125 }; 126 127 class HubUnit : public DefenseUnit { 128 private: 129 130 public: 131 HubUnit(AI *ai); 132 HubUnit(DefenseUnit *inUnit, AI *ai); getType()133 int getType() const override { return DUT_HUB; } 134 Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) override; 135 int selectWeapon(int index) override; 136 }; 137 138 class TowerUnit : public DefenseUnit { 139 private: 140 141 public: 142 TowerUnit(AI *ai); 143 TowerUnit(DefenseUnit *inUnit, AI *ai); getType()144 int getType() const override { return DUT_TOWER; } 145 Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) override; 146 int selectWeapon(int index) override; 147 }; 148 149 class BridgeUnit : public DefenseUnit { 150 private: 151 152 public: 153 BridgeUnit(AI *ai); 154 BridgeUnit(DefenseUnit *inUnit, AI *ai); getType()155 int getType() const override { return DUT_BRIDGE; } 156 Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) override; 157 int selectWeapon(int index) override; 158 }; 159 160 class EnergyUnit : public DefenseUnit { 161 private: 162 163 public: 164 EnergyUnit(AI *ai); 165 EnergyUnit(DefenseUnit *inUnit, AI *ai); getType()166 int getType() const override { return DUT_ENERGY; } 167 Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) override; 168 int selectWeapon(int index) override; 169 }; 170 171 class OffenseUnit : public DefenseUnit { 172 private: 173 174 public: 175 OffenseUnit(AI *ai); 176 OffenseUnit(DefenseUnit *inUnit, AI *ai); getType()177 int getType() const override { return DUT_OFFENSE; } 178 Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) override; 179 int selectWeapon(int index) override; 180 }; 181 182 class CrawlerUnit : public DefenseUnit { 183 private: 184 185 public: 186 CrawlerUnit(AI *ai); 187 CrawlerUnit(DefenseUnit *inUnit, AI *ai); getType()188 int getType() const override { return DUT_CRAWLER; } 189 Common::Point *createTargetPos(int index, int distance, int weaponType, int sourceX, int sourceY) override; 190 int selectWeapon(int index) override; 191 }; 192 193 } // End of namespace Scumm 194 195 #endif 196