void button_clicked_fleet(int button) { Fleet *flt = (Fleet*)cur_object; if(button == BUTTON_LAND) { if(!flt->CanLand()) return; if(!flt->Location()) return; if(!flt->Location()->Represents()) return; if(((Planet*)flt->Location()->Represents())->colonies.size() < 1) { ((Planet*)flt->Location()->Represents())->colonies.push_back( new Colony(flt->Owner(), ((Planet*)flt->Location()->Represents())) ); } int which = 0; while(!flt->GetShip(which)->CanLand()) ++which; ((Planet*)flt->Location()->Represents())->colonies[0]->LandShip(flt->GetShip(which)); if(flt->NumShips() <= 1) clear_sprites(1, 10); flt->DestroyShip(which); panel_draw(); page_draw(); } if(button == BUTTON_SPLIT) { /* if(!flt->Location()) return; if(!flt->Location()->Represents()) return; for(int shp=1; shp < flt->NumShips(); ++shp) { Fleet *newfleet = new Fleet(flt->Location()->Represents(), flt->Name()); newfleet->AddShip(flt->GetShip(shp)); newfleet->Location()->Represents()->Sys()->objects.push_back(newfleet); } */ for(int shp=1; shp < flt->NumShips(); ++shp) { Fleet *newfleet = new Fleet(); newfleet->CopyFrom(flt); newfleet->SetName(flt->Name()); newfleet->AddShip(flt->GetShip(shp)); flt->Sys()->objects.push_back(newfleet); } flt->RemoveShips(1); page_draw(); panel_init(); } }
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; } }