#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 StartScreen.cs * @date Created: 2007/01/20 * @author File creator: David Teviotdale * @author Credits: none */ #endregion #region Using Statements using System; using System.Collections.Generic; using System.Text; using Microsoft.Xna.Framework; using ProjectXenocide.Model; using ProjectXenocide.Utils; using ProjectXenocide.Model.Geoscape; using ProjectXenocide.Model.Geoscape.Vehicles; using ProjectXenocide.Model.Geoscape.Outposts; using ProjectXenocide.Model.Geoscape.AI; using ProjectXenocide.Model.Battlescape; using ProjectXenocide.Model.Battlescape.Combatants; using ProjectXenocide.Model.StaticData.Items; #endregion Using Statements namespace ProjectXenocide.UI.Screens { /// /// This is the first screen shown when Xenocide starts /// public class StartScreen : Screen { /// /// Default constructor (obviously) /// public StartScreen() : base("StartScreen", @"Content\Textures\UI\StartScreenBackground.png") { Xenocide.AudioSystem.PlayRandomMusic(""); } #region Create the CeGui widgets /// /// add the buttons to the screen /// protected override void CreateCeguiWidgets() { // put Xenocide version in bottom right corner AddStaticText(0.90f, 0.940f, 0.10f, 0.04f).Text = Xenocide.CurrentVersion; // Only put up these buttons if debug build #if DEBUG testsButton = AddButton("BUTTON_RUN_TESTS", 0.3500f, 0.75f, 0.3000f, 0.04f); battlescapeButton = AddButton("BUTTON_DEBUG_BATTLESCAPE", 0.0000f, 0.75f, 0.3000f, 0.04f); testsButton.Clicked += new CeGui.GuiEventHandler(OnRunTestsClicked); battlescapeButton.Clicked += new CeGui.GuiEventHandler(OnBattlescapeClicked); #endif startButton = AddButton("BUTTON_NEW_GAME", 0.3500f, 0.80f, 0.3000f, 0.04f); loadButton = AddButton("BUTTON_LOAD_SAVED_GAME", 0.3500f, 0.85f, 0.3000f, 0.04f); quitButton = AddButton("BUTTON_QUIT", 0.3500f, 0.90f, 0.3000f, 0.04f, "Menu\\exitgame.ogg"); creditsButton = AddButton("BUTTON_CREDITS", 0.3500f, 0.95f, 0.3000f, 0.04f); startButton.Clicked += new CeGui.GuiEventHandler(OnNewGameClicked); loadButton.Clicked += new CeGui.GuiEventHandler(OnShowLoadGameScreen); quitButton.Clicked += new CeGui.GuiEventHandler(OnQuitGameClicked); creditsButton.Clicked += new CeGui.GuiEventHandler(OnCreditsClicked); } private CeGui.Widgets.PushButton testsButton; private CeGui.Widgets.PushButton battlescapeButton; private CeGui.Widgets.PushButton startButton; private CeGui.Widgets.PushButton loadButton; private CeGui.Widgets.PushButton quitButton; private CeGui.Widgets.PushButton creditsButton; #endregion Create the CeGui widgets #region event handlers /// Run the unit Tests /// Not used /// Not used private void OnRunTestsClicked(object sender, CeGui.GuiEventArgs e) { Xenocide.GameState.SetToStartGameCondition(); Xenocide.StaticTables.StartSettings.Cheats.XcorpCantLooseAtStartOfMonth = true; ProjectXenocide.Model.Geoscape.Geography.Planet.RunTests(); ProjectXenocide.Model.Battlescape.Mission.RunTests(); ProjectXenocide.Model.Battlescape.Combatants.Combatant.RunTests(); ProjectXenocide.Model.Battlescape.Trajectory.RunTests(); ProjectXenocide.Model.Battlescape.Terrain.RunTests(); ProjectXenocide.Model.Battlescape.Combatants.ShootOrder.RunTests(); ProjectXenocide.Model.Battlescape.Combatants.MoveOrder.RunTests(); ProjectXenocide.Model.Battlescape.CrewBuilder.RunTests(); ProjectXenocide.Model.Battlescape.Pathfinder.RunTests(); ProjectXenocide.Model.StaticData.Battlescape.CombatantFactory.RunTests(); ProjectXenocide.Model.StaticData.Battlescape.Armor.RunTests(); ProjectXenocide.Model.StaticData.Items.Item.RunItemTests(); ProjectXenocide.Model.Battlescape.Combatants.CombatantInventory.RunTests(); ProjectXenocide.Model.StaticData.Research.ResearchGraph.RunTests(); ProjectXenocide.Model.Geoscape.BuildProjectManager.RunTests(); ProjectXenocide.Model.Geoscape.ResearchProjectManager.RunTests(); ProjectXenocide.Model.Geoscape.AI.RetaliationTask.RunTests(); ProjectXenocide.Model.Geoscape.AI.BuildOutpostTask.RunTests(); ProjectXenocide.Model.Geoscape.AI.SupplyOutpostTask.RunTests(); ProjectXenocide.Model.Geoscape.AI.TerrorTask.RunTests(); ProjectXenocide.Model.Geoscape.AI.InfiltrationTask.RunTests(); ProjectXenocide.Model.Geoscape.Geography.GeoBitmap.RunTests(); ProjectXenocide.Model.Geoscape.GeoPosition.RunTests(); ProjectXenocide.Model.Scheduler.RunTests(); ProjectXenocide.Model.Geoscape.Vehicles.AttackAlienSiteMission.RunTests(); ProjectXenocide.Model.Geoscape.Outposts.OutpostStatistics.RunTests(); ProjectXenocide.Model.Geoscape.Outposts.Floorplan.RunTests(); ProjectXenocide.Model.Geoscape.Outposts.OutpostInventory.RunTests(); ProjectXenocide.Model.Geoscape.Vehicles.Ufo.RunTests(); ProjectXenocide.Model.Geoscape.Vehicles.Aircraft.RunTests(); ProjectXenocide.Model.ScoreLog.RunTests(); Util.ShowMessageBox("All unit tests passed"); } /// Go straight to a Battlescape /// Not used /// Not used private void OnBattlescapeClicked(object sender, CeGui.GuiEventArgs e) { StartDebugBattlescape(); } /// Start a new game /// Not used /// Not used private void OnNewGameClicked(object sender, CeGui.GuiEventArgs e) { Xenocide.GameState.SetToStartGameCondition(); GeoscapeScreen geoscapeScreen = new GeoscapeScreen(); geoscapeScreen.State = new GeoscapeScreen.AddingFirstBaseScreenState(geoscapeScreen); ScreenManager.ScheduleScreen(geoscapeScreen); } /// Replace screen on display with the Load Game Screen /// Not used /// Not used private void OnShowLoadGameScreen(object sender, CeGui.GuiEventArgs e) { ScreenManager.ScheduleScreen( new LoadSaveGameScreen( LoadSaveGameScreen.Mode.Load, LoadSaveGameScreen.CancelScreen.Start ) ); } /// Quit the game /// Not used /// Not used private void OnQuitGameClicked(object sender, CeGui.GuiEventArgs e) { ScreenManager.QuitGame = true; } /// Respond to user pressing the "Credits" button /// Not used /// Not used private void OnCreditsClicked(object sender, CeGui.GuiEventArgs e) { ShowCreditsScreen(); } #endregion event handlers /// Show the credits screen [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:DisposeObjectsBeforeLosingScope", Justification="FxCop false positive")] private void ShowCreditsScreen() { ScreenManager.ScheduleScreen(new CreditsScreen()); } /// Setup a battlescape and go to it private void StartDebugBattlescape() { Xenocide.GameState.SetToStartGameCondition(); // set up outpost for mission GeoPosition pos = new GeoPosition(); Outpost outpost = new Outpost(pos, "Dummy"); outpost.SetupPlayersFirstBase(); Xenocide.GameState.GeoData.Outposts.Add(outpost); // Launch a UFO Overmind overmind = Xenocide.GameState.GeoData.Overmind; overmind.DiableStartOfMonth(); overmind.DebugCreateMission(AlienMission.Retaliation, pos); RetaliationTask task = overmind.Tasks[0] as RetaliationTask; InvasionTask.TestReleaseUfo(task); Ufo ufo = overmind.Ufos[0]; // change UFO into a bigger one (so we've got a couple of aliens) ufo.DebugTransmute(Xenocide.StaticTables.ItemList["ITEM_UFO_RECON"]); ProjectXenocide.Model.Battlescape.Mission battlescapeMission = new UfoSiteMission(ufo, outpost.Fleet[2]); Xenocide.GameState.Battlescape = new Battle(battlescapeMission); ScreenManager.ScheduleScreen(new BattlescapeScreen()); // Kill or stun the aliens //Battle battlescape = Xenocide.GameState.Battlescape; //ProjectXenocide.Model.Battlescape.Mission.DebugKillAndStunTeam(battlescape.Teams[Team.Aliens].Combatants); // simple 3 level terrain for testing /* Terrain.TerrainBuilder builder = new Terrain.TestTerrainBuilder(TestTerrain.Barracks); ProjectXenocide.Model.Battlescape.Mission battlescapeMission = new MockMission(builder); Xenocide.GameState.Battlescape = new Battle(battlescapeMission); ScreenManager.ScheduleScreen(new BattlescapeScreen()); */ } } }