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.Objects;
using V3.Widgets;
namespace V3.Screens
{
///
/// The screen for the AchievementsAndStatistics.
///
// ReSharper disable once ClassNeverInstantiated.Global
public sealed class AchievementsScreen : AbstractScreen, IInitializable
{
//private AchievementBox mFirstSteps;
private AchievementBox mKillPrince;
private AchievementBox mKillKing;
//private AchievementBox mWarmasterAndWizard;
private AchievementBox mKaboom;
private AchievementBox mMarathonRunner;
private AchievementBox mIronMan;
private AchievementBox mMeatballCompany;
private AchievementBox mSkeletonHorseCavalry;
private AchievementBox mRightHandOfDeath;
private AchievementBox mMinimalist;
private AchievementBox mHundredDeadCorpses;
private AchievementBox mUndeadArmy;
private AchievementBox mHellsNotWaiting;
private readonly ContentManager mContentManager;
private readonly IMenuFactory mMenuFactory;
private readonly MenuActions mMenuActions;
private readonly WidgetFactory mWidgetFactory;
private readonly AchievementsAndStatistics mAchievementsAndStatistics;
private readonly ObjectsManager mObjectsManager;
private Button mButtonBack;
private SelectButton mSelectPage;
private List mMenuList = new List();
private Texture2D mRectangle;
public AchievementsScreen(ContentManager contentManager, MenuActions menuActions, WidgetFactory widgetFactory,
IMenuFactory menuFactory, AchievementsAndStatistics achievementsAndStatistics, ObjectsManager objectsManager)
: base(false, true)
{
mContentManager = contentManager;
mMenuFactory = menuFactory;
mMenuActions = menuActions;
mWidgetFactory = widgetFactory;
mAchievementsAndStatistics = achievementsAndStatistics;
mObjectsManager = objectsManager;
}
public void Initialize()
{
mRectangle = mContentManager.Load("Sprites/WhiteRectangle");
mButtonBack = mWidgetFactory.CreateButton("Zurück");
mSelectPage = mWidgetFactory.CreateSelectButton();
var menu = mMenuFactory.CreateVerticalMenu();
mMenuList.Add(menu);
menu.Widgets.Add(mSelectPage);
mKillPrince = mWidgetFactory.CreateAchievementBox();
mKillPrince.SetText("Erbfolge aufgehalten", "Vernichtet Prinz Erhard.");
menu.Widgets.Add(mKillPrince);
mKaboom = mWidgetFactory.CreateAchievementBox();
mKaboom.SetText("KABUMM!!!", "Tötet mindestens 10 Gegner mit einer einzigen Fleischklops-Explosion.");
menu.Widgets.Add(mKaboom);
mKillKing = mWidgetFactory.CreateAchievementBox();
mKillKing.SetText("Königsmord", "Nehmt eure Vergeltung am König und tötet ihn.");
menu.Widgets.Add(mKillKing);
menu.Widgets.Add(mButtonBack);
menu = mMenuFactory.CreateVerticalMenu();
mMenuList.Add(menu);
menu.Widgets.Add(mSelectPage);
mHundredDeadCorpses = mWidgetFactory.CreateAchievementBox();
mHundredDeadCorpses.SetText("Leichenfledderer", "Tötet in einer Mission mindestens 100 Gegner.");
menu.Widgets.Add(mHundredDeadCorpses);
mUndeadArmy = mWidgetFactory.CreateAchievementBox();
mUndeadArmy.SetText("Untote Armee", "Tötet in einer Mission mindestens 1000 Gegner.");
menu.Widgets.Add(mUndeadArmy);
mRightHandOfDeath = mWidgetFactory.CreateAchievementBox();
mRightHandOfDeath.SetText("Die erbarmungslose rechte Hand des Todes", "Tötet insgesamt 10 000 Gegner.");
menu.Widgets.Add(mRightHandOfDeath);
menu.Widgets.Add(mButtonBack);
menu = mMenuFactory.CreateVerticalMenu();
mMenuList.Add(menu);
menu.Widgets.Add(mSelectPage);
mMeatballCompany = mWidgetFactory.CreateAchievementBox();
mMeatballCompany.SetText("Fleischpanzer-Kompanie", "Erschafft und befehligt in einer Mission 10 Fleischklopse gleichzeitig.");
menu.Widgets.Add(mMeatballCompany);
mSkeletonHorseCavalry = mWidgetFactory.CreateAchievementBox();
mSkeletonHorseCavalry.SetText("Klappernde Kavallerie", "Erschafft und befehligt in einer Mission 25 Skelettpferde gleichzeitig.");
menu.Widgets.Add(mSkeletonHorseCavalry);
mMinimalist = mWidgetFactory.CreateAchievementBox();
mMinimalist.SetText("Minimalist", "Beendet eine Mission und setzt dabei weniger als 100 Einheiten ein.");
menu.Widgets.Add(mMinimalist);
menu.Widgets.Add(mButtonBack);
menu = mMenuFactory.CreateVerticalMenu();
mMenuList.Add(menu);
menu.Widgets.Add(mSelectPage);
mHellsNotWaiting = mWidgetFactory.CreateAchievementBox();
mHellsNotWaiting.SetText("Die Hölle wartet nicht", "Beendet eine Mission in weniger als 5 Minuten.");
menu.Widgets.Add(mHellsNotWaiting);
mMarathonRunner = mWidgetFactory.CreateAchievementBox();
mMarathonRunner.SetText("Marathonläufer", "Legt in einer Mission mindestens 1000m zurück.");
menu.Widgets.Add(mMarathonRunner);
mIronMan = mWidgetFactory.CreateAchievementBox();
mIronMan.SetText("Der Iron Man", "Legt insgesamt eine Strecke von 10 000m zurück.");
menu.Widgets.Add(mIronMan);
menu.Widgets.Add(mButtonBack);
for (var i = 0; i < mMenuList.Count; i++)
mSelectPage.Values.Add($"Seite {i + 1}");
}
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();
// achievement datas. if one value becomes a given value, the corresponding achievement will be enabled.
if (mAchievementsAndStatistics.mKillPrince)
mKillPrince.IsEnabled = true;
if (mAchievementsAndStatistics.mKillKing)
mKillKing.IsEnabled = true;
if (mAchievementsAndStatistics.mHellsNotWaiting)
mHellsNotWaiting.IsEnabled = true;
if (mAchievementsAndStatistics.mKaboom)
mKaboom.IsEnabled = true;
if (mAchievementsAndStatistics.mMarathonRunner >= 1000)
mMarathonRunner.IsEnabled = true;
if (mAchievementsAndStatistics.mIronMan >= 10000)
mIronMan.IsEnabled = true;
if (mAchievementsAndStatistics.mMeatballCompany >= 10)
mMeatballCompany.IsEnabled = true;
if (mAchievementsAndStatistics.mSkeletonHorseCavalry >= 25)
mSkeletonHorseCavalry.IsEnabled = true;
if (mAchievementsAndStatistics.mRightHandOfDeath >= 10000)
mRightHandOfDeath.IsEnabled = true;
if (mAchievementsAndStatistics.mMinimalist <= 100 && mObjectsManager.Boss != null && mObjectsManager.Boss.IsDead)
mMinimalist.IsEnabled = true;
if (mAchievementsAndStatistics.mHundredDeadCorpses >= 100)
mHundredDeadCorpses.IsEnabled = true;
if (mAchievementsAndStatistics.mUndeadArmy >= 1000)
mUndeadArmy.IsEnabled = true;
}
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.WhiteSmoke);
spriteBatch.End();
menu.Draw(spriteBatch);
}
private IMenu GetCurrentMenu()
{
return mMenuList[mSelectPage.SelectedIndex];
}
}
}