void Missile::update(const float elapsed_time, bool force) { OpenSteer::Vec3 steer = m_last_steer; if (force || m_pathing_engine->UpdateNumber() % PathingEngine::UPDATE_SETS == serialNumber % PathingEngine::UPDATE_SETS) { const float AT_DESTINATION = speed(); const float AT_DEST_SQUARED = AT_DESTINATION * AT_DESTINATION; float distance_squared = (m_destination - position()).lengthSquared(); CombatObjectPtr target = m_target.lock(); if (distance_squared < AT_DEST_SQUARED) { if (target) { Listener().MissileExploded(shared_from_this()); target->Damage(Stats().m_damage, NON_PD_DAMAGE); } else { Listener().MissileRemoved(shared_from_this()); } delete m_proximity_token; m_proximity_token = 0; m_pathing_engine->RemoveObject(shared_from_this()); return; } else { if (target) m_destination = target->position(); } steer = Steer(); } applySteeringForce(steer, elapsed_time); m_last_steer = steer; m_proximity_token->UpdatePosition(position()); }
// per frame simulation update void LowSpeedTurn::update(const float currentTime, const float elapsedTime){ // apply force to vehicle applySteeringForce(steering(), elapsedTime); // update Irrlicht node setPosition(position().vector3df()); irr::scene::ISceneNode::setRotation(forward().vector3df().getHorizontalAngle()); // update motion trail recordTrailVertex(currentTime, position()); }
void CombatShip::update(const float elapsed_time, bool force) { OpenSteer::Vec3 steer = m_last_steer; if (force || m_pathing_engine->UpdateNumber() % PathingEngine::UPDATE_SETS == serialNumber % PathingEngine::UPDATE_SETS) { if (m_last_queue_update_turn != m_turn) UpdateMissionQueue(); if (GetShip()->IsArmed()) FireAtHostiles(); steer = Steer(); } applySteeringForce(steer, elapsed_time); m_last_steer = steer; m_proximity_token->UpdatePosition(position()); }