void Ship::EnterHyperspace() { assert(GetFlightState() != Ship::HYPERSPACE); const SystemPath dest = GetHyperspaceDest(); int fuel_cost; Ship::HyperjumpStatus status = CheckHyperspaceTo(dest, fuel_cost, m_hyperspace.duration); if (status != HYPERJUMP_OK) { // XXX something has changed (fuel loss, mass change, whatever). // could report it to the player but better would be to cancel the // countdown before this is reached. either way do something return; } Equip::Type fuelType = GetHyperdriveFuelType(); m_equipment.Remove(fuelType, fuel_cost); if (fuelType == Equip::MILITARY_FUEL) { m_equipment.Add(Equip::RADIOACTIVES, fuel_cost); } UpdateEquipStats(); LuaEvent::Queue("onLeaveSystem", this); SetFlightState(Ship::HYPERSPACE); // virtual call, do class-specific things OnEnterHyperspace(); }
void Ship::EnterHyperspace() { assert(GetFlightState() != Ship::HYPERSPACE); // Is it still a good idea, with the onLeaveSystem moved elsewhere? Ship::HyperjumpStatus status = CheckHyperjumpCapability(); if (status != HYPERJUMP_OK && status != HYPERJUMP_INITIATED) { if (m_flightState == JUMPING) SetFlightState(FLYING); return; } // Clear ships cached list of nearby bodies so we don't try to access them. m_nearbyBodies.clear(); SetFlightState(Ship::HYPERSPACE); // virtual call, do class-specific things OnEnterHyperspace(); }