#region Copyright /* -------------------------------------------------------------------------------- This source file is part of Xenocide by Project Xenocide Team For the latest info on Xenocide, see http://www.projectxenocide.com/ This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. -------------------------------------------------------------------------------- */ /* * @file EquipSoldierScreenInOutpostController.cs * @date Created: 2008/03/02 * @author File creator: David Teviotdale * @author Credits: none */ #endregion #region Using Statements using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using ProjectXenocide.Utils; using ProjectXenocide.Model.Geoscape; using ProjectXenocide.Model.Geoscape.Outposts; using ProjectXenocide.Model.StaticData.Items; using ProjectXenocide.Model.Battlescape.Combatants; using ProjectXenocide.UI.Dialogs; using ProjectXenocide.UI.Scenes; #endregion namespace ProjectXenocide.UI.Screens { /// This is the screen that lets player set the items a soldier carries public partial class EquipSoldierScreen { /// /// Specifies behaviour of screen, when Equipping a soldier in an outpost /// private class InOutpostController : Controller { /// /// Constructor /// /// The actual screen /// Soldiers player can select from /// Soldier in the list to initially show public InOutpostController(EquipSoldierScreen equipSoldierScreen, IEnumerable soldiers, Person soldier) : base(equipSoldierScreen) { this.soldiers = new List(soldiers); this.soldierIndex = this.soldiers.IndexOf(soldier); } #region Create the CeGui widgets /// add Widgets to the screen public override void CreateCeguiWidgets() { // combo box to allow player to select soldier to work on soldiersComboBox = EquipSoldierScreen.GuiBuilder.CreateComboBox("soldiersComboBox"); EquipSoldierScreen.AddWidget(soldiersComboBox, 0.7025f, 0.23f, 0.2275f, 0.4125f); PopulateSoldiersComboBox(); soldiersComboBox.ListSelectionAccepted += new CeGui.WindowEventHandler(OnSoldierSelectionChanged); } private CeGui.Widgets.ComboBox soldiersComboBox; /// /// Fill combo box with a list of soldiers /// private void PopulateSoldiersComboBox() { foreach (Person soldier in soldiers) { soldiersComboBox.AddItem(soldier.Name); } //... set combo selection to soldier currently being viewed soldiersComboBox.SetItemSelectState(soldierIndex, true); soldiersComboBox.Text = soldiersComboBox.SelectedItem.Text; //... tag the edit box of the combo for viewing only. soldiersComboBox.ReadOnly = true; } #endregion Create the CeGui widgets #region event handlers /// React to user pressing the Close button public override void OnCloseButton() { ReturnToParentScreen(); } /// Player wants to look at a different soldier /// Not used /// Not used private void OnSoldierSelectionChanged(object sender, CeGui.WindowEventArgs e) { ChangeSoldier(); } #endregion event handlers #region methods /// Player wants to look at a different soldier private void ChangeSoldier() { CeGui.Widgets.ListboxItem item = soldiersComboBox.SelectedItem; if (item != null) { EquipSoldierScreen.ReleaseMovingItem(); RecordSoldierLoadout(); soldierIndex = soldiersComboBox.GetItemIndex(item); } } /// /// Close this screen and go back to the Screen that created this one /// (either SolidersList or Battlescape) /// private void ReturnToParentScreen() { EquipSoldierScreen.ReleaseMovingItem(); RecordSoldierLoadout(); EquipSoldierScreen.ScreenManager.ScheduleScreen(new SoldiersListScreen(SelectedOutpostIndex())); } /// index to the outpost that this soldier belongs to /// index to Outpost private int SelectedOutpostIndex() { for (int i = 0; i < Xenocide.GameState.GeoData.Outposts.Count; ++i) { if (Xenocide.GameState.GeoData.Outposts[i] == Soldier.Outpost) { return i; } } // should never get here Debug.Assert(false); return 0; } /// /// Make a record of currently selected soldier's loadout, so we can /// maintain it automatically when soldier returns from misions /// private void RecordSoldierLoadout() { // note, we only record layout when we're in an outpost Combatant.Inventory.RecordLoadout(); } #endregion methods #region fields /// Combatant this screen is currently showing public override Combatant Combatant { get { return Soldier.Combatant; } } /// /// Soldiers player can select between /// private List soldiers; /// /// The Soldier this screen is currently showing /// private int soldierIndex; /// /// The Soldier this screen is currently showing /// private Person Soldier { get { return soldiers[soldierIndex]; } } #endregion } } }