using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Ninject;
using V3.Input;
using V3.Widgets;
namespace V3.Screens
{
///
/// The screen for the statistics.
///
// ReSharper disable once ClassNeverInstantiated.Global
public sealed class StatisticsScreen : AbstractScreen, IInitializable
{
private readonly ContentManager mContentManager;
private readonly IMenuFactory mMenuFactory;
private readonly MenuActions mMenuActions;
private readonly WidgetFactory mWidgetFactory;
private readonly AchievementsAndStatistics mAchievementsAndStatistics;
private Button mButtonBack;
private SelectButton mSelectMission;
private List mMenuList = new List();
private Texture2D mRectangle;
public StatisticsScreen(ContentManager contentManager, MenuActions menuActions, WidgetFactory widgetFactory,
IMenuFactory menuFactory, AchievementsAndStatistics achievementsAndStatistics)
: base(false, true)
{
mContentManager = contentManager;
mMenuActions = menuActions;
mWidgetFactory = widgetFactory;
mMenuFactory = menuFactory;
mAchievementsAndStatistics = achievementsAndStatistics;
}
public void Initialize()
{
mRectangle = mContentManager.Load("Sprites/WhiteRectangle");
mButtonBack = mWidgetFactory.CreateButton("Zurück");
mSelectMission = mWidgetFactory.CreateSelectButton();
var menu = mMenuFactory.CreateFormMenu();
mMenuList.Add(menu);
menu.Widgets.Add(mWidgetFactory.CreateLabel("Auswahl"));
menu.Widgets.Add(mSelectMission);
menu.Widgets.Add(mWidgetFactory.CreateLabel("Zeit"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + string.Format("{0:T}",mAchievementsAndStatistics.mUsedTime)));
menu.Widgets.Add(mWidgetFactory.CreateLabel("Getötete Gegner"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + string.Format("{0:00000}", mAchievementsAndStatistics.mKilledCreatures)));
menu.Widgets.Add(mWidgetFactory.CreateLabel("Verlorene Einheiten"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + string.Format("{0:00000}", mAchievementsAndStatistics.mLostServants)));
menu.Widgets.Add(mWidgetFactory.CreateLabel("zurückgelegte Entfernung"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + string.Format("{0:00000}", mAchievementsAndStatistics.mWalkedDistance) + " m"));
menu.Widgets.Add(mWidgetFactory.CreateEmptyWidget());
menu.Widgets.Add(mButtonBack);
menu = mMenuFactory.CreateFormMenu();
mMenuList.Add(menu);
menu.Widgets.Add(mWidgetFactory.CreateLabel("Auswahl"));
menu.Widgets.Add(mSelectMission);
menu.Widgets.Add(mWidgetFactory.CreateLabel("Zeit"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "00:00:00"));
menu.Widgets.Add(mWidgetFactory.CreateLabel("Getötete Gegner"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "000000"));
menu.Widgets.Add(mWidgetFactory.CreateLabel("Verlorene Einheiten"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "000000"));
menu.Widgets.Add(mWidgetFactory.CreateLabel("zurückgelegte Entfernung"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "000000"));
menu.Widgets.Add(mWidgetFactory.CreateEmptyWidget());
menu.Widgets.Add(mButtonBack);
menu = mMenuFactory.CreateFormMenu();
mMenuList.Add(menu);
menu.Widgets.Add(mWidgetFactory.CreateLabel("Auswahl"));
menu.Widgets.Add(mSelectMission);
menu.Widgets.Add(mWidgetFactory.CreateLabel("Zeit"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "00:00:00"));
menu.Widgets.Add(mWidgetFactory.CreateLabel("Getötete Gegner"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "000000"));
menu.Widgets.Add(mWidgetFactory.CreateLabel("Verlorene Einheiten"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "000000"));
menu.Widgets.Add(mWidgetFactory.CreateLabel("zurückgelegte Entfernung"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "000000"));
menu.Widgets.Add(mWidgetFactory.CreateEmptyWidget());
menu.Widgets.Add(mButtonBack);
for (var i = 0; i < mMenuList.Count; i++)
mSelectMission.Values.Add($"Mission {i + 1}");
menu = mMenuFactory.CreateFormMenu();
mMenuList.Add(menu);
menu.Widgets.Add(mWidgetFactory.CreateLabel("Auswahl"));
menu.Widgets.Add(mSelectMission);
menu.Widgets.Add(mWidgetFactory.CreateLabel("Zeit"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "00:00:00"));
menu.Widgets.Add(mWidgetFactory.CreateLabel("Getötete Gegner"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "000000"));
menu.Widgets.Add(mWidgetFactory.CreateLabel("Verlorene Einheiten"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "000000"));
menu.Widgets.Add(mWidgetFactory.CreateLabel("zurückgelegte Entfernung"));
menu.Widgets.Add(mWidgetFactory.CreateLabel(" " + "000000"));
menu.Widgets.Add(mWidgetFactory.CreateEmptyWidget());
menu.Widgets.Add(mButtonBack);
mSelectMission.Values.Add("Gesamt");
}
public override bool HandleKeyEvent(IKeyEvent keyEvent)
{
if (keyEvent.KeyState == KeyState.Down && keyEvent.Key == Keys.Escape)
mMenuActions.Close(this);
return true;
}
public override bool HandleMouseEvent(IMouseEvent mouseEvent)
{
GetCurrentMenu().HandleMouseEvent(mouseEvent);
return true;
}
public override void Update(GameTime gameTime)
{
if (mButtonBack.IsClicked)
{
mMenuActions.Close(this);
}
GetCurrentMenu().Update();
}
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
var menu = GetCurrentMenu();
var backgroundRectangle = new Rectangle((int)menu.Position.X,
(int)menu.Position.Y, (int)menu.Size.X, (int)menu.Size.Y);
backgroundRectangle.X -= 30;
backgroundRectangle.Y -= 30;
backgroundRectangle.Width += 60;
backgroundRectangle.Height += 60;
spriteBatch.Begin();
spriteBatch.Draw(mRectangle, backgroundRectangle, Color.LightGray);
spriteBatch.End();
GetCurrentMenu().Draw(spriteBatch);
}
private IMenu GetCurrentMenu()
{
return mMenuList[mSelectMission.SelectedIndex];
}
}
}