1 #include "spring_api.h" 2 3 #include "AI/Wrappers/Cpp/src-generated/Engine.h" 4 #include "AI/Wrappers/Cpp/src-generated/OOAICallback.h" 5 #include "ExternalAI/Interface/AISEvents.h" 6 #include "ExternalAI/Interface/AISCommands.h" 7 #include "AI/Wrappers/Cpp/src-generated/UnitDef.h" 8 #include "AI/Wrappers/Cpp/src-generated/WeaponMount.h" 9 #include "AI/Wrappers/Cpp/src-generated/WeaponDef.h" 10 #include "AI/Wrappers/Cpp/src-generated/Damage.h" 11 #include "SpringGame.h" 12 #include "SpringUnitType.h" 13 CSpringUnitType(CSpringGame * game,springai::OOAICallback * callback,springai::UnitDef * unitDef)14CSpringUnitType::CSpringUnitType(CSpringGame* game, springai::OOAICallback* callback, springai::UnitDef* unitDef): 15 boptions(unitDef->GetBuildOptions()), 16 game(game), 17 callback(callback), 18 unitDef(unitDef), 19 resources(callback->GetResources()), 20 weaponMounts(unitDef->GetWeaponMounts()) 21 { 22 } 23 ~CSpringUnitType()24CSpringUnitType::~CSpringUnitType(){ 25 game = NULL; 26 callback = NULL; 27 delete unitDef; //same as in SpringUnit.cpp 28 unitDef = NULL; 29 for (int i = 0; i < resources.size(); i += 1) { 30 delete resources[i]; 31 } 32 for (int i = 0; i < weaponMounts.size(); i += 1) { 33 delete weaponMounts[i]; 34 } 35 for (int i = 0; i < boptions.size(); i += 1) { 36 delete boptions[i]; 37 } 38 } 39 Name()40std::string CSpringUnitType::Name(){ 41 return this->unitDef->GetName(); 42 } 43 ReclaimSpeed()44float CSpringUnitType::ReclaimSpeed(){ 45 return unitDef->GetReclaimSpeed(); 46 } 47 ResourceCost(int idx)48float CSpringUnitType::ResourceCost(int idx){ 49 if(!resources.empty()){ 50 std::vector<springai::Resource*>::iterator i = resources.begin(); 51 for(;i != resources.end();++i){ 52 springai::Resource* r = *i; 53 if(r->GetResourceId() == idx){ 54 return unitDef->GetCost(r); 55 } 56 } 57 } 58 return -1; 59 } 60 Extractor()61bool CSpringUnitType::Extractor(){ 62 springai::Resource* r = static_cast<CSpringMap*>(game->Map())->GetMetalResource(); 63 return unitDef->GetResourceExtractorRange(r); 64 } 65 GetMaxHealth()66float CSpringUnitType::GetMaxHealth(){ 67 return unitDef->GetHealth(); 68 } 69 WeaponCount()70int CSpringUnitType::WeaponCount(){ 71 return weaponMounts.size(); 72 } 73 MaxWeaponDamage()74float CSpringUnitType::MaxWeaponDamage(){ 75 if(!weaponMounts.empty()){ 76 float output = 0; 77 std::vector<springai::WeaponMount*>::iterator i = weaponMounts.begin(); 78 for(; i != weaponMounts.begin();++i){ 79 springai::WeaponMount* m = *i; 80 springai::WeaponDef* def = m->GetWeaponDef(); 81 springai::Damage* d = def->GetDamage(); 82 float damage = *(d->GetTypes().begin()); 83 output += damage; 84 delete d; 85 delete def; 86 } 87 return output; 88 } 89 return 0; 90 } 91 GetUnitDef()92springai::UnitDef* CSpringUnitType::GetUnitDef(){ 93 return unitDef; 94 } 95 BuildOptions()96std::vector<IUnitType*> CSpringUnitType::BuildOptions(){ 97 std::vector<IUnitType*> options; 98 99 std::vector<springai::UnitDef*> defs = unitDef->GetBuildOptions(); 100 if(!defs.empty()){ 101 std::vector<springai::UnitDef*>::iterator i = defs.begin(); 102 for(;i!= defs.end();++i){ 103 springai::UnitDef* u = *i; 104 IUnitType* ut = game->ToIUnitType(u); 105 options.push_back(ut); 106 delete u; 107 } 108 } 109 return options; 110 } 111