Files
PlanetFleet/depthCharge.cpp
T
2021-11-01 11:49:56 +02:00

57 lines
1.8 KiB
C++
Executable File

#include <model.h>
#include "depthCharge.h"
#include "stateManager.h"
#include "inGameAppState.h"
#include "util.h"
using namespace vb01;
namespace battleship{
DepthCharge::DepthCharge(Unit *unit, Vector3 pos, Vector3 dir, Vector3 left, Vector3 up, int id, int weaponTypeId, int weaponId) :
Projectile(unit, nullptr, pos, dir, left, up, id, weaponTypeId, weaponId) {
speed = 0;
initTime = getTime();
}
void DepthCharge::update(){
//x=x0+vX+a*t*t/2
//y=y0+vY-g*t*t/2
float t = float(getTime() - initTime) / 1000;
pos = initPos + dirVec * speed + Vector3(0, speed * t - .5 * g * t * t, 0);
node->setPosition(pos);
checkForCollision();
}
void DepthCharge::checkForCollision() {
InGameAppState *inGameState = ((InGameAppState*)GameManager::getSingleton()->getStateManager()->getAppState(AppStateTypes::IN_GAME_STATE));
Node *collNode = nullptr;
bool detonated = false;
if(pos.y < -10)
detonated = true;
if(!detonated)
for(Player *p : inGameState->getPlayers())
for(Unit *u : p->getUnits()){
if(u == unit) continue;
Vector3 p0 = u->getCorner(0);
Vector3 p1 = u->getCorner(1);
Vector3 p3 = u->getCorner(3);
Vector3 p4 = u->getCorner(4);
/*
if(isWithinCuboid(p0,p1,p3,p4,pos)){
detonated=true;
collNode=u->getNode();
}
*/
}
if(detonated)
explode(collNode);
}
void DepthCharge::explode(Node *collNode) {
Projectile::explode(collNode);
}
}