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] ); }
void MainMenu::updateMenu() { setCoord(0,0, mWidth, mHeight); if (!mButtonBox) mButtonBox = mMainWidget->createWidget<MyGUI::Widget>("", MyGUI::IntCoord(0, 0, 0, 0), MyGUI::Align::Default); int curH = 0; MWBase::StateManager::State state = MWBase::Environment::get().getStateManager()->getState(); mVersionText->setVisible(state == MWBase::StateManager::State_NoGame); std::vector<std::string> buttons; if (state==MWBase::StateManager::State_Running) buttons.push_back("return"); buttons.push_back("newgame"); if (state==MWBase::StateManager::State_Running && MWBase::Environment::get().getWorld()->getGlobalInt ("chargenstate")==-1 && MWBase::Environment::get().getWindowManager()->isSavingAllowed()) buttons.push_back("savegame"); if (MWBase::Environment::get().getStateManager()->characterBegin()!= MWBase::Environment::get().getStateManager()->characterEnd()) buttons.push_back("loadgame"); buttons.push_back("options"); if (state==MWBase::StateManager::State_NoGame) buttons.push_back("credits"); buttons.push_back("exitgame"); // Create new buttons if needed for (std::vector<std::string>::iterator it = buttons.begin(); it != buttons.end(); ++it) { if (mButtons.find(*it) == mButtons.end()) { Gui::ImageButton* button = mButtonBox->createWidget<Gui::ImageButton> ("ImageBox", MyGUI::IntCoord(0, curH, 0, 0), MyGUI::Align::Default); button->setProperty("ImageHighlighted", "textures\\menu_" + *it + "_over.dds"); button->setProperty("ImageNormal", "textures\\menu_" + *it + ".dds"); button->setProperty("ImagePushed", "textures\\menu_" + *it + "_pressed.dds"); button->eventMouseButtonClick += MyGUI::newDelegate(this, &MainMenu::onButtonClicked); button->setUserData(std::string(*it)); mButtons[*it] = button; } } // Start by hiding all buttons int maxwidth = 0; for (std::map<std::string, Gui::ImageButton*>::iterator it = mButtons.begin(); it != mButtons.end(); ++it) { it->second->setVisible(false); MyGUI::IntSize requested = it->second->getRequestedSize(); if (requested.width > maxwidth) maxwidth = requested.width; } // Now show and position the ones we want for (std::vector<std::string>::iterator it = buttons.begin(); it != buttons.end(); ++it) { assert(mButtons.find(*it) != mButtons.end()); Gui::ImageButton* button = mButtons[*it]; button->setVisible(true); MyGUI::IntSize requested = button->getRequestedSize(); // Trim off some of the excessive padding // TODO: perhaps do this within ImageButton? int trim = 8; button->setImageCoord(MyGUI::IntCoord(0, trim, requested.width, requested.height-trim)); int height = requested.height-trim*2; button->setImageTile(MyGUI::IntSize(requested.width, height)); button->setCoord((maxwidth-requested.width) / 2, curH, requested.width, height); curH += height; } if (state == MWBase::StateManager::State_NoGame) { // Align with the background image int bottomPadding=24; mButtonBox->setCoord (mWidth/2 - maxwidth/2, mHeight - curH - bottomPadding, maxwidth, curH); } else mButtonBox->setCoord (mWidth/2 - maxwidth/2, mHeight/2 - curH/2, maxwidth, curH); }