#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
}
}
}