diff --git a/Launcher2/LauncherMain.cs b/Launcher2/LauncherMain.cs index 8fb82ab9e..7f0ed0e5b 100644 --- a/Launcher2/LauncherMain.cs +++ b/Launcher2/LauncherMain.cs @@ -335,8 +335,13 @@ namespace Launcher2 return false; } - if (doc == null) return false; - + if (doc == null) + { + updateInfoText.Text = "Checking updates failed"; + updateInfoBox.Visible = true; + return false; + } + CheckUpdateXML(doc); return true; diff --git a/Subsurface/Source/Characters/AI/HumanAIController.cs b/Subsurface/Source/Characters/AI/HumanAIController.cs index 238c63ca8..0a912eb10 100644 --- a/Subsurface/Source/Characters/AI/HumanAIController.cs +++ b/Subsurface/Source/Characters/AI/HumanAIController.cs @@ -5,6 +5,8 @@ namespace Barotrauma { class HumanAIController : AIController { + public static bool DisableCrewAI; + const float UpdateObjectiveInterval = 0.5f; private AIObjectiveManager objectiveManager; @@ -46,6 +48,8 @@ namespace Barotrauma public override void Update(float deltaTime) { + if (DisableCrewAI) return; + Character.ClearInputs(); //steeringManager = Character.AnimController.CurrentHull == null ? outdoorsSteeringManager : indoorsSteeringManager; @@ -85,12 +89,28 @@ namespace Barotrauma { Character.AnimController.TargetMovement = new Vector2( 0.0f, Math.Sign(Character.AnimController.TargetMovement.Y)); } + } + //unequip diving suit if running out of oxygen + if (Character.Oxygen < 50.0f && Character.AnimController.CurrentHull!=null && + Character.AnimController.CurrentHull.Volume < Character.AnimController.CurrentHull.FullVolume*0.3f) + { + var divingSuit = Character.Inventory.FindItem("Diving Suit"); + if (divingSuit != null) divingSuit.Drop(Character); } if (Character.IsKeyDown(InputType.Aim)) { - Character.AnimController.TargetDir = Character.CursorPosition.X > Character.Position.X ? Direction.Right : Direction.Left; + var cursorDiffX = Character.CursorPosition.X - Character.Position.X; + if (cursorDiffX > 10.0f) + { + Character.AnimController.TargetDir = Direction.Right; + } + else if (cursorDiffX < -10.0f) + { + Character.AnimController.TargetDir = Direction.Left; + } + if (Character.SelectedConstruction != null) Character.SelectedConstruction.SecondaryUse(deltaTime, Character); } @@ -106,7 +126,7 @@ namespace Barotrauma public override void OnAttacked(IDamageable attacker, float amount) { var enemy = attacker as Character; - if (enemy == null) return; + if (enemy == null || enemy == Character) return; objectiveManager.AddObjective(new AIObjectiveCombat(Character, enemy)); } diff --git a/Subsurface/Source/DebugConsole.cs b/Subsurface/Source/DebugConsole.cs index 34286e9ac..791927577 100644 --- a/Subsurface/Source/DebugConsole.cs +++ b/Subsurface/Source/DebugConsole.cs @@ -218,6 +218,12 @@ namespace Barotrauma if (spawnedCharacter != null && GameMain.Server != null) GameMain.Server.SendCharacterSpawnMessage(spawnedCharacter); + break; + case "disablecrewai": + HumanAIController.DisableCrewAI = !HumanAIController.DisableCrewAI; + break; + case "enablecrewai": + HumanAIController.DisableCrewAI = false; break; case "kick": if (GameMain.Server == null) break; diff --git a/Subsurface/Source/Screens/EditMapScreen.cs b/Subsurface/Source/Screens/EditMapScreen.cs index abaff3ec6..ad73b568d 100644 --- a/Subsurface/Source/Screens/EditMapScreen.cs +++ b/Subsurface/Source/Screens/EditMapScreen.cs @@ -435,9 +435,11 @@ namespace Barotrauma characterMode = !characterMode; //button.Color = (characterMode) ? Color.Gold : Color.White; - + if (characterMode) { + if (wiringMode) ToggleWiringMode(); + CreateDummyCharacter(); } else if (dummyCharacter != null)