#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 UfoInfoDialog.cs
* @date Created: 2007/08/19
* @author File creator: David Teviotdale
* @author Credits: none
*/
#endregion
#region Using Statements
using System;
using System.Collections.Generic;
using System.Text;
using CeGui;
using ProjectXenocide.UI.Screens;
using ProjectXenocide.Utils;
using ProjectXenocide.Model;
using ProjectXenocide.Model.Geoscape;
using ProjectXenocide.Model.Geoscape.Vehicles;
using ProjectXenocide.Model.Geoscape.Outposts;
using ProjectXenocide.Model.Geoscape.Geography;
using Xenocide.Resources;
#endregion
namespace ProjectXenocide.UI.Dialogs
{
///
/// Dialog that shows information on UFO on the Geoscape
///
class UfoInfoDialog : Dialog
{
///
/// Constructor
///
/// UFO to show information on
public UfoInfoDialog(Ufo ufo)
: base("Content/Layouts/UfoInfoDialog.layout")
{
this.ufo = ufo;
}
#region Create the CeGui widgets
///
/// add the buttons to the screen
///
protected override void CreateCeguiWidgets()
{
WindowManager.Instance.GetWindow(txtDetailsName).Text = MakeDialogText();
}
#endregion Create the CeGui widgets
#region event handlers
/// close the dialog
/// Not used
/// Not used
[GuiEvent()]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
public void OnCancelClicked(object sender, CeGui.GuiEventArgs e)
{
ScreenManager.CloseDialog(this);
}
#endregion event handlers
///
/// Create text to show on dialog
///
/// text to show
private String MakeDialogText()
{
StringBuilder sb = new StringBuilder(ufo.Name);
sb.Append(Util.Linefeed);
sb.Append(Util.StringFormat(Strings.MSGBOX_UFOINFO_SIZE, ufo.UfoItemInfo.UfoSize));
sb.Append(Util.Linefeed);
sb.Append(Util.StringFormat(Strings.MSGBOX_UFOINFO_SPEED, ufo.MetersPerSecond));
// if we can decode the transmissions, add extra information
if (UfoWithinDecodeTransmissionsRange())
{
sb.Append(Util.Linefeed);
sb.Append(Util.StringFormat(Strings.MSGBOX_UFOINFO_CRAFT_TYPE, ufo.UfoItemInfo.Name));
sb.Append(Util.Linefeed);
sb.Append(Util.StringFormat(Strings.MSGBOX_UFOINFO_RACE, Races.DisplayString(ufo.Race)));
sb.Append(Util.Linefeed);
sb.Append(Util.StringFormat(Strings.MSGBOX_UFOINFO_MISSION, ufo.Task.Name));
sb.Append(Util.Linefeed);
// zone
GeoPosition target = ufo.Task.Centroid;
PlanetRegion region = Xenocide.GameState.GeoData.Planet.GetRegionAtLocation(target);
sb.Append(Util.StringFormat(Strings.MSGBOX_UFOINFO_ZONE, region.Name));
}
return sb.ToString();
}
///
/// Is the UFO in range of an X-Corp outpost that can decode the UFO's transmissions?
///
/// true if in range
private bool UfoWithinDecodeTransmissionsRange()
{
bool decoding = false;
foreach (Outpost outpost in Xenocide.GameState.GeoData.Outposts)
{
decoding |= (outpost.IsOnRadar(ufo.Position, true) & outpost.Statistics.CanDecodeTransmissions());
}
return decoding;
}
#region Fields
///
/// UFO to show information on
///
private Ufo ufo;
#endregion
#region Constants
private const string txtDetailsName = "txtDetails";
#endregion
}
}