void Ship::WasCaptured(const shared_ptr<Ship> &capturer) { // Repair up to the point where it is just barely not disabled. hull = max(hull, MinimumHull()); // Set the new government. government = capturer->GetGovernment(); // Transfer some crew over. Only transfer the bare minimum unless even that // is not possible, in which case, share evenly. int totalRequired = capturer->RequiredCrew() + RequiredCrew(); int transfer = RequiredCrew(); if(totalRequired > capturer->Crew()) transfer = max(1, (capturer->Crew() * RequiredCrew()) / totalRequired); capturer->AddCrew(-transfer); AddCrew(transfer); // Set the capturer as this ship's parent. SetParent(capturer); SetTargetShip(shared_ptr<Ship>()); SetTargetPlanet(nullptr); SetTargetSystem(nullptr); commands.Clear(); isDisabled = false; hyperspaceSystem = nullptr; isSpecial = capturer->isSpecial; personality = capturer->personality; }