Files
PlanetFleet/demoJet.cpp
T
devZoGok 179f4c28ac factored out a state manager
using GameManager via a singleton
2021-10-30 08:09:30 +03:00

51 lines
1.8 KiB
C++
Executable File

#include "demoJet.h"
#include "inGameAppState.h"
#include "stateManager.h"
#include "util.h"
using namespace game::core;
using namespace game::util;
namespace game{
namespace content{
DemoJet::DemoJet(Player *player,vector3df pos, int id, bool onBoard) : Jet(player,pos, id,onBoard) {}
void DemoJet::attack(Order order){
if(!onBoard){
Unit::attack(order);
vector3df target=*order.targetPos[0];
float angle=getAngleBetween(dirVec,target-pos);
vector3df axis=dirVec.crossProduct(target-pos);
if(maxTurnAngle<angle/PI*180){
quaternion rotQuat=quaternion(0,0,0,0).fromAngleAxis(maxTurnAngle/180*PI,axis);
orientUnit(rotQuat*dirVec);
}
}
else
takeOff();
}
void DemoJet::update(){
Jet::update();
if(!onBoard&&!orders.empty()&&orders[0].type==Order::TYPE::ATTACK){
GameManager *gm = GameManager::getSingleton();
ISceneManager *smgr = gm->getDevice()->getSceneManager();
ISceneNode *collNode = castRay(smgr,pos,pos+dirVec*length);
if(collNode&&collNode!=node){
InGameAppState *inGameState=((InGameAppState*)gm->getStateManager()->getAppState(AppStateTypes::IN_GAME_STATE));
for(Player *p : inGameState->getPlayers())
for(Unit *u : p->getUnits())
if(u->getNode()==collNode)
u->takeDamage(damage);
blowUp();
}
else if(pos.Y<0)
blowUp();
}
}
}
}