コード例 #1
0
ファイル: Weapon.cpp プロジェクト: Banbury/starshatter-open
void
Weapon::SetOwner(Ship* s)
{
    ship = s;

    if (design->turret_model) {
        Solid* t = new(__FILE__,__LINE__) Solid;
        t->UseModel(design->turret_model);
        turret = t;
    }

    if (design->turret_base_model) {
        Solid* t = new(__FILE__,__LINE__) Solid;
        t->UseModel(design->turret_base_model);
        turret_base = t;
    }

    if (!design->primary          && 
            design->visible_stores   &&
            ammo == nbarrels         &&
            design->shot_model != 0)
    {
        for (int i = 0; i < nbarrels; i++) {
            Solid* s = new(__FILE__,__LINE__) Solid;
            s->UseModel(design->shot_model);

            visible_stores[i] = s;
        }
    }
}
コード例 #2
0
void
TacRefDlg::SelectShip(const ShipDesign* design)
{
    if (beauty && camview) {
        scene.Graphics().clear();

        if (design) {
            radius = design->radius;

            UpdateCamera();

            int level = design->lod_levels-1;
            int n     = design->models[level].size();

            for (int i = 0; i < n; i++) {
                Model* model = design->models[level].at(i);

                Solid* s = new(__FILE__,__LINE__) Solid;
                s->UseModel(model);
                s->CreateShadows(1);
                s->MoveTo(*design->offsets[level].at(i));

                scene.Graphics().append(s);
            }
        }
    }

    if (txt_caption) {
        txt_caption->SetText("");

        if (design) {
            char txt[256];
            sprintf_s(txt, "%s %s", design->abrv, design->DisplayName());
            txt_caption->SetText(txt);
        }
    }

    if (txt_stats) {
        txt_stats->SetText("");

        if (design) {
            Text desc;
            char txt[256];

            sprintf_s(txt, "%s\t\t\t%s\n", Game::GetText("tacref.type").data(), Ship::ClassName(design->type));
            desc += txt;

            sprintf_s(txt, "%s\t\t\t%s\n", Game::GetText("tacref.class").data(), design->DisplayName());
            desc += txt;
            desc += Game::GetText("tacref.length");
            desc += "\t\t";

            if (design->type < Ship::STATION)
            FormatNumber(txt, design->radius/2);
            else
            FormatNumber(txt, design->radius*2);

            strcat_s(txt, " m\n");
            desc += txt;
            desc += Game::GetText("tacref.mass");
            desc += "\t\t\t";

            FormatNumber(txt, design->mass);
            strcat_s(txt, " T\n");
            desc += txt;
            desc += Game::GetText("tacref.hull");
            desc += "\t\t\t";

            FormatNumber(txt, design->integrity);
            strcat_s(txt, "\n");
            desc += txt;

            if (design->weapons.size()) {
                desc += Game::GetText("tacref.weapons");

                WepGroup groups[8];
                for (int w = 0; w < design->weapons.size(); w++) {
                    Weapon*     gun   = design->weapons[w];
                    WepGroup*   group = FindWepGroup(groups, gun->Group());

                    if (group)
                    group->count++;
                }

                for (int g = 0; g < 8; g++) {
                    WepGroup* group = &groups[g];
                    if (group && group->count) {
                        sprintf_s(txt, "\t\t%s (%d)\n\t\t", group->name.data(), group->count);
                        desc += txt;

                        for (int w = 0; w < design->weapons.size(); w++) {
                            Weapon* gun = design->weapons[w];

                            if (group->name == gun->Group()) {
                                sprintf_s(txt, "\t\t\t%s\n\t\t", (const char*) gun->Design()->name);
                                desc += txt;
                            }
                        }
                    }
                }

                desc += "\n";
            }

            txt_stats->SetText(desc);
        }
    }

    if (txt_description) {
        if (design && design->description.length()) {
            txt_description->SetText(design->description);
        }
        else {
            txt_description->SetText(Game::GetText("tacref.mass"));
        }
    }
}