Files
PlanetFleet/missileJet.cpp
T
2022-08-13 17:11:27 +03:00

56 lines
2.0 KiB
C++
Executable File

#include <model.h>
#include <stateManager.h>
#include "missileJet.h"
#include "projectileData.h"
#include "inGameAppState.h"
using namespace vb01;
namespace battleship{
using namespace unitData;
MissileJet::MissileJet(Player *player, Vector3 pos, int id, bool onBoard) : Jet(player, pos, id, onBoard) {}
void MissileJet::attack(Order order) {
if(!onBoard && canFire() && missilesInstalled){
Vector3 target = order.targets[0].pos;
float distance=pos.getDistanceFrom(target);
if(distance <= range){
Vector3 targetPtr = Vector3::VEC_ZERO;
InGameAppState *inGameState = ((InGameAppState*)GameManager::getSingleton()->getStateManager()->getAppStateByType((int)AppStateType::IN_GAME_STATE));
for(Player *p : inGameState->getPlayers())
for(Unit *u : p->getUnits()){
bool jet = (u->getType() == UNIT_TYPE::MISSILE_JET || u->getType() == UNIT_TYPE::DEMO_JET);
if((jet && type == AAM) && (!jet && type == AWM) && u->getPos() == order.targets[0].pos)
targetPtr = u->getPos();
}
if(targetPtr != Vector3::VEC_ZERO)
targetPtr = target;
fireMissile(targetPtr);
}
else
Unit::attack(order);
}
else if(onBoard)
takeOff();
else
removeOrder(0);
}
void MissileJet::fireMissile(Vector3 t) {
Vector3 p = pos + leftVec * projectileData::pos[id][0][missiles - 1].x + upVec * projectileData::pos[id][0][missiles - 1].y - dirVec * projectileData::pos[id][0][missiles - 1].z;
addProjectile(new Missile(this, missileNodes[missiles-1], t, p, dirVec, leftVec, upVec, id, 0, 0));
missileNodes[missiles-1]->setParent(Root::getSingleton()->getRootNode());
missileNodes[missiles-1] = nullptr;
missiles--;
lastFireTime=getTime();
}
}