void UseEquipWidget::UpdateEquip() { DeleteAllChildren(); int numSlots = Pi::player->m_equipment.GetSlotSize(Equip::SLOT_MISSILE); if (numSlots) { float spacing = 380.0f / numSlots; for (int i = 0; i < numSlots; ++i) { const Equip::Type t = Pi::player->m_equipment.Get(Equip::SLOT_MISSILE, i); if (t == Equip::NONE) continue; Gui::ImageButton *b; switch (t) { case Equip::MISSILE_UNGUIDED: b = new Gui::ImageButton("icons/missile_unguided.png"); break; case Equip::MISSILE_GUIDED: b = new Gui::ImageButton("icons/missile_guided.png"); break; case Equip::MISSILE_SMART: b = new Gui::ImageButton("icons/missile_smart.png"); break; default: case Equip::MISSILE_NAVAL: b = new Gui::ImageButton("icons/missile_naval.png"); break; } Add(b, spacing * i, 40); b->onClick.connect(sigc::bind(sigc::mem_fun(this, &UseEquipWidget::FireMissile), i)); b->SetToolTip(Equip::types[t].name); b->SetRenderDimensions(16, 16); } } { const Equip::Type t = Pi::player->m_equipment.Get(Equip::SLOT_ECM); if (t != Equip::NONE) { Gui::ImageButton *b = 0; if (t == Equip::ECM_BASIC) b = new Gui::ImageButton("icons/ecm_basic.png"); else if (t == Equip::ECM_ADVANCED) b = new Gui::ImageButton("icons/ecm_advanced.png"); assert(b); b->onClick.connect(sigc::mem_fun(Pi::player, &Ship::UseECM)); b->SetRenderDimensions(32, 32); Add(b, 32, 0); } } }
SystemView::SystemView() { SetTransparency(true); m_realtime = true; Gui::Screen::PushFont("OverlayFont"); m_objectLabels = new Gui::LabelSet(); Add(m_objectLabels, 0, 0); Gui::Screen::PopFont(); m_timePoint = (new Gui::Label(""))->Color(178, 178, 178); Add(m_timePoint, 2, Gui::Screen::GetHeight()-Gui::Screen::GetFontHeight()-66); m_infoLabel = (new Gui::Label(""))->Color(178, 178, 178); Add(m_infoLabel, 2, 0); m_infoText = (new Gui::Label(""))->Color(178, 178, 178); Add(m_infoText, 200, 0); m_zoomInButton = new Gui::ImageButton("icons/zoom_in.png"); m_zoomInButton->SetToolTip(Lang::ZOOM_IN); m_zoomInButton->SetRenderDimensions(30, 22); Add(m_zoomInButton, 700, 5); m_zoomOutButton = new Gui::ImageButton("icons/zoom_out.png"); m_zoomOutButton->SetToolTip(Lang::ZOOM_OUT); m_zoomOutButton->SetRenderDimensions(30, 22); Add(m_zoomOutButton, 732, 5); const int time_controls_left = Gui::Screen::GetWidth() - 150; const int time_controls_top = Gui::Screen::GetHeight() - 86; Gui::ImageButton *b = new Gui::ImageButton("icons/sysview_accel_r3.png", "icons/sysview_accel_r3_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), -10000000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(26, 17); Add(b, time_controls_left + 0, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_r2.png", "icons/sysview_accel_r2_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), -1000000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 26, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_r1.png", "icons/sysview_accel_r1_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), -100000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 45, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_rl.png", "icons/sysview_accel_rl_on.png"); b->onPress.connect(sigc::mem_fun(this, &SystemView::OnClickRealt)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 64, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_f1.png", "icons/sysview_accel_f1_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 100000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 83, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_f2.png", "icons/sysview_accel_f2_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 1000000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 102, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_f3.png", "icons/sysview_accel_f3_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 10000000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(26, 17); Add(b, time_controls_left + 121, time_controls_top); m_onMouseWheelCon = Pi::onMouseWheel.connect(sigc::mem_fun(this, &SystemView::MouseWheel)); ResetViewpoint(); }
void UseEquipWidget::UpdateEquip() { DeleteAllChildren(); lua_State *l = Lua::manager->GetLuaState(); int pristine_stack = lua_gettop(l); LuaObject<Ship>::PushToLua(Pi::player); lua_pushstring(l, "GetEquip"); lua_gettable(l, -2); lua_pushvalue(l, -2); lua_pushstring(l, "MISSILE"); lua_call(l, 2, 1); std::vector<std::string> missiles = LuaTable(l, -1).GetVector<std::string>(); lua_settop(l, pristine_stack); int numSlots = missiles.size(); if (numSlots) { float spacing = 380.0f / numSlots; for (int i = 0; i < numSlots; ++i) { const Equip::Type t = static_cast<Equip::Type>(LuaConstants::GetConstant(l, "EquipType", missiles[i].c_str())); if (t == Equip::NONE) continue; Gui::ImageButton *b; switch (t) { case Equip::MISSILE_UNGUIDED: b = new Gui::ImageButton("icons/missile_unguided.png"); break; case Equip::MISSILE_GUIDED: b = new Gui::ImageButton("icons/missile_guided.png"); break; case Equip::MISSILE_SMART: b = new Gui::ImageButton("icons/missile_smart.png"); break; default: case Equip::MISSILE_NAVAL: b = new Gui::ImageButton("icons/missile_naval.png"); break; } Add(b, spacing * i, 40); b->onClick.connect(sigc::bind(sigc::mem_fun(this, &UseEquipWidget::FireMissile), i)); b->SetToolTip(Equip::types[t].name); b->SetRenderDimensions(16, 16); } } { const Equip::Type t = Pi::player->m_equipment.Get(Equip::SLOT_ECM); if (t != Equip::NONE) { Gui::ImageButton *b = 0; if (t == Equip::ECM_BASIC) b = new Gui::ImageButton("icons/ecm_basic.png"); else if (t == Equip::ECM_ADVANCED) b = new Gui::ImageButton("icons/ecm_advanced.png"); assert(b); b->onClick.connect(sigc::mem_fun(Pi::player, &Ship::UseECM)); b->SetRenderDimensions(32, 32); Add(b, 32, 0); } } }
SystemView::SystemView(Game* game) : UIView(), m_game(game) { SetTransparency(true); Graphics::RenderStateDesc rsd; m_lineState = Pi::renderer->CreateRenderState(rsd); //m_renderer not set yet m_realtime = true; m_unexplored = true; Gui::Screen::PushFont("OverlayFont"); m_objectLabels = new Gui::LabelSet(); Add(m_objectLabels, 0, 0); m_shipLabels = new Gui::LabelSet(); Add(m_shipLabels, 0, 0); Gui::Screen::PopFont(); m_timePoint = (new Gui::Label(""))->Color(178, 178, 178); Add(m_timePoint, 2, Gui::Screen::GetHeight()-Gui::Screen::GetFontHeight()-66); m_infoLabel = (new Gui::Label(""))->Color(178, 178, 178); Add(m_infoLabel, 2, 0); m_infoText = (new Gui::Label(""))->Color(178, 178, 178); Add(m_infoText, 200, 0); m_zoomOutButton = new Gui::ImageButton("icons/zoom_out.png"); m_zoomOutButton->SetToolTip(Lang::ZOOM_OUT); m_zoomOutButton->SetRenderDimensions(30, 22); Add(m_zoomOutButton, 700, 5); m_zoomInButton = new Gui::ImageButton("icons/zoom_in.png"); m_zoomInButton->SetToolTip(Lang::ZOOM_IN); m_zoomInButton->SetRenderDimensions(30, 22); Add(m_zoomInButton, 732, 5); m_toggleShipsButton = new Gui::ImageButton("icons/toggle_ships_display.png"); m_toggleShipsButton->SetToolTip(Lang::SHIPS_DISPLAY_MODE_TOGGLE); m_toggleShipsButton->SetRenderDimensions(30, 22); m_toggleShipsButton->onClick.connect(sigc::mem_fun(this, &SystemView::OnToggleShipsButtonClick)); Add(m_toggleShipsButton, 660, 5); // Add the 3 Lagrange button stations m_toggleL4L5Button = new Gui::MultiStateImageButton(); m_toggleL4L5Button->AddState(LAG_ICON, "icons/toggle_lag_icon.png"); m_toggleL4L5Button->AddState(LAG_ICONTEXT, "icons/toggle_lag_icon_text.png"); m_toggleL4L5Button->AddState(LAG_OFF, "icons/toggle_lag_off.png"); m_toggleL4L5Button->SetToolTip(Lang::L4L5_DISPLAY_MODE_TOGGLE); m_toggleL4L5Button->SetRenderDimensions(30, 22); m_toggleL4L5Button->onClick.connect(sigc::mem_fun(this, &SystemView::OnToggleL4L5ButtonClick)); Add(m_toggleL4L5Button, 628, 5); m_toggleL4L5Button->SetActiveState(LAG_OFF); // orbital transfer planner UI int dx = 670; int dy = 40; m_plannerIncreaseFactorButton = new Gui::ImageButton("icons/orbit_increase_big.png"); m_plannerIncreaseFactorButton->SetRenderDimensions(18, 18); m_plannerIncreaseFactorButton->onClick.connect(sigc::mem_fun(this, &SystemView::OnIncreaseFactorButtonClick)); Add(m_plannerIncreaseFactorButton, dx + 40, dy); m_plannerResetFactorButton = new Gui::ImageButton("icons/orbit_factor_big.png"); m_plannerResetFactorButton->SetRenderDimensions(18, 18); m_plannerResetFactorButton->SetToolTip(Lang::PLANNER_RESET_FACTOR); m_plannerResetFactorButton->onClick.connect(sigc::mem_fun(this, &SystemView::OnResetFactorButtonClick)); Add(m_plannerResetFactorButton, dx + 20, dy); m_plannerDecreaseFactorButton = new Gui::ImageButton("icons/orbit_reduce_big.png"); m_plannerDecreaseFactorButton->SetRenderDimensions(18, 18); m_plannerDecreaseFactorButton->onClick.connect(sigc::mem_fun(this, &SystemView::OnDecreaseFactorButtonClick)); Add(m_plannerDecreaseFactorButton, dx, dy); m_plannerFactorText = (new Gui::Label(""))->Color(178, 178, 178); Add(m_plannerFactorText, dx + 60 + 7, dy); m_plannerIncreaseStartTimeButton = new Gui::ImageButton("icons/orbit_increase_big.png"); m_plannerIncreaseStartTimeButton->SetRenderDimensions(18, 18); Add(m_plannerIncreaseStartTimeButton, dx + 40, dy + 20); m_plannerResetStartTimeButton = new Gui::ImageButton("icons/orbit_start_big.png"); m_plannerResetStartTimeButton->SetRenderDimensions(18, 18); m_plannerResetStartTimeButton->SetToolTip(Lang::PLANNER_RESET_START); Add(m_plannerResetStartTimeButton, dx + 20, dy + 20); m_plannerDecreaseStartTimeButton = new Gui::ImageButton("icons/orbit_reduce_big.png"); m_plannerDecreaseStartTimeButton->SetRenderDimensions(18, 18); Add(m_plannerDecreaseStartTimeButton, dx, dy + 20); m_plannerStartTimeText = (new Gui::Label(""))->Color(178, 178, 178); Add(m_plannerStartTimeText, dx + 60, dy + 20); m_plannerAddProgradeVelButton = new Gui::ImageButton("icons/orbit_increase_big.png"); m_plannerAddProgradeVelButton->SetRenderDimensions(18, 18); Add(m_plannerAddProgradeVelButton, dx + 40, dy + 40); m_plannerZeroProgradeVelButton = new Gui::ImageButton("icons/orbit_proretro_big.png"); m_plannerZeroProgradeVelButton->SetRenderDimensions(18, 18); m_plannerZeroProgradeVelButton->SetToolTip(Lang::PLANNER_RESET_PROGRADE); Add(m_plannerZeroProgradeVelButton, dx + 20, dy + 40); m_plannerAddRetrogradeVelButton = new Gui::ImageButton("icons/orbit_reduce_big.png"); m_plannerAddRetrogradeVelButton->SetRenderDimensions(18, 18); Add(m_plannerAddRetrogradeVelButton, dx, dy + 40); m_plannerProgradeDvText = (new Gui::Label(""))->Color(178, 178, 178); Add(m_plannerProgradeDvText, dx + 60, dy + 40); m_plannerAddNormalVelButton = new Gui::ImageButton("icons/orbit_increase_big.png"); m_plannerAddNormalVelButton->SetRenderDimensions(18, 18); Add(m_plannerAddNormalVelButton, dx + 40, dy + 60); m_plannerZeroNormalVelButton = new Gui::ImageButton("icons/orbit_normal_big.png"); m_plannerZeroNormalVelButton->SetRenderDimensions(18, 18); m_plannerZeroNormalVelButton->SetToolTip(Lang::PLANNER_RESET_NORMAL); Add(m_plannerZeroNormalVelButton, dx + 20, dy + 60); m_plannerAddAntiNormalVelButton = new Gui::ImageButton("icons/orbit_reduce_big.png"); m_plannerAddAntiNormalVelButton->SetRenderDimensions(18, 18); Add(m_plannerAddAntiNormalVelButton, dx, dy + 60); m_plannerNormalDvText = (new Gui::Label(""))->Color(178, 178, 178); Add(m_plannerNormalDvText, dx + 60, dy + 60); m_plannerAddRadiallyInVelButton = new Gui::ImageButton("icons/orbit_increase_big.png"); m_plannerAddRadiallyInVelButton->SetRenderDimensions(18, 18); Add(m_plannerAddRadiallyInVelButton, dx + 40, dy + 80); m_plannerZeroRadialVelButton = new Gui::ImageButton("icons/orbit_radial_big.png"); m_plannerZeroRadialVelButton->SetRenderDimensions(18, 18); m_plannerZeroRadialVelButton->SetToolTip(Lang::PLANNER_RESET_RADIAL); Add(m_plannerZeroRadialVelButton, dx + 20, dy + 80); m_plannerAddRadiallyOutVelButton = new Gui::ImageButton("icons/orbit_reduce_big.png"); m_plannerAddRadiallyOutVelButton->SetRenderDimensions(18, 18); Add(m_plannerAddRadiallyOutVelButton, dx, dy + 80); m_plannerRadialDvText = (new Gui::Label(""))->Color(178, 178, 178); Add(m_plannerRadialDvText, dx + 60, dy + 80); const int time_controls_left = Gui::Screen::GetWidth() - 150; const int time_controls_top = Gui::Screen::GetHeight() - 86; Gui::ImageButton *b = new Gui::ImageButton("icons/sysview_accel_r3.png", "icons/sysview_accel_r3_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), -10000000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(26, 17); Add(b, time_controls_left + 0, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_r2.png", "icons/sysview_accel_r2_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), -100000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 26, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_r1.png", "icons/sysview_accel_r1_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), -1000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 45, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_rl.png", "icons/sysview_accel_rl_on.png"); b->onPress.connect(sigc::mem_fun(this, &SystemView::OnClickRealt)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 64, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_f1.png", "icons/sysview_accel_f1_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 1000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 83, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_f2.png", "icons/sysview_accel_f2_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 100000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(19, 17); Add(b, time_controls_left + 102, time_controls_top); b = new Gui::ImageButton("icons/sysview_accel_f3.png", "icons/sysview_accel_f3_on.png"); b->onPress.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 10000000.f)); b->onRelease.connect(sigc::bind(sigc::mem_fun(this, &SystemView::OnClickAccel), 0.0f)); b->SetRenderDimensions(26, 17); Add(b, time_controls_left + 121, time_controls_top); m_onMouseWheelCon = Pi::onMouseWheel.connect(sigc::mem_fun(this, &SystemView::MouseWheel)); Graphics::TextureBuilder b1 = Graphics::TextureBuilder::UI("icons/periapsis.png"); m_periapsisIcon.reset(new Gui::TexturedQuad(b1.GetOrCreateTexture(Gui::Screen::GetRenderer(), "ui"))); Graphics::TextureBuilder b2 = Graphics::TextureBuilder::UI("icons/apoapsis.png"); m_apoapsisIcon.reset(new Gui::TexturedQuad(b2.GetOrCreateTexture(Gui::Screen::GetRenderer(), "ui"))); Graphics::TextureBuilder l4 = Graphics::TextureBuilder::UI("icons/l4.png"); m_l4Icon.reset(new Gui::TexturedQuad(l4.GetOrCreateTexture(Gui::Screen::GetRenderer(), "ui"))); Graphics::TextureBuilder l5 = Graphics::TextureBuilder::UI("icons/l5.png"); m_l5Icon.reset(new Gui::TexturedQuad(l5.GetOrCreateTexture(Gui::Screen::GetRenderer(), "ui"))); ResetViewpoint(); RefreshShips(); m_shipDrawing = OFF; m_showL4L5 = LAG_OFF; m_planner = Pi::planner; m_orbitVts.reset( new vector3f[N_VERTICES_MAX] ); m_orbitColors.reset( new Color[N_VERTICES_MAX] ); }