void SObject::Arrive() { SObject *truedest = destination->Represents(); if(!truedest) { system = destination->Sys(); orbit = destination->OrbitDist(); period = destination->Period(); startpos = destination->OrbitPhase(); arrive_turn = destination->ArriveTurn(); depart_turn = destination->DepartTurn(); Trash(location); location = destination->Location(); Trash(destination); destination = destination->Destination(); Trash(target); target = NULL; distance = 0; } else if(truedest->SType() == SOBJECT_PLANET) { system = destination->system; orbit = destination->orbit; period = destination->period; startpos = destination->startpos; Trash(location); location = destination; truedest->See(Owner()); truedest->Know(Owner()); destination = NULL; } else if(truedest->SType() == SOBJECT_SYSTEM) { orbit = 6600; period = int(sqrt(double(orbit)*double(orbit)*double(orbit))); int xp = system->gxpos - destination->system->gxpos; int yp = system->gypos - destination->system->gypos; double tang = double(cur_game->turn) * double(256*256*256) / double(period); double nang = double(65536) * atan2(double(yp), double(xp)) / 2.0 / M_PIl; startpos = int(nang - tang); system->FleetLeaves((Fleet*)this); system = destination->system; system->FleetArrives((Fleet*)this); Trash(location); location = NULL; truedest->Know(Owner()); Trash(destination); destination = NULL; } else if(truedest->SType() == SOBJECT_FLEET && SType() == SOBJECT_FLEET && Owner() == truedest->Owner()) { Fleet *flt = (Fleet *)this; for(int shp=0; shp < flt->NumShips(); ++shp) ((Fleet*)truedest)->AddShip(flt->GetShip(shp)); if(cur_object == this) cur_object = truedest; panel_draw(); RemapPositions(flt, truedest); flt->RemoveShips(0); } else if(truedest->SType() == SOBJECT_FLEET && SType() == SOBJECT_FLEET) { Fleet *flt = (Fleet*)this; flt->Attack((Fleet*)truedest); system = destination->system; orbit = destination->orbit; period = destination->period; startpos = destination->startpos; Trash(location); location = destination->location; Trash(destination); destination = destination->destination; //FIXME! Two attacking each other! } else if(truedest->SType() == SOBJECT_FLEET) { system = destination->system; orbit = destination->orbit; period = destination->period; startpos = destination->startpos; Trash(location); location = destination->location; Trash(destination); destination = destination->destination; } }