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; } } }
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")); } } }