Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // updates an enemy with fighter type attacker
- void EnemyControl::updateAttacker(Enemy& e, float deltaT){
- float bounceY = abs(spawnControl.outerAltitude - spawnControl.innerAltitude);
- float vLength = sqrtf(e.vel.x*e.vel.x + e.vel.y*e.vel.y + e.vel.z*e.vel.z);
- float pLength = sqrtf(e.pos.x*e.pos.x + e.pos.y*e.pos.y + e.pos.z*e.pos.z);
- float g = 14000.0f * vLength / (pLength*pLength);
- // update enemy position
- e.pos.x += deltaT * e.vel.x;
- e.pos.y += deltaT * e.vel.y;
- e.pos.z += deltaT * e.vel.z;
- // update enemy velocity direction
- if(e.fromX){
- e.vel.x += g * 4.0f * deltaT;
- }else{
- e.vel.x -= g * 4.0f * deltaT;
- }
- e.vel.y += g * bounceY * deltaT;
- if(e.fromZ){
- e.vel.z += g * 4.0f * deltaT;
- }else{
- e.vel.z -= g * 4.0f * deltaT;
- }
- // don't do this every time for performance
- if(vLength < (e.speedLength * 0.9)){
- // load e.vel into vector, normalize vector, rescale to speed, then store back in e.vel
- XMStoreFloat3(&e.vel, XMVector3Transform(XMVector3Normalize(XMLoadFloat3(&e.vel)), XMMatrixScaling((float)e.speed, (float)e.speed, (float)e.speed)));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement