00001 /* 00002 * weapon.cpp 00003 * 00004 * Created on: Feb 28, 2012 00005 * Author: sushil 00006 */ 00007 #include <ent.h> 00008 #include <engine.h> 00009 #include <distanceMgr.h> 00010 #include "unitWeapons.h" 00011 #include "DEBUG.h" 00012 00013 FastEcslent::Weapon::Weapon(Entity* ent, UnitAspectType ast, WeaponType wtype): UnitAspect(ent, ast) { 00014 weaponType = wtype; 00015 } 00016 00017 void FastEcslent::Weapon::init(){ 00018 distanceMgr = this->entity->engine->distanceMgr; 00019 weaponMgr = this->entity->engine->weaponMgr; 00020 hitpoints = weaponMgr->maxHitpoints[this->entity->entityType]; 00021 armor = weaponMgr->initArmor[this->entity->entityType]; 00022 damageMultiplier = weaponMgr->initDamageMultiplier[this->entity->entityType]; 00023 } 00024 00025 00026 void FastEcslent::Weapon::tick(double dt) { 00027 if(distanceMgr->closestEnemyDistance[this->entity->entityId.id] < weaponMgr->range[weaponType]){ 00028 target.entity = this->entity->engine->entityMgr->ents[distanceMgr->closestEnemy[this->entity->entityId.id]]; 00029 dealDamageToTarget(target, dt); 00030 // DEBUG(std::cout << "Entity: " << entity->entityId.id << ", Side: " << entity->entityId.side << " dealing : " << dealDamageToTarget(target, dt) 00031 // << " to TargetEntity: " << target.entity->entityId.id << ", target's Side: " << target.entity->entityId.side << std::endl;) 00032 } 00033 } 00034 00035 void FastEcslent::Weapon::dealDamageToTarget(Target tgt, double dt){ 00036 //double damage = weaponMgr->damageMap[entity->entityType][tgt.entity->entityType] * damageMultiplier; 00037 if(entity->entityState == FastEcslent::ALIVE){ 00038 double damage = weaponMgr->damageMap[tgt.entity->entityType][weaponType] * damageMultiplier; 00039 tgt.entity->weapon->takeDamage(damage, dt); 00040 } 00041 } 00042 00043 void FastEcslent::Weapon::takeDamage(double amt, double dt) { 00044 if (this->entity->entityState == FastEcslent::ALIVE) { 00045 hitpoints -= amt * armor * dt; 00046 if (hitpoints <= 0){ 00047 this->entity->switchState(DYING); 00048 hitpoints = 0; 00049 } 00050 } 00051 } 00052