public void ShowReconnectMessageBox() { var messageBox = MyGuiSandbox.CreateMessageBox( buttonType : MyMessageBoxButtonsType.YES_NO, messageText : MyTexts.Get(MySpaceTexts.MessageBoxTextAreYouSureYouWantToReconnect), messageCaption : MyTexts.Get(MySpaceTexts.MessageBoxCaptionPleaseConfirm), callback : delegate(MyGuiScreenMessageBox.ResultEnum callbackReturn) { if (callbackReturn == MyGuiScreenMessageBox.ResultEnum.YES) { if (MyMultiplayer.Static is MyMultiplayerLobby) { var lobbyId = MyMultiplayer.Static.LobbyId; MyGuiScreenMainMenu.UnloadAndExitToMenu(); MyJoinGameHelper.JoinGame(lobbyId); } else if (MyMultiplayer.Static is MyMultiplayerClient) { var server = (MyMultiplayer.Static as MyMultiplayerClient).Server; MyGuiScreenMainMenu.UnloadAndExitToMenu(); MyJoinGameHelper.JoinGame(server); } } }); messageBox.SkipTransition = true; messageBox.CloseBeforeCallback = true; MyGuiSandbox.AddScreen(messageBox); }
private void OnLoadException(Exception e, StringBuilder errorText, float heightMultiplier = 1.0f) { MySandboxGame.Log.WriteLine("ERROR: Loading screen failed"); MySandboxGame.Log.WriteLine(e); m_screenToLoad = null; // GamePlayScreen might not have been unloaded, so check this here if (MyGuiScreenGamePlay.Static != null) { MyGuiScreenGamePlay.Static.UnloadData(); MyGuiScreenGamePlay.Static.UnloadContent(); } // Reset this to true so we have sounds MySandboxGame.IsUpdateReady = true; MySandboxGame.AreClipmapsReady = true; MyGuiScreenMainMenu.UnloadAndExitToMenu(); var errorScreen = MyGuiSandbox.CreateMessageBox( messageText: errorText, messageCaption: MyTexts.Get(MySpaceTexts.MessageBoxCaptionError)); var size = errorScreen.Size.Value; size.Y *= heightMultiplier; errorScreen.Size = size; errorScreen.RecreateControls(false); MyGuiSandbox.AddScreen(errorScreen); }
private static void CheckDx11AndJoin(MyObjectBuilder_World world, MyMultiplayerBase multiplayer) { bool needsDx11 = world.Checkpoint.RequiresDX >= 11; if (!needsDx11 || MySandboxGame.IsDirectX11) { if (multiplayer.Battle) { if (multiplayer.BattleCanBeJoined) { MyGuiScreenLoadSandbox.LoadMultiplayerBattleWorld(world, multiplayer); } else { MyLog.Default.WriteLine("World downloaded but battle game ended"); MyGuiScreenMainMenu.UnloadAndExitToMenu(); MyGuiSandbox.Show(MyCommonTexts.MultiplayerErrorSessionEnded); multiplayer.Dispose(); } } else if (multiplayer.Scenario) { MyGuiScreenLoadSandbox.LoadMultiplayerScenarioWorld(world, multiplayer); } else { MyGuiScreenLoadSandbox.LoadMultiplayerSession(world, multiplayer); } } else { HandleDx11Needed(); } }
public static void LoadMultiplayerScenarioWorld(MyObjectBuilder_World world, MyMultiplayerBase multiplayerSession) { Debug.Assert(MySession.Static != null); MyLog.Default.WriteLine("LoadMultiplayerScenarioWorld() - Start"); if (world.Checkpoint.BriefingVideo != null && world.Checkpoint.BriefingVideo.Length > 0) { MyGuiSandbox.OpenUrlWithFallback(world.Checkpoint.BriefingVideo, "Scenario briefing video", true); } if (!MySteamWorkshop.CheckLocalModsAllowed(world.Checkpoint.Mods, false)) { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption : MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText : MyTexts.Get(MyCommonTexts.DialogTextLocalModsDisabledInMultiplayer), buttonType : MyMessageBoxButtonsType.OK, callback : delegate(MyGuiScreenMessageBox.ResultEnum result) { MyGuiScreenMainMenu.ReturnToMainMenu(); })); MyLog.Default.WriteLine("LoadMultiplayerScenarioWorld() - End"); return; } MySteamWorkshop.DownloadModsAsync(world.Checkpoint.Mods, onFinishedCallback : delegate(bool success, string mismatchMods) { if (success) { CheckMismatchmods(mismatchMods, callback : delegate(VRage.Game.ModAPI.ResultEnum val) { MyScreenManager.CloseAllScreensNowExcept(null); MyGuiSandbox.Update(VRage.Game.MyEngineConstants.UPDATE_STEP_SIZE_IN_MILLISECONDS); MyGuiScreenGamePlay.StartLoading(delegate { MySession.Static.LoadMultiplayerWorld(world, multiplayerSession); if (ScenarioWorldLoaded != null) { ScenarioWorldLoaded(); } }); }); } else { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption : MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText : MyTexts.Get(MyCommonTexts.DialogTextDownloadModsFailed), buttonType : MyMessageBoxButtonsType.OK, callback : delegate(MyGuiScreenMessageBox.ResultEnum result) { MyGuiScreenMainMenu.ReturnToMainMenu(); })); } MyLog.Default.WriteLine("LoadMultiplayerScenarioWorld() - End"); }, onCancelledCallback : delegate() { MyGuiScreenMainMenu.UnloadAndExitToMenu(); }); }
public override void HandleInput(bool receivedFocusInThisUpdate) { base.HandleInput(receivedFocusInThisUpdate); if (MyInput.Static.IsNewKeyPressed(MyKeys.Escape)) { MyGuiAudio.PlaySound(MyGuiSounds.HudMouseClick); MyGuiScreenMainMenu.AddMainMenu(); } }
public override bool Update(bool hasFocus) { if (!hasFocus) { return(base.Update(hasFocus)); } if (m_childScreenLaunched && hasFocus) { CloseScreenNow(); } if (m_childScreenLaunched) { return(base.Update(hasFocus)); } if (MyInput.Static.IsKeyPress(MyKeys.Escape)) { MyGuiScreenMainMenu.ReturnToMainMenu(); return(base.Update(hasFocus)); } switch (m_quickLaunchType) { case MyQuickLaunchType.LAST_SANDBOX: { var lastSessionPath = MyLocalCache.GetLastSessionPath(); if (lastSessionPath != null && System.IO.Directory.Exists(lastSessionPath)) { MyGuiScreenLoadSandbox.LoadSingleplayerSession(lastSessionPath); } else { MySandboxGame.AfterLogos(); } m_childScreenLaunched = true; } break; case MyQuickLaunchType.NEW_SANDBOX: { MyGuiScreenStartSandbox.QuickstartSandbox(null); m_childScreenLaunched = true; } break; default: { throw new InvalidBranchException(); } } return(base.Update(hasFocus)); }
public static void LoadMultiplayerBattleWorld(MyObjectBuilder_World world, MyMultiplayerBase multiplayerSession) { MyLog.Default.WriteLine("LoadMultiplayerBattleWorld() - Start"); Debug.Assert(MySession.Static != null); if (MySession.Static == null) { MyGuiScreenMainMenu.UnloadAndExitToMenu(); return; } if (!MySteamWorkshop.CheckLocalModsAllowed(world.Checkpoint.Mods, false)) { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption : MyTexts.Get(MySpaceTexts.MessageBoxCaptionError), messageText : MyTexts.Get(MySpaceTexts.DialogTextLocalModsDisabledInMultiplayer), buttonType : MyMessageBoxButtonsType.OK, callback : delegate(MyGuiScreenMessageBox.ResultEnum result) { MyGuiScreenMainMenu.ReturnToMainMenu(); })); MyLog.Default.WriteLine("LoadMultiplayerBattleWorld() - End"); return; } MySteamWorkshop.DownloadModsAsync(world.Checkpoint.Mods, onFinishedCallback : delegate(bool success) { if (success) { MyScreenManager.CloseAllScreensNowExcept(null); MyGuiSandbox.Update(MyEngineConstants.UPDATE_STEP_SIZE_IN_MILLISECONDS); MyGuiScreenGamePlay.StartLoading(delegate { MySession.Static.LoadMultiplayerWorld(world, multiplayerSession); Debug.Assert(MySession.Static.Battle); if (BattleWorldLoaded != null) { BattleWorldLoaded(); } }); } else { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption : MyTexts.Get(MySpaceTexts.MessageBoxCaptionError), messageText : MyTexts.Get(MySpaceTexts.DialogTextDownloadModsFailed), buttonType : MyMessageBoxButtonsType.OK, callback : delegate(MyGuiScreenMessageBox.ResultEnum result) { MyGuiScreenMainMenu.ReturnToMainMenu(); })); } MyLog.Default.WriteLine("LoadMultiplayerBattleWorld() - End"); }, onCancelledCallback : delegate() { MyGuiScreenMainMenu.UnloadAndExitToMenu(); }); }
private static void OnJoinBattleFailed(MyGuiScreenProgress progress, MyMultiplayerBase multiplayer, string status) { MyGuiScreenMainMenu.UnloadAndExitToMenu(); progress.Cancel(); StringBuilder error = new StringBuilder(); //error.AppendFormat(MySpaceTexts.DialogTextJoinBattleLobbyFailed, status); MyGuiScreenMessageBox mb = MyGuiSandbox.CreateMessageBox(messageText: error, messageCaption: MyTexts.Get(MySpaceTexts.MessageBoxCaptionError)); MyGuiSandbox.AddScreen(mb); }
public static void JoinGame(GameServerItem server) { if (server.ServerVersion != MyFinalBuildConstants.APP_VERSION) { var sb = new StringBuilder(); sb.AppendFormat(MyTexts.GetString(MySpaceTexts.MultiplayerError_IncorrectVersion), MyFinalBuildConstants.APP_VERSION, server.ServerVersion); MyGuiSandbox.Show(sb, MySpaceTexts.MessageBoxCaptionError); return; } if (MyFakes.ENABLE_MP_DATA_HASHES) { var serverHash = server.GetGameTagByPrefix("datahash"); if (serverHash != "" && serverHash != MyDataIntegrityChecker.GetHashBase64()) { MyGuiSandbox.Show(MySpaceTexts.MultiplayerError_DifferentData); MySandboxGame.Log.WriteLine("Different game data when connecting to server. Local hash: " + MyDataIntegrityChecker.GetHashBase64() + ", server hash: " + serverHash); return; } } UInt32 unixTimestamp = (UInt32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; SteamAPI.Instance.AddFavoriteGame(server.AppID, System.Net.IPAddressExtensions.ToIPv4NetworkOrder(server.NetAdr.Address), (UInt16)server.NetAdr.Port, (UInt16)server.NetAdr.Port, FavoriteEnum.History, unixTimestamp); MyMultiplayerClient multiplayer = new MyMultiplayerClient(server, new MySyncLayer(new MyTransportLayer(MyMultiplayer.GameEventChannel))); MyMultiplayer.Static = multiplayer; MyMultiplayer.Static.SyncLayer.AutoRegisterGameEvents = false; MyMultiplayer.Static.SyncLayer.RegisterGameEvents(); multiplayer.SendPlayerData(MySteam.UserName); StringBuilder text = MyTexts.Get(MySpaceTexts.DialogTextJoiningWorld); MyGuiScreenProgress progress = new MyGuiScreenProgress(text, MySpaceTexts.Cancel); MyGuiSandbox.AddScreen(progress); progress.ProgressCancelled += () => { multiplayer.Dispose(); MyGuiScreenMainMenu.ReturnToMainMenu(); }; multiplayer.OnJoin += delegate { MyJoinGameHelper.OnJoin(progress, SteamSDK.Result.OK, new LobbyEnterInfo() { EnterState = LobbyEnterResponseEnum.Success }, multiplayer); }; }
public static void DownloadBattleWorld(MyMultiplayerBase multiplayer) { StringBuilder text = MyTexts.Get(MySpaceTexts.MultiplayerStateConnectingToServer); MyGuiScreenProgress progress = new MyGuiScreenProgress(text, MySpaceTexts.Cancel); MyGuiSandbox.AddScreen(progress); progress.ProgressCancelled += () => { MyGuiScreenMainMenu.ReturnToMainMenu(); }; DownloadWorld(progress, multiplayer); }
public static void DownloadBattleWorld(MyMultiplayerBase multiplayer) { StringBuilder text = MyTexts.Get(MySpaceTexts.MultiplayerStateConnectingToServer); MyGuiScreenProgress progress = new MyGuiScreenProgress(text, MySpaceTexts.Cancel); MyGuiSandbox.AddScreen(progress); // Set focus to different control than Cancel button (because focused Cancel button can be unexpectedly pressed when sending a chat message - in case server has just started game). progress.FocusedControl = progress.RotatingWheel; progress.ProgressCancelled += () => { MyGuiScreenMainMenu.UnloadAndExitToMenu(); }; DownloadWorld(progress, multiplayer); }
public static void JoinBattleGame(ulong lobbyId) { StringBuilder text = MyTexts.Get(MySpaceTexts.DialogTextJoiningBattleLobby); MyGuiScreenProgress progress = new MyGuiScreenProgress(text, MySpaceTexts.Cancel); MyGuiSandbox.AddScreen(progress); progress.ProgressCancelled += () => MyGuiScreenMainMenu.ReturnToMainMenu(); MyLog.Default.WriteLine("Joining battle lobby: " + lobbyId); var result = MyMultiplayer.JoinLobby(lobbyId); result.JoinDone += (joinResult, info, multiplayer) => OnJoinBattle(progress, joinResult, info, multiplayer); progress.ProgressCancelled += () => result.Cancel(); }
public static void HandleDx11Needed() { MyGuiScreenMainMenu.ReturnToMainMenu(); if (MyDirectXHelper.IsDx11Supported()) { // Has DX11, ask for switch or selecting different scenario MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( callback: OnDX11SwitchRequestAnswer, messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MySpaceTexts.QuickstartDX11SwitchQuestion), buttonType: MyMessageBoxButtonsType.YES_NO)); } else { // No DX11, ask for selecting another scenario var text = MyTexts.Get(MySpaceTexts.QuickstartNoDx9SelectDifferent); MyGuiScreenMessageBox mb = MyGuiSandbox.CreateMessageBox(messageText: text, messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError)); MyGuiSandbox.AddScreen(mb); } }
public static void LoadMultiplayerSession(MyObjectBuilder_World world, MyMultiplayerBase multiplayerSession) { MyLog.Default.WriteLine("LoadSession() - Start"); if (!MySteamWorkshop.CheckLocalModsAllowed(world.Checkpoint.Mods, false)) { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MyCommonTexts.DialogTextLocalModsDisabledInMultiplayer), buttonType: MyMessageBoxButtonsType.OK)); MyLog.Default.WriteLine("LoadSession() - End"); return; } MySteamWorkshop.DownloadModsAsync(world.Checkpoint.Mods, onFinishedCallback : delegate(bool success, string mismatchMods) { if (success) { CheckMismatchmods(mismatchMods, delegate(VRage.Game.ModAPI.ResultEnum val) { if (val == VRage.Game.ModAPI.ResultEnum.OK) { //Sandbox.Audio.MyAudio.Static.Mute = true; MyScreenManager.CloseAllScreensNowExcept(null); MyGuiSandbox.Update(VRage.Game.MyEngineConstants.UPDATE_STEP_SIZE_IN_MILLISECONDS); // May be called from gameplay, so we must make sure we unload the current game if (MySession.Static != null) { MySession.Static.Unload(); MySession.Static = null; } MyGuiScreenGamePlay.StartLoading(delegate { MySession.LoadMultiplayer(world, multiplayerSession); }); } else { MyGuiScreenMainMenu.UnloadAndExitToMenu(); } }); } else { if (MyMultiplayer.Static != null) { MyMultiplayer.Static.Dispose(); } if (MySteam.IsOnline) { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MyCommonTexts.DialogTextDownloadModsFailed), buttonType: MyMessageBoxButtonsType.OK)); } else { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MyCommonTexts.DialogTextDownloadModsFailedSteamOffline), buttonType: MyMessageBoxButtonsType.OK)); } } MyLog.Default.WriteLine("LoadSession() - End"); }, onCancelledCallback : delegate() { multiplayerSession.Dispose(); }); }
public static void LoadSingleplayerSession(MyObjectBuilder_Checkpoint checkpoint, string sessionPath, ulong checkpointSizeInBytes) { if (!MySession.IsCompatibleVersion(checkpoint)) { MyLog.Default.WriteLine(MyTexts.Get(MyCommonTexts.DialogTextIncompatibleWorldVersion).ToString()); MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MyCommonTexts.DialogTextIncompatibleWorldVersion), buttonType: MyMessageBoxButtonsType.OK)); MyLog.Default.WriteLine("LoadSession() - End"); return; } if (!MySteamWorkshop.CheckLocalModsAllowed(checkpoint.Mods, checkpoint.Settings.OnlineMode == MyOnlineModeEnum.OFFLINE)) { MyLog.Default.WriteLine(MyTexts.Get(MyCommonTexts.DialogTextLocalModsDisabledInMultiplayer).ToString()); MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MyCommonTexts.DialogTextLocalModsDisabledInMultiplayer), buttonType: MyMessageBoxButtonsType.OK)); MyLog.Default.WriteLine("LoadSession() - End"); return; } MySteamWorkshop.DownloadModsAsync(checkpoint.Mods, delegate(bool success) { if (success || (checkpoint.Settings.OnlineMode == MyOnlineModeEnum.OFFLINE) && MySteamWorkshop.CanRunOffline(checkpoint.Mods)) { //Sandbox.Audio.MyAudio.Static.Mute = true; MyScreenManager.CloseAllScreensNowExcept(null); MyGuiSandbox.Update(VRage.Game.MyEngineConstants.UPDATE_STEP_SIZE_IN_MILLISECONDS); // May be called from gameplay, so we must make sure we unload the current game if (MySession.Static != null) { MySession.Static.Unload(); MySession.Static = null; } MyGuiScreenGamePlay.StartLoading(delegate { MyAnalyticsHelper.SetEntry(MyGameEntryEnum.Load); MySession.Load(sessionPath, checkpoint, checkpointSizeInBytes); }); } else { MyLog.Default.WriteLine(MyTexts.Get(MyCommonTexts.DialogTextDownloadModsFailed).ToString()); if (MySteam.IsOnline) { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption : MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText : MyTexts.Get(MyCommonTexts.DialogTextDownloadModsFailed), buttonType : MyMessageBoxButtonsType.OK, callback : delegate(MyGuiScreenMessageBox.ResultEnum result) { if (MyFakes.QUICK_LAUNCH != null) { MyGuiScreenMainMenu.ReturnToMainMenu(); } })); } else { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MyCommonTexts.DialogTextDownloadModsFailedSteamOffline), buttonType: MyMessageBoxButtonsType.OK)); } } MyLog.Default.WriteLine("LoadSession() - End"); }); }
public override bool Update(bool hasFocus) { if (!hasFocus) { return(base.Update(hasFocus)); } if (m_childScreenLaunched && hasFocus) { CloseScreenNow(); } if (m_childScreenLaunched) { return(base.Update(hasFocus)); } if (MyInput.Static.IsKeyPress(MyKeys.Escape)) { MyGuiScreenMainMenu.ReturnToMainMenu(); return(base.Update(hasFocus)); } switch (m_quickLaunchType) { case MyQuickLaunchType.LAST_SANDBOX: { var lastSessionPath = MyLocalCache.GetLastSessionPath(); if (lastSessionPath != null && System.IO.Directory.Exists(lastSessionPath)) { MyGuiScreenLoadSandbox.LoadSingleplayerSession(lastSessionPath); } else { MySandboxGame.AfterLogos(); } m_childScreenLaunched = true; } break; case MyQuickLaunchType.NEW_SANDBOX: { MyGuiScreenStartSandbox.QuickstartSandbox(null, null); m_childScreenLaunched = true; } break; case MyQuickLaunchType.SCENARIO_QUICKSTART: { MyGuiScreenStartSandbox.QuickstartSandbox(new MyObjectBuilder_MedievalSessionSettings() { EnableBarbarians = true, MaximumBots = 10000 }, new World.MyWorldGenerator.Args() { Scenario = (MyScenarioDefinition)MyDefinitionManager.Static.GetScenarioDefinition(new MyDefinitionId(typeof(MyObjectBuilder_ScenarioDefinition), "Quickstart")) }); m_childScreenLaunched = true; } break; default: { throw new InvalidBranchException(); } } return(base.Update(hasFocus)); }
// This method is called every update (but only if application has focus) public override void HandleUnhandledInput(bool receivedFocusInThisUpdate) { if (MyInput.Static.ENABLE_DEVELOPER_KEYS || (MySession.Static != null && MySession.Static.Settings.EnableSpectator) || (MyMultiplayer.Static != null && MySession.LocalHumanPlayer != null && MyMultiplayer.Static.IsAdmin(MySession.LocalHumanPlayer.Id.SteamId))) { //Set camera to player if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.SPECTATOR_NONE)) { if (MySession.ControlledEntity != null) { //we already are controlling this object if (MyFinalBuildConstants.IS_OFFICIAL) { SetCameraController(); } else { var cameraController = MySession.GetCameraControllerEnum(); if (cameraController != MyCameraControllerEnum.Entity && cameraController != MyCameraControllerEnum.ThirdPersonSpectator) { SetCameraController(); } else { var entities = MyEntities.GetEntities().ToList(); int lastKnownIndex = entities.IndexOf(MySession.ControlledEntity.Entity); var entitiesList = new List <MyEntity>(); if (lastKnownIndex + 1 < entities.Count) { entitiesList.AddRange(entities.GetRange(lastKnownIndex + 1, entities.Count - lastKnownIndex - 1)); } if (lastKnownIndex != -1) { entitiesList.AddRange(entities.GetRange(0, lastKnownIndex + 1)); } MyCharacter newControlledObject = null; for (int i = 0; i < entitiesList.Count; i++) { var character = entitiesList[i] as MyCharacter; if (character != null && !character.IsDead) { newControlledObject = character; break; } } if (MySession.LocalHumanPlayer != null && newControlledObject != null) { MySession.LocalHumanPlayer.Controller.TakeControl(newControlledObject); } } // We could have activated the cube builder in spectator, so deactivate it now if (MyCubeBuilder.Static.IsActivated && !(MySession.ControlledEntity is MyCharacter)) { MyCubeBuilder.Static.Deactivate(); } } } } //Set camera to following third person if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.SPECTATOR_DELTA)) { if (MySession.ControlledEntity != null) { MySession.SetCameraController(MyCameraControllerEnum.SpectatorDelta); } } //Set camera to spectator if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.SPECTATOR_FREE)) { if (!MyFakes.ENABLE_BATTLE_SYSTEM || !MySession.Static.Battle || Sync.IsServer) { if (MySession.GetCameraControllerEnum() != MyCameraControllerEnum.Spectator) { MySession.SetCameraController(MyCameraControllerEnum.Spectator); } else if (MyInput.Static.IsAnyShiftKeyPressed()) { MyFakes.ENABLE_DEVELOPER_SPECTATOR_CONTROLS = !MyFakes.ENABLE_DEVELOPER_SPECTATOR_CONTROLS; } if (MyInput.Static.IsAnyCtrlKeyPressed() && MySession.ControlledEntity != null) { MySpectator.Static.Position = (Vector3D)MySession.ControlledEntity.Entity.PositionComp.GetPosition() + MySpectator.Static.ThirdPersonCameraDelta; MySpectator.Static.Target = (Vector3D)MySession.ControlledEntity.Entity.PositionComp.GetPosition(); } } } //Set camera to static spectator, non movable if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.SPECTATOR_STATIC)) { if (MySession.ControlledEntity != null) { MySession.SetCameraController(MyCameraControllerEnum.SpectatorFixed); if (MyInput.Static.IsAnyCtrlKeyPressed()) { MySpectator.Static.Position = (Vector3D)MySession.ControlledEntity.Entity.PositionComp.GetPosition() + MySpectator.Static.ThirdPersonCameraDelta; MySpectator.Static.Target = (Vector3D)MySession.ControlledEntity.Entity.PositionComp.GetPosition(); } } } //Open console if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.CONSOLE) && MyInput.Static.IsAnyAltKeyPressed()) { MyGuiScreenConsole.Show(); } } if (MyDefinitionErrors.ShouldShowModErrors) { MyDefinitionErrors.ShouldShowModErrors = false; MyGuiSandbox.ShowModErrors(); } // Switch view - cockpit on/off, third person if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.CAMERA_MODE) && CanSwitchCamera) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); SwitchCamera(); } if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.HELP_SCREEN)) { if (MyInput.Static.IsAnyCtrlKeyPressed()) { switch (MySandboxGame.Config.DebugComponentsInfo) { case MyDebugComponent.MyDebugComponentInfoState.NoInfo: MySandboxGame.Config.DebugComponentsInfo = MyDebugComponent.MyDebugComponentInfoState.EnabledInfo; break; case MyDebugComponent.MyDebugComponentInfoState.EnabledInfo: MySandboxGame.Config.DebugComponentsInfo = MyDebugComponent.MyDebugComponentInfoState.FullInfo; break; case MyDebugComponent.MyDebugComponentInfoState.FullInfo: MySandboxGame.Config.DebugComponentsInfo = MyDebugComponent.MyDebugComponentInfoState.NoInfo; break; } MySandboxGame.Config.Save(); } else if (MyGuiScreenGamePlay.ActiveGameplayScreen == null) { MyGuiAudio.PlaySound(MyGuiSounds.HudMouseClick); MyGuiSandbox.AddScreen(MyGuiScreenGamePlay.ActiveGameplayScreen = MyGuiSandbox.CreateScreen(MyPerGameSettings.GUI.HelpScreen)); } } if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.TOGGLE_HUD)) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); MyHud.MinimalHud = !MyHud.MinimalHud; } if (MyPerGameSettings.SimplePlayerNames && MyInput.Static.IsNewGameControlPressed(MyControlsSpace.BROADCASTING)) { MyHud.LocationMarkers.Visible = !MyHud.LocationMarkers.Visible; } var controlledObject = MySession.ControlledEntity; var currentCameraController = MySession.Static.CameraController; if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.MISSION_SETTINGS) && MyGuiScreenGamePlay.ActiveGameplayScreen == null && MyPerGameSettings.Game == Sandbox.Game.GameEnum.SE_GAME && MyFakes.ENABLE_MISSION_TRIGGERS && MySession.Static.Settings.ScenarioEditMode) { MyGuiSandbox.AddScreen(new Sandbox.Game.Screens.MyGuiScreenMissionTriggers()); } MyStringId context = controlledObject != null ? controlledObject.ControlContext : MySpaceBindingCreator.CX_BASE; bool handledByUseObject = false; if (MySession.ControlledEntity is VRage.Game.Entity.UseObject.IMyUseObject) { handledByUseObject = (MySession.ControlledEntity as VRage.Game.Entity.UseObject.IMyUseObject).HandleInput(); } if (controlledObject != null && !handledByUseObject) { if (!MySandboxGame.IsPaused) { if (context == MySpaceBindingCreator.CX_BUILD_MODE || context == MySpaceBindingCreator.CX_CHARACTER || context == MySpaceBindingCreator.CX_SPACESHIP) { if (MyControllerHelper.IsControl(context, MyControlsSpace.PRIMARY_TOOL_ACTION, MyControlStateType.NEW_PRESSED)) { if (MyToolbarComponent.CurrentToolbar.ShouldActivateSlot) { MyToolbarComponent.CurrentToolbar.ActivateStagedSelectedItem(); } else { controlledObject.BeginShoot(MyShootActionEnum.PrimaryAction); } } if (MyControllerHelper.IsControl(context, MyControlsSpace.PRIMARY_TOOL_ACTION, MyControlStateType.NEW_RELEASED)) { controlledObject.EndShoot(MyShootActionEnum.PrimaryAction); } if (MyControllerHelper.IsControl(context, MyControlsSpace.SECONDARY_TOOL_ACTION, MyControlStateType.NEW_PRESSED)) { controlledObject.BeginShoot(MyShootActionEnum.SecondaryAction); } if (MyControllerHelper.IsControl(context, MyControlsSpace.SECONDARY_TOOL_ACTION, MyControlStateType.NEW_RELEASED)) { controlledObject.EndShoot(MyShootActionEnum.SecondaryAction); } } if (context == MySpaceBindingCreator.CX_CHARACTER || context == MySpaceBindingCreator.CX_SPACESHIP) { if (MyControllerHelper.IsControl(context, MyControlsSpace.USE, MyControlStateType.NEW_PRESSED)) { // Key press if (currentCameraController != null) { if (!currentCameraController.HandleUse()) { controlledObject.Use(); } } else { controlledObject.Use(); } } else if (MyControllerHelper.IsControl(context, MyControlsSpace.USE, MyControlStateType.PRESSED)) { // Key not pressed this frame, holding from previous controlledObject.UseContinues(); } else if (MyControllerHelper.IsControl(context, MyControlsSpace.USE, MyControlStateType.NEW_RELEASED)) { controlledObject.UseFinished(); } //Temp fix until spectators are implemented as entities //Prevents controlled object from getting input while spectator mode is enabled if (!(MySession.Static.CameraController is MySpectatorCameraController && MySpectatorCameraController.Static.SpectatorCameraMovement == MySpectatorCameraMovementEnum.UserControlled)) { if (MyControllerHelper.IsControl(context, MyControlsSpace.CROUCH, MyControlStateType.NEW_PRESSED)) { controlledObject.Crouch(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.CROUCH, MyControlStateType.PRESSED)) { controlledObject.Down(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.SPRINT, MyControlStateType.PRESSED)) { controlledObject.Sprint(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.JUMP, MyControlStateType.NEW_PRESSED)) { controlledObject.Jump(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.JUMP, MyControlStateType.PRESSED)) { controlledObject.Up(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.SWITCH_WALK, MyControlStateType.NEW_PRESSED)) { controlledObject.SwitchWalk(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.BROADCASTING, MyControlStateType.NEW_PRESSED)) { controlledObject.SwitchBroadcasting(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.HELMET, MyControlStateType.NEW_PRESSED)) { controlledObject.SwitchHelmet(); } } if (MyControllerHelper.IsControl(context, MyControlsSpace.DAMPING, MyControlStateType.NEW_PRESSED)) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); controlledObject.SwitchDamping(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.THRUSTS, MyControlStateType.NEW_PRESSED)) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); controlledObject.SwitchThrusts(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.HEADLIGHTS, MyControlStateType.NEW_PRESSED)) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); controlledObject.SwitchLights(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.TOGGLE_REACTORS, MyControlStateType.NEW_PRESSED)) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); controlledObject.SwitchReactors(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.LANDING_GEAR, MyControlStateType.NEW_PRESSED)) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); controlledObject.SwitchLeadingGears(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.SUICIDE, MyControlStateType.NEW_PRESSED)) { controlledObject.Die(); } if ((controlledObject as MyCockpit) != null && MyControllerHelper.IsControl(context, MyControlsSpace.CUBE_COLOR_CHANGE, MyControlStateType.NEW_PRESSED)) { (controlledObject as MyCockpit).SwitchWeaponMode(); } } } if (MyControllerHelper.IsControl(context, MyControlsSpace.TERMINAL, MyControlStateType.NEW_PRESSED) && MyGuiScreenGamePlay.ActiveGameplayScreen == null) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); controlledObject.ShowTerminal(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.INVENTORY, MyControlStateType.NEW_PRESSED) && MyGuiScreenGamePlay.ActiveGameplayScreen == null) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); controlledObject.ShowInventory(); } if (MyControllerHelper.IsControl(context, MyControlsSpace.CONTROL_MENU, MyControlStateType.NEW_PRESSED) && MyGuiScreenGamePlay.ActiveGameplayScreen == null) { MyGuiAudio.PlaySound(MyGuiSounds.HudClick); m_controlMenu.OpenControlMenu(controlledObject); } if (!MyCompilationSymbols.RenderProfiling && MyControllerHelper.IsControl(context, MyControlsSpace.CHAT_SCREEN, MyControlStateType.NEW_PRESSED)) { if (MyGuiScreenChat.Static == null) { Vector2 chatPos = new Vector2(0.01f, 0.84f); chatPos = MyGuiScreenHudBase.ConvertHudToNormalizedGuiPosition(ref chatPos); MyGuiScreenChat chatScreen = new MyGuiScreenChat(chatPos); MyGuiSandbox.AddScreen(chatScreen); } } if (MyPerGameSettings.VoiceChatEnabled) { if (MyControllerHelper.IsControl(context, MyControlsSpace.VOICE_CHAT, MyControlStateType.NEW_PRESSED)) { MyVoiceChatSessionComponent.Static.StartRecording(); } //else if (MyControllerHelper.IsControl(context, MyControlsSpace.VOICE_CHAT, MyControlStateType.NEW_RELEASED)) // TODO: If other key was pressed during VOIP, NEW_RELEASED will return false even if this key was pressed, is this correct? We don't store key states? else if (MyVoiceChatSessionComponent.Static.IsRecording && !MyControllerHelper.IsControl(context, MyControlsSpace.VOICE_CHAT, MyControlStateType.PRESSED)) { MyVoiceChatSessionComponent.Static.StopRecording(); } } } MoveAndRotatePlayerOrCamera(); // Quick save or quick load. if (MyInput.Static.IsNewKeyPressed(MyKeys.F5)) { if (!MySession.Static.IsScenario) { MyGuiAudio.PlaySound(MyGuiSounds.HudMouseClick); var currentSession = MySession.Static.CurrentPath; if (MyInput.Static.IsAnyShiftKeyPressed()) { if (MySession.Static.ClientCanSave || Sync.IsServer) { if (!MyAsyncSaving.InProgress) { var messageBox = MyGuiSandbox.CreateMessageBox( buttonType : MyMessageBoxButtonsType.YES_NO, messageText : MyTexts.Get(MySpaceTexts.MessageBoxTextAreYouSureYouWantToQuickSave), messageCaption : MyTexts.Get(MySpaceTexts.MessageBoxCaptionPleaseConfirm), callback : delegate(MyGuiScreenMessageBox.ResultEnum callbackReturn) { if (callbackReturn == MyGuiScreenMessageBox.ResultEnum.YES) { MyAsyncSaving.Start(() => MySector.ResetEyeAdaptation = true); //black screen after save } }); messageBox.SkipTransition = true; messageBox.CloseBeforeCallback = true; MyGuiSandbox.AddScreen(messageBox); } } else { MyHud.Notifications.Add(MyNotificationSingletons.ClientCannotSave); } } else if (Sync.IsServer) { ShowLoadMessageBox(currentSession); } else { // Is multiplayer client, reconnect ShowReconnectMessageBox(); } } } // Launch main menu if (MyInput.Static.IsNewKeyPressed(MyKeys.Escape) || MyControllerHelper.IsControl(context, MyControlsGUI.MAIN_MENU, MyControlStateType.NEW_PRESSED)) { MyGuiAudio.PlaySound(MyGuiSounds.HudMouseClick); //Allow changing video options from game in DX version MyGuiScreenMainMenu.AddMainMenu(); } if (MyInput.Static.IsNewKeyPressed(MyKeys.F3)) { if (Sync.MultiplayerActive) { MyGuiAudio.PlaySound(MyGuiSounds.HudMouseClick); MyGuiSandbox.AddScreen(new MyGuiScreenPlayers()); } else { MyHud.Notifications.Add(MyNotificationSingletons.MultiplayerDisabled); } } if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.BUILD_SCREEN) && MyGuiScreenGamePlay.ActiveGameplayScreen == null) { if (MyGuiScreenCubeBuilder.Static == null && (MySession.ControlledEntity is MyShipController || MySession.ControlledEntity is MyCharacter)) { int offset = 0; if (MyInput.Static.IsAnyShiftKeyPressed()) { offset += 6; } if (MyInput.Static.IsAnyCtrlKeyPressed()) { offset += 12; } MyGuiAudio.PlaySound(MyGuiSounds.HudMouseClick); MyGuiSandbox.AddScreen( MyGuiScreenGamePlay.ActiveGameplayScreen = MyGuiSandbox.CreateScreen(MyPerGameSettings.GUI.ToolbarConfigScreen, offset, MySession.ControlledEntity as MyShipController) ); } } if (MyInput.Static.IsNewGameControlPressed(MyControlsSpace.PAUSE_GAME)) { MySandboxGame.UserPauseToggle(); } if (MySession.Static != null) { if (MyInput.Static.IsNewKeyPressed(MyKeys.F10)) { if (MyPerGameSettings.GUI.VoxelMapEditingScreen != null && MySession.Static.CreativeMode && MyInput.Static.IsAnyShiftKeyPressed()) { // Shift+F10 MyGuiSandbox.AddScreen(MyGuiSandbox.CreateScreen(MyPerGameSettings.GUI.VoxelMapEditingScreen)); } else { // F10 if (MyFakes.ENABLE_BATTLE_SYSTEM && MySession.Static.Battle) { if (MyPerGameSettings.GUI.BattleBlueprintScreen != null) { MyGuiSandbox.AddScreen(MyGuiSandbox.CreateScreen(MyPerGameSettings.GUI.BattleBlueprintScreen)); } else { Debug.Fail("No battle blueprint screen"); } } else { MyGuiSandbox.AddScreen(new MyGuiBlueprintScreen(MyCubeBuilder.Static.Clipboard)); } } } } // F11, mod debug if (MyInput.Static.IsNewKeyPressed(MyKeys.F11) && !MyInput.Static.IsAnyShiftKeyPressed() && !MyInput.Static.IsAnyCtrlKeyPressed()) { MyDX9Gui.SwitchModDebugScreen(); } }
public void LoadMission(string sessionPath, string name, string description, bool multiplayer) { MyLog.Default.WriteLine("LoadSession() - Start"); MyLog.Default.WriteLine(sessionPath); ulong checkpointSizeInBytes; var checkpoint = MyLocalCache.LoadCheckpoint(sessionPath, out checkpointSizeInBytes); checkpoint.Settings.OnlineMode = (MyOnlineModeEnum)m_onlineMode.GetSelectedKey(); checkpoint.Settings.MaxPlayers = (short)m_maxPlayersSlider.Value; checkpoint.Settings.Scenario = true; checkpoint.Settings.GameMode = MyGameModeEnum.Survival; checkpoint.Settings.ScenarioEditMode = false; if (!MySession.IsCompatibleVersion(checkpoint)) { MyLog.Default.WriteLine(MyTexts.Get(MySpaceTexts.DialogTextIncompatibleWorldVersion).ToString()); MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MySpaceTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MySpaceTexts.DialogTextIncompatibleWorldVersion), buttonType: MyMessageBoxButtonsType.OK)); MyLog.Default.WriteLine("LoadSession() - End"); return; } if (!MySteamWorkshop.CheckLocalModsAllowed(checkpoint.Mods, checkpoint.Settings.OnlineMode == MyOnlineModeEnum.OFFLINE)) { MyLog.Default.WriteLine(MyTexts.Get(MySpaceTexts.DialogTextLocalModsDisabledInMultiplayer).ToString()); MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MySpaceTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MySpaceTexts.DialogTextLocalModsDisabledInMultiplayer), buttonType: MyMessageBoxButtonsType.OK)); MyLog.Default.WriteLine("LoadSession() - End"); return; } MySteamWorkshop.DownloadModsAsync(checkpoint.Mods, delegate(bool success) { if (success || (checkpoint.Settings.OnlineMode == MyOnlineModeEnum.OFFLINE) && MySteamWorkshop.CanRunOffline(checkpoint.Mods)) { //Sandbox.Audio.MyAudio.Static.Mute = true; MyScreenManager.CloseAllScreensNowExcept(null); MyGuiSandbox.Update(MyEngineConstants.UPDATE_STEP_SIZE_IN_MILLISECONDS); // May be called from gameplay, so we must make sure we unload the current game if (MySession.Static != null) { MySession.Static.Unload(); MySession.Static = null; } //seed 0 has special meaning - please randomize at mission start. New seed will be saved and game will run with it ever since. // if you use this, YOU CANNOT HAVE ANY PROCEDURAL ASTEROIDS ALREADY SAVED if (checkpoint.Settings.ProceduralSeed == 0) { checkpoint.Settings.ProceduralSeed = MyRandom.Instance.Next(); } MyGuiScreenGamePlay.StartLoading(delegate { checkpoint.Settings.Scenario = true; MySession.LoadMission(sessionPath, checkpoint, checkpointSizeInBytes, name, description); }); } else { MyLog.Default.WriteLine(MyTexts.Get(MySpaceTexts.DialogTextDownloadModsFailed).ToString()); MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption : MyTexts.Get(MySpaceTexts.MessageBoxCaptionError), messageText : MyTexts.Get(MySpaceTexts.DialogTextDownloadModsFailed), buttonType : MyMessageBoxButtonsType.OK, callback : delegate(MyGuiScreenMessageBox.ResultEnum result) { if (MyFakes.QUICK_LAUNCH != null) { MyGuiScreenMainMenu.ReturnToMainMenu(); } })); } MyLog.Default.WriteLine("LoadSession() - End"); }); }