public override void Update(GameTime gameTime) { EllapsedTime += gameTime.ElapsedGameTime.TotalSeconds; if (EllapsedTime >= 10) { int OldNumberOfGameScreen = ListGameScreen.Count; MultiplayerScreen Autoplay = new MultiplayerScreen(); Autoplay.Load(); Constants.ShowAnimation = false; DeathmatchMap NewMap = Autoplay.LoadAutoplay(); NewMap.ListGameScreen = ListGameScreen; NewMap.Load(); NewMap.Init(); NewMap.TogglePreview(true); //Remove any GameScreen created by the map so they don't show up immediately. List <GameScreen> ListGameScreenCreatedByMap = new List <GameScreen>(ListGameScreen.Count - OldNumberOfGameScreen); for (int S = ListGameScreen.Count - 1 - OldNumberOfGameScreen; S >= 0; --S) { ListGameScreenCreatedByMap.Add(ListGameScreen[S]); ListGameScreen.RemoveAt(S); } RemoveAllScreens(); ListGameScreen.Insert(0, NewMap); NewMap.Update(gameTime); for (int S = 0; S < ListGameScreenCreatedByMap.Count; ++S) { ListGameScreen.Insert(0, ListGameScreenCreatedByMap[S]); ListGameScreenCreatedByMap[S].Update(gameTime); } ListGameScreenCreatedByMap.Clear(); } if (InputHelper.InputUpPressed()) { EllapsedTime = 0; SelectedChoice--; sndSelection.Play(); if (SelectedChoice == -1) { SelectedChoice = 4; } } else if (InputHelper.InputDownPressed()) { EllapsedTime = 0; SelectedChoice++; sndSelection.Play(); if (SelectedChoice == 5) { SelectedChoice = 0; } } else if (InputHelper.InputConfirmPressed()) { switch ((MenuChoices)SelectedChoice) { case MenuChoices.NewGame: sndIntroSong.Stop(); sndConfirm.Play(); /* * * int OldNumberOfGameScreen = ListGameScreen.Count; * StreamReader BR = new StreamReader("Content/Map path.ini"); * DeathmatchMap NewMap = new DeathmatchMap(BR.ReadLine(), 0, new Dictionary<string, List<Core.Units.Squad>>()); * BR.Close(); * NewMap.ListGameScreen = ListGameScreen; * NewMap.PlayerRoster = new Roster(); * NewMap.PlayerRoster.LoadRoster(); * NewMap.Load(); * NewMap.Init(); * NewMap.TogglePreview(true); * * //Remove any GameScreen created by the map so they don't show up immediately. * List<GameScreen> ListGameScreenCreatedByMap = new List<GameScreen>(ListGameScreen.Count - OldNumberOfGameScreen); * for (int S = ListGameScreen.Count - 1 - OldNumberOfGameScreen; S >= 0; --S) * { * ListGameScreenCreatedByMap.Add(ListGameScreen[S]); * ListGameScreen.RemoveAt(S); * } * * RemoveAllScreens(); * ListGameScreen.Insert(0, NewMap); * NewMap.Update(gameTime); * * for (int S = 0; S < ListGameScreenCreatedByMap.Count; ++S) * { * ListGameScreen.Insert(0, ListGameScreenCreatedByMap[S]); * ListGameScreenCreatedByMap[S].Update(gameTime); * } * * ListGameScreenCreatedByMap.Clear();*/ PushScreen(new GameSelection()); break; case MenuChoices.QuickLoad: if (File.Exists("User Data/Saves/TempSave.sav")) { sndIntroSong.Stop(); sndConfirm.Play(); BattleMap QuickLoadMap = BattleMap.LoadTemporaryMap(ListGameScreen); QuickLoadMap.TogglePreview(true); ListGameScreen.Insert(0, QuickLoadMap); } else { sndDeny.Play(); } break; case MenuChoices.Encyclopedia: sndDeny.Play(); break; case MenuChoices.Option: PushScreen(new OptionMenu()); sndConfirm.Play(); break; case MenuChoices.LoadGame: if (File.Exists("User Data/Saves/SRWE Save.bin")) { sndIntroSong.Stop(); sndConfirm.Play(); Roster PlayerRoster = new Roster(); PlayerRoster.LoadRoster(); Dictionary <string, Unit> DicUnitType = Unit.LoadAllUnits(); Dictionary <string, BaseSkillRequirement> DicRequirement = BaseSkillRequirement.LoadAllRequirements(); Dictionary <string, BaseEffect> DicEffect = BaseEffect.LoadAllEffects(); Dictionary <string, AutomaticSkillTargetType> DicAutomaticSkillTarget = AutomaticSkillTargetType.LoadAllTargetTypes(); Dictionary <string, ManualSkillTarget> DicManualSkillTarget = ManualSkillTarget.LoadAllTargetTypes(); DataScreen.LoadProgression(PlayerRoster, DicUnitType, DicRequirement, DicEffect, DicAutomaticSkillTarget, DicManualSkillTarget); PushScreen(new NewIntermissionScreen(PlayerRoster)); } else { sndDeny.Play(); } break; } } }
public override BattleMap LoadTemporaryMap(BinaryReader BR) { PlayerRoster = new Roster(); PlayerRoster.LoadRoster(); Load(); DataScreen.LoadProgression(BR, PlayerRoster, DicUnitType, DicRequirement, DicEffect, DicAutomaticSkillTarget, DicManualSkillTarget); //Initialise the ScreenSize based on the map loaded. ScreenSize = new Point(Constants.Width / TileSize.X, Constants.Height / TileSize.Y); IsInit = true; RequireDrawFocus = false; TogglePreview(true); int DicMapVariablesCount = BR.ReadInt32(); DicMapVariables = new Dictionary <string, double>(DicMapVariablesCount); for (int i = 0; i < DicMapVariablesCount; ++i) { DicMapVariables.Add(BR.ReadString(), BR.ReadDouble()); } CursorPosition.X = BR.ReadSingle(); CursorPosition.Y = BR.ReadSingle(); CameraPosition.X = BR.ReadSingle(); CameraPosition.Y = BR.ReadSingle(); ActivePlayerIndex = BR.ReadInt32(); GameTurn = BR.ReadInt32(); VictoryCondition = BR.ReadString(); LossCondition = BR.ReadString(); SkillPoint = BR.ReadString(); ListBackground.Clear(); int ListBackgroundCount = BR.ReadInt32(); for (int B = 0; B < ListBackgroundCount; ++B) { ListBackground.Add(AnimationBackground.LoadAnimationBackground(BR.ReadString(), Content, GraphicsDevice)); } ListForeground.Clear(); int ListForegroundCount = BR.ReadInt32(); for (int F = 0; F < ListForegroundCount; ++F) { ListForeground.Add(AnimationBackground.LoadAnimationBackground(BR.ReadString(), Content, GraphicsDevice)); } sndBattleThemeName = BR.ReadString(); if (!string.IsNullOrEmpty(sndBattleThemeName)) { FMODSound NewBattleTheme = new FMODSound(FMODSystem, "Content/Maps/BGM/" + sndBattleThemeName + ".mp3"); NewBattleTheme.SetLoop(true); sndBattleTheme = NewBattleTheme; } string ThemePath = BR.ReadString(); uint ThemePosition = BR.ReadUInt32(); if (!string.IsNullOrEmpty(ThemePath)) { FMODSound NewTheme = new FMODSound(FMODSystem, "Content/Maps/BGM/" + ThemePath + ".mp3"); NewTheme.SetLoop(true); NewTheme.PlayAsBGM(); FMODSystem.sndActiveBGMName = ThemePath; NewTheme.SetPosition(ThemePosition); } Dictionary <uint, Squad> DicLoadedSquad = new Dictionary <uint, Squad>(); int ListPlayerCount = BR.ReadInt32(); ListPlayer = new List <Player>(ListPlayerCount); for (int P = 0; P < ListPlayerCount; ++P) { string ActivePlayerName = BR.ReadString(); string ActivePlayerType = BR.ReadString(); bool ActivePlayerIsHuman = BR.ReadBoolean(); int ActivePlayerTeam = BR.ReadInt32(); byte ActivePlayerColorRed = BR.ReadByte(); byte ActivePlayerColorGreen = BR.ReadByte(); byte ActivePlayerColorBlue = BR.ReadByte(); Player NewPlayer = new Player(ActivePlayerName, ActivePlayerType, ActivePlayerIsHuman, false, ActivePlayerTeam, Color.FromNonPremultiplied(ActivePlayerColorRed, ActivePlayerColorGreen, ActivePlayerColorBlue, 255)); ListPlayer.Add(NewPlayer); int ActivePlayerListSquadCount = BR.ReadInt32(); for (int S = 0; S < ActivePlayerListSquadCount; ++S) { Squad NewSquad; UInt32 ActiveSquadID = BR.ReadUInt32(); bool CanMove = BR.ReadBoolean(); int ActionsRemaining = BR.ReadInt32(); float ActiveSquadPositionX = BR.ReadSingle(); float ActiveSquadPositionY = BR.ReadSingle(); float ActiveSquadPositionZ = BR.ReadSingle(); string ActiveSquadSquadName = BR.ReadString(); string ActiveSquadCurrentMovement = BR.ReadString(); bool ActiveSquadIsFlying = BR.ReadBoolean(); bool ActiveSquadIsUnderTerrain = BR.ReadBoolean(); bool ActiveSquadIsPlayerControlled = BR.ReadBoolean(); string ActiveSquadSquadAI = BR.ReadString(); int ActiveSquadUnitsInSquad = BR.ReadInt32(); int CurrentLeaderIndex = BR.ReadInt32(); int CurrentWingmanAIndex = BR.ReadInt32(); int CurrentWingmanBIndex = BR.ReadInt32(); Unit[] ArrayNewUnit = new Unit[ActiveSquadUnitsInSquad]; for (int U = 0; U < ActiveSquadUnitsInSquad; ++U) { string UnitTypeName = BR.ReadString(); string RelativePath = BR.ReadString(); string TeamEventID = BR.ReadString(); if (string.IsNullOrEmpty(TeamEventID)) { ArrayNewUnit[U] = DicUnitType[UnitTypeName].FromFile(RelativePath, Content, DicRequirement, DicEffect, DicAutomaticSkillTarget); } else { foreach (Unit ActiveUnit in PlayerRoster.TeamUnits.GetAll()) { if (ActiveUnit.TeamEventID == TeamEventID) { ArrayNewUnit[U] = ActiveUnit; break; } } } ArrayNewUnit[U].QuickLoad(BR, Content, DicRequirement, DicEffect, DicAutomaticSkillTarget, DicManualSkillTarget); } NewSquad = new Squad(ActiveSquadSquadName, ArrayNewUnit[0], ArrayNewUnit.Length >= 2 ? ArrayNewUnit[1] : null, ArrayNewUnit.Length >= 3 ? ArrayNewUnit[2] : null); int ListAttackedTeamCount = BR.ReadInt32(); NewSquad.ListAttackedTeam = new List <int>(ListAttackedTeamCount); for (int U = 0; U < ListAttackedTeamCount; ++U) { NewSquad.ListAttackedTeam.Add(BR.ReadInt32()); } NewSquad.SetLeader(CurrentLeaderIndex); NewSquad.SetWingmanA(CurrentWingmanAIndex); NewSquad.SetWingmanB(CurrentWingmanBIndex); if (!CanMove) { NewSquad.EndTurn(); } NewSquad.ActionsRemaining = ActionsRemaining; NewSquad.SquadName = ActiveSquadSquadName; NewSquad.ID = ActiveSquadID; DicLoadedSquad.Add(ActiveSquadID, NewSquad); if (NewSquad.CurrentLeader != null) { //Do not spawn squads as it will trigger effect that were already activated if (Content != null) { NewSquad.Unit3D = new UnitMap3D(GraphicsDevice, Content.Load <Effect>("Shaders/Squad shader 3D"), NewSquad.CurrentLeader.SpriteMap, 1); } if (!string.IsNullOrEmpty(ActiveSquadSquadAI)) { NewSquad.SquadAI = new DeathmatchScripAIContainer(new DeathmatchAIInfo(this, NewSquad)); NewSquad.SquadAI.Load(ActiveSquadSquadAI); } NewPlayer.IsAlive = true; ActivateAutomaticSkills(NewSquad, string.Empty); } NewSquad.UpdateSquad(); //Load the Battle Themes. for (int U = 0; U < NewSquad.UnitsInSquad; ++U) { for (int C = NewSquad.At(U).ArrayCharacterActive.Length - 1; C >= 0; --C) { if (!string.IsNullOrEmpty(NewSquad.At(U).ArrayCharacterActive[C].BattleThemeName)) { if (!Character.DicBattleTheme.ContainsKey(NewSquad.At(U).ArrayCharacterActive[C].BattleThemeName)) { Character.DicBattleTheme.Add(NewSquad.At(U).ArrayCharacterActive[C].BattleThemeName, new FMODSound(FMODSystem, "Content/Maps/BGM/" + NewSquad.At(U).ArrayCharacterActive[C].BattleThemeName + ".mp3")); } } } } NewSquad.CurrentMovement = ActiveSquadCurrentMovement; NewSquad.IsFlying = ActiveSquadIsFlying; NewSquad.IsUnderTerrain = ActiveSquadIsUnderTerrain; NewSquad.IsPlayerControlled = ActiveSquadIsPlayerControlled; NewSquad.SetPosition(new Vector3(ActiveSquadPositionX, ActiveSquadPositionY, ActiveSquadPositionZ)); NewPlayer.ListSquad.Add(NewSquad); } } GlobalQuickLoadContext.SetContext(DicLoadedSquad); for (int P = 0; P < ListPlayer.Count; P++) { for (int S = 0; S < ListPlayer[P].ListSquad.Count; S++) { if (!ListPlayer[P].ListSquad[S].IsDead) { for (int U = 0; U < ListPlayer[P].ListSquad[S].UnitsInSquad; ++U) { for (int C = 0; C < ListPlayer[P].ListSquad[S].At(U).ArrayCharacterActive.Length; C++) { Character ActiveCharacter = ListPlayer[P].ListSquad[S].At(U).ArrayCharacterActive[C]; ActiveCharacter.Effects.QuickLoad(BR, ActiveParser, DicRequirement, DicEffect, DicAutomaticSkillTarget); } } } } } for (int P = 0; P < ListPlayer.Count; ++P) { for (int S = 0; S < ListPlayer[P].ListSquad.Count; ++S) { ListPlayer[P].ListSquad[S].ReloadSkills(DicUnitType, DicRequirement, DicEffect, DicAutomaticSkillTarget, DicManualSkillTarget); } } int ListMapScriptCount = BR.ReadInt32(); if (ListMapScript.Count != ListMapScriptCount) { throw new Exception("An error occured while loading the map."); } for (int S = 0; S < ListMapScript.Count; S++) { ListMapScript[S].Load(BR); } ListActionMenuChoice.Add(new ActionPanelPhaseChange(this)); return(this); }