unitWeapons.cpp

Go to the documentation of this file.
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 

Generated on Fri Dec 13 14:54:18 2013 for FastECSLent by  doxygen 1.5.4