예제 #1
0
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();
    }
}
예제 #2
0
void panel_draw_fleet() {
    int line = 0;
    char buf[80];
    Fleet *flt = (Fleet*)cur_object;
    int col = cur_game->players[flt->Owner()]->color;
    SDL_Rect screenrec = {800, 12, 224, 24*23};
    screenrec.h = min(int(screenrec.h), 24*(flt->NumShips()+SKIP));
    SDL_FillRect(screen, &screenrec, black);

    sprintf(buf, "Fleet: %s", flt->Name());
    string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);

    if(flt->Target() && flt->Distance() >= 0) {
        sprintf(buf, "Course to %s", flt->Target()->Name());
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
        int eta = flt->Distance();
        if(eta > 1) sprintf(buf, "ETA: %d Days", eta);
        else if(eta == 1) sprintf(buf, "ETA: 1 Day");
        else sprintf(buf, "Would Arrive Today");
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
    }
    else if(flt->Target()) {
        sprintf(buf, "Invalid Course");
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
        int eta = -flt->Distance();
        if(eta > 1) sprintf(buf, "ETA: %d Days", eta);
        else if(eta == 1) sprintf(buf, "ETA: 1 Day");
        else sprintf(buf, "Would Arrive Today");
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
    }
    else if((!flt->Location()) && (!flt->Destination())) {
        sprintf(buf, "Orbiting Star");
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
        sprintf(buf, "%d-Day Orbit", (flt->Period()+255)/256);
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
    }
    else if(!flt->Destination()) {
        sprintf(buf, "Orbiting %s", flt->Location()->Name());
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
        sprintf(buf, "16 Orbits/Day");
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
    }
    else {
        sprintf(buf, "Going to %s", flt->Destination()->Name());
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
        int eta = flt->ArriveTurn() - cur_game->turn;
        if(eta > 1) sprintf(buf, "ETA: %d Days", eta);
        else if(eta == 1) sprintf(buf, "ETA: 1 Day");
        else sprintf(buf, "Arriving Today");
        string_draw(screen, 816, 13+24*(line++), cur_font_black[col], buf);
    }

    for(int ctr=0; ctr < min(int(flt->NumShips()), 23-SKIP); ++ctr) {
        int clr = cur_game->players[flt->GetShip(ctr)->Owner()]->color;
        if(ctr == selection) clr = 8;
        sprintf(buf, "  %s: %s",
                flt->GetShip(ctr)->CName(), flt->GetShip(ctr)->Name());
        string_draw(screen, 816, 13+24*(line++), cur_font_black[clr], buf);
    }

    if(flt->NumShips() > 1) {
        buttlist[PANEL_FLEET][BUTTON_SPLIT] =		9;
    }
    else {
        buttlist[PANEL_FLEET][BUTTON_SPLIT] =		0;
    }

    if(flt->CanLand() && (!flt->Destination())) {
        buttlist[PANEL_FLEET][BUTTON_LAND] =	10;
        mo[BUTTON_LAND] = -1;
    }
    else {
        buttlist[PANEL_FLEET][BUTTON_LAND] =	0;
        SDL_Rect canrec = {800, 768-64*2, 224, 64};
        SDL_FillRect(screen, &canrec, black);
        update(&canrec);
    }
}