From 80f39cd2a3acf881decade53467b7673bc1a2f0f Mon Sep 17 00:00:00 2001 From: Markus Isberg <3e849f2e5c@pm.me> Date: Thu, 18 Nov 2021 21:34:30 +0900 Subject: [PATCH] Unstable 0.15.15.0 (and the one before it I forgor) --- .../Characters/AI/Wreck/WreckAI.cs | 2 +- .../Characters/Animation/Ragdoll.cs | 8 +- .../ClientSource/Characters/Character.cs | 23 +- .../ClientSource/Characters/CharacterHUD.cs | 2 +- .../ClientSource/Characters/CharacterInfo.cs | 5 +- .../Characters/CharacterNetworking.cs | 9 +- .../Characters/Health/CharacterHealth.cs | 29 +- .../ClientSource/Characters/Jobs/JobPrefab.cs | 2 +- .../ClientSource/Characters/Limb.cs | 2 - .../ClientSource/DebugConsole.cs | 54 +- .../ClientSource/Events/EventManager.cs | 154 ++++-- .../ClientSource/Events/Missions/Mission.cs | 2 +- .../ClientSource/Fonts/ScalableFont.cs | 254 +++++++--- .../ClientSource/GUI/ChatBox.cs | 2 +- .../BarotraumaClient/ClientSource/GUI/GUI.cs | 220 ++++---- .../ClientSource/GUI/GUIComponent.cs | 17 +- .../ClientSource/GUI/GUIListBox.cs | 374 +++++++++----- .../ClientSource/GUI/GUIScrollBar.cs | 15 +- .../ClientSource/GUI/GUIStyle.cs | 5 + .../ClientSource/GUI/GUITextBlock.cs | 119 ++--- .../ClientSource/GUI/GUITextBox.cs | 143 +++--- .../ClientSource/GUI/Graph.cs | 34 +- .../ClientSource/GUI/LoadingScreen.cs | 37 +- .../ClientSource/GUI/RectTransform.cs | 4 +- .../ClientSource/GUI/ShapeExtensions.cs | 3 +- .../ClientSource/GUI/Store.cs | 2 +- .../ClientSource/GUI/SubmarineSelection.cs | 2 +- .../ClientSource/GUI/TabMenu.cs | 40 +- .../BarotraumaClient/ClientSource/GameMain.cs | 13 +- .../ClientSource/GameSession/CargoManager.cs | 8 +- .../ClientSource/GameSession/CrewManager.cs | 93 ++-- .../GameModes/MultiPlayerCampaign.cs | 12 +- .../GameModes/SinglePlayerCampaign.cs | 8 +- .../GameModes/Tutorials/BasicTutorial.cs | 6 +- .../GameModes/Tutorials/CaptainTutorial.cs | 2 +- .../GameModes/Tutorials/DoctorTutorial.cs | 4 +- .../GameModes/Tutorials/EditorTutorial.cs | 2 +- .../GameModes/Tutorials/EngineerTutorial.cs | 14 +- .../GameModes/Tutorials/MechanicTutorial.cs | 14 +- .../GameModes/Tutorials/OfficerTutorial.cs | 2 +- .../GameModes/Tutorials/ScenarioTutorial.cs | 6 +- .../GameModes/Tutorials/Tutorial.cs | 4 +- .../GameModes/Tutorials/TutorialMode.cs | 2 +- .../ClientSource/GameSession/GameSession.cs | 3 +- .../ClientSource/GameSession/HintManager.cs | 6 +- .../ClientSource/GameSettings.cs | 4 +- .../ClientSource/Items/CharacterInventory.cs | 9 +- .../Items/Components/Holdable/RangedWeapon.cs | 12 +- .../Items/Components/ItemComponent.cs | 2 +- .../Items/Components/LightComponent.cs | 32 +- .../Components/Machines/Deconstructor.cs | 4 +- .../Items/Components/Machines/Fabricator.cs | 44 +- .../Items/Components/Machines/MiniMap.cs | 149 ++++-- .../Items/Components/Machines/Reactor.cs | 66 +-- .../Items/Components/Machines/Sonar.cs | 2 +- .../Items/Components/Repairable.cs | 12 +- .../Items/Components/Signal/Terminal.cs | 10 +- .../Items/Components/TriggerComponent.cs | 12 + .../ClientSource/Items/Components/Turret.cs | 4 + .../ClientSource/Items/Inventory.cs | 17 +- .../ClientSource/Items/Item.cs | 14 +- .../ClientSource/Items/ItemPrefab.cs | 4 +- .../ClientSource/Map/Explosion.cs | 2 +- .../ClientSource/Map/Structure.cs | 2 +- .../ClientSource/Map/SubmarineInfo.cs | 1 + .../Networking/FileTransfer/FileReceiver.cs | 22 +- .../ClientSource/Networking/GameClient.cs | 63 ++- .../ClientSource/Networking/KarmaManager.cs | 3 + .../ClientEntityEventManager.cs | 30 +- .../ClientSource/Networking/NetStats.cs | 6 +- .../ClientSource/Networking/RespawnManager.cs | 53 +- .../ClientSource/Networking/ServerInfo.cs | 4 +- .../ClientSource/Networking/ServerSettings.cs | 118 +++-- .../ClientSource/Networking/SteamManager.cs | 2 +- .../ClientSource/Networking/Voting.cs | 6 +- .../ClientSource/Particles/Particle.cs | 6 +- .../ClientSource/Particles/ParticleEmitter.cs | 13 +- .../ClientSource/Particles/ParticleManager.cs | 4 +- .../BarotraumaClient/ClientSource/Program.cs | 2 +- .../MultiPlayerCampaignSetupUI.cs | 2 +- .../CharacterEditor/CharacterEditorScreen.cs | 47 +- .../ClientSource/Screens/LevelEditorScreen.cs | 30 +- .../ClientSource/Screens/MainMenuScreen.cs | 10 +- .../ClientSource/Screens/NetLobbyScreen.cs | 477 ++++++++++++++---- .../ClientSource/Screens/Screen.cs | 2 +- .../ClientSource/Screens/ServerListScreen.cs | 9 +- .../Screens/SteamWorkshopScreen.cs | 8 +- .../ClientSource/Screens/SubEditorScreen.cs | 44 +- .../ClientSource/Sounds/SoundChannel.cs | 24 +- .../ClientSource/Sounds/SoundPlayer.cs | 4 +- .../ClientSource/Sprite/Sprite.cs | 5 +- .../ClientSource/Utils/ToolBox.cs | 126 +---- .../BarotraumaClient/LinuxClient.csproj | 4 +- Barotrauma/BarotraumaClient/MacClient.csproj | 4 +- .../BarotraumaClient/WindowsClient.csproj | 4 +- .../BarotraumaServer/LinuxServer.csproj | 2 +- Barotrauma/BarotraumaServer/MacServer.csproj | 2 +- .../ServerSource/Characters/Character.cs | 5 + .../ServerSource/Characters/CharacterInfo.cs | 1 + .../ServerSource/DebugConsole.cs | 48 +- .../Events/Missions/CombatMission.cs | 5 +- .../BarotraumaServer/ServerSource/GameMain.cs | 4 +- .../GameModes/MultiPlayerCampaign.cs | 8 +- .../Items/Components/ItemLabel.cs | 2 +- .../Items/Components/LightComponent.cs | 2 +- .../Components/Machines/Deconstructor.cs | 3 +- .../Items/Components/Machines/Reactor.cs | 16 +- .../Components/Signal/MemoryComponent.cs | 2 +- .../Items/Components/Signal/Terminal.cs | 9 +- .../Items/Components/TriggerComponent.cs | 12 + .../ServerSource/Items/Item.cs | 2 +- .../BarotraumaServer/ServerSource/Map/Hull.cs | 2 +- .../ServerSource/Networking/Client.cs | 6 +- .../Networking/FileTransfer/FileSender.cs | 7 + .../ServerSource/Networking/GameServer.cs | 54 +- .../ServerSource/Networking/KarmaManager.cs | 21 + .../ServerEntityEventManager.cs | 17 +- .../ServerSource/Networking/RespawnManager.cs | 34 +- .../ServerSource/Networking/ServerSettings.cs | 30 ++ .../ServerSource/Networking/Voting.cs | 16 +- .../BarotraumaServer/ServerSource/Program.cs | 12 +- .../ServerSource/Screens/NetLobbyScreen.cs | 2 + .../BarotraumaServer/WindowsServer.csproj | 2 +- .../Data/ContentPackages/Vanilla 0.9.xml | 4 +- .../BarotraumaShared/Data/karmasettings.xml | 15 +- .../SharedSource/CameraTransition.cs | 2 +- .../SharedSource/Characters/AI/AITarget.cs | 2 +- .../Characters/AI/HumanAIController.cs | 73 ++- .../Characters/AI/IndoorsSteeringManager.cs | 6 +- .../SharedSource/Characters/AI/LatchOntoAI.cs | 79 ++- .../Characters/AI/Objectives/AIObjective.cs | 11 +- .../AI/Objectives/AIObjectiveCleanupItems.cs | 2 +- .../AI/Objectives/AIObjectiveCombat.cs | 64 ++- .../AI/Objectives/AIObjectiveContainItem.cs | 1 - .../Objectives/AIObjectiveFindDivingGear.cs | 13 +- .../AI/Objectives/AIObjectiveFindSafety.cs | 15 +- .../AI/Objectives/AIObjectiveGetItem.cs | 184 ++++--- .../AI/Objectives/AIObjectiveGetItems.cs | 91 ++++ .../AI/Objectives/AIObjectiveGoTo.cs | 59 ++- .../AI/Objectives/AIObjectiveManager.cs | 76 +-- .../AI/Objectives/AIObjectiveOperateItem.cs | 1 - .../AI/Objectives/AIObjectivePrepare.cs | 150 ++++++ .../AI/Objectives/AIObjectiveRepairItem.cs | 5 +- .../AI/Objectives/AIObjectiveRepairItems.cs | 3 +- .../AI/Objectives/AIObjectiveRescue.cs | 25 +- .../AI/Objectives/AIObjectiveRescueAll.cs | 1 + .../SharedSource/Characters/AI/Order.cs | 2 + .../Animation/HumanoidAnimController.cs | 60 ++- .../Characters/Animation/Ragdoll.cs | 55 +- .../SharedSource/Characters/Character.cs | 99 ++-- .../SharedSource/Characters/CharacterInfo.cs | 11 +- .../Health/Afflictions/AfflictionHusk.cs | 5 +- .../Health/Afflictions/AfflictionPrefab.cs | 6 + .../SharedSource/Characters/HumanPrefab.cs | 5 +- .../SharedSource/Characters/Jobs/Job.cs | 2 +- .../SharedSource/Characters/Jobs/JobPrefab.cs | 2 +- .../SharedSource/Characters/Jobs/Skill.cs | 6 +- .../Characters/Jobs/SkillPrefab.cs | 7 +- .../SharedSource/Characters/Limb.cs | 11 +- .../AbilityConditionAttackData.cs | 16 +- .../AbilityConditionData.cs | 4 +- .../Talents/Abilities/CharacterAbility.cs | 6 +- .../CharacterAbilityApplyStatusEffects.cs | 10 +- ...racterAbilityApplyStatusEffectsToAllies.cs | 5 + .../CharacterAbilityModifyAttackData.cs | 2 +- .../Abilities/CharacterAbilityUnlockTree.cs | 10 +- .../Characters/Talents/TalentPrefab.cs | 61 +-- .../Characters/Talents/TalentTree.cs | 102 ++-- .../SharedSource/CoroutineManager.cs | 137 ++--- .../SharedSource/DebugConsole.cs | 70 ++- .../Events/EventActions/SpawnAction.cs | 2 +- .../SharedSource/Events/EventManager.cs | 91 ++-- .../SharedSource/Events/EventPrefab.cs | 20 +- .../SharedSource/Events/EventSet.cs | 110 ++-- .../Missions/AbandonedOutpostMission.cs | 19 + .../Events/Missions/CargoMission.cs | 2 +- .../Events/Missions/CombatMission.cs | 10 +- .../Events/Missions/PirateMission.cs | 8 + .../SharedSource/Events/MonsterEvent.cs | 133 +++-- .../Extensions/StringFormatter.cs | 2 +- .../GameSession/AutoItemPlacer.cs | 2 +- .../GameSession/GameModes/CampaignMode.cs | 8 +- .../SharedSource/GameSession/GameSession.cs | 12 +- .../Items/Components/GeneticMaterial.cs | 2 +- .../Items/Components/Holdable/MeleeWeapon.cs | 6 +- .../Items/Components/Holdable/Pickable.cs | 2 +- .../Items/Components/Holdable/RangedWeapon.cs | 5 +- .../Items/Components/ItemComponent.cs | 4 + .../Items/Components/ItemContainer.cs | 4 +- .../Items/Components/ItemLabel.cs | 9 + .../Components/Machines/Deconstructor.cs | 12 +- .../Items/Components/Machines/Fabricator.cs | 131 +++-- .../Items/Components/Machines/Pump.cs | 44 +- .../Items/Components/Machines/Reactor.cs | 168 +++--- .../Items/Components/Machines/Sonar.cs | 8 +- .../Components/Machines/SonarTransducer.cs | 4 +- .../Items/Components/Projectile.cs | 35 +- .../SharedSource/Items/Components/Quality.cs | 5 +- .../Items/Components/Repairable.cs | 25 +- .../SharedSource/Items/Components/Rope.cs | 8 +- .../Items/Components/Signal/AndComponent.cs | 4 + .../Components/Signal/ArithmeticComponent.cs | 4 + .../Items/Components/Signal/DelayComponent.cs | 14 +- .../Components/Signal/EqualsComponent.cs | 4 + .../Items/Components/Signal/LightComponent.cs | 54 +- .../Components/Signal/MemoryComponent.cs | 11 +- .../Items/Components/Signal/MotionSensor.cs | 9 +- .../Components/Signal/RegExFindComponent.cs | 16 +- .../Components/Signal/StringComponent.cs | 4 + .../Items/Components/Signal/Terminal.cs | 90 +++- .../Signal/TrigonometricFunctionComponent.cs | 4 +- .../Items/Components/Signal/WifiComponent.cs | 12 +- .../Items/Components/TriggerComponent.cs | 50 +- .../SharedSource/Items/Components/Turret.cs | 97 +++- .../SharedSource/Items/Inventory.cs | 8 +- .../SharedSource/Items/Item.cs | 36 +- .../SharedSource/Items/ItemInventory.cs | 6 + .../SharedSource/Items/ItemPrefab.cs | 23 +- .../SharedSource/Map/Entity.cs | 114 +++-- .../SharedSource/Map/Explosion.cs | 7 +- .../BarotraumaShared/SharedSource/Map/Gap.cs | 45 +- .../BarotraumaShared/SharedSource/Map/Hull.cs | 24 +- .../SharedSource/Map/ItemAssemblyPrefab.cs | 3 +- .../SharedSource/Map/Levels/Level.cs | 76 +-- .../SharedSource/Map/Levels/LevelData.cs | 22 +- .../Map/Levels/Ruins/RuinGenerationParams.cs | 3 - .../Map/Levels/Ruins/RuinGenerator.cs | 13 +- .../SharedSource/Map/LinkedSubmarine.cs | 5 +- .../SharedSource/Map/Map/Location.cs | 51 +- .../SharedSource/Map/Map/LocationType.cs | 51 ++ .../SharedSource/Map/Map/Map.cs | 7 +- .../SharedSource/Map/Map/Radiation.cs | 13 +- .../Map/Outposts/OutpostGenerator.cs | 6 +- .../SharedSource/Map/RoundEndCinematic.cs | 2 +- .../SharedSource/Map/Submarine.cs | 26 +- .../SharedSource/Map/SubmarineBody.cs | 2 +- .../SharedSource/Map/WayPoint.cs | 24 +- .../SharedSource/Networking/KarmaManager.cs | 9 + .../NetEntityEvent/NetEntityEventManager.cs | 29 +- .../SharedSource/Networking/RespawnManager.cs | 2 +- .../SharedSource/Networking/ServerLog.cs | 3 + .../SharedSource/Networking/ServerSettings.cs | 39 +- .../SharedSource/Networking/Voting.cs | 31 +- .../SharedSource/Physics/PhysicsBody.cs | 9 +- .../SharedSource/Prefabs/PrefabCollection.cs | 17 + .../StatusEffects/DelayedEffect.cs | 8 +- .../StatusEffects/StatusEffect.cs | 55 +- .../SharedSource/Upgrades/UpgradePrefab.cs | 8 +- .../SharedSource/Utils/IdRemap.cs | 109 ++-- .../SharedSource/Utils/Range.cs | 9 +- .../SharedSource/Utils/ToolBox.cs | 2 +- .../BarotraumaShared/Submarines/Kastrull.sub | Bin 266289 -> 267725 bytes .../BarotraumaShared/Submarines/Orca2.sub | Bin 0 -> 231578 bytes .../BarotraumaShared/Submarines/Typhon2.sub | Bin 288152 -> 289591 bytes Barotrauma/BarotraumaShared/TintTest.png | Bin 91346 -> 0 bytes Barotrauma/BarotraumaShared/changelog.txt | 139 +++++ Barotrauma/BarotraumaShared/steam_api64.dll | Bin 262944 -> 0 bytes 257 files changed, 4916 insertions(+), 2582 deletions(-) create mode 100644 Barotrauma/BarotraumaClient/ClientSource/Items/Components/TriggerComponent.cs create mode 100644 Barotrauma/BarotraumaServer/ServerSource/Items/Components/TriggerComponent.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItems.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectivePrepare.cs create mode 100644 Barotrauma/BarotraumaShared/Submarines/Orca2.sub delete mode 100644 Barotrauma/BarotraumaShared/TintTest.png delete mode 100644 Barotrauma/BarotraumaShared/steam_api64.dll diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/Wreck/WreckAI.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/Wreck/WreckAI.cs index fd9e93f7e..f674cc079 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/Wreck/WreckAI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/Wreck/WreckAI.cs @@ -17,7 +17,7 @@ namespace Barotrauma fadeOutRoutine = CoroutineManager.StartCoroutine(FadeOutColors(Config.DeadEntityColorFadeOutTime)); } - private IEnumerable FadeOutColors(float time) + private IEnumerable FadeOutColors(float time) { float timer = 0; while (timer < time) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs index 37f6c91ed..d8d022397 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs @@ -36,7 +36,7 @@ namespace Barotrauma CharacterStateInfo serverPos = character.MemState.Last(); if (!character.isSynced) { - SetPosition(serverPos.Position, false); + SetPosition(serverPos.Position, lerp: false); Collider.LinearVelocity = Vector2.Zero; character.MemLocalState.Clear(); character.LastNetworkUpdateID = serverPos.ID; @@ -159,7 +159,7 @@ namespace Barotrauma if (!character.isSynced) { - SetPosition(serverPos.Position, false); + SetPosition(serverPos.Position, lerp: false); Collider.LinearVelocity = Vector2.Zero; character.MemLocalState.Clear(); character.LastNetworkUpdateID = serverPos.ID; @@ -581,10 +581,10 @@ namespace Barotrauma if (this is HumanoidAnimController humanoid) { Vector2 pos = ConvertUnits.ToDisplayUnits(humanoid.RightHandIKPos); - if (humanoid.character.Submarine != null) { pos += humanoid.character.Submarine.Position; } + if (humanoid.character.Submarine != null) { pos += humanoid.character.Submarine.DrawPosition; } GUI.DrawRectangle(spriteBatch, new Rectangle((int)pos.X, (int)-pos.Y, 4, 4), GUI.Style.Green, true); pos = ConvertUnits.ToDisplayUnits(humanoid.LeftHandIKPos); - if (humanoid.character.Submarine != null) { pos += humanoid.character.Submarine.Position; } + if (humanoid.character.Submarine != null) { pos += humanoid.character.Submarine.DrawPosition; } GUI.DrawRectangle(spriteBatch, new Rectangle((int)pos.X, (int)-pos.Y, 4, 4), GUI.Style.Green, true); Vector2 aimPos = humanoid.AimSourceWorldPos; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs index fb1cd7d6b..f1dd4470c 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs @@ -447,28 +447,7 @@ namespace Barotrauma if (GameMain.Client != null) { chatMessage += " " + TextManager.Get("DeathChatNotification"); } - if (GameMain.NetworkMember.RespawnManager?.UseRespawnPrompt ?? false) - { - CoroutineManager.Invoke(() => - { - if (controlled != null || (!(GameMain.GameSession?.IsRunning ?? false))) { return; } - var respawnPrompt = new GUIMessageBox( - TextManager.Get("tutorial.tryagainheader"), TextManager.Get("respawnquestionprompt"), - new string[] { TextManager.Get("respawnquestionpromptrespawn"), TextManager.Get("respawnquestionpromptwait") }); - respawnPrompt.Buttons[0].OnClicked += (btn, userdata) => - { - GameMain.Client?.SendRespawnPromptResponse(waitForNextRoundRespawn: false); - respawnPrompt.Close(); - return true; - }; - respawnPrompt.Buttons[1].OnClicked += (btn, userdata) => - { - GameMain.Client?.SendRespawnPromptResponse(waitForNextRoundRespawn: true); - respawnPrompt.Close(); - return true; - }; - }, delay: 5.0f); - } + GameMain.NetworkMember.RespawnManager?.ShowRespawnPromptIfNeeded(); GameMain.NetworkMember.AddChatMessage(chatMessage, ChatMessageType.Dead); GameMain.LightManager.LosEnabled = false; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs index 3c8d3d5a0..26704a982 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs @@ -235,7 +235,7 @@ namespace Barotrauma foreach (Item item in Item.ItemList) { if (item.Submarine == null || item.Submarine.TeamID != character.TeamID || item.Submarine.Info.IsWreck) { continue; } - if (!item.Repairables.Any(r => item.ConditionPercentage <= r.RepairIconThreshold)) { continue; } + if (!item.Repairables.Any(r => r.IsBelowRepairIconThreshold)) { continue; } if (Submarine.VisibleEntities != null && !Submarine.VisibleEntities.Contains(item)) { continue; } Vector2 diff = item.WorldPosition - character.WorldPosition; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs index 24ca41abe..3d42e6e3f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs @@ -790,10 +790,7 @@ namespace Barotrauma return false; } }; - //force update twice because the listbox is insanely janky - //TODO: fix all of the UI :) - listBox.ForceUpdate(); - listBox.ForceUpdate(); + listBox.ForceLayoutRecalculation(); foreach (var childLayoutGroup in listBox.Content.GetAllChildren()) { childLayoutGroup.Recalculate(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs index 1c618e46e..dd4873f66 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs @@ -371,21 +371,22 @@ namespace Barotrauma if (attackLimbIndex == 255 || Removed) { break; } if (attackLimbIndex >= AnimController.Limbs.Length) { - DebugConsole.ThrowError($"Received invalid SetAttack/ExecuteAttack message. Limb index out of bounds (character: {Name}, limb index: {attackLimbIndex}, limb count: {AnimController.Limbs.Length})"); + DebugConsole.ThrowError($"Received invalid {(eventType == 4 ? "SetAttackTarget" : "ExecuteAttack")} message. Limb index out of bounds (character: {Name}, limb index: {attackLimbIndex}, limb count: {AnimController.Limbs.Length})"); break; } Limb attackLimb = AnimController.Limbs[attackLimbIndex]; Limb targetLimb = null; - if (!(FindEntityByID(targetEntityID) is IDamageable targetEntity)) + IDamageable targetEntity = FindEntityByID(targetEntityID) as IDamageable; + if (targetEntity == null && eventType == 4) { - DebugConsole.ThrowError($"Received invalid SetAttack/ExecuteAttack message. Target entity not found (ID {targetEntityID})"); + DebugConsole.ThrowError($"Received invalid SetAttackTarget message. Target entity not found (ID {targetEntityID})"); break; } if (targetEntity is Character targetCharacter) { if (targetLimbIndex >= targetCharacter.AnimController.Limbs.Length) { - DebugConsole.ThrowError($"Received invalid SetAttack/ExecuteAttack message. Target limb index out of bounds (target character: {targetCharacter.Name}, limb index: {targetLimbIndex}, limb count: {targetCharacter.AnimController.Limbs.Length})"); + DebugConsole.ThrowError($"Received invalid {(eventType == 4 ? "SetAttackTarget" : "ExecuteAttack")} message. Target limb index out of bounds (target character: {targetCharacter.Name}, limb index: {targetLimbIndex}, limb count: {targetCharacter.AnimController.Limbs.Length})"); break; } targetLimb = targetCharacter.AnimController.Limbs[targetLimbIndex]; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs index 9ee0fa4ba..c2e1b8461 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs @@ -805,7 +805,27 @@ namespace Barotrauma { var treatmentButton = component.GetChild(); if (!(treatmentButton?.UserData is ItemPrefab itemPrefab)) { continue; } - treatmentButton.Enabled = Character.Controlled.Inventory.AllItems.Any(it => it.prefab == itemPrefab); + var matchingItem = Character.Controlled.Inventory.FindItem(it => it.prefab == itemPrefab, recursive: true); + treatmentButton.Enabled = matchingItem != null; + if (treatmentButton.Enabled && treatmentButton.State == GUIComponent.ComponentState.Hover) + { + //highlight the slot the treatment item is in + var rootContainer = matchingItem.GetRootContainer() ?? matchingItem; + var index = Character.Controlled.Inventory.FindIndex(rootContainer); + if (Character.Controlled.Inventory.visualSlots != null && index > -1 && index < Character.Controlled.Inventory.visualSlots.Length && + Character.Controlled.Inventory.visualSlots[index].HighlightTimer <= 0.0f) + { + Character.Controlled.Inventory.visualSlots[index].ShowBorderHighlight(GUI.Style.Green, 0.5f, 0.5f); + } + } + if (matchingItem != null && !string.IsNullOrEmpty(treatmentButton.ToolTip)) { continue; } + treatmentButton.ToolTip = $"‖color:255,255,255,255‖{itemPrefab.Name}‖color:end‖" + '\n' + itemPrefab.Description; + if (treatmentButton.Enabled) + { + treatmentButton.ToolTip = + $"‖color:gui.green‖[{TextManager.Get(PlayerInput.MouseButtonsSwapped() ? "input.rightmouse" : "input.leftmouse")}] {TextManager.Get("quickuseaction.usetreatment")}‖color:end‖" + '\n' + + treatmentButton.RawToolTip; + } foreach (GUIComponent child in treatmentButton.Children) { child.Enabled = treatmentButton.Enabled; @@ -1249,7 +1269,7 @@ namespace Barotrauma foreach (string treatment in treatmentSuitability.Keys.ToList()) { //prefer suggestions for items the player has - if (Character.Controlled.Inventory.FindItemByIdentifier(treatment) != null) + if (Character.Controlled.Inventory.FindItemByIdentifier(treatment, recursive: true) != null) { treatmentSuitability[treatment] *= 10.0f; } @@ -1288,12 +1308,11 @@ namespace Barotrauma var innerFrame = new GUIButton(new RectTransform(Vector2.One, itemSlot.RectTransform, Anchor.Center, Pivot.Center, scaleBasis: ScaleBasis.Smallest), style: "SubtreeHeader") { UserData = item, - ToolTip = $"‖color:255,255,255,255‖{item.Name}‖color:end‖" + '\n' + item.Description, DisabledColor = Color.White * 0.1f, OnClicked = (btn, userdata) => { if (!(userdata is ItemPrefab itemPrefab)) { return false; } - var item = Character.Controlled.Inventory.AllItems.FirstOrDefault(it => it.prefab == itemPrefab); + var item = Character.Controlled.Inventory.FindItem(it => it.prefab == itemPrefab, recursive: true); if (item == null) { return false; } Limb targetLimb = Character.AnimController.Limbs.FirstOrDefault(l => l.HealthIndex == selectedLimbIndex); item.ApplyTreatment(Character.Controlled, Character, targetLimb); @@ -1445,7 +1464,7 @@ namespace Barotrauma var potentialTreatment = Inventory.DraggingItems.FirstOrDefault(); if (potentialTreatment == null && GUI.MouseOn?.UserData is ItemPrefab itemPrefab) { - potentialTreatment = Character.Controlled.Inventory.AllItems.FirstOrDefault(it => it.prefab == itemPrefab); + potentialTreatment = Character.Controlled.Inventory.FindItem(it => it.prefab == itemPrefab, recursive: true); } potentialTreatment ??= Inventory.SelectedSlot?.Item; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Jobs/JobPrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Jobs/JobPrefab.cs index 248bbe71d..6e041eeac 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Jobs/JobPrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Jobs/JobPrefab.cs @@ -30,7 +30,7 @@ namespace Barotrauma foreach (SkillPrefab skill in Skills) { new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillContainer.RectTransform), - " - " + TextManager.AddPunctuation(':', TextManager.Get("SkillName." + skill.Identifier), (int)skill.LevelRange.X + " - " + (int)skill.LevelRange.Y), + " - " + TextManager.AddPunctuation(':', TextManager.Get("SkillName." + skill.Identifier), (int)skill.LevelRange.Start + " - " + (int)skill.LevelRange.End), font: GUI.SmallFont); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Limb.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Limb.cs index 2e544f692..8f5f6b791 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Limb.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Limb.cs @@ -730,8 +730,6 @@ namespace Barotrauma } } - body.Dir = Dir; - float herpesStrength = character.CharacterHealth.GetAfflictionStrength("spaceherpes"); bool hideLimb = Hide || diff --git a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs index 0bb2d3ce3..7c6c7965d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs @@ -138,7 +138,7 @@ namespace Barotrauma var newMsg = queuedMessages.Dequeue(); AddMessage(newMsg); - if (GameSettings.SaveDebugConsoleLogs) + if (GameSettings.SaveDebugConsoleLogs || GameSettings.VerboseLogging) { unsavedMessages.Add(newMsg); if (unsavedMessages.Count >= messagesPerFile) @@ -274,7 +274,10 @@ namespace Barotrauma AddMessage(newMsg); } - if (GameSettings.SaveDebugConsoleLogs) unsavedMessages.Add(newMsg); + if (GameSettings.SaveDebugConsoleLogs || GameSettings.VerboseLogging) + { + unsavedMessages.Add(newMsg); + } } } } @@ -537,7 +540,21 @@ namespace Barotrauma return; } - GameMain.MainMenuScreen.QuickStart(fixedSeed: false, subName); + float difficulty = 40; + if (args.Length > 1) + { + float.TryParse(args[1], out difficulty); + } + + LevelGenerationParams levelGenerationParams = null; + if (args.Length > 2) + { + string levelGenerationIdentifier = args[2]; + levelGenerationParams = LevelGenerationParams.LevelParams.FirstOrDefault(p => p.Identifier == levelGenerationIdentifier); + } + + GameMain.MainMenuScreen.QuickStart(fixedSeed: false, subName, difficulty, levelGenerationParams); + }, getValidArgs: () => new[] { SubmarineInfo.SavedSubmarines.Select(s => s.Name).Distinct().ToArray() })); commands.Add(new Command("steamnetdebug", "steamnetdebug: Toggles Steamworks networking debug logging.", (string[] args) => @@ -734,13 +751,10 @@ namespace Barotrauma AssignOnExecute("teleportcharacter|teleport", (string[] args) => { Character tpCharacter = (args.Length == 0) ? Character.Controlled : FindMatchingCharacter(args, false); - if (tpCharacter == null) return; - - var cam = GameMain.GameScreen.Cam; - tpCharacter.AnimController.CurrentHull = null; - tpCharacter.Submarine = null; - tpCharacter.AnimController.SetPosition(ConvertUnits.ToSimUnits(cam.ScreenToWorld(PlayerInput.MousePosition))); - tpCharacter.AnimController.FindHull(cam.ScreenToWorld(PlayerInput.MousePosition), true); + if (tpCharacter != null) + { + tpCharacter.TeleportTo(GameMain.GameScreen.Cam.ScreenToWorld(PlayerInput.MousePosition)); + } }); AssignOnExecute("spawn|spawncharacter", (string[] args) => @@ -1413,7 +1427,7 @@ namespace Barotrauma commands.Add(new Command("analyzeitem", "analyzeitem: Analyzes one item for exploits.", (string[] args) => { - if (args.Length < 1) return; + if (args.Length < 1) { return; } List fabricableItems = new List(); foreach (ItemPrefab iPrefab in ItemPrefab.Prefabs) @@ -1792,7 +1806,7 @@ namespace Barotrauma foreach (var talentTree in TalentTree.JobTalentTrees) { - foreach (var talentSubTree in talentTree.Value.TalentSubTrees) + foreach (var talentSubTree in talentTree.TalentSubTrees) { string nameIdentifier = "talenttree." + talentSubTree.Identifier; if (!tags[language].Contains(nameIdentifier)) @@ -1857,7 +1871,21 @@ namespace Barotrauma commands.Add(new Command("eventstats", "", (string[] args) => { - var debugLines = EventSet.GetDebugStatistics(); + List debugLines; + if (args.Length > 0) + { + if (!Enum.TryParse(args[0], ignoreCase: true, out Level.PositionType spawnType)) + { + var enums = Enum.GetNames(typeof(Level.PositionType)); + ThrowError($"\"{args[0]}\" is not a valid Level.PositionType. Available options are: {string.Join(", ", enums)}"); + return; + } + debugLines = EventSet.GetDebugStatistics(filter: monsterEvent => monsterEvent.SpawnPosType.HasFlag(spawnType)); + } + else + { + debugLines = EventSet.GetDebugStatistics(); + } string filePath = "eventstats.txt"; Barotrauma.IO.Validation.SkipValidationInDebugBuilds = true; File.WriteAllLines(filePath, debugLines); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Events/EventManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Events/EventManager.cs index 4d456d911..238445418 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Events/EventManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Events/EventManager.cs @@ -14,7 +14,8 @@ namespace Barotrauma { private Graph intensityGraph; private Graph targetIntensityGraph; - private float intensityGraphUpdateInterval; + private Graph monsterStrengthGraph; + private const float intensityGraphUpdateInterval = 10; private float lastIntensityUpdate; private Vector2 pinnedPosition = new Vector2(256, 128); @@ -22,6 +23,8 @@ namespace Barotrauma public Event? PinnedEvent { get; set; } + private bool isGraphSelected; + public void DebugDraw(SpriteBatch spriteBatch) { foreach (Event ev in activeEvents) @@ -42,17 +45,25 @@ namespace Barotrauma DrawEventTargetTags(spriteBatch, scriptedEvent); } + float theoreticalMaxMonsterStrength = 10000; + float relativeMaxMonsterStrength = theoreticalMaxMonsterStrength * GameMain.GameSession.LevelData.Difficulty / 100; + float absoluteMonsterStrength = monsterStrength / theoreticalMaxMonsterStrength; + float relativeMonsterStrength = monsterStrength / relativeMaxMonsterStrength; GUI.DrawString(spriteBatch, new Vector2(10, y), "EventManager", Color.White, Color.Black * 0.6f, 0, GUI.SmallFont); GUI.DrawString(spriteBatch, new Vector2(15, y + 20), "Event cooldown: " + (int)Math.Max(eventCoolDown, 0), Color.White, Color.Black * 0.6f, 0, GUI.SmallFont); GUI.DrawString(spriteBatch, new Vector2(15, y + 35), "Current intensity: " + (int)Math.Round(currentIntensity * 100), Color.Lerp(Color.White, GUI.Style.Red, currentIntensity), Color.Black * 0.6f, 0, GUI.SmallFont); GUI.DrawString(spriteBatch, new Vector2(15, y + 50), "Target intensity: " + (int)Math.Round(targetIntensity * 100), Color.Lerp(Color.White, GUI.Style.Red, targetIntensity), Color.Black * 0.6f, 0, GUI.SmallFont); - GUI.DrawString(spriteBatch, new Vector2(15, y + 65), "AvgHealth: " + (int)Math.Round(avgCrewHealth * 100), Color.Lerp(GUI.Style.Red, GUI.Style.Green, avgCrewHealth), Color.Black * 0.6f, 0, GUI.SmallFont); - GUI.DrawString(spriteBatch, new Vector2(15, y + 80), "AvgHullIntegrity: " + (int)Math.Round(avgHullIntegrity * 100), Color.Lerp(GUI.Style.Red, GUI.Style.Green, avgHullIntegrity), Color.Black * 0.6f, 0, GUI.SmallFont); - GUI.DrawString(spriteBatch, new Vector2(15, y + 95), "FloodingAmount: " + (int)Math.Round(floodingAmount * 100), Color.Lerp(GUI.Style.Green, GUI.Style.Red, floodingAmount), Color.Black * 0.6f, 0, GUI.SmallFont); - GUI.DrawString(spriteBatch, new Vector2(15, y + 110), "FireAmount: " + (int)Math.Round(fireAmount * 100), Color.Lerp(GUI.Style.Green, GUI.Style.Red, fireAmount), Color.Black * 0.6f, 0, GUI.SmallFont); - GUI.DrawString(spriteBatch, new Vector2(15, y + 125), "EnemyDanger: " + (int)Math.Round(enemyDanger * 100), Color.Lerp(GUI.Style.Green, GUI.Style.Red, enemyDanger), Color.Black * 0.6f, 0, GUI.SmallFont); - GUI.DrawString(spriteBatch, new Vector2(15, y + 140), "MonsterTotalStrength: " + (int)Math.Round(monsterTotalStrength), Color.Lerp(GUI.Style.Green, GUI.Style.Red, monsterTotalStrength / 5000f), Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 65), "Crew health: " + (int)Math.Round(avgCrewHealth * 100), Color.Lerp(GUI.Style.Red, GUI.Style.Green, avgCrewHealth), Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 80), "Hull integrity: " + (int)Math.Round(avgHullIntegrity * 100), Color.Lerp(GUI.Style.Red, GUI.Style.Green, avgHullIntegrity), Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 95), "Flooding amount: " + (int)Math.Round(floodingAmount * 100), Color.Lerp(GUI.Style.Green, GUI.Style.Red, floodingAmount), Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 110), "Fire amount: " + (int)Math.Round(fireAmount * 100), Color.Lerp(GUI.Style.Green, GUI.Style.Red, fireAmount), Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 125), "Enemy danger: " + (int)Math.Round(enemyDanger * 100), Color.Lerp(GUI.Style.Green, GUI.Style.Red, enemyDanger), Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 140), "Current monster strength (total): " + (int)Math.Round(monsterStrength), Color.Lerp(GUI.Style.Green, GUI.Style.Red, relativeMonsterStrength), Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 155), "Main events: " + (int)Math.Round(CumulativeMonsterStrengthMain), Color.White, Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 170), "Ruin events: " + (int)Math.Round(CumulativeMonsterStrengthRuins), Color.White, Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 185), "Wreck events: " + (int)Math.Round(CumulativeMonsterStrengthWrecks), Color.White, Color.Black * 0.6f, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, new Vector2(15, y + 200), "Cave events: " + (int)Math.Round(CumulativeMonsterStrengthCaves), Color.White, Color.Black * 0.6f, 0, GUI.SmallFont); #if DEBUG if (PlayerInput.KeyDown(Microsoft.Xna.Framework.Input.Keys.LeftAlt) && @@ -64,29 +75,103 @@ namespace Barotrauma if (intensityGraph == null) { - intensityGraph = new Graph(); - targetIntensityGraph = new Graph(); + int graphDensity = 360; // 60 min + intensityGraph = new Graph(graphDensity); + targetIntensityGraph = new Graph(graphDensity); + monsterStrengthGraph = new Graph(graphDensity); } - intensityGraphUpdateInterval = 5.0f; if (Timing.TotalTime > lastIntensityUpdate + intensityGraphUpdateInterval) { intensityGraph.Update(currentIntensity); targetIntensityGraph.Update(targetIntensity); - lastIntensityUpdate = (float) Timing.TotalTime; + monsterStrengthGraph.Update(relativeMonsterStrength); + lastIntensityUpdate = (float)Timing.TotalTime; } - Rectangle graphRect = new Rectangle(15, y + 165, 150, 50); + Rectangle graphRect = new Rectangle(15, y + 240, (int)(200 * GUI.xScale), (int)(100 * GUI.yScale)); + bool isGraphHovered = graphRect.Contains(PlayerInput.MousePosition); + bool leftMousePressed = PlayerInput.PrimaryMouseButtonDown() || PlayerInput.PrimaryMouseButtonHeld(); + bool rightMousePressed = PlayerInput.SecondaryMouseButtonHeld() || PlayerInput.SecondaryMouseButtonDown(); + if (!isGraphSelected && isGraphHovered && leftMousePressed) + { + isGraphSelected = true; + } + if (isGraphSelected && rightMousePressed) + { + isGraphSelected = false; + } + Color intensityColor = Color.Lerp(Color.White, GUI.Style.Red, currentIntensity); + if (isGraphHovered || isGraphSelected) + { + graphRect.Size = new Point(GameMain.GraphicsWidth - 30, (int)(GameMain.GraphicsHeight * 0.35f)); + intensityColor = Color.Red; + GUI.DrawRectangle(spriteBatch, graphRect, Color.Black * 0.95f, isFilled: true); + } + else + { + GUI.DrawRectangle(spriteBatch, graphRect, Color.Black * 0.6f, isFilled: true); + } + intensityGraph.Draw(spriteBatch, graphRect, maxValue: 1.0f, xOffset: 0, intensityColor, (sBatch, value, order, pos) => + { + if (isGraphHovered || isGraphSelected) + { + Vector2 bottomPoint = new Vector2(pos.X, graphRect.Bottom); + float height = 3 * GUI.yScale; + if (order % 6 == 0) + { + height *= 3; + string text = (order / 6).ToString(); + var font = GUI.SmallFont; + Vector2 textSize = font.MeasureString(text); + Vector2 textPos = new Vector2(bottomPoint.X - textSize.X / 2, bottomPoint.Y + height * 1.5f); + GUI.DrawString(sBatch, textPos, text, Color.White, font: font); + } + GUI.DrawLine(sBatch, bottomPoint, bottomPoint + Vector2.UnitY * height, Color.White, width: Math.Max(GUI.Scale, 1)); + DrawTimeStamps(sBatch, Color.Red, pos, order); + } + }); + targetIntensityGraph.Draw(spriteBatch, graphRect, maxValue: 1.0f, xOffset: 0, intensityColor * 0.5f); + if (isGraphHovered || isGraphSelected) + { + float? maxValue = 1; + Color color = Color.White; + if (relativeMonsterStrength > 1) + { + maxValue = null; + color = Color.Yellow; + } + monsterStrengthGraph.Draw(spriteBatch, graphRect, maxValue, color: color, doForEachValue: (sBatch, value, order, pos) => DrawTimeStamps(sBatch, color, pos, order)); + } - GUI.DrawRectangle(spriteBatch, graphRect, Color.Black * 0.5f, true); - intensityGraph.Draw(spriteBatch, graphRect, 1.0f, 0.0f, Color.Lerp(Color.White, GUI.Style.Red, currentIntensity)); - targetIntensityGraph.Draw(spriteBatch, graphRect, 1.0f, 0.0f, Color.Lerp(Color.White, GUI.Style.Red, targetIntensity) * 0.5f); + void DrawTimeStamps(SpriteBatch sBatch, Color color, Vector2 pos, int order) + { + if (isGraphHovered || isGraphSelected) + { + foreach (var timeStamp in timeStamps) + { + int t = (int)Math.Abs(Math.Round((timeStamp.Time - lastIntensityUpdate) / intensityGraphUpdateInterval)); + if (t == order) + { + float size = 6; + Vector2 p = new Vector2(pos.X - size / 2, pos.Y - size / 2); + ShapeExtensions.DrawPoint(sBatch, p, color, size); + break; + } + } + } + } GUI.DrawLine(spriteBatch, new Vector2(graphRect.Right, graphRect.Y + graphRect.Height * (1.0f - eventThreshold)), - new Vector2(graphRect.Right + 5, graphRect.Y + graphRect.Height * (1.0f - eventThreshold)), Color.Orange, 0, 1); + new Vector2(graphRect.Right + 5, graphRect.Y + graphRect.Height * (1.0f - eventThreshold)), Color.Orange, width: 3); - y = graphRect.Bottom + 20; + int yStep = (int)(20 * GUI.yScale); + y = graphRect.Bottom + yStep; + if (isGraphHovered || isGraphSelected) + { + y += yStep; + } int x = graphRect.X; if (isCrewAway && crewAwayDuration < settings.FreezeDurationWhenCrewAway) { @@ -143,7 +228,7 @@ namespace Barotrauma if (CurrentIntensity < eventSet.MinIntensity || CurrentIntensity > eventSet.MaxIntensity) { GUI.DrawString(spriteBatch, new Vector2(x, y), - " intensity between " + ((int) eventSet.MinIntensity) + " and " + ((int) eventSet.MaxIntensity), + " intensity between " + eventSet.MinIntensity.FormatDoubleDecimal() + " and " + eventSet.MaxIntensity.FormatDoubleDecimal(), Color.Orange * 0.8f, null, 0, GUI.SmallFont); y += 12; } @@ -159,13 +244,13 @@ namespace Barotrauma if (y > GameMain.GraphicsHeight * 0.9f) { - y = graphRect.Bottom + 35; - x += 250; + y = graphRect.Bottom + yStep * 2; + x += 300; } } GUI.DrawString(spriteBatch, new Vector2(x, y), "Current events: ", Color.White * 0.9f, null, 0, GUI.SmallFont); - y += 15; + y += yStep; foreach (Event ev in activeEvents.Where(ev => !ev.IsFinished || PlayerInput.IsShiftDown())) { @@ -182,17 +267,15 @@ namespace Barotrauma { GUI.MouseCursor = CursorState.Hand; GUI.DrawRectangle(spriteBatch, outlineRect, Color.White); - if (ev != PinnedEvent) { DrawEvent(spriteBatch, ev, rect); } - else if (PlayerInput.SecondaryMouseButtonHeld() || PlayerInput.SecondaryMouseButtonDown()) + else if (rightMousePressed) { PinnedEvent = null; } - - if (PlayerInput.PrimaryMouseButtonHeld() || PlayerInput.PrimaryMouseButtonDown()) + if (leftMousePressed) { PinnedEvent = ev; } @@ -201,8 +284,8 @@ namespace Barotrauma y += 18; if (y > GameMain.GraphicsHeight * 0.9f) { - y = graphRect.Bottom + 35; - x += 250; + y = graphRect.Bottom + yStep * 2; + x += 300; } } } @@ -352,9 +435,11 @@ namespace Barotrauma return DrawInfoRectangle(spriteBatch, scriptedEvent, text, parentRect, positions); } + private readonly List debugPositions = new List(); + private Rectangle DrawArtifactEvent(SpriteBatch spriteBatch, ArtifactEvent artifactEvent, Rectangle? parentRect = null) { - List positions = new List(); + debugPositions.Clear(); string text = $"Finished: {artifactEvent.IsFinished.ColorizeObject()}\n" + $"Item: {artifactEvent.Item.ColorizeObject()}\n" + @@ -364,15 +449,15 @@ namespace Barotrauma if (artifactEvent.Item != null && !artifactEvent.Item.Removed) { Vector2 pos = artifactEvent.Item.WorldPosition; - positions.Add(new DebugLine(pos, Color.White)); + debugPositions.Add(new DebugLine(pos, Color.White)); } - return DrawInfoRectangle(spriteBatch, artifactEvent, text, parentRect, positions); + return DrawInfoRectangle(spriteBatch, artifactEvent, text, parentRect, debugPositions); } private Rectangle DrawMonsterEvent(SpriteBatch spriteBatch, MonsterEvent monsterEvent, Rectangle? parentRect = null) { - List positions = new List(); + debugPositions.Clear(); string text = $"Finished: {monsterEvent.IsFinished.ColorizeObject()}\n" + $"Amount: {monsterEvent.MinAmount.ColorizeObject()} - {monsterEvent.MaxAmount.ColorizeObject()}\n" + @@ -383,7 +468,7 @@ namespace Barotrauma { Vector2 pos = monsterEvent.SpawnPos.Value; text += $"Distance from submarine: {Vector2.Distance(pos, Submarine.MainSub.WorldPosition).ColorizeObject()}\n"; - positions.Add(new DebugLine(pos, Color.White)); + debugPositions.Add(new DebugLine(pos, Color.White)); } if (monsterEvent.Monsters != null) @@ -394,11 +479,10 @@ namespace Barotrauma { text += $" {monster.ColorizeObject()} -> (Dead: {monster.IsDead.ColorizeObject()}, Health: {monster.HealthPercentage.ColorizeObject()}%, AIState: {(monster.AIController is EnemyAIController enemyAI ? enemyAI.State : AIState.Idle ).ColorizeObject()})\n"; if (monster.Removed) { continue; } - positions.Add(new DebugLine(monster.WorldPosition, Color.Red)); + debugPositions.Add(new DebugLine(monster.WorldPosition, Color.Red)); } } - - return DrawInfoRectangle(spriteBatch, monsterEvent, text, parentRect, positions); + return DrawInfoRectangle(spriteBatch, monsterEvent, text, parentRect, debugPositions); } private Rectangle DrawInfoRectangle(SpriteBatch spriteBatch, Event @event, string text, Rectangle? parentRect = null, List? drawPoints = null) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Events/Missions/Mission.cs b/Barotrauma/BarotraumaClient/ClientSource/Events/Missions/Mission.cs index e8b3064d4..0dc6284b6 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Events/Missions/Mission.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Events/Missions/Mission.cs @@ -78,7 +78,7 @@ namespace Barotrauma CoroutineManager.StartCoroutine(ShowMessageBoxAfterRoundSummary(header, message)); } - private IEnumerable ShowMessageBoxAfterRoundSummary(string header, string message) + private IEnumerable ShowMessageBoxAfterRoundSummary(string header, string message) { while (GUIMessageBox.VisibleBox?.UserData is RoundSummary) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Fonts/ScalableFont.cs b/Barotrauma/BarotraumaClient/ClientSource/Fonts/ScalableFont.cs index 2c6ab92ac..aff1e4c05 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Fonts/ScalableFont.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Fonts/ScalableFont.cs @@ -51,16 +51,30 @@ namespace Barotrauma } } + public float LineHeight => baseHeight * 1.8f; + private uint[] charRanges; private int texDims; private uint baseChar; - private struct GlyphData + private readonly struct GlyphData { - public int texIndex; - public Vector2 drawOffset; - public float advance; - public Rectangle texCoords; + public readonly int TexIndex; + public readonly Vector2 DrawOffset; + public readonly float Advance; + public readonly Rectangle TexCoords; + + public GlyphData( + int texIndex = default, + Vector2 drawOffset = default, + float advance = default, + Rectangle texCoords = default) + { + TexIndex = texIndex; + DrawOffset = drawOffset; + Advance = advance; + TexCoords = texCoords; + } } public ScalableFont(XElement element, GraphicsDevice gd = null) @@ -167,9 +181,10 @@ namespace Barotrauma if (face.Glyph.Metrics.HorizontalAdvance > 0) { //glyph is empty, but char still applies advance - GlyphData blankData = new GlyphData(); - blankData.advance = (float)face.Glyph.Metrics.HorizontalAdvance; - blankData.texIndex = -1; //indicates no texture because the glyph is empty + GlyphData blankData = new GlyphData( + advance: (float)face.Glyph.Metrics.HorizontalAdvance, + texIndex: -1); //indicates no texture because the glyph is empty + texCoords.Add(j, blankData); } continue; @@ -211,13 +226,12 @@ namespace Barotrauma } } - GlyphData newData = new GlyphData - { - advance = (float)face.Glyph.Metrics.HorizontalAdvance, - texIndex = texIndex, - texCoords = new Rectangle((int)currentCoords.X, (int)currentCoords.Y, glyphWidth, glyphHeight), - drawOffset = new Vector2(face.Glyph.BitmapLeft, baseHeight * 14 / 10 - face.Glyph.BitmapTop) - }; + GlyphData newData = new GlyphData( + advance: (float)face.Glyph.Metrics.HorizontalAdvance, + texIndex: texIndex, + texCoords: new Rectangle((int)currentCoords.X, (int)currentCoords.Y, glyphWidth, glyphHeight), + drawOffset: new Vector2(face.Glyph.BitmapLeft, baseHeight * 14 / 10 - face.Glyph.BitmapTop) + ); texCoords.Add(j, newData); for (int y = 0; y < glyphHeight; y++) @@ -278,9 +292,9 @@ namespace Barotrauma if (face.Glyph.Metrics.HorizontalAdvance > 0) { //glyph is empty, but char still applies advance - GlyphData blankData = new GlyphData(); - blankData.advance = (float)face.Glyph.Metrics.HorizontalAdvance; - blankData.texIndex = -1; //indicates no texture because the glyph is empty + GlyphData blankData = new GlyphData( + advance: (float)face.Glyph.Metrics.HorizontalAdvance, + texIndex: -1); //indicates no texture because the glyph is empty texCoords.Add(character, blankData); } return; @@ -316,19 +330,18 @@ namespace Barotrauma currentDynamicPixelBuffer = null; } - GlyphData newData = new GlyphData - { - advance = (float)horizontalAdvance, - texIndex = textures.Count - 1, - texCoords = new Rectangle((int)currentDynamicAtlasCoords.X, (int)currentDynamicAtlasCoords.Y, glyphWidth, glyphHeight), - drawOffset = drawOffset - }; + GlyphData newData = new GlyphData( + advance: (float)horizontalAdvance, + texIndex: textures.Count - 1, + texCoords: new Rectangle((int)currentDynamicAtlasCoords.X, (int)currentDynamicAtlasCoords.Y, glyphWidth, glyphHeight), + drawOffset: drawOffset + ); texCoords.Add(character, newData); if (currentDynamicPixelBuffer == null) { currentDynamicPixelBuffer = new uint[texDims * texDims]; - textures[newData.texIndex].GetData(currentDynamicPixelBuffer, 0, texDims * texDims); + textures[newData.TexIndex].GetData(currentDynamicPixelBuffer, 0, texDims * texDims); } for (int y = 0; y < glyphHeight; y++) @@ -339,12 +352,25 @@ namespace Barotrauma currentDynamicPixelBuffer[((int)currentDynamicAtlasCoords.X + x) + ((int)currentDynamicAtlasCoords.Y + y) * texDims] = (uint)(byteColor << 24 | 0x00ffffff); } } - textures[newData.texIndex].SetData(currentDynamicPixelBuffer); + textures[newData.TexIndex].SetData(currentDynamicPixelBuffer); currentDynamicAtlasCoords.X += glyphWidth + 2; } } + private GlyphData GetGlyphData(uint charIndex) + { + const uint DEFAULT_INDEX = 0x25A1; //U+25A1 = white square + + if (texCoords.TryGetValue(charIndex, out GlyphData gd) || + texCoords.TryGetValue(DEFAULT_INDEX, out gd)) + { + return gd; + } + + return new GlyphData(texIndex: -1); + } + public void DrawString(SpriteBatch sb, string text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects se, float layerDepth) { if (textures.Count == 0 && !DynamicLoading) { return; } @@ -358,8 +384,8 @@ namespace Barotrauma { lineNum++; currentPos = position; - currentPos.X -= baseHeight * 1.8f * lineNum * advanceUnit.Y * scale.Y; - currentPos.Y += baseHeight * 1.8f * lineNum * advanceUnit.X * scale.Y; + currentPos.X -= LineHeight * lineNum * advanceUnit.Y * scale.Y; + currentPos.Y += LineHeight * lineNum * advanceUnit.X * scale.Y; continue; } @@ -369,19 +395,17 @@ namespace Barotrauma DynamicRenderAtlas(graphicsDevice, charIndex); } - if (texCoords.TryGetValue(charIndex, out GlyphData gd) || texCoords.TryGetValue(9633, out gd)) //9633 = white square + GlyphData gd = GetGlyphData(charIndex); + if (gd.TexIndex >= 0) { - if (gd.texIndex >= 0) - { - Texture2D tex = textures[gd.texIndex]; - Vector2 drawOffset; - drawOffset.X = gd.drawOffset.X * advanceUnit.X * scale.X - gd.drawOffset.Y * advanceUnit.Y * scale.Y; - drawOffset.Y = gd.drawOffset.X * advanceUnit.Y * scale.Y + gd.drawOffset.Y * advanceUnit.X * scale.X; + Texture2D tex = textures[gd.TexIndex]; + Vector2 drawOffset; + drawOffset.X = gd.DrawOffset.X * advanceUnit.X * scale.X - gd.DrawOffset.Y * advanceUnit.Y * scale.Y; + drawOffset.Y = gd.DrawOffset.X * advanceUnit.Y * scale.Y + gd.DrawOffset.Y * advanceUnit.X * scale.X; - sb.Draw(tex, currentPos + drawOffset, gd.texCoords, color, rotation, origin, scale, se, layerDepth); - } - currentPos += gd.advance * advanceUnit * scale.X; + sb.Draw(tex, currentPos + drawOffset, gd.TexCoords, color, rotation, origin, scale, se, layerDepth); } + currentPos += gd.Advance * advanceUnit * scale.X; } } @@ -400,7 +424,7 @@ namespace Barotrauma if (text[i] == '\n') { currentPos.X = position.X; - currentPos.Y += baseHeight * 1.8f; + currentPos.Y += LineHeight; continue; } @@ -410,15 +434,13 @@ namespace Barotrauma DynamicRenderAtlas(graphicsDevice, charIndex); } - if (texCoords.TryGetValue(charIndex, out GlyphData gd) || texCoords.TryGetValue(9633, out gd)) //9633 = white square + GlyphData gd = GetGlyphData(charIndex); + if (gd.TexIndex >= 0) { - if (gd.texIndex >= 0) - { - Texture2D tex = textures[gd.texIndex]; - sb.Draw(tex, currentPos + gd.drawOffset, gd.texCoords, color); - } - currentPos.X += gd.advance; + Texture2D tex = textures[gd.TexIndex]; + sb.Draw(tex, currentPos + gd.DrawOffset, gd.TexCoords, color); } + currentPos.X += gd.Advance; } } @@ -444,8 +466,8 @@ namespace Barotrauma { lineNum++; currentPos = position; - currentPos.X -= baseHeight * 1.8f * lineNum * advanceUnit.Y * scale.Y; - currentPos.Y += baseHeight * 1.8f * lineNum * advanceUnit.X * scale.Y; + currentPos.X -= LineHeight * lineNum * advanceUnit.Y * scale.Y; + currentPos.Y += LineHeight * lineNum * advanceUnit.X * scale.Y; continue; } @@ -476,22 +498,116 @@ namespace Barotrauma currentTextColor = color; } - if (texCoords.TryGetValue(charIndex, out GlyphData gd) || texCoords.TryGetValue(9633, out gd)) //9633 = white square + GlyphData gd = GetGlyphData(charIndex); + if (gd.TexIndex >= 0) { - if (gd.texIndex >= 0) - { - Texture2D tex = textures[gd.texIndex]; - Vector2 drawOffset; - drawOffset.X = gd.drawOffset.X * advanceUnit.X * scale.X - gd.drawOffset.Y * advanceUnit.Y * scale.Y; - drawOffset.Y = gd.drawOffset.X * advanceUnit.Y * scale.Y + gd.drawOffset.Y * advanceUnit.X * scale.X; + Texture2D tex = textures[gd.TexIndex]; + Vector2 drawOffset; + drawOffset.X = gd.DrawOffset.X * advanceUnit.X * scale.X - gd.DrawOffset.Y * advanceUnit.Y * scale.Y; + drawOffset.Y = gd.DrawOffset.X * advanceUnit.Y * scale.Y + gd.DrawOffset.Y * advanceUnit.X * scale.X; - sb.Draw(tex, currentPos + drawOffset, gd.texCoords, currentTextColor, rotation, origin, scale, se, layerDepth); - } - currentPos += gd.advance * advanceUnit * scale.X; + sb.Draw(tex, currentPos + drawOffset, gd.TexCoords, currentTextColor, rotation, origin, scale, se, layerDepth); } + currentPos += gd.Advance * advanceUnit * scale.X; } } + public string WrapText(string text, float width) + => WrapText(text, width, requestCharPos: 0, out _, returnAllCharPositions: false, out _); + + public string WrapText(string text, float width, int requestCharPos, out Vector2 requestedCharPos) + => WrapText(text, width, requestCharPos, out requestedCharPos, returnAllCharPositions: false, out _); + + public string WrapText(string text, float width, out Vector2[] allCharPositions) + => WrapText(text, width, requestCharPos: 0, out _, returnAllCharPositions: true, out allCharPositions); + + /// + /// Wraps a string of text to fit within a given width. + /// Optionally returns the caret position of a certain character, + /// or all of them. + /// + private string WrapText(string text, + float width, + int requestCharPos, + out Vector2 requestedCharPos, + bool returnAllCharPositions, + out Vector2[] allCharPositions) + { + int currLineStart = 0; + Vector2 currentPos = Vector2.Zero; + Vector2 foundCharPos = Vector2.Zero; + int? lastBreakerIndex = null; + string result = ""; + var allCharPos = returnAllCharPositions ? new Vector2[text.Length+1] : null; + for (int i = 0; i < text.Length; i++) + { + //Records the caret position of the current character + void recordCurrentPos() + { + if (i == requestCharPos) { foundCharPos = currentPos; } + + if (allCharPos != null) { allCharPos[i] = currentPos; } + } + recordCurrentPos(); + + //Appends a newline to the result and resets the caret position's X value + void nextLine() + { + result += text[currLineStart..i].Remove("\n") + "\n"; + lastBreakerIndex = null; + currentPos.X = 0.0f; + currentPos.Y += LineHeight; + currLineStart = i; + } + + //If a newline is found in the source, split immediately + if (text[i] == '\n') + { + nextLine(); + continue; + } + + //Otherwise, advance based on the width of the current character + GlyphData gd = GetGlyphData(text[i]); + float advance = gd.Advance; + if (currentPos.X + advance >= width) + { + //Advancing based on the last character + //would put us past the max width! + if (i > 0 && char.IsWhiteSpace(text[i]) && !char.IsWhiteSpace(text[i - 1])) + { + //Whitespace immediately after a visible + //character can be shrunk down to fit + advance = width - currentPos.X; + } + else + { + if (lastBreakerIndex.HasValue) + { + //A breaker (whitespace or CJK) was found earlier + //in this line, so let's break the line there + i = lastBreakerIndex.Value + 1; + } + + nextLine(); + recordCurrentPos(); //must re-record current caret position since we are on a new line now + } + } + currentPos.X += advance; + + if (char.IsWhiteSpace(text[i]) || TextManager.IsCJK($"{text[i]}")) + { + lastBreakerIndex = i; + } + } + if (requestCharPos >= text.Length) { foundCharPos = currentPos; } + if (allCharPos != null) { allCharPos[text.Length] = currentPos; } + allCharPositions = allCharPos; + result += text[currLineStart..].Remove("\n"); + requestedCharPos = foundCharPos; + return result; + } + public Vector2 MeasureString(string text, bool removeExtraSpacing = false) { if (text == null) @@ -504,7 +620,7 @@ namespace Barotrauma if (!removeExtraSpacing) { - retVal.Y = baseHeight * 1.8f; + retVal.Y = LineHeight; } else { @@ -516,7 +632,7 @@ namespace Barotrauma if (text[i] == '\n') { currentLineX = 0.0f; - retVal.Y += baseHeight * 1.8f; + retVal.Y += LineHeight; continue; } uint charIndex = text[i]; @@ -524,10 +640,9 @@ namespace Barotrauma { DynamicRenderAtlas(graphicsDevice, charIndex); } - if (texCoords.TryGetValue(charIndex, out GlyphData gd)) - { - currentLineX += gd.advance; - } + + GlyphData gd = GetGlyphData(charIndex); + currentLineX += gd.Advance; retVal.X = Math.Max(retVal.X, currentLineX); } return retVal; @@ -536,15 +651,14 @@ namespace Barotrauma public Vector2 MeasureChar(char c) { Vector2 retVal = Vector2.Zero; - retVal.Y = baseHeight * 1.8f; + retVal.Y = LineHeight; if (DynamicLoading && !texCoords.ContainsKey(c)) { DynamicRenderAtlas(graphicsDevice, c); } - if (texCoords.TryGetValue(c, out GlyphData gd)) - { - retVal.X = gd.advance; - } + + GlyphData gd = GetGlyphData(c); + retVal.X = gd.Advance; return retVal; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs index a9b3e4e50..abe80ac1c 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs @@ -494,7 +494,7 @@ namespace Barotrauma GUIFrame.Parent.Visible = visible; } - private IEnumerable UpdateMessageAnimation(GUIComponent message, float animDuration) + private IEnumerable UpdateMessageAnimation(GUIComponent message, float animDuration) { float timer = 0.0f; while (timer < animDuration) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs index 18c65a9f7..976820f90 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs @@ -399,7 +399,7 @@ namespace Barotrauma " Max: " + GameMain.PerformanceCounter.DrawTimeGraph.LargestValue().ToString("0.00") + " ms", GUI.Style.Green, Color.Black * 0.8f, font: SmallFont); y += 15; - GameMain.PerformanceCounter.DrawTimeGraph.Draw(spriteBatch, new Rectangle(300, y, 170, 50), null, 0, GUI.Style.Green); + GameMain.PerformanceCounter.DrawTimeGraph.Draw(spriteBatch, new Rectangle(300, y, 170, 50), color: Style.Green); y += 50; DrawString(spriteBatch, new Vector2(300, y), @@ -407,8 +407,8 @@ namespace Barotrauma " Max: " + GameMain.PerformanceCounter.UpdateTimeGraph.LargestValue().ToString("0.00") + " ms", Color.LightBlue, Color.Black * 0.8f, font: SmallFont); y += 15; - GameMain.PerformanceCounter.UpdateTimeGraph.Draw(spriteBatch, new Rectangle(300, y, 170, 50), null, 0, Color.LightBlue); - GameMain.PerformanceCounter.UpdateIterationsGraph.Draw(spriteBatch, new Rectangle(300, y, 170, 50), 20, 0, GUI.Style.Red); + GameMain.PerformanceCounter.UpdateTimeGraph.Draw(spriteBatch, new Rectangle(300, y, 170, 50), color: Color.LightBlue); + GameMain.PerformanceCounter.UpdateIterationsGraph.Draw(spriteBatch, new Rectangle(300, y, 170, 50), maxValue: 20, color: Style.Red); y += 50; foreach (string key in GameMain.PerformanceCounter.GetSavedIdentifiers) { @@ -941,7 +941,8 @@ namespace Barotrauma inventoryIndex = updateList.IndexOf(CharacterHUD.HUDFrame); } - if ((!PlayerInput.PrimaryMouseButtonHeld() && !PlayerInput.PrimaryMouseButtonClicked()) || (prevMouseOn == null && !PlayerInput.SecondaryMouseButtonHeld())) + if ((!PlayerInput.PrimaryMouseButtonHeld() && !PlayerInput.PrimaryMouseButtonClicked()) || + (prevMouseOn == null && !PlayerInput.SecondaryMouseButtonHeld() && !Inventory.DraggingItems.Any())) { for (var i = updateList.Count - 1; i > inventoryIndex; i--) { @@ -1052,10 +1053,10 @@ namespace Barotrauma // Children in list boxes can be interacted with despite not having // a GUIButton inside of them so instead of hard coding we check if // the children can be interacted with by checking their hover state - if (parent is GUIListBox listBox) + if (parent is GUIListBox listBox && c.Parent == listBox.Content) { if (listBox.DraggedElement != null) { return CursorState.Dragging; } - if (listBox.CanDragElements) { return CursorState.Move; } + if (listBox.CurrentDragMode != GUIListBox.DragMode.NoDragging) { return CursorState.Move; } if (listBox.HoverCursor != CursorState.Default) { @@ -1148,7 +1149,7 @@ namespace Barotrauma { CoroutineManager.StartCoroutine(WaitCursorCoroutine(), "WaitCursorTimeout"); - IEnumerable WaitCursorCoroutine() + IEnumerable WaitCursorCoroutine() { MouseCursor = CursorState.Waiting; var timeOut = DateTime.Now + new TimeSpan(0, 0, waitSeconds); @@ -1360,7 +1361,7 @@ namespace Barotrauma float symbolScale = Math.Min(64.0f / sprite.size.X, 1.0f) * scaleMultiplier * Scale; - if (overrideAlpha.HasValue || (dist > visibleRange.Start && dist < visibleRange.End)) + if (overrideAlpha.HasValue || visibleRange.Contains(dist)) { float alpha = overrideAlpha ?? MathUtils.Min((dist - visibleRange.Start) / 100.0f, 1.0f - ((dist - visibleRange.End + 100f) / 100.0f), 1.0f); Vector2 targetScreenPos = cam.WorldToScreen(worldPosition); @@ -2254,8 +2255,8 @@ namespace Barotrauma #region Misc public static void TogglePauseMenu() { - if (Screen.Selected == GameMain.MainMenuScreen) return; - if (PreventPauseMenuToggle) return; + if (Screen.Selected == GameMain.MainMenuScreen) { return; } + if (PreventPauseMenuToggle) { return; } settingsMenuOpen = false; @@ -2276,162 +2277,121 @@ namespace Barotrauma Stretch = true, RelativeSpacing = 0.05f }; - - new GUIButton(new RectTransform(new Vector2(0.1f, 0.1f), pauseMenuInner.RectTransform, Anchor.TopRight) { AbsoluteOffset = new Point((int)(15 * GUI.Scale)) }, + + new GUIButton(new RectTransform(new Vector2(0.1f, 0.1f), pauseMenuInner.RectTransform, Anchor.TopRight) { AbsoluteOffset = new Point((int)(15 * GUI.Scale)) }, "", style: "GUIBugButton") { IgnoreLayoutGroups = true, - ToolTip = TextManager.Get("bugreportbutton"), + ToolTip = TextManager.Get("bugreportbutton") + $" (v{GameMain.Version})", OnClicked = (btn, userdata) => { GameMain.Instance.ShowBugReporter(); return true; } }; - new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("PauseMenuResume")) - { - OnClicked = TogglePauseMenu - }; - - new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("PauseMenuSettings")) - { - OnClicked = (btn, userData) => - { - TogglePauseMenu(); - settingsMenuOpen = !settingsMenuOpen; - return true; - } - }; + CreateButton("PauseMenuResume", buttonContainer, null); + CreateButton("PauseMenuSettings", buttonContainer, () => { settingsMenuOpen = !settingsMenuOpen; }); bool IsOutpostLevel() => GameMain.GameSession != null && Level.IsLoadedOutpost; if (Screen.Selected == GameMain.GameScreen && GameMain.GameSession != null) { if (GameMain.GameSession.GameMode is SinglePlayerCampaign spMode) { - var retryButton = new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("PauseMenuRetry")); - retryButton.OnClicked += (btn, userData) => + CreateButton("PauseMenuRetry", buttonContainer, verificationTextTag: "PauseMenuRetryVerification", action: () => { - var msgBox = new GUIMessageBox("", TextManager.Get("PauseMenuRetryVerification"), new string[] { TextManager.Get("Yes"), TextManager.Get("Cancel") }) + if (GameMain.GameSession.RoundSummary?.Frame != null) { - UserData = "verificationprompt" - }; - msgBox.Buttons[0].OnClicked = (_, userdata) => - { - if (GameMain.GameSession.RoundSummary?.Frame != null) - { - GUIMessageBox.MessageBoxes.Remove(GameMain.GameSession.RoundSummary.Frame); - } + GUIMessageBox.MessageBoxes.Remove(GameMain.GameSession.RoundSummary.Frame); + } + GUIMessageBox.MessageBoxes.RemoveAll(mb => mb.UserData as string == "ConversationAction"); + GameMain.GameSession.LoadPreviousSave(); + }); - GUIMessageBox.MessageBoxes.RemoveAll(mb => mb.UserData as string == "ConversationAction"); - TogglePauseMenu(btn, userData); - GameMain.GameSession.LoadPreviousSave(); - return true; - }; - msgBox.Buttons[0].OnClicked += msgBox.Close; - msgBox.Buttons[1].OnClicked = (_, userdata) => - { - TogglePauseMenu(btn, userData); - msgBox.Close(); - return true; - }; - return true; - }; if (IsOutpostLevel()) { - var saveAndQuitButton = new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("PauseMenuSaveQuit")) + CreateButton("PauseMenuSaveQuit", buttonContainer, verificationTextTag: "PauseMenuSaveAndReturnToMainMenuVerification", action: () => { - UserData = "save", - OnClicked = (btn, userData) => - { - pauseMenuOpen = false; - if (IsOutpostLevel()) - { - GameMain.QuitToMainMenu(save: true); - } - return true; - } - }; + if (IsOutpostLevel()) { GameMain.QuitToMainMenu(save: true); } + }); } } else if (GameMain.GameSession.GameMode is TestGameMode) { - new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), text: TextManager.Get("PauseMenuReturnToEditor")) + CreateButton("PauseMenuReturnToEditor", buttonContainer, action: () => { - OnClicked = (btn, userdata) => - { - GameMain.GameSession.EndRound(""); - pauseMenuOpen = false; - return true; - } - }; + GameMain.GameSession?.EndRound(""); + }); } else if (!GameMain.GameSession.GameMode.IsSinglePlayer && GameMain.Client != null && GameMain.Client.HasPermission(ClientPermissions.ManageRound)) { - new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), - text: TextManager.Get(GameMain.GameSession.GameMode is CampaignMode ? "ReturnToServerlobby": "EndRound")) + bool canSave = GameMain.GameSession.GameMode is CampaignMode && IsOutpostLevel(); + if (canSave) { - OnClicked = (btn, userdata) => + CreateButton("PauseMenuSaveQuit", buttonContainer, verificationTextTag: "PauseMenuSaveAndReturnToServerLobbyVerification", action: () => { - if (!GameMain.Client.HasPermission(ClientPermissions.ManageRound)) { return false; } - if (GameMain.GameSession.GameMode is CampaignMode && !IsOutpostLevel() || (!Submarine.MainSub.AtStartExit && !Submarine.MainSub.AtEndExit)) - { - var msgBox = new GUIMessageBox("", - TextManager.Get(GameMain.GameSession.GameMode is CampaignMode ? "PauseMenuReturnToServerLobbyVerification" : "EndRoundSubNotAtLevelEnd"), - new string[] { TextManager.Get("Yes"), TextManager.Get("No") }) - { - UserData = "verificationprompt" - }; - msgBox.Buttons[0].OnClicked = (_, __) => - { - pauseMenuOpen = false; - GameMain.Client.RequestRoundEnd(); - return true; - }; - msgBox.Buttons[0].OnClicked += msgBox.Close; - msgBox.Buttons[1].OnClicked += msgBox.Close; - } - else - { - pauseMenuOpen = false; - GameMain.Client.RequestRoundEnd(); - } - return true; - } - }; + GameMain.Client?.RequestRoundEnd(save: true); + }); + } + + CreateButton(GameMain.GameSession.GameMode is CampaignMode ? "ReturnToServerlobby" : "EndRound", buttonContainer, + verificationTextTag: GameMain.GameSession.GameMode is CampaignMode ? "PauseMenuReturnToServerLobbyVerification" : "EndRoundSubNotAtLevelEnd", + action: () => + { + GameMain.Client?.RequestRoundEnd(save: false); + }); } } - - var quitButton = new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("PauseMenuQuit")); - quitButton.OnClicked += (btn, userData) => + + if (GameMain.GameSession != null || Screen.Selected is CharacterEditorScreen || Screen.Selected is SubEditorScreen) { - if (GameMain.GameSession != null || (Screen.Selected is CharacterEditorScreen || Screen.Selected is SubEditorScreen)) - { - string text = GameMain.GameSession == null ? "PauseMenuQuitVerificationEditor" : "PauseMenuQuitVerification"; - var msgBox = new GUIMessageBox("", TextManager.Get(text), new string[] { TextManager.Get("Yes"), TextManager.Get("Cancel") }) - { - UserData = "verificationprompt" - }; - msgBox.Buttons[0].OnClicked = (yesBtn, userdata) => + CreateButton("PauseMenuQuit", buttonContainer, + verificationTextTag: GameMain.GameSession == null ? "PauseMenuQuitVerificationEditor" : "PauseMenuQuitVerification", + action: () => { GameMain.QuitToMainMenu(save: false); - pauseMenuOpen = false; - return true; - }; - msgBox.Buttons[0].OnClicked += msgBox.Close; - msgBox.Buttons[1].OnClicked = (_, userdata) => - { - pauseMenuOpen = false; - msgBox.Close(); - return true; - }; - } - else - { - GameMain.QuitToMainMenu(save: false); - pauseMenuOpen = false; - } - return true; - }; + }); + } + else + { + CreateButton("PauseMenuQuit", buttonContainer, action: () => { GameMain.QuitToMainMenu(save: false); }); + } GUITextBlock.AutoScaleAndNormalize(buttonContainer.Children.Where(c => c is GUIButton).Select(c => ((GUIButton)c).TextBlock)); } + + void CreateButton(string textTag, GUIComponent parent, Action action, string verificationTextTag = null) + { + new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), parent.RectTransform), TextManager.Get(textTag)) + { + OnClicked = (btn, userData) => + { + if (string.IsNullOrEmpty(verificationTextTag)) + { + pauseMenuOpen = false; + action?.Invoke(); + } + else + { + CreateVerificationPrompt(verificationTextTag, action); + } + return true; + } + }; + } + + void CreateVerificationPrompt(string textTag, Action confirmAction) + { + var msgBox = new GUIMessageBox("", TextManager.Get(textTag), + new string[] { TextManager.Get("Yes"), TextManager.Get("No") }) + { + UserData = "verificationprompt" + }; + msgBox.Buttons[0].OnClicked = (_, __) => + { + pauseMenuOpen = false; + confirmAction?.Invoke(); + return true; + }; + msgBox.Buttons[0].OnClicked += msgBox.Close; + msgBox.Buttons[1].OnClicked += msgBox.Close; + } } private static bool TogglePauseMenu(GUIButton button, object obj) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs index 34e99bc03..f03ad241a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs @@ -531,6 +531,17 @@ namespace Barotrauma } } + public virtual void ForceLayoutRecalculation() + { + //This is very ugly but it gets the job done, it + //would be real nice to un-jank this some day + ForceUpdate(); + ForceUpdate(); + foreach (var child in Children) { child.ForceLayoutRecalculation(); } + } + + public void ForceUpdate() => Update((float)Timing.Step); + /// /// Updates all the children manually. /// @@ -831,7 +842,7 @@ namespace Barotrauma CoroutineManager.StartCoroutine(SlideToPosition(duration, 0.0f, targetPos)); } - private IEnumerable SlideToPosition(float duration, float wait, Vector2 target) + private IEnumerable SlideToPosition(float duration, float wait, Vector2 target) { float t = 0.0f; var (startX, startY) = RectTransform.ScreenSpaceOffset.ToVector2(); @@ -855,7 +866,7 @@ namespace Barotrauma yield return CoroutineStatus.Success; } - private IEnumerable LerpAlpha(float to, float duration, bool removeAfter, float wait = 0.0f) + private IEnumerable LerpAlpha(float to, float duration, bool removeAfter, float wait = 0.0f) { State = ComponentState.None; float t = 0.0f; @@ -894,7 +905,7 @@ namespace Barotrauma pulsateCoroutine = CoroutineManager.StartCoroutine(DoPulsate(startScale, endScale, duration), "Pulsate" + ToString()); } - private IEnumerable DoPulsate(Vector2 startScale, Vector2 endScale, float duration) + private IEnumerable DoPulsate(Vector2 startScale, Vector2 endScale, float duration) { float t = 0.0f; while (t < duration) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs index e58a115fc..51c0b2d04 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs @@ -34,7 +34,7 @@ namespace Barotrauma public GUIScrollBar ScrollBar { get; private set; } private readonly Dictionary childVisible = new Dictionary(); - + private int totalSize; private bool childrenNeedsRecalculation; private bool scrollBarNeedsRecalculation; @@ -53,7 +53,23 @@ namespace Barotrauma } } - public bool SelectMultiple; + public enum SelectMode + { + SelectSingle, + SelectMultiple, + RequireShiftToSelectMultiple + } + + public SelectMode CurrentSelectMode = SelectMode.SelectSingle; + + public bool SelectMultiple + { + get { return CurrentSelectMode != SelectMode.SelectSingle; } + set + { + CurrentSelectMode = value ? SelectMode.SelectMultiple : SelectMode.SelectSingle; + } + } public bool HideChildrenOutsideFrame = true; @@ -103,7 +119,7 @@ namespace Barotrauma /// /// true if mouse down should select elements instead of mouse up /// - private bool useMouseDownToSelect = false; + private readonly bool useMouseDownToSelect = false; private Vector4? overridePadding; public Vector4 Padding @@ -132,10 +148,7 @@ namespace Barotrauma // TODO: fix implicit hiding public bool Selected { get; set; } - public List AllSelected - { - get { return selected; } - } + public IReadOnlyList AllSelected => selected; public object SelectedData { @@ -214,25 +227,34 @@ namespace Barotrauma public bool AutoHideScrollBar { get; set; } = true; private bool IsScrollBarOnDefaultSide { get; set; } - public bool CanDragElements + public enum DragMode + { + NoDragging, + DragWithinBox, + DragOutsideBox + } + + private DragMode currentDragMode = DragMode.NoDragging; + public DragMode CurrentDragMode { get { - return canDragElements; + return currentDragMode; } set { - if (value == false && canDragElements && draggedElement != null) + if (value == DragMode.NoDragging && currentDragMode != DragMode.NoDragging && isDraggingElement) { DraggedElement = null; } - canDragElements = value; + currentDragMode = value; } } - private bool canDragElements = false; + private GUIComponent draggedElement; - private Rectangle draggedReferenceRectangle; - private Point draggedReferenceOffset; + private Point dragMousePosRelativeToTopLeftCorner; + private bool isDraggingElement => draggedElement != null; + public bool HasDraggedElementIndexChanged { get; private set; } public GUIComponent DraggedElement @@ -246,8 +268,24 @@ namespace Barotrauma if (value == draggedElement) { return; } draggedElement = value; HasDraggedElementIndexChanged = false; + + if (value == null) { return; } + + dragMousePosRelativeToTopLeftCorner = PlayerInput.MousePosition.ToPoint() - value.Rect.Location; + + if (SelectMultiple) + { + if (!AllSelected.Contains(DraggedElement)) + { + Select(DraggedElement.ToEnumerable()); + } + } } } + + //This exists to work around the fact that rendering child + //elements on top of the listbox's siblings is a clusterfuck. + public bool HideDraggedElement = false; private readonly bool isHorizontal; @@ -354,7 +392,7 @@ namespace Barotrauma (child.UserData == null && userData == null)) { Select(i, force, autoScroll); - if (!SelectMultiple) return; + if (!SelectMultiple) { return; } } i++; } @@ -363,9 +401,10 @@ namespace Barotrauma private Point CalculateFrameSize(bool isHorizontal, int scrollBarSize) => isHorizontal ? new Point(Rect.Width, Rect.Height - scrollBarSize) : new Point(Rect.Width - scrollBarSize, Rect.Height); - private void RepositionChildren() + public Vector2 CalculateTopOffset() { - int x = 0, y = 0; + int x = 0; + int y = 0; if (ScrollBar.BarSize < 1.0f) { if (ScrollBar.IsHorizontal) @@ -378,53 +417,59 @@ namespace Barotrauma } } + return new Vector2(x, y); + } + + private void CalculateChildrenOffsets(Action callback) + { + Vector2 topOffset = CalculateTopOffset(); + int x = (int)topOffset.X; + int y = (int)topOffset.Y; + for (int i = 0; i < Content.CountChildren; i++) { GUIComponent child = Content.GetChild(i); if (!child.Visible) { continue; } if (RectTransform != null) { - if (child != draggedElement && (child.RectTransform.AbsoluteOffset.X != x || child.RectTransform.AbsoluteOffset.Y != y)) - { - child.RectTransform.AbsoluteOffset = new Point(x, y); - } + callback(i, new Point(x, y)); } if (useGridLayout) { + void advanceGridLayout( + ref int primaryCoord, + ref int secondaryCoord, + int primaryChildDimension, + int secondaryChildDimension, + int primaryParentDimension) + { + if (primaryCoord + primaryChildDimension + Spacing > primaryParentDimension) + { + primaryCoord = 0; + secondaryCoord += secondaryChildDimension + Spacing; + callback(i, new Point(x, y)); + } + primaryCoord += primaryChildDimension + Spacing; + } + if (ScrollBar.IsHorizontal) { - if (y + child.Rect.Height + Spacing > Content.Rect.Height) - { - y = 0; - x += child.Rect.Width + Spacing; - if (child != draggedElement && (child.RectTransform.AbsoluteOffset.X != x || child.RectTransform.AbsoluteOffset.Y != y)) - { - child.RectTransform.AbsoluteOffset = new Point(x, y); - } - y += child.Rect.Height + Spacing; - } - else - { - y += child.Rect.Height + Spacing; - } + advanceGridLayout( + primaryCoord: ref y, + secondaryCoord: ref x, + primaryChildDimension: child.Rect.Height, + secondaryChildDimension: child.Rect.Width, + primaryParentDimension: Content.Rect.Height); } else { - if (x + child.Rect.Width + Spacing > Content.Rect.Width) - { - x = 0; - y += child.Rect.Height + Spacing; - if (child != draggedElement && (child.RectTransform.AbsoluteOffset.X != x || child.RectTransform.AbsoluteOffset.Y != y)) - { - child.RectTransform.AbsoluteOffset = new Point(x, y); - } - x += child.Rect.Width + Spacing; - } - else - { - x += child.Rect.Width + Spacing; - } + advanceGridLayout( + primaryCoord: ref x, + secondaryCoord: ref y, + primaryChildDimension: child.Rect.Width, + secondaryChildDimension: child.Rect.Height, + primaryParentDimension: Content.Rect.Width); } } else @@ -440,6 +485,18 @@ namespace Barotrauma } } } + + private void RepositionChildren() + { + CalculateChildrenOffsets((index, offset) => + { + var child = Content.GetChild(index); + if (child != draggedElement && child.RectTransform.AbsoluteOffset != offset) + { + child.RectTransform.AbsoluteOffset = offset; + } + }); + } /// /// Scrolls the list to the specific element, currently only works when smooth scrolling and PadBottom are enabled. @@ -466,7 +523,7 @@ namespace Barotrauma { CoroutineManager.StartCoroutine(ScrollCoroutine()); - IEnumerable ScrollCoroutine() + IEnumerable ScrollCoroutine() { if (BarSize >= 1.0f) { @@ -490,68 +547,122 @@ namespace Barotrauma } } - - private void UpdateChildrenRect() + private void StartDraggingElement(GUIComponent child) { - //dragging - if (CanDragElements && draggedElement != null) + DraggedElement = child; + } + + private bool UpdateDragging() + { + if (CurrentDragMode == DragMode.NoDragging || !isDraggingElement) { return false; } + if (!PlayerInput.PrimaryMouseButtonHeld()) { - if (!PlayerInput.PrimaryMouseButtonHeld()) + var draggedElem = draggedElement; + OnRearranged?.Invoke(this, draggedElem.UserData); + DraggedElement = null; + RepositionChildren(); + if (AllSelected.Contains(draggedElem)) { return true; } + } + else + { + Vector2 topOffset = CalculateTopOffset(); + var mousePos = PlayerInput.MousePosition.ToPoint(); + draggedElement.RectTransform.AbsoluteOffset = mousePos - Content.Rect.Location - dragMousePosRelativeToTopLeftCorner; + if (CurrentDragMode != DragMode.DragOutsideBox) { - OnRearranged?.Invoke(this, draggedElement.UserData); - DraggedElement = null; - RepositionChildren(); + var offset = draggedElement.RectTransform.AbsoluteOffset; + draggedElement.RectTransform.AbsoluteOffset = + isHorizontal ? new Point(offset.X, 0) : new Point(0, offset.Y); + } + + int index = Content.RectTransform.GetChildIndex(draggedElement.RectTransform); + int newIndex = index; + + Point draggedOffsetWhenReleased = Point.Zero; + CalculateChildrenOffsets((i, offset) => + { + if (index != i) { return; } + draggedOffsetWhenReleased = offset; + }); + Rectangle draggedRectWhenReleased = new Rectangle(Content.Rect.Location + draggedOffsetWhenReleased, draggedElement.Rect.Size); + + void shiftIndices( + float mousePos, + ref int draggedRectWhenReleasedLocation, + int draggedRectWhenReleasedSize) + { + while (mousePos > (draggedRectWhenReleasedLocation + draggedRectWhenReleasedSize) && newIndex < Content.CountChildren-1) + { + newIndex++; + draggedRectWhenReleasedLocation += draggedRectWhenReleasedSize; + } + while (mousePos < draggedRectWhenReleasedLocation && newIndex > 0) + { + newIndex--; + draggedRectWhenReleasedLocation -= draggedRectWhenReleasedSize; + } + + if (newIndex != index && AllSelected.Count > 1) + { + this.selected.Sort((a, b) => Content.GetChildIndex(a) - Content.GetChildIndex(b)); + int draggedPos = AllSelected.IndexOf(draggedElement); + if (newIndex < draggedPos) + { + newIndex = draggedPos; + } + if (newIndex >= Content.CountChildren - (AllSelected.Count - draggedPos)) + { + int max = Content.CountChildren - (AllSelected.Count - draggedPos); + newIndex = max; + } + } + } + + if (isHorizontal) + { + shiftIndices( + mousePos.X, + ref draggedRectWhenReleased.X, + draggedRectWhenReleased.Width); } else { - draggedElement.RectTransform.AbsoluteOffset = isHorizontal ? - draggedReferenceOffset + new Point((int)PlayerInput.MousePosition.X - draggedReferenceRectangle.Center.X, 0) : - draggedReferenceOffset + new Point(0, (int)PlayerInput.MousePosition.Y - draggedReferenceRectangle.Center.Y); + shiftIndices( + mousePos.Y, + ref draggedRectWhenReleased.Y, + draggedRectWhenReleased.Height); + } - int index = Content.RectTransform.GetChildIndex(draggedElement.RectTransform); - int currIndex = index; - - if (isHorizontal) + if (newIndex != index) + { + if (AllSelected.Count > 1) { - while (currIndex > 0 && PlayerInput.MousePosition.X < draggedReferenceRectangle.Left) + this.selected.Sort((a, b) => Content.GetChildIndex(a) - Content.GetChildIndex(b)); + int indexOfDraggedElem = AllSelected.IndexOf(draggedElement); + IEnumerable allSelected = AllSelected; + if (newIndex > index) { allSelected = allSelected.Reverse(); } + foreach (var elem in allSelected) { - currIndex--; - draggedReferenceRectangle.X -= draggedReferenceRectangle.Width; - draggedReferenceOffset.X -= draggedReferenceRectangle.Width; - } - while (currIndex < Content.CountChildren - 1 && PlayerInput.MousePosition.X > draggedReferenceRectangle.Right) - { - currIndex++; - draggedReferenceRectangle.X += draggedReferenceRectangle.Width; - draggedReferenceOffset.X += draggedReferenceRectangle.Width; + elem.RectTransform.RepositionChildInHierarchy(newIndex + AllSelected.IndexOf(elem) - indexOfDraggedElem); } } else { - while (currIndex > 0 && PlayerInput.MousePosition.Y < draggedReferenceRectangle.Top) - { - currIndex--; - draggedReferenceRectangle.Y -= draggedReferenceRectangle.Height; - draggedReferenceOffset.Y -= draggedReferenceRectangle.Height; - } - while (currIndex < Content.CountChildren - 1 && PlayerInput.MousePosition.Y > draggedReferenceRectangle.Bottom) - { - currIndex++; - draggedReferenceRectangle.Y += draggedReferenceRectangle.Height; - draggedReferenceOffset.Y += draggedReferenceRectangle.Height; - } + draggedElement.RectTransform.RepositionChildInHierarchy(newIndex); } - - if (currIndex != index) - { - draggedElement.RectTransform.RepositionChildInHierarchy(currIndex); - HasDraggedElementIndexChanged = true; - } - - return; + HasDraggedElementIndexChanged = true; } + + return true; } + return false; + } + + private void UpdateChildrenRect() + { + if (UpdateDragging()) { return; } + if (SelectTop) { foreach (GUIComponent child in Content.Children) @@ -581,7 +692,7 @@ namespace Barotrauma for (int i = 0; i < Content.CountChildren; i++) { var child = Content.RectTransform.GetChild(i)?.GUIComponent; - if (child == null || !child.Visible) { continue; } + if (!(child is { Visible: true })) { continue; } // selecting if (Enabled && (CanBeFocused || CanInteractWhenUnfocusable) && child.CanBeFocused && child.Rect.Contains(PlayerInput.MousePosition) && GUI.IsMouseOn(child)) @@ -595,19 +706,15 @@ namespace Barotrauma if (SelectTop) { ScrollToElement(child); - Select(i, autoScroll: false, takeKeyBoardFocus: true); - } - else - { - Select(i, autoScroll: false, takeKeyBoardFocus: true); } + Select(i, autoScroll: false, takeKeyBoardFocus: true); } - if (CanDragElements && PlayerInput.PrimaryMouseButtonDown() && GUI.MouseOn == child) + if (CurrentDragMode != DragMode.NoDragging + && (CurrentSelectMode != SelectMode.RequireShiftToSelectMultiple || (!PlayerInput.IsShiftDown() && !PlayerInput.IsCtrlDown())) + && PlayerInput.PrimaryMouseButtonDown() && GUI.MouseOn == child) { - DraggedElement = child; - draggedReferenceRectangle = child.Rect; - draggedReferenceOffset = child.RectTransform.AbsoluteOffset; + StartDraggingElement(child); } } else if (selected.Contains(child)) @@ -686,6 +793,13 @@ namespace Barotrauma OnAddedToGUIUpdateList?.Invoke(this); } + public override void ForceLayoutRecalculation() + { + base.ForceLayoutRecalculation(); + Content.ForceLayoutRecalculation(); + ScrollBar.ForceLayoutRecalculation(); + } + public void RecalculateChildren() { foreach (GUIComponent child in Content.Children) @@ -709,8 +823,6 @@ namespace Barotrauma } } - public void ForceUpdate() => Update((float)Timing.Step); - protected override void Update(float deltaTime) { if (!Visible) { return; } @@ -805,7 +917,7 @@ namespace Barotrauma } else { - ScrollBar.BarScroll -= (PlayerInput.ScrollWheelSpeed / 500.0f) * BarSize; + ScrollBar.BarScroll -= (PlayerInput.ScrollWheelSpeed / 500.0f) * ScrollBar.UnclampedBarSize; } } @@ -870,6 +982,7 @@ namespace Barotrauma if (childIndex >= Content.CountChildren || childIndex < 0) { return; } GUIComponent child = Content.GetChild(childIndex); + if (child is null) { return; } bool wasSelected = true; if (OnSelected != null) @@ -880,7 +993,8 @@ namespace Barotrauma if (!wasSelected) { return; } - if (SelectMultiple) + if (CurrentSelectMode == SelectMode.SelectMultiple || + (CurrentSelectMode == SelectMode.RequireShiftToSelectMultiple && PlayerInput.IsCtrlDown())) { if (selected.Contains(child)) { @@ -891,6 +1005,23 @@ namespace Barotrauma selected.Add(child); } } + else if (CurrentSelectMode == SelectMode.RequireShiftToSelectMultiple && PlayerInput.IsShiftDown()) + { + var first = SelectedComponent ?? child; + var last = child; + int firstIndex = Content.GetChildIndex(first); + int lastIndex = Content.GetChildIndex(last); + int sgn = Math.Sign(lastIndex - firstIndex); + selected.Clear(); selected.Add(first); + for (int i = firstIndex + sgn; i != lastIndex; i += sgn) + { + if (Content.GetChild(i) is { Visible: true } interChild) + { + selected.Add(interChild); + } + } + if (first != last) { selected.Add(last); } + } else { selected.Clear(); @@ -937,6 +1068,14 @@ namespace Barotrauma } } + public void Select(IEnumerable children) + { + Selected = true; + selected.Clear(); + selected.AddRange(children.Where(c => Content.Children.Contains(c))); + foreach (var child in selected) { OnSelected?.Invoke(child, child.UserData); } + } + public void Deselect() { Selected = false; @@ -1007,9 +1146,12 @@ namespace Barotrauma } float minScrollBarSize = 20.0f; + ScrollBar.UnclampedBarSize = ScrollBar.IsHorizontal ? + Math.Min(Content.Rect.Width / (float)totalSize, 1.0f) : + Math.Min(Content.Rect.Height / (float)totalSize, 1.0f); ScrollBar.BarSize = ScrollBar.IsHorizontal ? - Math.Max(Math.Min(Content.Rect.Width / (float)totalSize, 1.0f), minScrollBarSize / Content.Rect.Width) : - Math.Max(Math.Min(Content.Rect.Height / (float)totalSize, 1.0f), minScrollBarSize / Content.Rect.Height); + Math.Max(ScrollBar.UnclampedBarSize, minScrollBarSize / Content.Rect.Width) : + Math.Max(ScrollBar.UnclampedBarSize, minScrollBarSize / Content.Rect.Height); } public override void ClearChildren() @@ -1052,10 +1194,11 @@ namespace Barotrauma int i = 0; foreach (GUIComponent child in Content.Children) { - if (!child.Visible) continue; + if (!child.Visible) { continue; } + if (child == draggedElement && CurrentDragMode == DragMode.DragOutsideBox) { continue; } if (!IsChildInsideFrame(child)) { - if (lastVisible > 0) break; + if (lastVisible > 0) { break; } continue; } lastVisible = i; @@ -1070,6 +1213,11 @@ namespace Barotrauma spriteBatch.Begin(SpriteSortMode.Deferred, samplerState: GUI.SamplerState, rasterizerState: GameMain.ScissorTestEnable); } + if (isDraggingElement && CurrentDragMode == DragMode.DragOutsideBox && !HideDraggedElement) + { + draggedElement.DrawManually(spriteBatch, alsoChildren: true, recursive: true); + } + if (ScrollBarVisible) { ScrollBar.DrawManually(spriteBatch, alsoChildren: true, recursive: true); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIScrollBar.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIScrollBar.cs index 55a2d545f..aa44f2ffc 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIScrollBar.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIScrollBar.cs @@ -183,6 +183,11 @@ namespace Barotrauma } } + /// + /// ListBoxes with lots of content in them clamp the size of the scrollbar above a certain minimum size; this is the relative bar size without the clamping applied. + /// + public float UnclampedBarSize; + public float BarSize { get { return barSize; } @@ -299,9 +304,15 @@ namespace Barotrauma } else { + float barScale = 1.0f; + if (UnclampedBarSize > 0.0f) + { + barScale = (UnclampedBarSize / BarSize); + } + MoveButton(new Vector2( - Math.Sign(PlayerInput.MousePosition.X - Bar.Rect.Center.X) * Bar.Rect.Width, - Math.Sign(PlayerInput.MousePosition.Y - Bar.Rect.Center.Y) * Bar.Rect.Height)); + Math.Sign(PlayerInput.MousePosition.X - Bar.Rect.Center.X) * Bar.Rect.Width * barScale, + Math.Sign(PlayerInput.MousePosition.Y - Bar.Rect.Center.Y) * Bar.Rect.Height * barScale)); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIStyle.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIStyle.cs index 6c6224e8f..f8cbd5414 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIStyle.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIStyle.cs @@ -44,6 +44,8 @@ namespace Barotrauma public UISprite PingCircle { get; private set; } + public UISprite YouAreHereCircle { get; private set; } + public UISprite UIGlowCircular { get; private set; } public UISprite UIGlowSolidCircular { get; private set; } @@ -253,6 +255,9 @@ namespace Barotrauma case "pingcircle": PingCircle = new UISprite(subElement); break; + case "youareherecircle": + YouAreHereCircle = new UISprite(subElement); + break; case "radiation": RadiationSprite = new UISprite(subElement); break; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs index 86e2a84e3..fbd7b2c77 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs @@ -2,6 +2,7 @@ using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; namespace Barotrauma @@ -376,6 +377,7 @@ namespace Barotrauma public void SetTextPos() { + cachedCaretPositions = ImmutableArray.Empty; if (text == null) { return; } censoredText = string.IsNullOrEmpty(text) ? "" : new string('\u2022', text.Length); @@ -389,7 +391,7 @@ namespace Barotrauma if (Wrap && rect.Width > 0) { - wrappedText = ToolBox.WrapText(text, rect.Width - padding.X - padding.Z, Font, textScale, playerInput); + wrappedText = ToolBox.WrapText(text, rect.Width - padding.X - padding.Z, Font, textScale); TextSize = MeasureText(wrappedText); } else if (OverflowClip) @@ -477,108 +479,49 @@ namespace Barotrauma disabledTextColor = color; } - protected List> GetAllPositions() + private ImmutableArray cachedCaretPositions = ImmutableArray.Empty; + + public ImmutableArray GetAllCaretPositions() { - float halfHeight = Font.MeasureString("T").Y * 0.5f * textScale; - string textDrawn = Censor ? CensoredText : WrappedText; - var positions = new List>(); - if (textDrawn.Contains("\n")) + if (cachedCaretPositions.Any()) { - string[] lines = textDrawn.Split('\n'); - int index = 0; - int totalIndex = 0; - for (int i = 0; i < lines.Length; i++) - { - string line = lines[i]; - totalIndex += line.Length; - float totalTextHeight = Font.MeasureString(textDrawn.Substring(0, totalIndex)).Y * textScale; - for (int j = 0; j <= line.Length; j++) - { - Vector2 lineTextSize = Font.MeasureString(line.Substring(0, j)) * textScale; - Vector2 indexPos = new Vector2(lineTextSize.X, totalTextHeight - halfHeight) + TextPos - Origin * textScale; - //DebugConsole.NewMessage($"index: {index}, pos: {indexPos}", Color.AliceBlue); - positions.Add(new Tuple(indexPos, index + j)); - } - index = totalIndex; - } + return cachedCaretPositions; } - else - { - textDrawn = Censor ? CensoredText : Text; - for (int i = 0; i <= Text.Length; i++) - { - Vector2 textSize = Font.MeasureString(textDrawn.Substring(0, i)) * textScale; - Vector2 indexPos = new Vector2(textSize.X, textSize.Y - halfHeight) + TextPos - Origin * textScale; - //DebugConsole.NewMessage($"index: {i}, pos: {indexPos}", Color.WhiteSmoke); - positions.Add(new Tuple(indexPos, i)); - } - } - return positions; + string textDrawn = Censor ? CensoredText : Text; + float w = Wrap + ? (Rect.Width - Padding.X - Padding.Z) / TextScale + : float.PositiveInfinity; + Font.WrapText(textDrawn, w, out Vector2[] positions); + cachedCaretPositions = positions.Select(p => p * TextScale + TextPos - Origin * TextScale).ToImmutableArray(); + return cachedCaretPositions; } - public int GetCaretIndexFromScreenPos(Vector2 pos) + public int GetCaretIndexFromScreenPos(in Vector2 pos) { return GetCaretIndexFromLocalPos(pos - Rect.Location.ToVector2()); } - public int GetCaretIndexFromLocalPos(Vector2 pos) + public int GetCaretIndexFromLocalPos(in Vector2 pos) { - var positions = GetAllPositions(); - if (positions.Count == 0) { return 0; } - float halfHeight = Font.MeasureString("T").Y * 0.5f * textScale; + var positions = GetAllCaretPositions(); + if (positions.Length == 0) { return 0; } - var currPosition = positions[0]; - - float topY = positions.Min(p => p.Item1.Y); - - for (int i = 1; i < positions.Count; i++) + float closestXDist = float.PositiveInfinity; + float closestYDist = float.PositiveInfinity; + int closestIndex = -1; + for (int i = 0; i < positions.Length; i++) { - var p1 = positions[i]; - var p2 = currPosition; - - float diffY = Math.Abs(p1.Item1.Y - pos.Y) - Math.Abs(p2.Item1.Y - pos.Y); - if (diffY < -3.0f) + float xDist = Math.Abs(pos.X - positions[i].X); + float yDist = Math.Abs(pos.Y - (positions[i].Y + Font.LineHeight * 0.5f)); + if (yDist < closestYDist || (MathUtils.NearlyEqual(yDist, closestYDist) && xDist < closestXDist)) { - currPosition = p1; - continue; - } - else if (diffY > 3.0f) - { - continue; - } - else - { - diffY = Math.Abs(p1.Item1.Y - pos.Y); - if (diffY < halfHeight || (p1.Item1.Y == topY && pos.Y < topY)) - { - //we are on this line, select the nearest character - float diffX = Math.Abs(p1.Item1.X - pos.X) - Math.Abs(p2.Item1.X - pos.X); - if (diffX < -1.0f) - { - currPosition = p1; continue; - } - else - { - continue; - } - } - else - { - //we are on a different line, preserve order - if (p1.Item2 < p2.Item2) - { - if (p1.Item1.Y > pos.Y) { currPosition = p1; } - } - else if (p1.Item2 > p2.Item2) - { - if (p1.Item1.Y < pos.Y) { currPosition = p1; } - } - continue; - } + closestIndex = i; + closestXDist = xDist; + closestYDist = yDist; } } - //GUI.AddMessage($"index: {posIndex.Item2}, pos: {posIndex.Item1}", Color.WhiteSmoke); - return currPosition != null ? currPosition.Item2 : Text.Length; + + return closestIndex >= 0 ? closestIndex : Text.Length; } protected override void Update(float deltaTime) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs index 4d8a2feae..d09434b5d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs @@ -44,7 +44,7 @@ namespace Barotrauma private int? maxTextLength; private int _caretIndex; - private int CaretIndex + public int CaretIndex { get { return _caretIndex; } set @@ -343,34 +343,23 @@ namespace Barotrauma private void CalculateCaretPos() { - string textDrawn = Censor ? textBlock.CensoredText : textBlock.WrappedText; - if (textDrawn.Contains("\n")) + if (Censor || !Wrap) { - string[] lines = textDrawn.Split('\n'); - int totalIndex = 0; - for (int i = 0; i < lines.Length; i++) - { - int currentLineLength = lines[i].Length; - totalIndex += currentLineLength; - // The caret is on this line - if (CaretIndex < totalIndex || totalIndex == textBlock.Text.Length) - { - int diff = totalIndex - CaretIndex; - int index = currentLineLength - diff; - Vector2 lineTextSize = Font.MeasureString(lines[i].Substring(0, index)) * TextBlock.TextScale; - Vector2 lastLineSize = Font.MeasureString(lines[i]) * TextBlock.TextScale; - float totalTextHeight = Font.MeasureString(textDrawn.Substring(0, totalIndex)).Y * TextBlock.TextScale; - caretPos = new Vector2(lineTextSize.X, totalTextHeight - lastLineSize.Y) + textBlock.TextPos - textBlock.Origin * TextBlock.TextScale; - break; - } - } + string textDrawn = textBlock.CensoredText; + CaretIndex = Math.Min(CaretIndex, textDrawn.Length); + textDrawn = Censor ? textBlock.CensoredText : textBlock.Text; + Vector2 textSize = Font.MeasureString(textDrawn[..CaretIndex]) * TextBlock.TextScale; + caretPos = new Vector2(textSize.X, 0) + textBlock.TextPos - textBlock.Origin * TextBlock.TextScale; } else { - CaretIndex = Math.Min(CaretIndex, textDrawn.Length); - textDrawn = Censor ? textBlock.CensoredText : textBlock.Text; - Vector2 textSize = Font.MeasureString(textDrawn.Substring(0, CaretIndex)) * TextBlock.TextScale; - caretPos = new Vector2(textSize.X, 0) + textBlock.TextPos - textBlock.Origin * TextBlock.TextScale; + CaretIndex = Math.Min(CaretIndex, textBlock.Text.Length); + textBlock.Font.WrapText( + textBlock.Text, + (textBlock.Rect.Width - textBlock.Padding.X - textBlock.Padding.Z) / TextBlock.TextScale, + CaretIndex, + out Vector2 requestedCharPos); + caretPos = requestedCharPos * TextBlock.TextScale + textBlock.TextPos - textBlock.Origin * TextBlock.TextScale; } caretPosDirty = false; } @@ -383,6 +372,7 @@ namespace Barotrauma memento.Store(Text); } CaretIndex = forcedCaretIndex == - 1 ? textBlock.GetCaretIndexFromScreenPos(PlayerInput.MousePosition) : forcedCaretIndex; + CalculateCaretPos(); ClearSelection(); selected = true; GUI.KeyboardDispatcher.Subscriber = this; @@ -538,59 +528,37 @@ namespace Barotrauma if (textBlock.WrappedText.Contains("\n")) { // Multiline selection - string[] lines = textBlock.WrappedText.Split('\n'); - int totalIndex = 0; - int previousCharacters = 0; - Vector2 offset = textBlock.TextPos - textBlock.Origin; - for (int i = 0; i < lines.Length; i++) + var characterPositions = textBlock.GetAllCaretPositions(); + (int startIndex, int endIndex) = selectionStartIndex < selectionEndIndex + ? (selectionStartIndex, selectionEndIndex) + : (selectionEndIndex, selectionStartIndex); + endIndex--; + + void drawRect(Vector2 topLeft, Vector2 bottomRight) { - string currentLine = lines[i]; - int currentLineLength = currentLine.Length; - totalIndex += currentLineLength; - bool containsSelection = IsLeftToRight - ? selectionStartIndex < totalIndex && selectionEndIndex > previousCharacters - : selectionEndIndex < totalIndex && selectionStartIndex > previousCharacters; - if (containsSelection) - { - Vector2 currentLineSize = Font.MeasureString(currentLine) * TextBlock.TextScale; - if ((IsLeftToRight && selectionStartIndex < previousCharacters && selectionEndIndex > totalIndex) - || !IsLeftToRight && selectionEndIndex < previousCharacters && selectionStartIndex > totalIndex) - { - // select the whole line - Vector2 topLeft = offset + new Vector2(0, currentLineSize.Y * i); - GUI.DrawRectangle(spriteBatch, Rect.Location.ToVector2() + topLeft, currentLineSize, SelectionColor, isFilled: true); - } - else - { - if (IsLeftToRight) - { - bool selectFromTheBeginning = selectionStartIndex <= previousCharacters; - int startIndex = selectFromTheBeginning ? 0 : Math.Abs(selectionStartIndex - previousCharacters); - int endIndex = Math.Abs(selectionEndIndex - previousCharacters); - int characters = Math.Min(endIndex - startIndex, currentLineLength - startIndex); - Vector2 selectedTextSize = Font.MeasureString(currentLine.Substring(startIndex, characters)) * TextBlock.TextScale; - Vector2 topLeft = selectFromTheBeginning - ? new Vector2(offset.X, offset.Y + currentLineSize.Y * i) - : new Vector2(selectionStartPos.X, offset.Y + currentLineSize.Y * i); - GUI.DrawRectangle(spriteBatch, Rect.Location.ToVector2() + topLeft, selectedTextSize, SelectionColor, isFilled: true); - } - else - { - bool selectFromTheBeginning = selectionStartIndex >= totalIndex; - bool selectFromTheStart = selectionEndIndex <= previousCharacters; - int startIndex = selectFromTheBeginning ? currentLineLength : Math.Abs(selectionStartIndex - previousCharacters); - int endIndex = selectFromTheStart ? 0 : Math.Abs(selectionEndIndex - previousCharacters); - int characters = Math.Min(Math.Abs(endIndex - startIndex), currentLineLength); - Vector2 selectedTextSize = Font.MeasureString(currentLine.Substring(endIndex, characters)) * TextBlock.TextScale; - Vector2 topLeft = selectFromTheBeginning - ? new Vector2(offset.X + currentLineSize.X - selectedTextSize.X, offset.Y + currentLineSize.Y * i) - : new Vector2(selectionStartPos.X - selectedTextSize.X, offset.Y + currentLineSize.Y * i); - GUI.DrawRectangle(spriteBatch, Rect.Location.ToVector2() + topLeft, selectedTextSize, SelectionColor, isFilled: true); - } - } - } - previousCharacters = totalIndex; + int minWidth = GUI.IntScale(5); + if (bottomRight.X - topLeft.X < minWidth) { bottomRight.X = topLeft.X + minWidth; } + GUI.DrawRectangle(spriteBatch, + Rect.Location.ToVector2() + topLeft, + bottomRight - topLeft, + SelectionColor, isFilled: true); } + + Vector2 topLeft = characterPositions[startIndex]; + for (int i = startIndex+1; i <= endIndex; i++) + { + Vector2 currPos = characterPositions[i]; + if (!MathUtils.NearlyEqual(topLeft.Y, currPos.Y)) + { + Vector2 bottomRight = characterPositions[i - 1]; + bottomRight += Font.MeasureChar(Text[i - 1]); + drawRect(topLeft, bottomRight); + topLeft = currPos; + } + } + Vector2 finalBottomRight = characterPositions[endIndex]; + finalBottomRight += Font.MeasureChar(Text[endIndex]); + drawRect(topLeft, finalBottomRight); } else { @@ -728,8 +696,15 @@ namespace Barotrauma { InitSelectionStart(); } - float lineHeight = Font.MeasureString("T").Y * TextBlock.TextScale; - int newIndex = textBlock.GetCaretIndexFromLocalPos(new Vector2(caretPos.X, caretPos.Y - lineHeight)); + float lineHeight = Font.LineHeight * TextBlock.TextScale; + int newIndex = textBlock.GetCaretIndexFromLocalPos(new Vector2(caretPos.X, caretPos.Y - lineHeight * 0.5f)); + textBlock.Font.WrapText( + textBlock.Text, + (textBlock.Rect.Width - textBlock.Padding.X - textBlock.Padding.Z) / TextBlock.TextScale, + newIndex, + out Vector2 requestedCharPos); + requestedCharPos *= TextBlock.TextScale; + if (MathUtils.NearlyEqual(requestedCharPos.Y, caretPos.Y)) { newIndex = 0; } CaretIndex = newIndex; caretTimer = 0; HandleSelection(); @@ -739,8 +714,15 @@ namespace Barotrauma { InitSelectionStart(); } - lineHeight = Font.MeasureString("T").Y * TextBlock.TextScale; - newIndex = textBlock.GetCaretIndexFromLocalPos(new Vector2(caretPos.X, caretPos.Y + lineHeight)); + lineHeight = Font.LineHeight * TextBlock.TextScale; + newIndex = textBlock.GetCaretIndexFromLocalPos(new Vector2(caretPos.X, caretPos.Y + lineHeight * 1.5f)); + textBlock.Font.WrapText( + textBlock.Text, + (textBlock.Rect.Width - textBlock.Padding.X - textBlock.Padding.Z) / TextBlock.TextScale, + newIndex, + out Vector2 requestedCharPos2); + requestedCharPos2 *= TextBlock.TextScale; + if (MathUtils.NearlyEqual(requestedCharPos2.Y, caretPos.Y)) { newIndex = Text.Length; } CaretIndex = newIndex; caretTimer = 0; HandleSelection(); @@ -803,6 +785,7 @@ namespace Barotrauma } break; } + if (caretPosDirty) { CalculateCaretPos(); } OnKeyHit?.Invoke(this, key); void HandleSelection() { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/Graph.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/Graph.cs index 4a37aea4c..a4732f9ca 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/Graph.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/Graph.cs @@ -1,5 +1,6 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; +using System; using System.Linq; namespace Barotrauma @@ -37,39 +38,44 @@ namespace Barotrauma values[0] = newValue; } - public void Draw(SpriteBatch spriteBatch, Rectangle rect, float? maxVal, float xOffset, Color color) + public delegate void GraphDelegate(SpriteBatch spriteBatch, float value, int order, Vector2 position); + + public void Draw(SpriteBatch spriteBatch, Rectangle rect, float? maxValue = null, float xOffset = 0, Color? color = null, GraphDelegate doForEachValue = null) { + color ??= Color.White; float graphMaxVal = 1.0f; - if (maxVal == null) + if (maxValue == null) { graphMaxVal = LargestValue(); } - else if (maxVal > 0.0f) + else if (maxValue > 0.0f) { - graphMaxVal = (float)maxVal; + graphMaxVal = (float)maxValue; } GUI.DrawRectangle(spriteBatch, rect, Color.White); - if (values.Length == 0) return; + if (values.Length == 0) { return; } - float lineWidth = (float)rect.Width / (float)(values.Length - 2); - float yScale = (float)rect.Height / graphMaxVal; + float lineWidth = rect.Width / (float)(values.Length - 2); + float yScale = rect.Height / graphMaxVal; Vector2 prevPoint = new Vector2(rect.Right, rect.Bottom - (values[1] + (values[0] - values[1]) * xOffset) * yScale); float currX = rect.Right - ((xOffset - 1.0f) * lineWidth); for (int i = 1; i < values.Length - 1; i++) { + float value = values[i]; currX -= lineWidth; - Vector2 newPoint = new Vector2(currX, rect.Bottom - values[i] * yScale); - GUI.DrawLine(spriteBatch, prevPoint, newPoint - new Vector2(1.0f, 0), color); + Vector2 newPoint = new Vector2(currX, rect.Bottom - value * yScale); + GUI.DrawLine(spriteBatch, prevPoint, newPoint - new Vector2(1.0f, 0), color.Value); prevPoint = newPoint; + doForEachValue?.Invoke(spriteBatch, value, i, newPoint); } - - Vector2 lastPoint = new Vector2(rect.X, - rect.Bottom - (values[values.Length - 1] + (values[values.Length - 2] - values[values.Length - 1]) * xOffset) * yScale); - - GUI.DrawLine(spriteBatch, prevPoint, lastPoint, color); + int lastIndex = values.Length - 1; + float lastValue = values[lastIndex]; + Vector2 lastPoint = new Vector2(rect.X, rect.Bottom - (lastValue + (values[values.Length - 2] - lastValue) * xOffset) * yScale); + GUI.DrawLine(spriteBatch, prevPoint, lastPoint, color.Value); + doForEachValue?.Invoke(spriteBatch, lastValue, lastIndex, lastPoint); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/LoadingScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/LoadingScreen.cs index 3e7e06550..8d83781a8 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/LoadingScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/LoadingScreen.cs @@ -379,11 +379,42 @@ namespace Barotrauma if (currSplashScreen.IsPlaying) { + graphics.Clear(Color.Black); + float videoAspectRatio = (float)currSplashScreen.Width / (float)currSplashScreen.Height; + int width; int height; + if (GameMain.GraphicsHeight * videoAspectRatio > GameMain.GraphicsWidth) + { + width = GameMain.GraphicsWidth; + height = (int)(GameMain.GraphicsWidth / videoAspectRatio); + } + else + { + width = (int)(GameMain.GraphicsHeight * videoAspectRatio); + height = GameMain.GraphicsHeight; + } + spriteBatch.Begin(); - spriteBatch.Draw(currSplashScreen.GetTexture(), new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.White); + spriteBatch.Draw( + currSplashScreen.GetTexture(), + destinationRectangle: new Rectangle( + GameMain.GraphicsWidth / 2 - width / 2, + GameMain.GraphicsHeight / 2 - height / 2, + width, + height), + sourceRectangle: new Rectangle(0, 0, currSplashScreen.Width, currSplashScreen.Height), + Color.White, + rotation: 0.0f, + origin: Vector2.Zero, + SpriteEffects.None, + layerDepth: 0.0f); spriteBatch.End(); - if (DateTime.Now > videoStartTime + new TimeSpan(0, 0, 0, 0, milliseconds: 500) && GameMain.WindowActive && (PlayerInput.KeyHit(Keys.Escape) || PlayerInput.KeyHit(Keys.Space) || PlayerInput.KeyHit(Keys.Enter) || PlayerInput.PrimaryMouseButtonDown())) + if (DateTime.Now > videoStartTime + new TimeSpan(0, 0, 0, 0, milliseconds: 500) + && GameMain.WindowActive + && (PlayerInput.KeyHit(Keys.Escape) + || PlayerInput.KeyHit(Keys.Space) + || PlayerInput.KeyHit(Keys.Enter) + || PlayerInput.PrimaryMouseButtonDown())) { currSplashScreen.Dispose(); currSplashScreen = null; } @@ -395,7 +426,7 @@ namespace Barotrauma } bool drawn; - public IEnumerable DoLoading(IEnumerable loader) + public IEnumerable DoLoading(IEnumerable loader) { drawn = false; LoadState = null; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/RectTransform.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/RectTransform.cs index a00a820a9..04bbaa485 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/RectTransform.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/RectTransform.cs @@ -732,7 +732,7 @@ namespace Barotrauma CoroutineManager.StartCoroutine(DoScaleAnimation(targetSize, duration)); } - private IEnumerable DoMoveAnimation(Point targetPos, float duration) + private IEnumerable DoMoveAnimation(Point targetPos, float duration) { Vector2 startPos = AbsoluteOffset.ToVector2(); float t = 0.0f; @@ -746,7 +746,7 @@ namespace Barotrauma animTargetPos = null; yield return CoroutineStatus.Success; } - private IEnumerable DoScaleAnimation(Point targetSize, float duration) + private IEnumerable DoScaleAnimation(Point targetSize, float duration) { Vector2 startSize = NonScaledSize.ToVector2(); float t = 0.0f; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/ShapeExtensions.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/ShapeExtensions.cs index afb00b206..3648f41af 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/ShapeExtensions.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/ShapeExtensions.cs @@ -151,9 +151,8 @@ namespace Barotrauma /// public static void DrawPoint(this SpriteBatch spriteBatch, Vector2 position, Color color, float size = 1f) { - var scale = Vector2.One * size; var offset = new Vector2(0.5f) - new Vector2(size * 0.5f); - spriteBatch.Draw(GetTexture(spriteBatch), position + offset, null, color, 0.0f, Vector2.Zero, Vector2.One, SpriteEffects.None, 0); + spriteBatch.Draw(GetTexture(spriteBatch), position + offset, null, color, 0.0f, Vector2.Zero, new Vector2(size), SpriteEffects.None, 0); } public static void DrawCircle(this SpriteBatch spriteBatch, Vector2 center, float radius, int sides, Color color, diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs index 114c2282e..191a8392d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs @@ -266,7 +266,7 @@ namespace Barotrauma }; if (balanceAfterTransaction != CurrentLocation.StoreCurrentBalance) { - var newStatus = Location.GetStoreBalanceStatus(balanceAfterTransaction); + var newStatus = CurrentLocation.GetStoreBalanceStatus(balanceAfterTransaction); if (CurrentLocation.ActiveStoreBalanceStatus.SellPriceModifier != newStatus.SellPriceModifier) { string tooltipTag = newStatus.SellPriceModifier > CurrentLocation.ActiveStoreBalanceStatus.SellPriceModifier ? diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs index 409bb15fb..848bfc4b2 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs @@ -471,7 +471,7 @@ namespace Barotrauma } // Initial submarine selection needs a slight wait to allow the layoutgroups to place content properly - private IEnumerable SelectOwnSubmarineWithDelay(SubmarineInfo info, SubmarineDisplayContent display) + private IEnumerable SelectOwnSubmarineWithDelay(SubmarineInfo info, SubmarineDisplayContent display) { yield return new WaitForSeconds(0.05f); SelectSubmarine(info, display.background.Rect); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs index 6ed653ddc..ee5cefd50 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs @@ -1541,13 +1541,41 @@ namespace Barotrauma GUITextBlock.AutoScaleAndNormalize(skillNames); } + private bool HasUnlockedAllTalents(Character controlledCharacter) + { + if (TalentTree.JobTalentTrees.TryGetValue(controlledCharacter.Info.Job.Prefab.Identifier, out TalentTree talentTree)) + { + foreach (TalentSubTree talentSubTree in talentTree.TalentSubTrees) + { + foreach (TalentOption talentOption in talentSubTree.TalentOptionStages) + { + if (talentOption.Talents.None(t => controlledCharacter.HasTalent(t.Identifier))) + { + return false; + } + } + } + } + return true; + } + private void UpdateTalentButtons() { Character controlledCharacter = Character.Controlled; + if (controlledCharacter?.Info == null) { return; } - experienceText.Text = $"{controlledCharacter.Info.ExperiencePoints - controlledCharacter.Info.GetExperienceRequiredForCurrentLevel()} / {controlledCharacter.Info.GetExperienceRequiredToLevelUp() - controlledCharacter.Info.GetExperienceRequiredForCurrentLevel()}"; - experienceBar.BarSize = controlledCharacter.Info.GetProgressTowardsNextLevel(); - //experienceBar.ToolTip = $"{controlledCharacter.Info.ExperiencePoints - controlledCharacter.Info.GetExperienceRequiredForCurrentLevel()} / {controlledCharacter.Info.GetExperienceRequiredToLevelUp() - controlledCharacter.Info.GetExperienceRequiredForCurrentLevel()}"; + bool unlockedAllTalents = HasUnlockedAllTalents(controlledCharacter); + + if (unlockedAllTalents) + { + experienceText.Text = string.Empty; + experienceBar.BarSize = 1f; + } + else + { + experienceText.Text = $"{controlledCharacter.Info.ExperiencePoints - controlledCharacter.Info.GetExperienceRequiredForCurrentLevel()} / {controlledCharacter.Info.GetExperienceRequiredToLevelUp() - controlledCharacter.Info.GetExperienceRequiredForCurrentLevel()}"; + experienceBar.BarSize = controlledCharacter.Info.GetProgressTowardsNextLevel(); + } selectedTalents = TalentTree.CheckTalentSelection(controlledCharacter, selectedTalents); @@ -1555,7 +1583,11 @@ namespace Barotrauma int talentCount = selectedTalents.Count - controlledCharacter.Info.GetUnlockedTalentsInTree().Count(); - if (talentCount > 0) + if (unlockedAllTalents) + { + talentPointText.SetRichText($"‖color:{XMLExtensions.ToStringHex(Color.Gray)}‖{TextManager.Get("talentmenu.alltalentsunlocked")}‖color:end‖"); + } + else if (talentCount > 0) { string pointsUsed = $"‖color:{XMLExtensions.ColorToString(GUI.Style.Red)}‖{-talentCount}‖color:end‖"; string localizedString = TextManager.GetWithVariables("talentmenu.points.spending", new []{ "[amount]", "[used]" }, new []{ pointsLeft, pointsUsed}); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs index 9134bfff2..9d4e6e7e7 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs @@ -436,7 +436,7 @@ namespace Barotrauma } } - private IEnumerable Load(bool isSeparateThread) + private IEnumerable Load(bool isSeparateThread) { if (GameSettings.VerboseLogging) { @@ -534,9 +534,8 @@ namespace Barotrauma Debug.WriteLine("sounds"); int i = 0; - foreach (object crObj in SoundPlayer.Init()) + foreach (CoroutineStatus status in SoundPlayer.Init()) { - CoroutineStatus status = (CoroutineStatus)crObj; if (status == CoroutineStatus.Success) break; i++; @@ -1000,11 +999,11 @@ namespace Barotrauma } } - NetworkMember?.Update((float)Timing.Step); - GUI.Update((float)Timing.Step); } + NetworkMember?.Update((float)Timing.Step); + CoroutineManager.Update((float)Timing.Step, Paused ? 0.0f : (float)Timing.Step); SteamManager.Update((float)Timing.Step); @@ -1231,7 +1230,7 @@ namespace Barotrauma } static bool waitForKeyHit = true; - public CoroutineHandle ShowLoading(IEnumerable loader, bool waitKeyHit = true) + public CoroutineHandle ShowLoading(IEnumerable loader, bool waitKeyHit = true) { waitForKeyHit = waitKeyHit; loadingScreenOpen = true; @@ -1256,7 +1255,7 @@ namespace Barotrauma } if (GameSettings.SendUserStatistics) { GameAnalytics.OnQuit(); } - if (GameSettings.SaveDebugConsoleLogs) { DebugConsole.SaveLogs(); } + if (GameSettings.SaveDebugConsoleLogs || GameSettings.VerboseLogging) { DebugConsole.SaveLogs(); } base.OnExiting(sender, args); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/CargoManager.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/CargoManager.cs index 3010c608a..a92ac9d93 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/CargoManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/CargoManager.cs @@ -40,12 +40,13 @@ namespace Barotrauma private List SoldEntities { get; } = new List(); + // The bag slot is intentionally left out since we want to be able to sell items from there + private readonly List equipmentSlots = new List() { InvSlotType.Head, InvSlotType.InnerClothes, InvSlotType.OuterClothes, InvSlotType.Headset, InvSlotType.Card }; + public IEnumerable GetSellableItems(Character character) { if (character == null) { return new List(); } var confirmedSoldEntities = GetConfirmedSoldEntities(); - // The bag slot is intentionally left out since we want to be able to sell items from there - var equipmentSlots = new List() { InvSlotType.Head, InvSlotType.InnerClothes, InvSlotType.OuterClothes, InvSlotType.Headset, InvSlotType.Card }; return character.Inventory.FindAllItems(item => { if (!IsItemSellable(item, confirmedSoldEntities)) { return false; } @@ -73,6 +74,7 @@ namespace Barotrauma return Submarine.MainSub.GetItems(true).FindAll(item => { if (!IsItemSellable(item, confirmedSoldEntities)) { return false; } + if (item.GetRootInventoryOwner() is Character) { return false; } if (!item.Components.All(c => !(c is Holdable h) || !h.Attachable || !h.Attached)) { return false; } if (!item.Components.All(c => !(c is Wire w) || w.Connections.All(c => c == null))) { return false; } if (!ItemAndAllContainersInteractable(item)) { return false; } @@ -101,7 +103,7 @@ namespace Barotrauma private bool IsItemSellable(Item item, IEnumerable confirmedSoldEntities) { if (!item.Prefab.CanBeSold) { return false; } - if (item.SpawnedInOutpost) { return false; } + if (item.SpawnedInCurrentOutpost) { return false; } if (!item.Prefab.AllowSellingWhenBroken && item.ConditionPercentage < 90.0f) { return false; } if (confirmedSoldEntities.Any(it => it.Item == item)) { return false; } if (item.OwnInventory?.Container is ItemContainer itemContainer) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/CrewManager.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/CrewManager.cs index 09fe317e9..2ef81f846 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/CrewManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/CrewManager.cs @@ -100,7 +100,7 @@ namespace Barotrauma { AutoHideScrollBar = false, CanBeFocused = false, - CanDragElements = true, + CurrentDragMode = GUIListBox.DragMode.DragWithinBox, CanInteractWhenUnfocusable = true, OnSelected = (component, userData) => false, SelectMultiple = false, @@ -359,34 +359,41 @@ namespace Barotrauma CanBeFocused = false }; - var jobIconBackground = new GUIImage( + // Hide the icon to make more space for the name if the crew list's width is small enough + bool isJobIconVisible = crewListEntrySize.X >= 220; + + if (isJobIconVisible) + { + var jobIconBackground = new GUIImage( new RectTransform(new Vector2(0.8f * iconRelativeWidth, 0.8f), layoutGroup.RectTransform), jobIndicatorBackground, scaleToFit: true) - { - CanBeFocused = false, - UserData = "job" - }; - if (character?.Info?.Job.Prefab?.Icon != null) - { - new GUIImage( - new RectTransform(Vector2.One, jobIconBackground.RectTransform), - character.Info.Job.Prefab.Icon, - scaleToFit: true) { CanBeFocused = false, - Color = character.Info.Job.Prefab.UIColor, - HoverColor = character.Info.Job.Prefab.UIColor, - PressedColor = character.Info.Job.Prefab.UIColor, - SelectedColor = character.Info.Job.Prefab.UIColor + UserData = "job" }; + if (character?.Info?.Job.Prefab?.Icon != null) + { + new GUIImage( + new RectTransform(Vector2.One, jobIconBackground.RectTransform), + character.Info.Job.Prefab.Icon, + scaleToFit: true) + { + CanBeFocused = false, + Color = character.Info.Job.Prefab.UIColor, + HoverColor = character.Info.Job.Prefab.UIColor, + PressedColor = character.Info.Job.Prefab.UIColor, + SelectedColor = character.Info.Job.Prefab.UIColor + }; + } } + int iconsVisible = isJobIconVisible ? 5 : 4; var nameRelativeWidth = 1.0f // Start padding - paddingRelativeWidth - // 5 icons (job, 3 orders, sound) - - (5 * 0.8f * iconRelativeWidth) + // icons (job, active orders, current task / voip) + - (iconsVisible * 0.8f * iconRelativeWidth) // Vertical line - (0.1f * iconRelativeWidth) // Spacing @@ -425,7 +432,7 @@ namespace Barotrauma var currentOrderList = new GUIListBox(new RectTransform(new Vector2(0.0f, 1.0f), parent: orderGroup.RectTransform), isHorizontal: true, style: null) { AllowMouseWheelScroll = false, - CanDragElements = true, + CurrentDragMode = GUIListBox.DragMode.DragWithinBox, HideChildrenOutsideFrame = false, KeepSpaceForScrollBar = false, OnRearranged = OnOrdersRearranged, @@ -439,7 +446,9 @@ namespace Barotrauma if (component is GUIListBox list) { list.CanBeFocused = CanIssueOrders; - list.CanDragElements = CanIssueOrders && list.Content.CountChildren > 1; + list.CurrentDragMode = CanIssueOrders && list.Content.CountChildren > 1 + ? GUIListBox.DragMode.DragWithinBox + : GUIListBox.DragMode.NoDragging; } }; @@ -507,8 +516,11 @@ namespace Barotrauma { if (!(characterComponent?.UserData is Character character)) { return; } if (character.Info?.Job?.Prefab == null) { return; } + string tooltip = TextManager.GetWithVariables("crewlistelementtooltip", + new string[] { "[name]", "[job]" }, + new string[] { character.Name, character.Info.Job.Name }); string color = XMLExtensions.ColorToString(character.Info.Job.Prefab.UIColor); - string tooltip = $"‖color:{color}‖{character.Name} ({character.Info.Job.Name})‖color:end‖"; + tooltip = $"‖color:{color}‖{tooltip}‖color:end‖"; var richTextData = RichTextData.GetRichTextData(tooltip, out string sanitizedTooltip); characterComponent.ToolTip = sanitizedTooltip; characterComponent.TooltipRichTextData = richTextData; @@ -546,7 +558,7 @@ namespace Barotrauma RemoveCharacter(killedCharacter); } - private IEnumerable KillCharacterAnim(GUIComponent component) + private IEnumerable KillCharacterAnim(GUIComponent component) { List components = component.GetAllChildren().ToList(); components.Add(component); @@ -1648,7 +1660,7 @@ namespace Barotrauma } if (characterComponent.Visible) { - if (character == Character.Controlled && characterComponent.State != GUIComponent.ComponentState.Selected) + if (character == Character.Controlled && crewList.SelectedComponent != characterComponent) { crewList.Select(character, force: true); } @@ -2637,7 +2649,7 @@ namespace Barotrauma // If targeting a repairable item with condition below the repair threshold, show the 'repairsystems' order orderIdentifier = "repairsystems"; - if (contextualOrders.None(o => o.Identifier.Equals(orderIdentifier)) && itemContext.Repairables.Any(r => itemContext.ConditionPercentage < r.RepairThreshold)) + if (contextualOrders.None(o => o.Identifier.Equals(orderIdentifier)) && itemContext.Repairables.Any(r => r.IsBelowRepairThreshold)) { if (itemContext.Repairables.Any(r => r != null && r.requiredSkills.Any(s => s != null && s.Identifier.Equals("electrical")))) { @@ -2758,11 +2770,11 @@ namespace Barotrauma if (AIObjectiveCleanupItems.IsValidTarget(item, Character.Controlled, checkInventory: false)) { return true; } if (AIObjectiveCleanupItems.IsValidContainer(item, Character.Controlled)) { return true; } - if (item.Repairables.Any(r => item.ConditionPercentage < r.RepairThreshold)) { return true; } + if (item.Repairables.Any(r => r.IsBelowRepairThreshold)) { return true; } var operateWeaponsPrefab = Order.GetPrefab("operateweapons"); return item.Components.Any(c => c is Controller) && (item.GetConnectedComponents().Any(c => c.Item.HasTag(operateWeaponsPrefab.TargetItems)) || - item.GetConnectedComponents(recursive: true).Any(c => c.Item.HasTag(operateWeaponsPrefab.TargetItems))); + item.GetConnectedComponents(recursive: true).Any(c => c.Item.HasTag(operateWeaponsPrefab.TargetItems))); } /// Use a negative value (e.g. -1) if there should be no hotkey associated with the node @@ -2781,7 +2793,7 @@ namespace Barotrauma disableNode = !CanCharacterBeHeard(); } - var mustSetOptionOrTarget = order.HasOptions; + bool mustSetOptionOrTarget = order.HasOptions; Item orderTargetEntity = null; // If the order doesn't have options, but must set a target, @@ -2804,14 +2816,14 @@ namespace Barotrauma { if (disableNode || !CanIssueOrders) { return false; } var o = userData as Order; - if (o.MustManuallyAssign && characterContext == null) - { - CreateAssignmentNodes(node); - } - else if (mustSetOptionOrTarget) + if (mustSetOptionOrTarget) { NavigateForward(button, userData); } + else if (o.MustManuallyAssign && characterContext == null) + { + CreateAssignmentNodes(node); + } else { if (orderTargetEntity != null) @@ -2925,6 +2937,10 @@ namespace Barotrauma { NavigateForward(button, userData); } + else if (o.Item1.MustManuallyAssign && characterContext == null) + { + CreateAssignmentNodes(button); + } else { SetCharacterOrder(characterContext ?? GetCharacterForQuickAssignment(o.Item1), o.Item1, o.Item2, CharacterInfo.HighestManualOrderPriority, Character.Controlled); @@ -2987,12 +3003,19 @@ namespace Barotrauma var node = new GUIButton(new RectTransform(size, parent: parent, anchor: Anchor.Center), style: null) { UserData = new Tuple(order, option), - OnClicked = (_, userData) => + OnClicked = (button, userData) => { if (!CanIssueOrders) { return false; } var o = userData as Tuple; - SetCharacterOrder(characterContext ?? GetCharacterForQuickAssignment(o.Item1), o.Item1, o.Item2, CharacterInfo.HighestManualOrderPriority, Character.Controlled); - DisableCommandUI(); + if (o.Item1.MustManuallyAssign && characterContext == null) + { + CreateAssignmentNodes(button); + } + else + { + SetCharacterOrder(characterContext ?? GetCharacterForQuickAssignment(o.Item1), o.Item1, o.Item2, CharacterInfo.HighestManualOrderPriority, Character.Controlled); + DisableCommandUI(); + } return true; } }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/MultiPlayerCampaign.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/MultiPlayerCampaign.cs index 32605d848..e88f312a9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/MultiPlayerCampaign.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/MultiPlayerCampaign.cs @@ -188,7 +188,7 @@ namespace Barotrauma } - private IEnumerable DoInitialCameraTransition() + private IEnumerable DoInitialCameraTransition() { while (GameMain.Instance.LoadingScreenOpen) { @@ -310,12 +310,12 @@ namespace Barotrauma yield return CoroutineStatus.Success; } - protected override IEnumerable DoLevelTransition(TransitionType transitionType, LevelData newLevel, Submarine leavingSub, bool mirror, List traitorResults = null) + protected override IEnumerable DoLevelTransition(TransitionType transitionType, LevelData newLevel, Submarine leavingSub, bool mirror, List traitorResults = null) { yield return CoroutineStatus.Success; } - private IEnumerable DoLevelTransition() + private IEnumerable DoLevelTransition() { SoundPlayer.OverrideMusicType = CrewManager.GetCharacters().Any(c => !c.IsDead) ? "endround" : "crewdead"; SoundPlayer.OverrideMusicDuration = 18.0f; @@ -361,7 +361,7 @@ namespace Barotrauma //-------------------------------------- //wait for the new level to be loaded - DateTime timeOut = DateTime.Now + new TimeSpan(0, 0, seconds: 30); + DateTime timeOut = DateTime.Now + new TimeSpan(0, 0, seconds: 60); while (Level.Loaded == prevLevel || Level.Loaded == null) { if (DateTime.Now > timeOut || Screen.Selected != GameMain.GameScreen) { break; } @@ -480,8 +480,6 @@ namespace Barotrauma { IsFirstRound = false; CoroutineManager.StartCoroutine(DoLevelTransition(), "LevelTransition"); - bool success = CrewManager.GetCharacters().Any(c => !c.IsDead); - GUI.SetSavingIndicatorState(success && (Level.IsLoadedOutpost || transitionType != TransitionType.None)); } } @@ -500,7 +498,7 @@ namespace Barotrauma }; } - private IEnumerable DoEndCampaignCameraTransition() + private IEnumerable DoEndCampaignCameraTransition() { Character controlled = Character.Controlled; if (controlled != null) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs index 3aa3f47ea..3c376f453 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs @@ -243,7 +243,7 @@ namespace Barotrauma mirror: map.CurrentLocation != map.SelectedConnection?.Locations[0])); } - private IEnumerable DoLoadInitialLevel(LevelData level, bool mirror) + private IEnumerable DoLoadInitialLevel(LevelData level, bool mirror) { GameMain.GameSession.StartRound(level, mirrorLevel: mirror); @@ -254,7 +254,7 @@ namespace Barotrauma yield return CoroutineStatus.Success; } - private IEnumerable DoInitialCameraTransition() + private IEnumerable DoInitialCameraTransition() { while (GameMain.Instance.LoadingScreenOpen) { @@ -378,7 +378,7 @@ namespace Barotrauma yield return CoroutineStatus.Success; } - protected override IEnumerable DoLevelTransition(TransitionType transitionType, LevelData newLevel, Submarine leavingSub, bool mirror, List traitorResults = null) + protected override IEnumerable DoLevelTransition(TransitionType transitionType, LevelData newLevel, Submarine leavingSub, bool mirror, List traitorResults = null) { NextLevel = newLevel; bool success = CrewManager.GetCharacters().Any(c => !c.IsDead); @@ -515,7 +515,7 @@ namespace Barotrauma }; } - private IEnumerable DoEndCampaignCameraTransition() + private IEnumerable DoEndCampaignCameraTransition() { if (Character.Controlled != null) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/BasicTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/BasicTutorial.cs index 7372def70..4431dbabb 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/BasicTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/BasicTutorial.cs @@ -15,7 +15,7 @@ namespace Barotrauma.Tutorials { } - public override IEnumerable UpdateState() + public override IEnumerable UpdateState() { Character Controlled = Character.Controlled; if (Controlled == null) yield return CoroutineStatus.Success; @@ -634,7 +634,7 @@ namespace Barotrauma.Tutorials return Character.Controlled.Inventory.FindItemByIdentifier(itemIdentifier) != null; } - protected IEnumerable KeepReactorRunning(Reactor reactor) + protected IEnumerable KeepReactorRunning(Reactor reactor) { do { @@ -652,7 +652,7 @@ namespace Barotrauma.Tutorials /// /// keeps the enemy away from the sub until the capacitors are loaded /// - private IEnumerable KeepEnemyAway(Character enemy, PowerContainer[] capacitors) + private IEnumerable KeepEnemyAway(Character enemy, PowerContainer[] capacitors) { do { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs index 60e4b869a..8f22864c3 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/CaptainTutorial.cs @@ -141,7 +141,7 @@ namespace Barotrauma.Tutorials captain_mechanic.AIController.Enabled = captain_security.AIController.Enabled = captain_engineer.AIController.Enabled = false; } - public override IEnumerable UpdateState() + public override IEnumerable UpdateState() { while (GameMain.Instance.LoadingScreenOpen) yield return null; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/DoctorTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/DoctorTutorial.cs index 1b10f65fd..641b28ad8 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/DoctorTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/DoctorTutorial.cs @@ -139,7 +139,7 @@ namespace Barotrauma.Tutorials reactorItem.GetComponent().AutoTemp = true; } - public override IEnumerable UpdateState() + public override IEnumerable UpdateState() { while (GameMain.Instance.LoadingScreenOpen) yield return null; @@ -446,7 +446,7 @@ namespace Barotrauma.Tutorials CoroutineManager.StartCoroutine(TutorialCompleted()); } - public IEnumerable KeepPatientAlive(Character patient) + public IEnumerable KeepPatientAlive(Character patient) { while (patient != null && !patient.Removed) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EditorTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EditorTutorial.cs index 19fc82001..d2591a2b1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EditorTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EditorTutorial.cs @@ -10,7 +10,7 @@ namespace Barotrauma.Tutorials { } - public override IEnumerable UpdateState() + public override IEnumerable UpdateState() { /*infoBox = CreateInfoFrame("Use the mouse wheel to zoom in and out, and WASD to move the camera around.", true); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EngineerTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EngineerTutorial.cs index 31ea40a37..a380ef67e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EngineerTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/EngineerTutorial.cs @@ -206,7 +206,7 @@ namespace Barotrauma.Tutorials engineer_submarineJunctionBox_3.Condition = 0f; } - public override IEnumerable UpdateState() + public override IEnumerable UpdateState() { while (GameMain.Instance.LoadingScreenOpen) yield return null; @@ -378,7 +378,7 @@ namespace Barotrauma.Tutorials } } yield return null; - } while (engineer_brokenJunctionBox.Condition < repairableJunctionBoxComponent.RepairThreshold); // Wait until repaired + } while (repairableJunctionBoxComponent.IsBelowRepairThreshold); // Wait until repaired SetHighlight(engineer_brokenJunctionBox, false); RemoveCompletedObjective(segments[3]); SetDoorAccess(engineer_thirdDoor, engineer_thirdDoorLight, true); @@ -422,7 +422,7 @@ namespace Barotrauma.Tutorials Repairable repairableJunctionBoxComponent3 = engineer_submarineJunctionBox_3.GetComponent(); // Remove highlights when each individual machine is repaired - do { CheckJunctionBoxHighlights(repairableJunctionBoxComponent1, repairableJunctionBoxComponent2, repairableJunctionBoxComponent3); yield return null; } while (engineer_submarineJunctionBox_1.Condition < repairableJunctionBoxComponent1.RepairThreshold || engineer_submarineJunctionBox_2.Condition < repairableJunctionBoxComponent2.RepairThreshold || engineer_submarineJunctionBox_3.Condition < repairableJunctionBoxComponent3.RepairThreshold); + do { CheckJunctionBoxHighlights(repairableJunctionBoxComponent1, repairableJunctionBoxComponent2, repairableJunctionBoxComponent3); yield return null; } while (repairableJunctionBoxComponent1.IsBelowRepairThreshold || repairableJunctionBoxComponent2.IsBelowRepairThreshold || repairableJunctionBoxComponent3.IsBelowRepairThreshold); CheckJunctionBoxHighlights(repairableJunctionBoxComponent1, repairableJunctionBoxComponent2, repairableJunctionBoxComponent3); RemoveCompletedObjective(segments[5]); yield return new WaitForSeconds(2f, false); @@ -462,7 +462,7 @@ namespace Barotrauma.Tutorials return engineer?.SelectedConstruction == item; } - private IEnumerable ReactorOperatedProperly() + private IEnumerable ReactorOperatedProperly() { float timer; @@ -566,17 +566,17 @@ namespace Barotrauma.Tutorials private void CheckJunctionBoxHighlights(Repairable comp1, Repairable comp2, Repairable comp3) { - if (engineer_submarineJunctionBox_1.Condition > comp1.RepairThreshold && engineer_submarineJunctionBox_1.ExternalHighlight) + if (!comp1.IsBelowRepairThreshold && engineer_submarineJunctionBox_1.ExternalHighlight) { SetHighlight(engineer_submarineJunctionBox_1, false); engineer.RemoveActiveObjectiveEntity(engineer_submarineJunctionBox_1); } - if (engineer_submarineJunctionBox_2.Condition > comp2.RepairThreshold && engineer_submarineJunctionBox_2.ExternalHighlight) + if (!comp2.IsBelowRepairThreshold && engineer_submarineJunctionBox_2.ExternalHighlight) { SetHighlight(engineer_submarineJunctionBox_2, false); engineer.RemoveActiveObjectiveEntity(engineer_submarineJunctionBox_2); } - if (engineer_submarineJunctionBox_3.Condition > comp3.RepairThreshold && engineer_submarineJunctionBox_3.ExternalHighlight) + if (!comp3.IsBelowRepairThreshold && engineer_submarineJunctionBox_3.ExternalHighlight) { SetHighlight(engineer_submarineJunctionBox_3, false); engineer.RemoveActiveObjectiveEntity(engineer_submarineJunctionBox_3); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/MechanicTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/MechanicTutorial.cs index fe62c6228..11227ac0e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/MechanicTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/MechanicTutorial.cs @@ -225,7 +225,7 @@ namespace Barotrauma.Tutorials base.Update(deltaTime); } - public override IEnumerable UpdateState() + public override IEnumerable UpdateState() { while (GameMain.Instance.LoadingScreenOpen) yield return null; @@ -550,7 +550,7 @@ namespace Barotrauma.Tutorials do { yield return null; - if (mechanic_brokenPump.Item.Condition < repairablePumpComponent.RepairThreshold) + if (repairablePumpComponent.IsBelowRepairThreshold) { if (!mechanic.HasEquippedItem("wrench")) { @@ -574,7 +574,7 @@ namespace Barotrauma.Tutorials } } } - } while (mechanic_brokenPump.Item.Condition < repairablePumpComponent.RepairThreshold || mechanic_brokenPump.FlowPercentage >= 0 || !mechanic_brokenPump.IsActive); + } while (repairablePumpComponent.IsBelowRepairThreshold || mechanic_brokenPump.FlowPercentage >= 0 || !mechanic_brokenPump.IsActive); RemoveCompletedObjective(segments[9]); SetHighlight(mechanic_brokenPump.Item, false); do { yield return null; } while (mechanic_brokenhull_2.WaterPercentage > waterVolumeBeforeOpening); @@ -597,7 +597,7 @@ namespace Barotrauma.Tutorials Repairable repairableEngineComponent = mechanic_submarineEngine.Item.GetComponent(); // Remove highlights when each individual machine is repaired - do { CheckHighlights(repairablePumpComponent1, repairablePumpComponent2, repairableEngineComponent); yield return null; } while (mechanic_ballastPump_1.Item.Condition < repairablePumpComponent1.RepairThreshold || mechanic_ballastPump_2.Item.Condition < repairablePumpComponent2.RepairThreshold || mechanic_submarineEngine.Item.Condition < repairableEngineComponent.RepairThreshold); + do { CheckHighlights(repairablePumpComponent1, repairablePumpComponent2, repairableEngineComponent); yield return null; } while (repairablePumpComponent1.IsBelowRepairThreshold || repairablePumpComponent2.IsBelowRepairThreshold || repairableEngineComponent.IsBelowRepairThreshold); CheckHighlights(repairablePumpComponent1, repairablePumpComponent2, repairableEngineComponent); RemoveCompletedObjective(segments[10]); GameMain.GameSession?.CrewManager.AddSinglePlayerChatMessage(radioSpeakerName, TextManager.Get("Mechanic.Radio.Complete"), ChatMessageType.Radio, null); @@ -623,17 +623,17 @@ namespace Barotrauma.Tutorials private void CheckHighlights(Repairable comp1, Repairable comp2, Repairable comp3) { - if (mechanic_ballastPump_1.Item.Condition > comp1.RepairThreshold && mechanic_ballastPump_1.Item.ExternalHighlight) + if (!comp1.IsBelowRepairThreshold && mechanic_ballastPump_1.Item.ExternalHighlight) { SetHighlight(mechanic_ballastPump_1.Item, false); mechanic.RemoveActiveObjectiveEntity(mechanic_ballastPump_1.Item); } - if (mechanic_ballastPump_2.Item.Condition > comp2.RepairThreshold && mechanic_ballastPump_2.Item.ExternalHighlight) + if (!comp2.IsBelowRepairThreshold && mechanic_ballastPump_2.Item.ExternalHighlight) { SetHighlight(mechanic_ballastPump_2.Item, false); mechanic.RemoveActiveObjectiveEntity(mechanic_ballastPump_2.Item); } - if (mechanic_submarineEngine.Item.Condition > comp3.RepairThreshold && mechanic_submarineEngine.Item.ExternalHighlight) + if (!comp3.IsBelowRepairThreshold && mechanic_submarineEngine.Item.ExternalHighlight) { SetHighlight(mechanic_submarineEngine.Item, false); mechanic.RemoveActiveObjectiveEntity(mechanic_submarineEngine.Item); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs index 2a68e6611..594e847cb 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/OfficerTutorial.cs @@ -201,7 +201,7 @@ namespace Barotrauma.Tutorials SetDoorAccess(tutorial_submarineDoor, tutorial_submarineDoorLight, true); } - public override IEnumerable UpdateState() + public override IEnumerable UpdateState() { while (GameMain.Instance.LoadingScreenOpen) yield return null; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs index 40ec19062..4cb49e6fb 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/ScenarioTutorial.cs @@ -54,7 +54,7 @@ namespace Barotrauma.Tutorials GameMain.Instance.ShowLoading(Loading()); } - private IEnumerable Loading() + private IEnumerable Loading() { SubmarineInfo subInfo = new SubmarineInfo(submarinePath); @@ -259,7 +259,7 @@ namespace Barotrauma.Tutorials base.Stop(); } - private IEnumerable Dead() + private IEnumerable Dead() { GUI.PreventPauseMenuToggle = true; Character.Controlled = character = null; @@ -279,7 +279,7 @@ namespace Barotrauma.Tutorials yield return CoroutineStatus.Success; } - protected IEnumerable TutorialCompleted() + protected IEnumerable TutorialCompleted() { GUI.PreventPauseMenuToggle = true; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs index 989889b19..87f3c404e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs @@ -247,7 +247,7 @@ namespace Barotrauma.Tutorials } } - public virtual IEnumerable UpdateState() + public virtual IEnumerable UpdateState() { yield return CoroutineStatus.Success; } @@ -470,7 +470,7 @@ namespace Barotrauma.Tutorials CoroutineManager.StartCoroutine(WaitForObjectiveEnd(segment)); } - private IEnumerable WaitForObjectiveEnd(TutorialSegment objective) + private IEnumerable WaitForObjectiveEnd(TutorialSegment objective) { yield return new WaitForSeconds(2.0f); objectiveFrame.RemoveChild(objective.ReplayButton); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/TutorialMode.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/TutorialMode.cs index ac23b8a31..d9ec85f14 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/TutorialMode.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/TutorialMode.cs @@ -24,7 +24,7 @@ namespace Barotrauma foreach (Item item in Item.ItemList) { //don't consider the items to belong in the outpost to prevent the stealing icon from showing - item.SpawnedInOutpost = false; + item.SpawnedInCurrentOutpost = false; } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs index b5246980c..007bef266 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs @@ -106,7 +106,8 @@ namespace Barotrauma respawnButtonContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.5f, 1.0f), respawnInfoFrame.RectTransform, Anchor.CenterRight), isHorizontal: true, childAnchor: Anchor.CenterLeft) { AbsoluteSpacing = HUDLayoutSettings.Padding, - Stretch = true + Stretch = true, + Visible = false }; respawnTickBox = new GUITickBox(new RectTransform(Vector2.One * 0.9f, respawnButtonContainer.RectTransform, Anchor.Center), TextManager.Get("respawnquestionpromptrespawn")) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/HintManager.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/HintManager.cs index b58477409..0112281b7 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/HintManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/HintManager.cs @@ -133,7 +133,7 @@ namespace Barotrauma string hintIdentifierBase = "onstartedinteracting"; // onstartedinteracting.brokenitem - if (item.Repairables.Any(r => item.ConditionPercentage < r.RepairThreshold)) + if (item.Repairables.Any(r => r.IsBelowRepairThreshold)) { if (DisplayHint($"{hintIdentifierBase}.brokenitem")) { return; } } @@ -192,7 +192,7 @@ namespace Barotrauma if (!CanDisplayHints(requireGameScreen: false, requireControllingCharacter: false)) { return; } CoroutineManager.StartCoroutine(DisplayRoundStartedHints(initRoundHandle), "HintManager.DisplayRoundStartedHints"); - static IEnumerable InitRound() + static IEnumerable InitRound() { while (Character.Controlled == null) { yield return CoroutineStatus.Running; } // Get the ballast hulls on round start not to find them again and again later @@ -211,7 +211,7 @@ namespace Barotrauma yield return CoroutineStatus.Success; } - static IEnumerable DisplayRoundStartedHints(CoroutineHandle initRoundHandle) + static IEnumerable DisplayRoundStartedHints(CoroutineHandle initRoundHandle) { while (GameMain.Instance.LoadingScreenOpen || Screen.Selected != GameMain.GameScreen || CoroutineManager.IsCoroutineRunning(initRoundHandle) || diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSettings.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSettings.cs index 49b528e7d..7260479fa 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSettings.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSettings.cs @@ -480,7 +480,7 @@ namespace Barotrauma "\n" + string.Join("\n", contentPackage.ErrorMessages); } } - contentPackageList.CanDragElements = CanHotswapPackages(false); + contentPackageList.CurrentDragMode = CanHotswapPackages(false) ? GUIListBox.DragMode.DragWithinBox : GUIListBox.DragMode.NoDragging; contentPackageList.CanBeFocused = CanHotswapPackages(false); contentPackageList.OnRearranged = OnContentPackagesRearranged; @@ -1767,7 +1767,7 @@ namespace Barotrauma return true; } - private IEnumerable WaitForKeyPress(GUITextBox keyBox, KeyOrMouse[] keyArray) + private IEnumerable WaitForKeyPress(GUITextBox keyBox, KeyOrMouse[] keyArray) { yield return CoroutineStatus.Running; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs index 9257d4209..0fe573f07 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs @@ -949,16 +949,17 @@ namespace Barotrauma //player has selected the inventory of another item -> attempt to move the item there return QuickUseAction.PutToContainer; } - else if (character.SelectedCharacter != null && - character.SelectedCharacter.Inventory != null && + else if (character.SelectedCharacter?.Inventory != null && !character.SelectedCharacter.Inventory.Locked && allowInventorySwap) { //player has selected the inventory of another character -> attempt to move the item there return QuickUseAction.PutToCharacter; } - else if (character.SelectedBy != null && Character.Controlled == character.SelectedBy && - character.SelectedBy.Inventory != null && !character.SelectedBy.Inventory.Locked && allowInventorySwap) + else if (character.SelectedBy?.Inventory != null && + Character.Controlled == character.SelectedBy && + !character.SelectedBy.Inventory.Locked && + allowInventorySwap) { return QuickUseAction.TakeFromCharacter; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/RangedWeapon.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/RangedWeapon.cs index b6eca6599..0a3f1ddb7 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/RangedWeapon.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/RangedWeapon.cs @@ -108,7 +108,7 @@ namespace Barotrauma.Items.Components float sizeMultiplier = Math.Clamp(chargeRatio, 0.1f, 1f); foreach (ParticleEmitter emitter in particleEmitterCharges) { - emitter.Emit(deltaTime, particlePos, hullGuess: null, sizeMultiplier: sizeMultiplier, colorMultiplier: emitter.Prefab.Properties.ColorMultiplier); + emitter.Emit(deltaTime, particlePos, hullGuess: item.CurrentHull, sizeMultiplier: sizeMultiplier, colorMultiplier: emitter.Prefab.Properties.ColorMultiplier); } if (chargeSoundChannel == null || !chargeSoundChannel.IsPlaying) @@ -157,6 +157,14 @@ namespace Barotrauma.Items.Components crosshairSprite?.Draw(spriteBatch, crosshairPos, Color.White, 0, currentCrossHairScale); crosshairPointerSprite?.Draw(spriteBatch, crosshairPointerPos, 0, currentCrossHairPointerScale); } + + if (GameMain.DebugDraw) + { + Vector2 barrelPos = item.DrawPosition + ConvertUnits.ToDisplayUnits(TransformedBarrelPos); + barrelPos = Screen.Selected.Cam.WorldToScreen(barrelPos); + GUI.DrawLine(spriteBatch, barrelPos - Vector2.UnitY * 3, barrelPos + Vector2.UnitY * 3, Color.Red); + GUI.DrawLine(spriteBatch, barrelPos - Vector2.UnitX * 3, barrelPos + Vector2.UnitX * 3, Color.Red); + } } partial void LaunchProjSpecific() @@ -166,7 +174,7 @@ namespace Barotrauma.Items.Components if (item.body.Dir < 0.0f) { rotation += MathHelper.Pi; } foreach (ParticleEmitter emitter in particleEmitters) { - emitter.Emit(1.0f, particlePos, hullGuess: null, angle: rotation, particleRotation: rotation); + emitter.Emit(1.0f, particlePos, hullGuess: item.CurrentHull, angle: rotation, particleRotation: rotation); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemComponent.cs index cb663cdcf..f68a28184 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemComponent.cs @@ -576,7 +576,7 @@ namespace Barotrauma.Items.Components delayedCorrectionCoroutine = CoroutineManager.StartCoroutine(DoDelayedCorrection(type, buffer, sendingTime, waitForMidRoundSync)); } - private IEnumerable DoDelayedCorrection(ServerNetObject type, IReadMessage buffer, float sendingTime, bool waitForMidRoundSync) + private IEnumerable DoDelayedCorrection(ServerNetObject type, IReadMessage buffer, float sendingTime, bool waitForMidRoundSync) { while (GameMain.Client != null && (correctionTimer > 0.0f || (waitForMidRoundSync && GameMain.Client.MidRoundSyncing))) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs index bff562d65..ec2074a32 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs @@ -14,6 +14,8 @@ namespace Barotrauma.Items.Components private CoroutineHandle resetPredictionCoroutine; private float resetPredictionTimer; + private float currentBrightness; + public Vector2 DrawSize { get { return new Vector2(Light.Range * 2, Light.Range * 2); } @@ -31,12 +33,40 @@ namespace Barotrauma.Items.Components { if (Light == null) { return; } Light.Enabled = enabled; + currentBrightness = brightness; if (enabled) { Light.Color = LightColor.Multiply(brightness); } } + partial void SetLightSourceTransform() + { + if (ParentBody != null) + { + Light.Position = ParentBody.Position; + } + else if (turret != null) + { + Light.Position = new Vector2(item.Rect.X + turret.TransformedBarrelPos.X, item.Rect.Y - turret.TransformedBarrelPos.Y); + } + else + { + Light.Position = item.Position; + } + PhysicsBody body = ParentBody ?? item.body; + if (body != null) + { + Light.Rotation = body.Dir > 0.0f ? body.DrawRotation : body.DrawRotation - MathHelper.Pi; + Light.LightSpriteEffect = (body.Dir > 0.0f) ? SpriteEffects.None : SpriteEffects.FlipVertically; + } + else + { + Light.Rotation = -Rotation - MathHelper.ToRadians(item.Rotation); + Light.LightSpriteEffect = item.SpriteEffects; + } + } + public void Draw(SpriteBatch spriteBatch, bool editing = false, float itemDepth = -1) { if (Light.LightSprite != null && (item.body == null || item.body.Enabled) && lightBrightness > 0.0f && IsOn && Light.Enabled) @@ -71,7 +101,7 @@ namespace Barotrauma.Items.Components /// /// Reset client-side prediction of the light's state to the last known state sent by the server after resetPredictionTimer runs out /// - private IEnumerable ResetPredictionAfterDelay() + private IEnumerable ResetPredictionAfterDelay() { while (resetPredictionTimer > 0.0f) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Deconstructor.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Deconstructor.cs index 6e6fbe63e..a5901c440 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Deconstructor.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Deconstructor.cs @@ -259,7 +259,9 @@ namespace Barotrauma.Items.Components public void ClientRead(ServerNetObject type, IReadMessage msg, float sendingTime) { - SetActive(msg.ReadBoolean()); + ushort userID = msg.ReadUInt16(); + Character user = userID == Entity.NullEntityID ? null : Entity.FindEntityByID(userID) as Character; + SetActive(msg.ReadBoolean(), user); progressTimer = msg.ReadSingle(); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Fabricator.cs index 7da3659a6..e839046dc 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Fabricator.cs @@ -329,8 +329,6 @@ namespace Barotrauma.Items.Components var missingCounts = missingItems.GroupBy(missingItem => missingItem).ToDictionary(x => x.Key, x => x.Count()); missingItems = missingItems.Distinct().ToList(); - var availableIngredients = GetAvailableIngredients(); - foreach (FabricationRecipe.RequiredItem requiredItem in missingItems) { while (slotIndex < inputContainer.Capacity && inputContainer.Inventory.GetItemAt(slotIndex) != null) @@ -341,23 +339,23 @@ namespace Barotrauma.Items.Components requiredItem.ItemPrefabs .Where(requiredPrefab => availableIngredients.ContainsKey(requiredPrefab.Identifier)) .ForEach(requiredPrefab => { - var availablePrefabs = availableIngredients[requiredPrefab.Identifier]; - - availablePrefabs - .Where(availablePrefab => availablePrefab.ParentInventory != inputContainer.Inventory) - .Where(availablePrefab => availablePrefab.ParentInventory.visualSlots != null) //slots are null if the inventory has never been displayed - .ForEach(availablePrefab => { //(linked item, but the UI is not set to be displayed at the same time) - int availableSlotIndex = availablePrefab.ParentInventory.FindIndex(availablePrefab); - - if (availablePrefab.ParentInventory.visualSlots[availableSlotIndex].HighlightTimer <= 0.0f) + var availableItems = availableIngredients[requiredPrefab.Identifier]; + foreach (Item it in availableItems) + { + if (it.ParentInventory == inputContainer.Inventory) { continue; } + var rootContainer = it.GetRootContainer(); + if (rootContainer?.OwnInventory?.visualSlots == null) { continue; } + int availableSlotIndex = rootContainer.OwnInventory.FindIndex(it.Container == rootContainer ? it : it.Container); + if (availableSlotIndex < 0) { continue; } + if (rootContainer.OwnInventory.visualSlots[availableSlotIndex].HighlightTimer <= 0.0f) + { + rootContainer.OwnInventory.visualSlots[availableSlotIndex].ShowBorderHighlight(GUI.Style.Green, 0.5f, 0.5f, 0.2f); + if (slotIndex < inputContainer.Capacity) { - availablePrefab.ParentInventory.visualSlots[availableSlotIndex].ShowBorderHighlight(GUI.Style.Green, 0.5f, 0.5f, 0.2f); - if (slotIndex < inputContainer.Capacity) - { - inputContainer.Inventory.visualSlots[slotIndex].ShowBorderHighlight(GUI.Style.Green, 0.5f, 0.5f, 0.2f); - } + inputContainer.Inventory.visualSlots[slotIndex].ShowBorderHighlight(GUI.Style.Green, 0.5f, 0.5f, 0.2f); } - }); + } + } }); if (slotIndex >= inputContainer.Capacity) { break; } @@ -676,7 +674,17 @@ namespace Barotrauma.Items.Components activateButton.Enabled = false; inSufficientPowerWarning.Visible = currPowerConsumption > 0 && !hasPower; - var availableIngredients = GetAvailableIngredients(); + if (!IsActive) + { + //only check ingredients if the fabricator isn't active (if it is, this is done in Update) + if (refreshIngredientsTimer <= 0.0f) + { + RefreshAvailableIngredients(); + refreshIngredientsTimer = RefreshIngredientsInterval; + } + refreshIngredientsTimer -= deltaTime; + } + if (character != null) { foreach (GUIComponent child in itemList.Content.Children) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs index 5e0ff3193..85629e383 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs @@ -183,6 +183,7 @@ namespace Barotrauma.Items.Components private ImmutableDictionary electricalMapComponents; private ImmutableDictionary electricalChildren; private ImmutableDictionary doorChildren; + private ImmutableDictionary weaponChildren; private ImmutableHashSet? itemsFoundOnSub; @@ -366,8 +367,8 @@ namespace Barotrauma.Items.Components hullInfoFrame = new GUIFrame(new RectTransform(new Vector2(0.13f, 0.13f), GUI.Canvas, minSize: new Point(250, 150)), style: "GUIToolTip") { - CanBeFocused = false - + CanBeFocused = false, + Visible = false }; var hullInfoContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.9f), hullInfoFrame.RectTransform, Anchor.Center)) @@ -431,7 +432,7 @@ namespace Barotrauma.Items.Components scissorComponent = new GUIScissorComponent(new RectTransform(Vector2.One, submarineContainer.RectTransform, Anchor.Center)); miniMapContainer = new GUIFrame(new RectTransform(Vector2.One, scissorComponent.Content.RectTransform, Anchor.Center), style: null) { CanBeFocused = false }; - ImmutableHashSet hullPointsOfInterest = Item.ItemList.Where(it => it.Submarine == item.Submarine && !it.HiddenInGame && !it.NonInteractable && it.Prefab.ShowInStatusMonitor && it.GetComponent() != null).ToImmutableHashSet(); + ImmutableHashSet hullPointsOfInterest = Item.ItemList.Where(it => it.Submarine == item.Submarine && !it.HiddenInGame && !it.NonInteractable && it.Prefab.ShowInStatusMonitor && (it.GetComponent() != null || it.GetComponent() != null)).ToImmutableHashSet(); miniMapFrame = CreateMiniMap(item.Submarine, submarineContainer, MiniMapSettings.Default, hullPointsOfInterest, out hullStatusComponents); IEnumerable electrialPointsOfInterest = Item.ItemList.Where(it => it.Submarine == item.Submarine && !it.HiddenInGame && !it.NonInteractable && it.GetComponent() != null); @@ -460,29 +461,63 @@ namespace Barotrauma.Items.Components electricalChildren = electricChildren.ToImmutableDictionary(); Dictionary doorChilds = new Dictionary(); + Dictionary weaponChilds = new Dictionary(); foreach (var (entity, component) in hullStatusComponents) { if (!hullPointsOfInterest.Contains(entity)) { continue; } - const int minSize = 8; + if (!(entity is Item it)) { continue; } const int borderMaxSize = 2; - Point size = component.BorderComponent.Rect.Size; - - size.X = Math.Max(size.X, minSize); - size.Y = Math.Max(size.Y, minSize); - float width = Math.Min(borderMaxSize, Math.Min(size.X, size.Y) / 8f); - - GUIFrame frame = new GUIFrame(new RectTransform(size, component.RectComponent.RectTransform, anchor: Anchor.Center), style: "ScanLines", color: DoorIndicatorColor) + if (it.GetComponent() is { }) { - OutlineColor = GUI.Style.Green, - OutlineThickness = width - }; - doorChilds.Add(component, frame); + const int minSize = 8; + + Point size = component.BorderComponent.Rect.Size; + + size.X = Math.Max(size.X, minSize); + size.Y = Math.Max(size.Y, minSize); + float width = Math.Min(borderMaxSize, Math.Min(size.X, size.Y) / 8f); + + GUIFrame frame = new GUIFrame(new RectTransform(size, component.RectComponent.RectTransform, anchor: Anchor.Center), style: "ScanLines", color: DoorIndicatorColor) + { + OutlineColor = DoorIndicatorColor, + OutlineThickness = width + }; + doorChilds.Add(component, frame); + } + else if (it.GetComponent() is { } turret) + { + int parentWidth = (int) (submarineContainer.Rect.Width / 16f); + GUICustomComponent frame = new GUICustomComponent(new RectTransform(new Point(parentWidth, parentWidth), component.RectComponent.RectTransform, anchor: Anchor.Center), (batch, customComponent) => + { + Vector2 center = customComponent.Center; + float rotation = turret.Rotation; + + if (!hasPower) + { + float minRotation = MathHelper.ToRadians(Math.Min(turret.RotationLimits.X, turret.RotationLimits.Y)), + maxRotation = MathHelper.ToRadians(Math.Max(turret.RotationLimits.X, turret.RotationLimits.Y)); + + rotation = (minRotation + maxRotation) / 2; + } + + if (turret.WeaponIndicatorSprite is { } weaponSprite) + { + Vector2 origin = weaponSprite.Origin; + float scale = parentWidth / Math.Max(weaponSprite.size.X, weaponSprite.size.Y); + Color color = !hasPower ? NoPowerColor : turret.ActiveUser is null ? GUI.Style.Red : GUI.Style.Green; + weaponSprite.Draw(batch, center, color, origin, rotation, scale, it.SpriteEffects); + } + }); + + weaponChilds.Add(component, frame); + } } doorChildren = doorChilds.ToImmutableDictionary(); + weaponChildren = weaponChilds.ToImmutableDictionary(); Rectangle parentRect = miniMapFrame.Rect; @@ -655,7 +690,7 @@ namespace Barotrauma.Items.Components worldBorders.Location += item.Submarine.WorldPosition.ToPoint(); foreach (Gap gap in Gap.GapList) { - if (gap.IsRoomToRoom || gap.Submarine != item.Submarine || gap.ConnectedDoor != null) { continue; } + if (gap.IsRoomToRoom || gap.Submarine != item.Submarine || gap.ConnectedDoor != null || gap.HiddenInGame) { continue; } RectangleF entityRect = ScaleRectToUI(gap, miniMapFrame.Rect, worldBorders); Vector2 scale = new Vector2(entityRect.Size.X / spriteSize.X, entityRect.Size.Y / spriteSize.Y) * 2.0f; @@ -668,13 +703,33 @@ namespace Barotrauma.Items.Components } } - if (currentMode == MiniMapMode.HullStatus) + if (currentMode == MiniMapMode.HullStatus && hullStatusComponents != null) { foreach (var (entity, component) in hullStatusComponents) { if (!(entity is Hull hull)) { continue; } if (!hullDatas.TryGetValue(hull, out HullData? hullData) || hullData is null) { continue; } DrawHullCards(spriteBatch, hull, hullData, component.RectComponent); + + if (item.CurrentHull is { } currentHull && currentHull == hull) + { + Sprite pingCircle = GUI.Style.YouAreHereCircle.Sprite; + if (pingCircle is null) { continue; } + + Vector2 charPos = item.WorldPosition; + Vector2 hullPos = hull.WorldRect.Location.ToVector2(), + hullSize = hull.WorldRect.Size.ToVector2(); + Vector2 relativePos = (charPos - hullPos) / hullSize * component.RectComponent.Rect.Size.ToVector2(); + relativePos.Y = -relativePos.Y; + + float parentWidth = submarineContainer.Rect.Width / 64f; + float spriteSize = pingCircle.size.X * (parentWidth / pingCircle.size.X); + + Vector2 drawPos = component.RectComponent.Rect.Location.ToVector2() + relativePos; + drawPos -= new Vector2(spriteSize, spriteSize) / 2f; + + pingCircle.Draw(spriteBatch, drawPos, GUI.Style.Red * 0.8f, Vector2.Zero, 0f, parentWidth / pingCircle.size.X); + } } } @@ -944,7 +999,7 @@ namespace Barotrauma.Items.Components if (ShowHullIntegrity) { float amount = 1f + hullData.LinkedHulls.Count; - gapOpenSum = hull.ConnectedGaps.Concat(hullData.LinkedHulls.SelectMany(h => h.ConnectedGaps)).Where(g => !g.IsRoomToRoom).Sum(g => g.Open) / amount; + gapOpenSum = hull.ConnectedGaps.Concat(hullData.LinkedHulls.SelectMany(h => h.ConnectedGaps)).Where(g => !g.IsRoomToRoom && !g.HiddenInGame).Sum(g => g.Open) / amount; borderColor = Color.Lerp(neutralColor, GUI.Style.Red, Math.Min(gapOpenSum, 1.0f)); } @@ -1039,10 +1094,9 @@ namespace Barotrauma.Items.Components } else if (it.GetComponent() is { } powerTransfer) { - int current = (int) -powerTransfer.CurrPowerConsumption, - load = (int) powerTransfer.PowerLoad; + int current = (int)-powerTransfer.CurrPowerConsumption, load = (int)powerTransfer.PowerLoad; - line1 = TextManager.GetWithVariable("statusmonitor.junctioncurrent.tooltip", "[amount]", current.ToString()); + line1 = TextManager.GetWithVariable("statusmonitor.junctionpower.tooltip", "[amount]", current.ToString(), fallBackTag: "statusmonitor.junctioncurrent.tooltip"); line2 = TextManager.GetWithVariable("statusmonitor.junctionload.tooltip", "[amount]", load.ToString()); } @@ -1086,38 +1140,41 @@ namespace Barotrauma.Items.Components } else { - bool hullsVisible = currentMode == MiniMapMode.HullStatus; + bool hullsVisible = currentMode == MiniMapMode.HullStatus && item.Submarine != null; - foreach (var (entity, component) in hullStatusComponents) + if (hullStatusComponents != null) { - if (!(entity is Hull hull)) { continue; } - if (!hullDatas.TryGetValue(hull, out HullData? hullData) || hullData is null) { continue; } - - if (hullData.Distort) { continue; } - - GUIComponent hullFrame = component.RectComponent; - - if (hullsVisible && hullData.HullWaterAmount is { } waterAmount) + foreach (var (entity, component) in hullStatusComponents) { - if (hullFrame.Rect.Height * waterAmount > 3.0f) + if (!(entity is Hull hull)) { continue; } + if (!hullDatas.TryGetValue(hull, out HullData? hullData) || hullData is null) { continue; } + + if (hullData.Distort) { continue; } + + GUIComponent hullFrame = component.RectComponent; + + if (hullsVisible && hullData.HullWaterAmount is { } waterAmount) { - RectangleF waterRect = new RectangleF(hullFrame.Rect.X, hullFrame.Rect.Y + hullFrame.Rect.Height * (1.0f - waterAmount), hullFrame.Rect.Width, hullFrame.Rect.Height * waterAmount); - - const float width = 1f; - - GUI.DrawFilledRectangle(spriteBatch, waterRect, HullWaterColor); - - if (!MathUtils.NearlyEqual(waterAmount, 1.0f)) + if (hullFrame.Rect.Height * waterAmount > 3.0f) { - Vector2 offset = new Vector2(0, width); - GUI.DrawLine(spriteBatch, waterRect.Location + offset, new Vector2(waterRect.Right, waterRect.Y) + offset, HullWaterLineColor, width: width); + RectangleF waterRect = new RectangleF(hullFrame.Rect.X, hullFrame.Rect.Y + hullFrame.Rect.Height * (1.0f - waterAmount), hullFrame.Rect.Width, hullFrame.Rect.Height * waterAmount); + + const float width = 1f; + + GUI.DrawFilledRectangle(spriteBatch, waterRect, HullWaterColor); + + if (!MathUtils.NearlyEqual(waterAmount, 1.0f)) + { + Vector2 offset = new Vector2(0, width); + GUI.DrawLine(spriteBatch, waterRect.Location + offset, new Vector2(waterRect.Right, waterRect.Y) + offset, HullWaterLineColor, width: width); + } } } - } - if (hullsVisible && hullData.HullOxygenAmount is { } oxygenAmount) - { - GUI.DrawRectangle(spriteBatch, hullFrame.Rect, Color.Lerp(GUI.Style.Red * 0.5f, GUI.Style.Green * 0.3f, oxygenAmount / 100.0f), true); + if (hullsVisible && hullData.HullOxygenAmount is { } oxygenAmount) + { + GUI.DrawRectangle(spriteBatch, hullFrame.Rect, Color.Lerp(GUI.Style.Red * 0.5f, GUI.Style.Green * 0.3f, oxygenAmount / 100.0f), true); + } } } } @@ -1221,7 +1278,7 @@ namespace Barotrauma.Items.Components Vector2 spriteScale = new Vector2(entityRect.Size.X / sprite.size.X, entityRect.Size.Y / sprite.size.Y); Vector2 origin = new Vector2(sprite.Origin.X * spriteScale.X, sprite.Origin.Y * spriteScale.Y); - if (item.GetComponent() is { } turret) + if (!item.Prefab.ShowInStatusMonitor && item.GetComponent() is { } turret) { Vector2 drawPos = turret.GetDrawPos(); drawPos.Y = -drawPos.Y; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Reactor.cs index 275ffa13a..aa5e644f5 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Reactor.cs @@ -158,7 +158,7 @@ namespace Barotrauma.Items.Components new GUIFrame(new RectTransform(new Vector2(1.0f, 0.01f), columnLeft.RectTransform), style: "HorizontalLine"); float relativeYMargin = 0.02f; - Vector2 relativeTextSize = new Vector2(0.9f, 0.2f); + Vector2 relativeTextSize = new Vector2(0.9f, 0.15f); Vector2 sliderSize = new Vector2(1.0f, 0.125f); Vector2 meterSize = new Vector2(1, 1 - relativeTextSize.Y - relativeYMargin - sliderSize.Y - 0.1f); @@ -198,7 +198,7 @@ namespace Barotrauma.Items.Components FissionRateScrollBar = new GUIScrollBar(new RectTransform(sliderSize, leftArea.RectTransform, Anchor.TopCenter) { - RelativeOffset = new Vector2(0, fissionMeter.RectTransform.RelativeOffset.Y + meterSize.Y) + RelativeOffset = new Vector2(0, fissionMeter.RectTransform.RelativeOffset.Y + meterSize.Y + relativeYMargin) }, style: "DeviceSlider", barSize: 0.15f) { @@ -208,7 +208,7 @@ namespace Barotrauma.Items.Components { LastUser = Character.Controlled; unsentChanges = true; - targetFissionRate = scrollAmount * 100.0f; + TargetFissionRate = scrollAmount * 100.0f; return false; } @@ -216,7 +216,7 @@ namespace Barotrauma.Items.Components TurbineOutputScrollBar = new GUIScrollBar(new RectTransform(sliderSize, rightArea.RectTransform, Anchor.TopCenter) { - RelativeOffset = new Vector2(0, turbineMeter.RectTransform.RelativeOffset.Y + meterSize.Y) + RelativeOffset = new Vector2(0, turbineMeter.RectTransform.RelativeOffset.Y + meterSize.Y + relativeYMargin) }, style: "DeviceSlider", barSize: 0.15f, isHorizontal: true) { @@ -226,7 +226,7 @@ namespace Barotrauma.Items.Components { LastUser = Character.Controlled; unsentChanges = true; - targetTurbineOutput = scrollAmount * 100.0f; + TargetTurbineOutput = scrollAmount * 100.0f; return false; } @@ -370,7 +370,7 @@ namespace Barotrauma.Items.Components }; string loadStr = TextManager.Get("ReactorLoad"); string kW = TextManager.Get("kilowatt"); - loadText.TextGetter += () => $"{loadStr.Replace("[kw]", ((int)load).ToString())} {kW}"; + loadText.TextGetter += () => $"{loadStr.Replace("[kw]", ((int)Load).ToString())} {kW}"; var graph = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.9f), graphArea.RectTransform), style: "InnerFrameRed"); new GUICustomComponent(new RectTransform(new Vector2(0.9f, 0.98f), graph.RectTransform, Anchor.Center), DrawGraph, null); @@ -387,8 +387,8 @@ namespace Barotrauma.Items.Components public override void OnItemLoaded() { base.OnItemLoaded(); - TurbineOutputScrollBar.BarScroll = targetTurbineOutput / 100.0f; - FissionRateScrollBar.BarScroll = targetFissionRate / 100.0f; + TurbineOutputScrollBar.BarScroll = TargetTurbineOutput / 100.0f; + FissionRateScrollBar.BarScroll = TargetFissionRate / 100.0f; var itemContainer = item.GetComponent(); if (itemContainer != null) { @@ -462,7 +462,7 @@ namespace Barotrauma.Items.Components if (graphTimer > updateGraphInterval) { UpdateGraph(outputGraph, -currPowerConsumption); - UpdateGraph(loadGraph, load); + UpdateGraph(loadGraph, Load); graphTimer = 0.0f; } @@ -487,7 +487,7 @@ namespace Barotrauma.Items.Components float jitter = 0.0f; if (FissionRate > allowedFissionRate.Y - 5.0f) { - float jitterAmount = Math.Min(targetFissionRate - allowedFissionRate.Y, 10.0f); + float jitterAmount = Math.Min(TargetFissionRate - allowedFissionRate.Y, 10.0f); float t = graphTimer / updateGraphInterval; jitter = (PerlinNoise.GetPerlin(t * 0.5f, t * 0.1f) - 0.5f) * jitterAmount; @@ -525,12 +525,12 @@ namespace Barotrauma.Items.Components criticalHeatWarning.Selected = temperature > allowedTemperature.Y && lightOn; lowTemperatureWarning.Selected = temperature < allowedTemperature.X && lightOn; - criticalOutputWarning.Selected = -currPowerConsumption > load * 1.5f && lightOn; + criticalOutputWarning.Selected = -currPowerConsumption > Load * 1.5f && lightOn; warningButtons["ReactorWarningOverheating"].Selected = temperature > optimalTemperature.Y && lightOn; - warningButtons["ReactorWarningHighOutput"].Selected = -currPowerConsumption > load * 1.1f && lightOn; + warningButtons["ReactorWarningHighOutput"].Selected = -currPowerConsumption > Load * 1.1f && lightOn; warningButtons["ReactorWarningLowTemp"].Selected = temperature < optimalTemperature.X && lightOn; - warningButtons["ReactorWarningLowOutput"].Selected = -currPowerConsumption < load * 0.9f && lightOn; + warningButtons["ReactorWarningLowOutput"].Selected = -currPowerConsumption < Load * 0.9f && lightOn; warningButtons["ReactorWarningFuelOut"].Selected = prevAvailableFuel < fissionRate * 0.01f && lightOn; warningButtons["ReactorWarningLowFuel"].Selected = prevAvailableFuel < fissionRate && lightOn; warningButtons["ReactorWarningMeltdown"].Selected = meltDownTimer > MeltdownDelay * 0.5f || item.Condition == 0.0f && lightOn; @@ -571,12 +571,12 @@ namespace Barotrauma.Items.Components unsentChanges = true; if (input.X != 0.0f && GUIScrollBar.DraggingBar != FissionRateScrollBar) { - targetFissionRate = MathHelper.Clamp(targetFissionRate + input.X, 0.0f, 100.0f); + TargetFissionRate = MathHelper.Clamp(TargetFissionRate + input.X, 0.0f, 100.0f); FissionRateScrollBar.BarScroll += input.X / 100.0f; } if (input.Y != 0.0f && GUIScrollBar.DraggingBar != TurbineOutputScrollBar) { - targetTurbineOutput = MathHelper.Clamp(targetTurbineOutput + input.Y, 0.0f, 100.0f); + TargetTurbineOutput = MathHelper.Clamp(TargetTurbineOutput + input.Y, 0.0f, 100.0f); TurbineOutputScrollBar.BarScroll += input.Y / 100.0f; } } @@ -596,7 +596,7 @@ namespace Barotrauma.Items.Components MathHelper.Clamp((allowedRange.X - range.X) / (range.Y - range.X), 0.0f, 0.95f), MathHelper.Clamp((allowedRange.Y - range.X) / (range.Y - range.X), 0.0f, 1.0f)); - Vector2 sectorRad = new Vector2(-1.57f, 1.57f); + Vector2 sectorRad = new Vector2(-1.35f, 1.35f); Vector2 optimalSectorRad = new Vector2( MathHelper.Lerp(sectorRad.X, sectorRad.Y, optimalRangeNormalized.X), @@ -606,23 +606,25 @@ namespace Barotrauma.Items.Components MathHelper.Lerp(sectorRad.X, sectorRad.Y, allowedRangeNormalized.X), MathHelper.Lerp(sectorRad.X, sectorRad.Y, allowedRangeNormalized.Y)); + Vector2 pointerPos = pos - new Vector2(0, 30) * scale; + if (optimalRangeNormalized.X == optimalRangeNormalized.Y) { - sectorSprite.Draw(spriteBatch, pos, GUI.Style.Red, MathHelper.PiOver2, scale); + sectorSprite.Draw(spriteBatch, pointerPos, GUI.Style.Red, MathHelper.PiOver2, scale); } else { spriteBatch.End(); Rectangle prevScissorRect = spriteBatch.GraphicsDevice.ScissorRectangle; - spriteBatch.GraphicsDevice.ScissorRectangle = new Rectangle(0, 0, GameMain.GraphicsWidth, (int)(pos.Y + (meterSprite.size.Y - meterSprite.Origin.Y) * scale) - 3); + spriteBatch.GraphicsDevice.ScissorRectangle = new Rectangle(0, 0, GameMain.GraphicsWidth, (int)(pointerPos.Y + (meterSprite.size.Y - meterSprite.Origin.Y) * scale) - 3); spriteBatch.Begin(SpriteSortMode.Deferred, rasterizerState: GameMain.ScissorTestEnable); float scaleMultiplier = 0.95f; - sectorSprite.Draw(spriteBatch, pos, optimalRangeColor, MathHelper.PiOver2 + (allowedSectorRad.X + allowedSectorRad.Y) / 2.0f, scale * scaleMultiplier); - sectorSprite.Draw(spriteBatch, pos, offRangeColor, optimalSectorRad.X, scale * scaleMultiplier); - sectorSprite.Draw(spriteBatch, pos, warningColor, allowedSectorRad.X, scale * scaleMultiplier); - sectorSprite.Draw(spriteBatch, pos, offRangeColor, MathHelper.Pi + optimalSectorRad.Y, scale * scaleMultiplier); - sectorSprite.Draw(spriteBatch, pos, warningColor, MathHelper.Pi + allowedSectorRad.Y, scale * scaleMultiplier); + sectorSprite.Draw(spriteBatch, pointerPos, optimalRangeColor, MathHelper.PiOver2 + (allowedSectorRad.X + allowedSectorRad.Y) / 2.0f, scale * scaleMultiplier); + sectorSprite.Draw(spriteBatch, pointerPos, offRangeColor, optimalSectorRad.X, scale * scaleMultiplier); + sectorSprite.Draw(spriteBatch, pointerPos, warningColor, allowedSectorRad.X, scale * scaleMultiplier); + sectorSprite.Draw(spriteBatch, pointerPos, offRangeColor, MathHelper.Pi + optimalSectorRad.Y, scale * scaleMultiplier); + sectorSprite.Draw(spriteBatch, pointerPos, warningColor, MathHelper.Pi + allowedSectorRad.Y, scale * scaleMultiplier); spriteBatch.End(); spriteBatch.GraphicsDevice.ScissorRectangle = prevScissorRect; @@ -634,7 +636,7 @@ namespace Barotrauma.Items.Components float normalizedValue = (value - range.X) / (range.Y - range.X); float valueRad = MathHelper.Lerp(sectorRad.X, sectorRad.Y, normalizedValue); Vector2 offset = new Vector2(0, 40) * scale; - meterPointer.Draw(spriteBatch, pos - offset, valueRad, scale); + meterPointer.Draw(spriteBatch, pointerPos, valueRad, scale); } static void UpdateGraph(IList graph, T newValue) @@ -713,8 +715,8 @@ namespace Barotrauma.Items.Components { msg.Write(autoTemp); msg.Write(PowerOn); - msg.WriteRangedSingle(targetFissionRate, 0.0f, 100.0f, 8); - msg.WriteRangedSingle(targetTurbineOutput, 0.0f, 100.0f, 8); + msg.WriteRangedSingle(TargetFissionRate, 0.0f, 100.0f, 8); + msg.WriteRangedSingle(TargetTurbineOutput, 0.0f, 100.0f, 8); correctionTimer = CorrectionDelay; } @@ -730,17 +732,17 @@ namespace Barotrauma.Items.Components AutoTemp = msg.ReadBoolean(); PowerOn = msg.ReadBoolean(); Temperature = msg.ReadRangedSingle(0.0f, 100.0f, 8); - targetFissionRate = msg.ReadRangedSingle(0.0f, 100.0f, 8); - targetTurbineOutput = msg.ReadRangedSingle(0.0f, 100.0f, 8); + TargetFissionRate = msg.ReadRangedSingle(0.0f, 100.0f, 8); + TargetTurbineOutput = msg.ReadRangedSingle(0.0f, 100.0f, 8); degreeOfSuccess = msg.ReadRangedSingle(0.0f, 1.0f, 8); - if (Math.Abs(FissionRateScrollBar.BarScroll - targetFissionRate / 100.0f) > 0.01f) + if (Math.Abs(FissionRateScrollBar.BarScroll - TargetFissionRate / 100.0f) > 0.01f) { - FissionRateScrollBar.BarScroll = targetFissionRate / 100.0f; + FissionRateScrollBar.BarScroll = TargetFissionRate / 100.0f; } - if (Math.Abs(TurbineOutputScrollBar.BarScroll - targetTurbineOutput / 100.0f) > 0.01f) + if (Math.Abs(TurbineOutputScrollBar.BarScroll - TargetTurbineOutput / 100.0f) > 0.01f) { - TurbineOutputScrollBar.BarScroll = targetTurbineOutput / 100.0f; + TurbineOutputScrollBar.BarScroll = TargetTurbineOutput / 100.0f; } IsActive = true; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs index 44d0ad13c..74b61c33a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs @@ -456,7 +456,7 @@ namespace Barotrauma.Items.Components } } - float distort = 1.0f - item.Condition / item.MaxCondition; + float distort = MathHelper.Clamp(1.0f - item.Condition / item.MaxCondition, 0.0f, 1.0f); for (int i = sonarBlips.Count - 1; i >= 0; i--) { sonarBlips[i].FadeTimer -= deltaTime * MathHelper.Lerp(0.5f, 2.0f, distort); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Repairable.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Repairable.cs index fbf133ced..23d3a6839 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Repairable.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Repairable.cs @@ -56,7 +56,9 @@ namespace Barotrauma.Items.Components if (character.IsTraitor && item.ConditionPercentage > MinSabotageCondition) { return true; } float maxRepairConditionMultiplier = GetMaxRepairConditionMultiplier(character); - if (item.Condition / maxRepairConditionMultiplier < RepairThreshold) { return true; } + float defaultMaxCondition = item.MaxCondition / maxRepairConditionMultiplier; + + if (MathUtils.Percentage(item.Condition, defaultMaxCondition) < RepairThreshold) { return true; } if (CurrentFixer == character) { @@ -280,14 +282,14 @@ namespace Barotrauma.Items.Components progressBarOverlayText.Visible = false; } - RepairButton.Enabled = (currentFixerAction == FixActions.None || (CurrentFixer == character && currentFixerAction != FixActions.Repair)) && !item.IsFullCondition && item.ConditionPercentage < RepairThreshold; - RepairButton.Text = (currentFixerAction == FixActions.None || CurrentFixer != character || currentFixerAction != FixActions.Repair) ? - repairButtonText : + RepairButton.Enabled = (currentFixerAction == FixActions.None || (CurrentFixer == character && currentFixerAction != FixActions.Repair)) && !item.IsFullCondition && IsBelowRepairThreshold; + RepairButton.Text = (currentFixerAction == FixActions.None || CurrentFixer != character || currentFixerAction != FixActions.Repair) ? + repairButtonText : repairingText + new string('.', ((int)(Timing.TotalTime * 2.0f) % 3) + 1); SabotageButton.Visible = character.IsTraitor; SabotageButton.IgnoreLayoutGroups = !SabotageButton.Visible; - SabotageButton.Enabled = (currentFixerAction == FixActions.None || (CurrentFixer == character && currentFixerAction != FixActions.Sabotage)) && character.IsTraitor && item.ConditionPercentage > MinSabotageCondition; + SabotageButton.Enabled = (currentFixerAction == FixActions.None || (CurrentFixer == character && currentFixerAction != FixActions.Sabotage)) && character.IsTraitor && IsBelowRepairThreshold; SabotageButton.Text = (currentFixerAction == FixActions.None || CurrentFixer != character || currentFixerAction != FixActions.Sabotage || !character.IsTraitor) ? sabotageButtonText : sabotagingText + new string('.', ((int)(Timing.TotalTime * 2.0f) % 3) + 1); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Terminal.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Terminal.cs index a816f402a..1f425fca0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Terminal.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Signal/Terminal.cs @@ -35,7 +35,7 @@ namespace Barotrauma.Items.Components new GUIFrame(new RectTransform(new Vector2(0.9f, 0.01f), layoutGroup.RectTransform), style: "HorizontalLine"); - inputBox = new GUITextBox(new RectTransform(new Vector2(1, .1f), layoutGroup.RectTransform), textColor: Color.LimeGreen) + inputBox = new GUITextBox(new RectTransform(new Vector2(1, .1f), layoutGroup.RectTransform), textColor: TextColor) { MaxTextLength = MaxMessageLength, OverflowClip = true, @@ -63,15 +63,15 @@ namespace Barotrauma.Items.Components } OutputValue = input; - ShowOnDisplay(input, addToHistory: true); + ShowOnDisplay(input, addToHistory: true, TextColor); item.SendSignal(input, "signal_out"); } - partial void ShowOnDisplay(string input, bool addToHistory) + partial void ShowOnDisplay(string input, bool addToHistory, Color color) { if (addToHistory) { - messageHistory.Add(input); + messageHistory.Add(new TerminalMessage(input, color)); while (messageHistory.Count > MaxMessages) { messageHistory.RemoveAt(0); @@ -85,7 +85,7 @@ namespace Barotrauma.Items.Components GUITextBlock newBlock = new GUITextBlock( new RectTransform(new Vector2(1, 0), historyBox.Content.RectTransform, anchor: Anchor.TopCenter), "> " + input, - textColor: Color.LimeGreen, wrap: true, font: UseMonospaceFont ? GUI.MonospacedFont : GUI.GlobalFont) + textColor: color, wrap: true, font: UseMonospaceFont ? GUI.MonospacedFont : GUI.GlobalFont) { CanBeFocused = false }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/TriggerComponent.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/TriggerComponent.cs new file mode 100644 index 000000000..503c61912 --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/TriggerComponent.cs @@ -0,0 +1,12 @@ +using Barotrauma.Networking; + +namespace Barotrauma.Items.Components +{ + partial class TriggerComponent : ItemComponent, IServerSerializable + { + public void ClientRead(ServerNetObject type, IReadMessage msg, float sendingTime) + { + CurrentForceFluctuation = msg.ReadRangedSingle(0.0f, 1.0f, 8); + } + } +} diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs index f4ba37137..11c827e3a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs @@ -14,6 +14,7 @@ namespace Barotrauma.Items.Components partial class Turret : Powered, IDrawableComponent, IServerSerializable { private Sprite crosshairSprite, crosshairPointerSprite; + public Sprite WeaponIndicatorSprite; private GUIProgressBar powerIndicator; @@ -134,6 +135,9 @@ namespace Barotrauma.Items.Components case "crosshair": crosshairSprite = new Sprite(subElement, texturePath.Contains("/") ? "" : Path.GetDirectoryName(item.Prefab.FilePath)); break; + case "weaponindicator": + WeaponIndicatorSprite = new Sprite(subElement, texturePath.Contains("/") ? "" : Path.GetDirectoryName(item.Prefab.FilePath)); + break; case "crosshairpointer": crosshairPointerSprite = new Sprite(subElement, texturePath.Contains("/") ? "" : Path.GetDirectoryName(item.Prefab.FilePath)); break; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs index 2b50d7e4a..142b13118 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs @@ -101,7 +101,7 @@ namespace Barotrauma private float currentHighlightState, fadeInDuration, fadeOutDuration; private Color currentHighlightColor; - private IEnumerable UpdateBorderHighlight() + private IEnumerable UpdateBorderHighlight() { HighlightTimer = 1.0f; while (currentHighlightState < fadeInDuration + fadeOutDuration) @@ -1255,9 +1255,18 @@ namespace Barotrauma else { bool anySuccess = false; + bool allowCombine = true; + //if we're dragging a stack of partial items or trying to drag to a stack of partial items + //(which should not normally exist, but can happen when e.g. fire damages a stack of items) + //don't allow combining because it leads to weird behavior (stack of items of mixed quality) + if (DraggingItems.Count(it => !it.IsFullCondition && it.Condition > 0.0f) > 1 || + selectedInventory.GetItemsAt(slotIndex).Count(it => !it.IsFullCondition && it.Condition > 0.0f) > 1) + { + allowCombine = false; + } foreach (Item item in DraggingItems) { - bool success = selectedInventory.TryPutItem(item, slotIndex, allowSwapping: !anySuccess, true, Character.Controlled); + bool success = selectedInventory.TryPutItem(item, slotIndex, allowSwapping: !anySuccess, allowCombine, Character.Controlled); anySuccess |= success; if (!success) { break; } } @@ -1673,7 +1682,7 @@ namespace Barotrauma } sprite.Draw(spriteBatch, itemPos, spriteColor, rotation, scale); - if ((!item.AllowStealing || (inventory != null && inventory.slots[slotIndex].Items.Any(it => !it.AllowStealing))) && CharacterInventory.LimbSlotIcons.ContainsKey(InvSlotType.LeftHand)) + if (((item.SpawnedInCurrentOutpost && !item.AllowStealing) || (inventory != null && inventory.slots[slotIndex].Items.Any(it => it.SpawnedInCurrentOutpost && !it.AllowStealing))) && CharacterInventory.LimbSlotIcons.ContainsKey(InvSlotType.LeftHand)) { var stealIcon = CharacterInventory.LimbSlotIcons[InvSlotType.LeftHand]; Vector2 iconSize = new Vector2(25 * GUI.Scale); @@ -1818,7 +1827,7 @@ namespace Barotrauma } } - private IEnumerable SyncItemsAfterDelay(UInt16 lastEventID) + private IEnumerable SyncItemsAfterDelay(UInt16 lastEventID) { while (syncItemsDelay > 0.0f || //don't apply inventory updates until diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs index eab3b9777..98ae88380 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs @@ -175,12 +175,12 @@ namespace Barotrauma } } - float displayCondition = FakeBroken ? 0.0f : condition; + float displayCondition = FakeBroken ? 0.0f : ConditionPercentage; for (int i = 0; i < Prefab.BrokenSprites.Count;i++) { if (Prefab.BrokenSprites[i].FadeIn) { continue; } - float minCondition = i > 0 ? Prefab.BrokenSprites[i - i].MaxCondition : 0.0f; - if (displayCondition <= minCondition || displayCondition <= Prefab.BrokenSprites[i].MaxCondition) + float minCondition = i > 0 ? Prefab.BrokenSprites[i - i].MaxConditionPercentage : 0.0f; + if (displayCondition <= minCondition || displayCondition <= Prefab.BrokenSprites[i].MaxConditionPercentage) { activeSprite = Prefab.BrokenSprites[i].Sprite; break; @@ -284,8 +284,8 @@ namespace Barotrauma { if (Prefab.BrokenSprites[i].FadeIn) { - float min = i > 0 ? Prefab.BrokenSprites[i - i].MaxCondition : 0.0f; - float max = Prefab.BrokenSprites[i].MaxCondition; + float min = i > 0 ? Prefab.BrokenSprites[i - i].MaxConditionPercentage : 0.0f; + float max = Prefab.BrokenSprites[i].MaxConditionPercentage; fadeInBrokenSpriteAlpha = 1.0f - ((displayCondition - min) / (max - min)); if (fadeInBrokenSpriteAlpha > 0.0f && fadeInBrokenSpriteAlpha <= 1.0f) { @@ -293,7 +293,7 @@ namespace Barotrauma } continue; } - if (displayCondition <= Prefab.BrokenSprites[i].MaxCondition) + if (displayCondition <= Prefab.BrokenSprites[i].MaxConditionPercentage) { activeSprite = Prefab.BrokenSprites[i].Sprite; drawOffset = Prefab.BrokenSprites[i].Offset.ToVector2() * Scale; @@ -1632,7 +1632,7 @@ namespace Barotrauma { item = new Item(itemPrefab, pos, sub, id: itemId) { - SpawnedInOutpost = spawnedInOutpost, + SpawnedInCurrentOutpost = spawnedInOutpost, AllowStealing = allowStealing, Quality = quality }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs index d81332c48..274eabdf9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs @@ -11,7 +11,7 @@ namespace Barotrauma class BrokenItemSprite { //sprite will be rendered if the condition of the item is below this - public readonly float MaxCondition; + public readonly float MaxConditionPercentage; public readonly Sprite Sprite; public readonly bool FadeIn; public readonly Point Offset; @@ -19,7 +19,7 @@ namespace Barotrauma public BrokenItemSprite(Sprite sprite, float maxCondition, bool fadeIn, Point offset) { Sprite = sprite; - MaxCondition = MathHelper.Clamp(maxCondition, 0.0f, 100.0f); + MaxConditionPercentage = MathHelper.Clamp(maxCondition, 0.0f, 100.0f); FadeIn = fadeIn; Offset = offset; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Explosion.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Explosion.cs index 070748dfb..20eaf6139 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Explosion.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Explosion.cs @@ -95,7 +95,7 @@ namespace Barotrauma MathHelper.Clamp(particlePos.Y, hull.WorldRect.Y - hull.WorldRect.Height, hull.WorldRect.Y)); } - private IEnumerable DimLight(LightSource light) + private IEnumerable DimLight(LightSource light) { float currBrightness = 1.0f; while (light.Color.A > 0.0f && flashDuration > 0.0f) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Structure.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Structure.cs index b3b2a653f..f160435ea 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Structure.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Structure.cs @@ -438,7 +438,7 @@ namespace Barotrauma for (int i = 0; i < Bodies.Count; i++) { Vector2 pos = FarseerPhysics.ConvertUnits.ToDisplayUnits(Bodies[i].Position); - if (Submarine != null) pos += Submarine.Position; + if (Submarine != null) { pos += Submarine.DrawPosition; } pos.Y = -pos.Y; GUI.DrawRectangle(spriteBatch, pos, diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/SubmarineInfo.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/SubmarineInfo.cs index 95c090122..9610cddd1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/SubmarineInfo.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/SubmarineInfo.cs @@ -202,6 +202,7 @@ namespace Barotrauma } } GUITextBlock.AutoScaleAndNormalize(parent.Content.GetAllChildren().Where(c => c != submarineNameText && c != descBlock)); + parent.ForceLayoutRecalculation(); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/FileTransfer/FileReceiver.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/FileTransfer/FileReceiver.cs index 4cd0d5e84..7fd0f8bb1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/FileTransfer/FileReceiver.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/FileTransfer/FileReceiver.cs @@ -160,7 +160,7 @@ namespace Barotrauma.Networking public TransferInDelegate OnTransferFailed; private readonly List activeTransfers; - private readonly List> finishedTransfers; + private readonly List<(int transferId, double finishedTime)> finishedTransfers; private readonly Dictionary downloadFolders = new Dictionary() { @@ -176,7 +176,7 @@ namespace Barotrauma.Networking public FileReceiver() { activeTransfers = new List(); - finishedTransfers = new List>(); + finishedTransfers = new List<(int transferId, double finishedTime)>(); } public void ReadMessage(IReadMessage inc) @@ -193,8 +193,8 @@ namespace Barotrauma.Networking case (byte)FileTransferMessageType.Initiate: { byte transferId = inc.ReadByte(); - var existingTransfer = activeTransfers.Find(t => t.ID == transferId); - finishedTransfers.RemoveAll(t => t.First == transferId); + var existingTransfer = activeTransfers.Find(t => t.Connection.EndpointMatches(t.Connection.EndPointString) && t.ID == transferId); + finishedTransfers.RemoveAll(t => t.transferId == transferId); byte fileType = inc.ReadByte(); //ushort chunkLen = inc.ReadUInt16(); int fileSize = inc.ReadInt32(); @@ -211,7 +211,7 @@ namespace Barotrauma.Networking } else //resend acknowledgement packet { - GameMain.Client.UpdateFileTransfer(transferId, 0); + GameMain.Client.UpdateFileTransfer(transferId, existingTransfer.Received); } return; } @@ -316,14 +316,14 @@ namespace Barotrauma.Networking { byte transferId = inc.ReadByte(); - var activeTransfer = activeTransfers.Find(t => t.Connection == inc.Sender && t.ID == transferId); + var activeTransfer = activeTransfers.Find(t => t.Connection.EndpointMatches(t.Connection.EndPointString) && t.ID == transferId); if (activeTransfer == null) { //it's possible for the server to send some extra data //before it acknowledges that the download is finished, //so let's suppress the error message in that case - finishedTransfers.RemoveAll(t => t.Second + 5.0 < Timing.TotalTime); - if (!finishedTransfers.Any(t => t.First == transferId)) + finishedTransfers.RemoveAll(t => t.finishedTime + 5.0 < Timing.TotalTime); + if (!finishedTransfers.Any(t => t.transferId == transferId)) { GameMain.Client.CancelFileTransfer(transferId); DebugConsole.ThrowError("File transfer error: received data without a transfer initiation message"); @@ -373,7 +373,7 @@ namespace Barotrauma.Networking if (ValidateReceivedData(activeTransfer, out string errorMessage)) { - finishedTransfers.Add(new Pair(transferId, Timing.TotalTime)); + finishedTransfers.Add((transferId, Timing.TotalTime)); StopTransfer(activeTransfer); Md5Hash.RemoveFromCache(activeTransfer.FilePath); OnFinished(activeTransfer); @@ -391,7 +391,7 @@ namespace Barotrauma.Networking case (byte)FileTransferMessageType.Cancel: { byte transferId = inc.ReadByte(); - var matchingTransfer = activeTransfers.Find(t => t.Connection == inc.Sender && t.ID == transferId); + var matchingTransfer = activeTransfers.Find(t => t.Connection.EndpointMatches(t.Connection.EndPointString) && t.ID == transferId); if (matchingTransfer != null) { new GUIMessageBox("File transfer cancelled", "The server has cancelled the transfer of the file \"" + matchingTransfer.FileName + "\"."); @@ -528,7 +528,7 @@ namespace Barotrauma.Networking transfer.Status = FileTransferStatus.Canceled; } - if (activeTransfers.Contains(transfer)) activeTransfers.Remove(transfer); + if (activeTransfers.Contains(transfer)) { activeTransfers.Remove(transfer); } transfer.Dispose(); if (deleteFile && File.Exists(transfer.FilePath)) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs index 85267e5a7..0b7d8e563 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs @@ -460,7 +460,7 @@ namespace Barotrauma.Networking private bool wrongPassword; // Before main looping starts, we loop here and wait for approval message - private IEnumerable WaitForStartingInfo() + private IEnumerable WaitForStartingInfo() { GUI.SetCursorWaiting(); requiresPw = false; @@ -861,8 +861,8 @@ namespace Barotrauma.Networking if (roundInitStatus == RoundInitStatus.WaitingForStartGameFinalize) { //waiting for a save file - if (campaign != null && - campaign.PendingSaveID > campaign.LastSaveID && + if (campaign != null && + NetIdUtils.IdMoreRecent(campaign.PendingSaveID, campaign.LastSaveID) && fileReceiver.ActiveTransfers.Any(t => t.FileType == FileTransferType.CampaignSave)) { return; @@ -872,6 +872,7 @@ namespace Barotrauma.Networking break; case ServerPacketHeader.ENDGAME: CampaignMode.TransitionType transitionType = (CampaignMode.TransitionType)inc.ReadByte(); + bool save = inc.ReadBoolean(); string endMessage = string.Empty; endMessage = inc.ReadString(); @@ -905,6 +906,7 @@ namespace Barotrauma.Networking roundInitStatus = RoundInitStatus.Interrupted; CoroutineManager.StartCoroutine(EndGame(endMessage, traitorResults, transitionType), "EndGame"); + GUI.SetSavingIndicatorState(save); break; case ServerPacketHeader.CAMPAIGN_SETUP_INFO: UInt16 saveCount = inc.ReadUInt16(); @@ -1236,7 +1238,7 @@ namespace Barotrauma.Networking } } - private IEnumerable WaitInServerQueue() + private IEnumerable WaitInServerQueue() { waitInServerQueueBox = new GUIMessageBox( TextManager.Get("ServerQueuePleaseWait"), @@ -1424,7 +1426,7 @@ namespace Barotrauma.Networking GameMain.NetLobbyScreen.RefreshEnabledElements(); } - private IEnumerable StartGame(IReadMessage inc) + private IEnumerable StartGame(IReadMessage inc) { Character?.Remove(); Character = null; @@ -1562,31 +1564,47 @@ namespace Barotrauma.Networking if (GameMain.GameSession?.CrewManager != null) { GameMain.GameSession.CrewManager.Reset(); } byte campaignID = inc.ReadByte(); + UInt16 campaignSaveID = inc.ReadUInt16(); int nextLocationIndex = inc.ReadInt32(); int nextConnectionIndex = inc.ReadInt32(); int selectedLocationIndex = inc.ReadInt32(); bool mirrorLevel = inc.ReadBoolean(); - if (campaign.CampaignID != campaignID) { - string errorMsg = "Failed to start campaign round (campaign ID does not match)."; gameStarted = true; - DebugConsole.ThrowError(errorMsg); + DebugConsole.ThrowError("Failed to start campaign round (campaign ID does not match)."); GameMain.NetLobbyScreen.Select(); roundInitStatus = RoundInitStatus.Interrupted; yield return CoroutineStatus.Failure; } else if (campaign.Map == null) { - string errorMsg = "Failed to start campaign round (campaign map not loaded yet)."; gameStarted = true; - DebugConsole.ThrowError(errorMsg); + DebugConsole.ThrowError("Failed to start campaign round (campaign map not loaded yet)."); GameMain.NetLobbyScreen.Select(); roundInitStatus = RoundInitStatus.Interrupted; yield return CoroutineStatus.Failure; } + if (NetIdUtils.IdMoreRecent(campaignSaveID, campaign.PendingSaveID)) + { + campaign.PendingSaveID = campaignSaveID; + DateTime saveFileTimeOut = DateTime.Now + new TimeSpan(0,0,60); + while (NetIdUtils.IdMoreRecent(campaignSaveID, campaign.LastSaveID)) + { + if (DateTime.Now > saveFileTimeOut) + { + gameStarted = true; + DebugConsole.ThrowError("Failed to start campaign round (timed out while waiting for the up-to-date save file)."); + GameMain.NetLobbyScreen.Select(); + roundInitStatus = RoundInitStatus.Interrupted; + yield return CoroutineStatus.Failure; + } + yield return new WaitForSeconds(0.1f); + } + } + campaign.Map.SelectLocation(selectedLocationIndex); LevelData levelData = nextLocationIndex > -1 ? @@ -1665,10 +1683,6 @@ namespace Barotrauma.Networking } if (roundInitStatus != RoundInitStatus.WaitingForStartGameFinalize) { break; } - - clientPeer.Update((float)Timing.Step); - - if (roundInitStatus != RoundInitStatus.WaitingForStartGameFinalize) { break; } } catch (Exception e) { @@ -1744,7 +1758,7 @@ namespace Barotrauma.Networking yield return CoroutineStatus.Success; } - public IEnumerable EndGame(string endMessage, List traitorResults = null, CampaignMode.TransitionType transitionType = CampaignMode.TransitionType.None) + public IEnumerable EndGame(string endMessage, List traitorResults = null, CampaignMode.TransitionType transitionType = CampaignMode.TransitionType.None) { //round starting up, wait for it to finish DateTime timeOut = DateTime.Now + new TimeSpan(0, 0, 60); @@ -1854,8 +1868,7 @@ namespace Barotrauma.Networking GameMain.GameSession.OwnedSubmarines = new List(); for (int i = 0; i < ownedIndexes.Length; i++) { - int index; - if (int.TryParse(ownedIndexes[i], out index)) + if (int.TryParse(ownedIndexes[i], out int index)) { SubmarineInfo sub = GameMain.Client.ServerSubmarines[index]; if (GameMain.NetLobbyScreen.CheckIfCampaignSubMatches(sub, "owned")) @@ -2670,8 +2683,11 @@ namespace Barotrauma.Networking public override void CreateEntityEvent(INetSerializable entity, object[] extraData) { - if (!(entity is IClientSerializable)) throw new InvalidCastException("Entity is not IClientSerializable"); - entityEventManager.CreateEvent(entity as IClientSerializable, extraData); + if (!(entity is IClientSerializable clientSerializable)) + { + throw new InvalidCastException($"Entity is not {nameof(IClientSerializable)}"); + } + entityEventManager.CreateEvent(clientSerializable, extraData); } public bool HasPermission(ClientPermissions permission) @@ -3013,12 +3029,13 @@ namespace Barotrauma.Networking /// /// Tell the server to end the round (permission required) /// - public void RequestRoundEnd() + public void RequestRoundEnd(bool save) { IWriteMessage msg = new WriteOnlyMessage(); msg.Write((byte)ClientPacketHeader.SERVER_COMMAND); msg.Write((UInt16)ClientPermissions.ManageRound); msg.Write(true); //indicates round end + msg.Write(save); clientPeer.Send(msg, DeliveryMethod.Reliable); } @@ -3321,7 +3338,9 @@ namespace Barotrauma.Networking if (respawnManager.RespawnCountdownStarted) { float timeLeft = (float)(respawnManager.RespawnTime - DateTime.Now).TotalSeconds; - respawnText = TextManager.GetWithVariable(respawnManager.UsingShuttle ? "RespawnShuttleDispatching" : "RespawningIn", "[time]", ToolBox.SecondsToReadableTime(timeLeft)); + respawnText = TextManager.GetWithVariable( + respawnManager.UsingShuttle && !respawnManager.ForceSpawnInMainSub ? + "RespawnShuttleDispatching" : "RespawningIn", "[time]", ToolBox.SecondsToReadableTime(timeLeft)); } else if (respawnManager.PendingRespawnCount > 0) { @@ -3437,7 +3456,7 @@ namespace Barotrauma.Networking } // Need a delayed selection due to the inputbox being deselected when a left click occurs outside of it - IEnumerable selectCoroutine() + IEnumerable selectCoroutine() { yield return new WaitForSeconds(0.01f, true); chatBox.InputBox.Select(chatBox.InputBox.Text.Length); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/KarmaManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/KarmaManager.cs index 13a4dcebb..e53215e38 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/KarmaManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/KarmaManager.cs @@ -72,6 +72,9 @@ namespace Barotrauma { CreateLabeledTickBox(parent, nameof(DangerousItemStealBots)); } + CreateLabeledSlider(parent, 0.0f, 30.0f, 0.5f, nameof(DangerousItemContainKarmaDecrease)); + CreateLabeledTickBox(parent, nameof(IsDangerousItemContainKarmaDecreaseIncremental)); + CreateLabeledSlider(parent, 0.0f, 100.0f, 1.0f, nameof(MaxDangerousItemContainKarmaDecrease)); } private void CreateLabeledSlider(GUIComponent parent, float min, float max, float step, string propertyName) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/NetEntityEvent/ClientEntityEventManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/NetEntityEvent/ClientEntityEventManager.cs index e0f4462ae..23bcbdeea 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/NetEntityEvent/ClientEntityEventManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/NetEntityEvent/ClientEntityEventManager.cs @@ -43,24 +43,9 @@ namespace Barotrauma.Networking public void CreateEvent(IClientSerializable entity, object[] extraData = null) { - if (GameMain.Client == null || GameMain.Client.Character == null) return; + if (GameMain.Client?.Character == null) { return; } - if (!(entity is Entity)) - { - DebugConsole.ThrowError("Can't create an entity event for " + entity + "!"); - return; - } - - if (((Entity)entity).Removed) - { - DebugConsole.ThrowError("Can't create an entity event for " + entity + " - the entity has been removed.\n" + Environment.StackTrace.CleanupStackTrace()); - return; - } - if (((Entity)entity).IdFreed) - { - DebugConsole.ThrowError("Can't create an entity event for " + entity + " - the ID of the entity has been freed.\n" + Environment.StackTrace.CleanupStackTrace()); - return; - } + if (!ValidateEntity(entity)) { return; } var newEvent = new ClientEntityEvent(entity, (UInt16)(ID + 1)) { @@ -161,7 +146,7 @@ namespace Barotrauma.Networking UInt16 firstEventID = msg.ReadUInt16(); int eventCount = msg.ReadByte(); - + for (int i = 0; i < eventCount; i++) { //16 = entity ID, 8 = msg length @@ -179,7 +164,7 @@ namespace Barotrauma.Networking UInt16 thisEventID = (UInt16)(firstEventID + (UInt16)i); UInt16 entityID = msg.ReadUInt16(); - + if (entityID == Entity.NullEntityID) { if (GameSettings.VerboseLogging) @@ -240,8 +225,11 @@ namespace Barotrauma.Networking if (msg.BitPosition != msgPosition + msgLength * 8) { - string errorMsg = "Message byte position incorrect after reading an event for the entity \"" + entity.ToString() - + "\". Read " + (msg.BitPosition - msgPosition) + " bits, expected message length was " + (msgLength * 8) + " bits."; + var prevEntity = entities.Count >= 2 ? entities[entities.Count - 2] : null; + ushort prevId = prevEntity is Entity p ? p.ID : (ushort)0; + string errorMsg = $"Message byte position incorrect after reading an event for the entity \"{entity}\" (ID {(entity is Entity e ? e.ID : 0)}). " + +$"The previous entity was \"{prevEntity}\" (ID {prevId}) " + +$"Read {msg.BitPosition - msgPosition} bits, expected message length was {msgLength * 8} bits."; DebugConsole.ThrowError(errorMsg); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/NetStats.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/NetStats.cs index eb34d3cdd..e77762455 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/NetStats.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/NetStats.cs @@ -60,11 +60,11 @@ namespace Barotrauma.Networking { GUI.DrawRectangle(spriteBatch, rect, Color.Black * 0.4f, true); - graphs[(int)NetStatType.ReceivedBytes].Draw(spriteBatch, rect, null, 0.0f, Color.Cyan); - graphs[(int)NetStatType.SentBytes].Draw(spriteBatch, rect, null, 0.0f, GUI.Style.Orange); + graphs[(int)NetStatType.ReceivedBytes].Draw(spriteBatch, rect, color: Color.Cyan); + graphs[(int)NetStatType.SentBytes].Draw(spriteBatch, rect, null, color: GUI.Style.Orange); if (graphs[(int)NetStatType.ResentMessages].Average() > 0) { - graphs[(int)NetStatType.ResentMessages].Draw(spriteBatch, rect, null, 0.0f, GUI.Style.Red); + graphs[(int)NetStatType.ResentMessages].Draw(spriteBatch, rect, color: GUI.Style.Red); GUI.SmallFont.DrawString(spriteBatch, "Peak resent: " + graphs[(int)NetStatType.ResentMessages].LargestValue() + " messages/s", new Vector2(rect.Right + 10, rect.Y + 50), GUI.Style.Red); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/RespawnManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/RespawnManager.cs index cc3910164..596f5c8d0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/RespawnManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/RespawnManager.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; namespace Barotrauma.Networking { @@ -17,6 +18,11 @@ namespace Barotrauma.Networking get; private set; } + public bool ForceSpawnInMainSub + { + get; private set; + } + partial void UpdateTransportingProjSpecific(float deltaTime) { if (GameMain.Client?.Character == null || GameMain.Client.Character.Submarine != RespawnShuttle) { return; } @@ -30,10 +36,46 @@ namespace Barotrauma.Networking GameMain.Client.AddChatMessage("ServerMessage.ShuttleLeaving", ChatMessageType.Server); } } + + private CoroutineHandle respawnPromptCoroutine; + + public void ShowRespawnPromptIfNeeded(float delay = 5.0f) + { + if (!UseRespawnPrompt) { return; } + if (CoroutineManager.IsCoroutineRunning(respawnPromptCoroutine) || GUIMessageBox.MessageBoxes.Any(mb => mb.UserData as string == "respawnquestionprompt")) + { + return; + } + + respawnPromptCoroutine = CoroutineManager.Invoke(() => + { + if (Character.Controlled != null || (!(GameMain.GameSession?.IsRunning ?? false))) { return; } + var respawnPrompt = new GUIMessageBox( + TextManager.Get("tutorial.tryagainheader"), TextManager.Get("respawnquestionprompt"), + new string[] { TextManager.Get("respawnquestionpromptrespawn"), TextManager.Get("respawnquestionpromptwait") }) + { + UserData = "respawnquestionprompt" + }; + respawnPrompt.Buttons[0].OnClicked += (btn, userdata) => + { + GameMain.Client?.SendRespawnPromptResponse(waitForNextRoundRespawn: false); + respawnPrompt.Close(); + return true; + }; + respawnPrompt.Buttons[1].OnClicked += (btn, userdata) => + { + GameMain.Client?.SendRespawnPromptResponse(waitForNextRoundRespawn: true); + respawnPrompt.Close(); + return true; + }; + }, delay: delay); + } + public void ClientRead(ServerNetObject type, IReadMessage msg, float sendingTime) { + bool respawnPromptPending = false; var newState = (State)msg.ReadRangedInteger(0, Enum.GetNames(typeof(State)).Length); - + ForceSpawnInMainSub = false; switch (newState) { case State.Transporting: @@ -46,13 +88,14 @@ namespace Barotrauma.Networking if (CurrentState != newState) { CoroutineManager.StopCoroutines("forcepos"); - //CoroutineManager.StartCoroutine(ForceShuttleToPos(Level.Loaded.StartPosition - Vector2.UnitY * Level.ShaftHeight, 100.0f), "forcepos"); } break; case State.Waiting: PendingRespawnCount = msg.ReadUInt16(); RequiredRespawnCount = msg.ReadUInt16(); + respawnPromptPending = msg.ReadBoolean(); RespawnCountdownStarted = msg.ReadBoolean(); + ForceSpawnInMainSub = msg.ReadBoolean(); ResetShuttle(); float newRespawnTime = msg.ReadSingle(); RespawnTime = DateTime.Now + new TimeSpan(0, 0, 0, 0, milliseconds: (int)(newRespawnTime * 1000.0f)); @@ -63,6 +106,12 @@ namespace Barotrauma.Networking } CurrentState = newState; + if (respawnPromptPending) + { + GameMain.Client.HasSpawned = true; + ShowRespawnPromptIfNeeded(delay: 1.0f); + } + msg.ReadPadBits(); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerInfo.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerInfo.cs index ee2ffa7c1..2b25e89a2 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerInfo.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerInfo.cs @@ -106,10 +106,10 @@ namespace Barotrauma.Networking public void CreatePreviewWindow(GUIFrame frame) { - frame.ClearChildren(); - if (frame == null) { return; } + frame.ClearChildren(); + var title = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), frame.RectTransform), ServerName, font: GUI.LargeFont) { ToolTip = ServerName diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs index 07f3a2f9a..4b9497ab8 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs @@ -141,6 +141,10 @@ namespace Barotrauma.Networking ReadExtraCargo(incMsg); + ReadHiddenSubs(incMsg); + + GameMain.NetLobbyScreen.UpdateSubVisibility(); + Voting.ClientRead(incMsg); bool isAdmin = incMsg.ReadBoolean(); @@ -202,6 +206,11 @@ namespace Barotrauma.Networking Whitelist.ClientAdminWrite(outMsg); } + if (dataToSend.HasFlag(NetFlags.HiddenSubs)) + { + WriteHiddenSubs(outMsg); + } + if (dataToSend.HasFlag(NetFlags.Misc)) { outMsg.WriteRangedInteger(missionTypeOr ?? (int)Barotrauma.MissionType.None, 0, (int)Barotrauma.MissionType.All); @@ -288,7 +297,7 @@ namespace Barotrauma.Networking }; //center frames - GUIFrame innerFrame = new GUIFrame(new RectTransform(new Vector2(0.4f, 0.8f), settingsFrame.RectTransform, Anchor.Center) { MinSize = new Point(400, 430) }); + GUIFrame innerFrame = new GUIFrame(new RectTransform(new Vector2(0.5f, 0.85f), settingsFrame.RectTransform, Anchor.Center) { MinSize = new Point(400, 430) }); GUILayoutGroup paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.95f), innerFrame.RectTransform, Anchor.Center), childAnchor: Anchor.TopCenter) { Stretch = true, @@ -363,7 +372,7 @@ namespace Barotrauma.Networking selectionFrame.RectTransform.NonScaledSize = new Point(selectionFrame.Rect.Width, selectionFrame.Children.First().Rect.Height); selectionFrame.RectTransform.IsFixedSize = true; - GetPropertyData("SubSelectionMode").AssignGUIComponent(selectionMode); + GetPropertyData(nameof(SubSelectionMode)).AssignGUIComponent(selectionMode); // Mode Selection new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), serverTab.RectTransform), TextManager.Get("ServerSettingsModeSelection"), font: GUI.SubHeadingFont); @@ -381,7 +390,7 @@ namespace Barotrauma.Networking } selectionFrame.RectTransform.NonScaledSize = new Point(selectionFrame.Rect.Width, selectionFrame.Children.First().Rect.Height); selectionFrame.RectTransform.IsFixedSize = true; - GetPropertyData("ModeSelectionMode").AssignGUIComponent(selectionMode); + GetPropertyData(nameof(ModeSelectionMode)).AssignGUIComponent(selectionMode); new GUIFrame(new RectTransform(new Vector2(1.0f, 0.02f), serverTab.RectTransform), style: "HorizontalLine"); @@ -389,7 +398,7 @@ namespace Barotrauma.Networking var voiceChatEnabled = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), serverTab.RectTransform), TextManager.Get("ServerSettingsVoiceChatEnabled")); - GetPropertyData("VoiceChatEnabled").AssignGUIComponent(voiceChatEnabled); + GetPropertyData(nameof(VoiceChatEnabled)).AssignGUIComponent(voiceChatEnabled); //*********************************************** @@ -407,14 +416,14 @@ namespace Barotrauma.Networking } }; startIntervalSlider.Range = new Vector2(10.0f, 300.0f); - GetPropertyData("AutoRestartInterval").AssignGUIComponent(startIntervalSlider); + GetPropertyData(nameof(AutoRestartInterval)).AssignGUIComponent(startIntervalSlider); startIntervalSlider.OnMoved(startIntervalSlider, startIntervalSlider.BarScroll); //*********************************************** var startWhenClientsReady = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), serverTab.RectTransform), TextManager.Get("ServerSettingsStartWhenClientsReady")); - GetPropertyData("StartWhenClientsReady").AssignGUIComponent(startWhenClientsReady); + GetPropertyData(nameof(StartWhenClientsReady)).AssignGUIComponent(startWhenClientsReady); CreateLabeledSlider(serverTab, "ServerSettingsStartWhenClientsReadyRatio", out GUIScrollBar slider, out GUITextBlock sliderLabel); string clientsReadyRequiredLabel = sliderLabel.Text; @@ -425,19 +434,19 @@ namespace Barotrauma.Networking ((GUITextBlock)scrollBar.UserData).Text = clientsReadyRequiredLabel.Replace("[percentage]", ((int)MathUtils.Round(scrollBar.BarScrollValue * 100.0f, 10.0f)).ToString()); return true; }; - GetPropertyData("StartWhenClientsReadyRatio").AssignGUIComponent(slider); + GetPropertyData(nameof(StartWhenClientsReadyRatio)).AssignGUIComponent(slider); slider.OnMoved(slider, slider.BarScroll); //*********************************************** var allowSpecBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), serverTab.RectTransform), TextManager.Get("ServerSettingsAllowSpectating")); - GetPropertyData("AllowSpectating").AssignGUIComponent(allowSpecBox); + GetPropertyData(nameof(AllowSpectating)).AssignGUIComponent(allowSpecBox); var shareSubsBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), serverTab.RectTransform), TextManager.Get("ServerSettingsShareSubFiles")); - GetPropertyData("AllowFileTransfers").AssignGUIComponent(shareSubsBox); + GetPropertyData(nameof(AllowFileTransfers)).AssignGUIComponent(shareSubsBox); var randomizeLevelBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), serverTab.RectTransform), TextManager.Get("ServerSettingsRandomizeSeed")); - GetPropertyData("RandomizeSeed").AssignGUIComponent(randomizeLevelBox); + GetPropertyData(nameof(RandomizeSeed)).AssignGUIComponent(randomizeLevelBox); var saveLogsBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), serverTab.RectTransform), TextManager.Get("ServerSettingsSaveLogs")) { @@ -448,7 +457,7 @@ namespace Barotrauma.Networking return true; } }; - GetPropertyData("SaveServerLogs").AssignGUIComponent(saveLogsBox); + GetPropertyData(nameof(SaveServerLogs)).AssignGUIComponent(saveLogsBox); //-------------------------------------------------------------------------------- // game settings @@ -480,20 +489,20 @@ namespace Barotrauma.Networking selectionPlayStyle.AddRadioButton((int)playStyle, selectionTick); playStyleTickBoxes.Add(selectionTick); } - GetPropertyData("PlayStyle").AssignGUIComponent(selectionPlayStyle); + GetPropertyData(nameof(PlayStyle)).AssignGUIComponent(selectionPlayStyle); GUITextBlock.AutoScaleAndNormalize(playStyleTickBoxes.Select(t => t.TextBlock)); playstyleList.RectTransform.MinSize = new Point(0, (int)(playstyleList.Content.Children.First().Rect.Height * 2.0f + playstyleList.Padding.Y + playstyleList.Padding.W)); var endVoteBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), roundsTab.RectTransform), TextManager.Get("ServerSettingsEndRoundVoting")); - GetPropertyData("AllowEndVoting").AssignGUIComponent(endVoteBox); + GetPropertyData(nameof(AllowEndVoting)).AssignGUIComponent(endVoteBox); CreateLabeledSlider(roundsTab, "ServerSettingsEndRoundVotesRequired", out slider, out sliderLabel); string endRoundLabel = sliderLabel.Text; slider.Step = 0.2f; slider.Range = new Vector2(0.5f, 1.0f); - GetPropertyData("EndVoteRequiredRatio").AssignGUIComponent(slider); + GetPropertyData(nameof(EndVoteRequiredRatio)).AssignGUIComponent(slider); slider.OnMoved = (GUIScrollBar scrollBar, float barScroll) => { ((GUITextBlock)scrollBar.UserData).Text = endRoundLabel + " " + (int)MathUtils.Round(scrollBar.BarScrollValue * 100.0f, 10.0f) + " %"; @@ -503,13 +512,13 @@ namespace Barotrauma.Networking var respawnBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), roundsTab.RectTransform), TextManager.Get("ServerSettingsAllowRespawning")); - GetPropertyData("AllowRespawn").AssignGUIComponent(respawnBox); + GetPropertyData(nameof(AllowRespawn)).AssignGUIComponent(respawnBox); CreateLabeledSlider(roundsTab, "ServerSettingsRespawnInterval", out slider, out sliderLabel); string intervalLabel = sliderLabel.Text; slider.Range = new Vector2(10.0f, 600.0f); slider.StepValue = 10.0f; - GetPropertyData("RespawnInterval").AssignGUIComponent(slider); + GetPropertyData(nameof(RespawnInterval)).AssignGUIComponent(slider); slider.OnMoved = (GUIScrollBar scrollBar, float barScroll) => { GUITextBlock text = scrollBar.UserData as GUITextBlock; @@ -518,18 +527,26 @@ namespace Barotrauma.Networking }; slider.OnMoved(slider, slider.BarScroll); - var minRespawnText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), roundsTab.RectTransform), "") + var respawnLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.15f), roundsTab.RectTransform), + isHorizontal: true); + + var minRespawnLayout + = new GUILayoutGroup(new RectTransform(new Vector2(0.5f, 1.0f), respawnLayout.RectTransform)); + + var minRespawnText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.5f), minRespawnLayout.RectTransform), "") { ToolTip = TextManager.Get("ServerSettingsMinRespawnToolTip") }; string minRespawnLabel = TextManager.Get("ServerSettingsMinRespawn") + " "; - CreateLabeledSlider(roundsTab, "", out slider, out sliderLabel); + CreateLabeledSlider(minRespawnLayout, "", out slider, out sliderLabel); + sliderLabel.RectTransform.RelativeSize = Vector2.Zero; + slider.RectTransform.RelativeSize = new Vector2(1.0f, 0.5f); slider.ToolTip = minRespawnText.RawToolTip; slider.UserData = minRespawnText; slider.Step = 0.1f; slider.Range = new Vector2(0.0f, 1.0f); - GetPropertyData("MinRespawnRatio").AssignGUIComponent(slider); + GetPropertyData(nameof(MinRespawnRatio)).AssignGUIComponent(slider); slider.OnMoved = (GUIScrollBar scrollBar, float barScroll) => { ((GUITextBlock)scrollBar.UserData).Text = minRespawnLabel + (int)MathUtils.Round(scrollBar.BarScrollValue * 100.0f, 10.0f) + " %"; @@ -537,13 +554,18 @@ namespace Barotrauma.Networking }; slider.OnMoved(slider, MinRespawnRatio); - var respawnDurationText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), roundsTab.RectTransform), "") + var respawnDurationLayout + = new GUILayoutGroup(new RectTransform(new Vector2(0.5f, 1.0f), respawnLayout.RectTransform)); + + var respawnDurationText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.5f), respawnDurationLayout.RectTransform), "") { ToolTip = TextManager.Get("ServerSettingsRespawnDurationToolTip") }; string respawnDurationLabel = TextManager.Get("ServerSettingsRespawnDuration") + " "; - CreateLabeledSlider(roundsTab, "", out slider, out sliderLabel); + CreateLabeledSlider(respawnDurationLayout, "", out slider, out sliderLabel); + sliderLabel.RectTransform.RelativeSize = Vector2.Zero; + slider.RectTransform.RelativeSize = new Vector2(1.0f, 0.5f); slider.ToolTip = respawnDurationText.RawToolTip; slider.UserData = respawnDurationText; slider.Step = 0.1f; @@ -556,7 +578,7 @@ namespace Barotrauma.Networking { return value <= 0.0f ? 1.0f : (value - scrollBar.Range.X) / (scrollBar.Range.Y - scrollBar.Range.X); }; - GetPropertyData("MaxTransportTime").AssignGUIComponent(slider); + GetPropertyData(nameof(MaxTransportTime)).AssignGUIComponent(slider); slider.OnMoved = (GUIScrollBar scrollBar, float barScroll) => { if (barScroll == 1.0f) @@ -572,14 +594,34 @@ namespace Barotrauma.Networking }; slider.OnMoved(slider, slider.BarScroll); + + var losModeLabel = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), roundsTab.RectTransform), + TextManager.Get("LosEffect")); + + var losModeRadioButtonLayout + = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), roundsTab.RectTransform), + isHorizontal: true) + { + Stretch = true + }; + + var losModeRadioButtonGroup = new GUIRadioButtonGroup(); + LosMode[] losModes = (LosMode[])Enum.GetValues(typeof(LosMode)); + for (int i = 0; i < losModes.Length; i++) + { + var losTick = new GUITickBox(new RectTransform(new Vector2(0.3f, 1.0f), losModeRadioButtonLayout.RectTransform), TextManager.Get($"LosMode{losModes[i]}"), font: GUI.SmallFont, style: "GUIRadioButton"); + losModeRadioButtonGroup.AddRadioButton(i, losTick); + } + GetPropertyData(nameof(LosMode)).AssignGUIComponent(losModeRadioButtonGroup); + var traitorsMinPlayerCount = CreateLabeledNumberInput(roundsTab, "ServerSettingsTraitorsMinPlayerCount", 1, 16, "ServerSettingsTraitorsMinPlayerCountToolTip"); - GetPropertyData("TraitorsMinPlayerCount").AssignGUIComponent(traitorsMinPlayerCount); + GetPropertyData(nameof(TraitorsMinPlayerCount)).AssignGUIComponent(traitorsMinPlayerCount); var ragdollButtonBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), roundsTab.RectTransform), TextManager.Get("ServerSettingsAllowRagdollButton")); - GetPropertyData("AllowRagdollButton").AssignGUIComponent(ragdollButtonBox); + GetPropertyData(nameof(AllowRagdollButton)).AssignGUIComponent(ragdollButtonBox); var disableBotConversationsBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), roundsTab.RectTransform), TextManager.Get("ServerSettingsDisableBotConversations")); - GetPropertyData("DisableBotConversations").AssignGUIComponent(disableBotConversationsBox); + GetPropertyData(nameof(DisableBotConversations)).AssignGUIComponent(disableBotConversationsBox); var buttonHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.07f), roundsTab.RectTransform), isHorizontal: true) { @@ -729,35 +771,35 @@ namespace Barotrauma.Networking var allowFriendlyFire = new GUITickBox(new RectTransform(new Vector2(0.48f, 0.05f), tickBoxContainer.Content.RectTransform), TextManager.Get("ServerSettingsAllowFriendlyFire")); - GetPropertyData("AllowFriendlyFire").AssignGUIComponent(allowFriendlyFire); + GetPropertyData(nameof(AllowFriendlyFire)).AssignGUIComponent(allowFriendlyFire); var killableNPCs = new GUITickBox(new RectTransform(new Vector2(0.48f, 0.05f), tickBoxContainer.Content.RectTransform), TextManager.Get("ServerSettingsKillableNPCs")); - GetPropertyData("KillableNPCs").AssignGUIComponent(killableNPCs); + GetPropertyData(nameof(KillableNPCs)).AssignGUIComponent(killableNPCs); var destructibleOutposts = new GUITickBox(new RectTransform(new Vector2(0.48f, 0.05f), tickBoxContainer.Content.RectTransform), TextManager.Get("ServerSettingsDestructibleOutposts")); - GetPropertyData("DestructibleOutposts").AssignGUIComponent(destructibleOutposts); + GetPropertyData(nameof(DestructibleOutposts)).AssignGUIComponent(destructibleOutposts); var lockAllDefaultWires = new GUITickBox(new RectTransform(new Vector2(0.48f, 0.05f), tickBoxContainer.Content.RectTransform), TextManager.Get("ServerSettingsLockAllDefaultWires")); - GetPropertyData("LockAllDefaultWires").AssignGUIComponent(lockAllDefaultWires); + GetPropertyData(nameof(LockAllDefaultWires)).AssignGUIComponent(lockAllDefaultWires); var allowRewiring = new GUITickBox(new RectTransform(new Vector2(0.48f, 0.05f), tickBoxContainer.Content.RectTransform), TextManager.Get("ServerSettingsAllowRewiring")); - GetPropertyData("AllowRewiring").AssignGUIComponent(allowRewiring); + GetPropertyData(nameof(AllowRewiring)).AssignGUIComponent(allowRewiring); var allowWifiChatter = new GUITickBox(new RectTransform(new Vector2(0.48f, 0.05f), tickBoxContainer.Content.RectTransform), TextManager.Get("ServerSettingsAllowWifiChat")); - GetPropertyData("AllowLinkingWifiToChat").AssignGUIComponent(allowWifiChatter); + GetPropertyData(nameof(AllowLinkingWifiToChat)).AssignGUIComponent(allowWifiChatter); var allowDisguises = new GUITickBox(new RectTransform(new Vector2(0.48f, 0.05f), tickBoxContainer.Content.RectTransform), TextManager.Get("ServerSettingsAllowDisguises")); - GetPropertyData("AllowDisguises").AssignGUIComponent(allowDisguises); + GetPropertyData(nameof(AllowDisguises)).AssignGUIComponent(allowDisguises); var voteKickBox = new GUITickBox(new RectTransform(new Vector2(0.48f, 0.05f), tickBoxContainer.Content.RectTransform), TextManager.Get("ServerSettingsAllowVoteKick")); - GetPropertyData("AllowVoteKick").AssignGUIComponent(voteKickBox); + GetPropertyData(nameof(AllowVoteKick)).AssignGUIComponent(voteKickBox); GUITextBlock.AutoScaleAndNormalize(tickBoxContainer.Content.Children.Select(c => ((GUITickBox)c).TextBlock)); @@ -772,7 +814,7 @@ namespace Barotrauma.Networking ((GUITextBlock)scrollBar.UserData).Text = votesRequiredLabel + (int)MathUtils.Round(scrollBar.BarScrollValue * 100.0f, 10.0f) + " %"; return true; }; - GetPropertyData("KickVoteRequiredRatio").AssignGUIComponent(slider); + GetPropertyData(nameof(KickVoteRequiredRatio)).AssignGUIComponent(slider); slider.OnMoved(slider, slider.BarScroll); CreateLabeledSlider(antigriefingTab, "ServerSettingsAutobanTime", out slider, out sliderLabel); @@ -784,13 +826,13 @@ namespace Barotrauma.Networking ((GUITextBlock)scrollBar.UserData).Text = autobanLabel + ToolBox.SecondsToReadableTime(scrollBar.BarScrollValue); return true; }; - GetPropertyData("AutoBanTime").AssignGUIComponent(slider); + GetPropertyData(nameof(AutoBanTime)).AssignGUIComponent(slider); slider.OnMoved(slider, slider.BarScroll); var wrongPasswordBanBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), antigriefingTab.RectTransform), TextManager.Get("ServerSettingsBanAfterWrongPassword")); - GetPropertyData("BanAfterWrongPassword").AssignGUIComponent(wrongPasswordBanBox); + GetPropertyData(nameof(BanAfterWrongPassword)).AssignGUIComponent(wrongPasswordBanBox); var allowedPasswordRetries = CreateLabeledNumberInput(antigriefingTab, "ServerSettingsPasswordRetriesBeforeBan", 0, 10); - GetPropertyData("MaxPasswordRetriesBeforeBan").AssignGUIComponent(allowedPasswordRetries); + GetPropertyData(nameof(MaxPasswordRetriesBeforeBan)).AssignGUIComponent(allowedPasswordRetries); wrongPasswordBanBox.OnSelected += (tb) => { allowedPasswordRetries.Enabled = tb.Selected; @@ -800,7 +842,7 @@ namespace Barotrauma.Networking // karma -------------------------------------------------------------------------- var karmaBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), antigriefingTab.RectTransform), TextManager.Get("ServerSettingsUseKarma")); - GetPropertyData("KarmaEnabled").AssignGUIComponent(karmaBox); + GetPropertyData(nameof(KarmaEnabled)).AssignGUIComponent(karmaBox); karmaPresetDD = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.05f), antigriefingTab.RectTransform)); foreach (string karmaPreset in GameMain.NetworkMember.KarmaManager.Presets.Keys) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs index 13604817e..d71b3868f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/SteamManager.cs @@ -935,7 +935,7 @@ namespace Barotrauma.Steam return workshopPublishStatus; } - private static IEnumerable PublishItem(WorkshopPublishStatus workshopPublishStatus) + private static IEnumerable PublishItem(WorkshopPublishStatus workshopPublishStatus) { if (!isInitialized) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/Voting.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/Voting.cs index 31dc44d22..d9aeb9d49 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/Voting.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/Voting.cs @@ -66,10 +66,10 @@ namespace Barotrauma if (clients == null) { return; } - List> voteList = GetVoteList(voteType, clients); - foreach (Pair votable in voteList) + IReadOnlyDictionary voteList = GetVoteCounts(voteType, clients); + foreach (KeyValuePair votable in voteList) { - SetVoteText(listBox, votable.First, votable.Second); + SetVoteText(listBox, votable.Key, votable.Value); } break; case VoteType.StartRound: diff --git a/Barotrauma/BarotraumaClient/ClientSource/Particles/Particle.cs b/Barotrauma/BarotraumaClient/ClientSource/Particles/Particle.cs index 6b7cd2e8c..dbe56f22d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Particles/Particle.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Particles/Particle.cs @@ -106,8 +106,12 @@ namespace Barotrauma.Particles public void Init(ParticlePrefab prefab, Vector2 position, Vector2 speed, float rotation, Hull hullGuess = null, bool drawOnTop = false, float collisionIgnoreTimer = 0f, Tuple tracerPoints = null) { this.prefab = prefab; +#if DEBUG debugName = $"Particle ({prefab.Name})"; - +#else + //don't instantiate new string objects in release builds + debugName = prefab.Name; +#endif spriteIndex = Rand.Int(prefab.Sprites.Count); animState = 0; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs b/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs index 72d20579a..1ecd582e7 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs @@ -188,11 +188,14 @@ namespace Barotrauma.Particles var particlePrefab = overrideParticle ?? Prefab.ParticlePrefab; if (particlePrefab == null) { return; } - angle += Rand.Range(Prefab.Properties.AngleMinRad, Prefab.Properties.AngleMaxRad); - - Vector2 dir = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)); - Vector2 velocity = dir * Rand.Range(Prefab.Properties.VelocityMin, Prefab.Properties.VelocityMax) * velocityMultiplier; - position += dir * Rand.Range(Prefab.Properties.DistanceMin, Prefab.Properties.DistanceMax); + Vector2 velocity = Vector2.Zero; + if (!MathUtils.NearlyEqual(Prefab.Properties.VelocityMax * velocityMultiplier, 0.0f) || !MathUtils.NearlyEqual(Prefab.Properties.DistanceMax, 0.0f)) + { + angle += Rand.Range(Prefab.Properties.AngleMinRad, Prefab.Properties.AngleMaxRad); + Vector2 dir = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)); + velocity = dir * Rand.Range(Prefab.Properties.VelocityMin, Prefab.Properties.VelocityMax) * velocityMultiplier; + position += dir * Rand.Range(Prefab.Properties.DistanceMin, Prefab.Properties.DistanceMax); + } var particle = GameMain.ParticleManager.CreateParticle(particlePrefab, position, velocity, particleRotation, hullGuess, Prefab.DrawOnTop, tracerPoints: tracerPoints); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleManager.cs index 1b5c3fdc0..441f71846 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleManager.cs @@ -167,8 +167,8 @@ namespace Barotrauma.Particles if (minPos.X > expandedViewRect.Right || maxPos.X < expandedViewRect.X) { return null; } if (minPos.Y > expandedViewRect.Y || maxPos.Y < expandedViewRect.Y - expandedViewRect.Height) { return null; } - - if (particles[particleCount] == null) particles[particleCount] = new Particle(); + + if (particles[particleCount] == null) { particles[particleCount] = new Particle(); } particles[particleCount].Init(prefab, position, velocity, rotation, hullGuess, drawOnTop, collisionIgnoreTimer, tracerPoints: tracerPoints); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Program.cs b/Barotrauma/BarotraumaClient/ClientSource/Program.cs index 23a9d554d..e612e92f1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Program.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Program.cs @@ -255,7 +255,7 @@ namespace Barotrauma File.WriteAllText(filePath, crashReport); - if (GameSettings.SaveDebugConsoleLogs) DebugConsole.SaveLogs(); + if (GameSettings.SaveDebugConsoleLogs || GameSettings.VerboseLogging) { DebugConsole.SaveLogs(); } if (GameSettings.SendUserStatistics) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/MultiPlayerCampaignSetupUI.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/MultiPlayerCampaignSetupUI.cs index e02424ee4..289937c2b 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/MultiPlayerCampaignSetupUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/MultiPlayerCampaignSetupUI.cs @@ -271,7 +271,7 @@ namespace Barotrauma } } - private IEnumerable WaitForCampaignSetup() + private IEnumerable WaitForCampaignSetup() { GUI.SetCursorWaiting(); string headerText = TextManager.Get("CampaignStartingPleaseWait"); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs index 0a553e0a8..07490fbf9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs @@ -1802,9 +1802,11 @@ namespace Barotrauma.CharacterEditor { case AnimationType.Walk: case AnimationType.Run: - case AnimationType.Crouch: if (!ragdollParams.CanWalk) { continue; } break; + case AnimationType.Crouch: + if (!ragdollParams.CanWalk || !isHumanoid) { continue; } + break; case AnimationType.SwimSlow: case AnimationType.SwimFast: break; @@ -2690,7 +2692,15 @@ namespace Barotrauma.CharacterEditor characterDropDown.SelectItem(currentCharacterConfig); characterDropDown.OnSelected = (component, data) => { - SpawnCharacter((string)data); + string configFile = (string)data; + try + { + SpawnCharacter(configFile); + } + catch (Exception e) + { + HandleSpawnException(configFile, e); + } return true; }; if (currentCharacterConfig == CharacterPrefab.HumanConfigFile) @@ -2719,19 +2729,48 @@ namespace Barotrauma.CharacterEditor prevCharacterButton.TextBlock.AutoScaleHorizontal = true; prevCharacterButton.OnClicked += (b, obj) => { - SpawnCharacter(GetPreviousConfigFile()); + string configFile = GetPreviousConfigFile(); + try + { + SpawnCharacter(configFile); + } + catch (Exception e) + { + HandleSpawnException(configFile, e); + } return true; }; var nextCharacterButton = new GUIButton(new RectTransform(new Vector2(0.5f, 1.0f), charButtons.RectTransform, Anchor.TopRight), GetCharacterEditorTranslation("NextCharacter")); prevCharacterButton.TextBlock.AutoScaleHorizontal = true; nextCharacterButton.OnClicked += (b, obj) => { - SpawnCharacter(GetNextConfigFile()); + string configFile = GetNextConfigFile(); + try + { + SpawnCharacter(configFile); + } + catch (Exception e) + { + HandleSpawnException(configFile, e); + } return true; }; charButtons.RectTransform.MinSize = new Point(0, prevCharacterButton.RectTransform.MinSize.Y); characterPanelToggle = new ToggleButton(new RectTransform(new Vector2(0.08f, 1), characterSelectionPanel.RectTransform, Anchor.CenterLeft, Pivot.CenterRight), Direction.Right); characterSelectionPanel.RectTransform.MinSize = new Point(0, (int)(content.RectTransform.Children.Sum(c => c.MinSize.Y) * 1.2f)); + + void HandleSpawnException(string configFile, Exception e) + { + if (configFile != CharacterPrefab.HumanConfigFile) + { + DebugConsole.ThrowError($"Failed to spawn the character \"{configFile}\".", e); + SpawnCharacter(CharacterPrefab.HumanConfigFile); + } + else + { + throw new Exception($"Failed to spawn the character \"{configFile}\".", innerException: e); + } + } } private void CreateFileEditPanel() diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/LevelEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/LevelEditorScreen.cs index fe25d54b9..061d6e262 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/LevelEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/LevelEditorScreen.cs @@ -143,9 +143,33 @@ namespace Barotrauma editorContainer = new GUIListBox(new RectTransform(new Vector2(1.0f, 1.0f), paddedRightPanel.RectTransform)); - var seedContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.02f), paddedRightPanel.RectTransform), isHorizontal: true); - new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), seedContainer.RectTransform), TextManager.Get("leveleditor.levelseed")); - seedBox = new GUITextBox(new RectTransform(new Vector2(0.5f, 1.0f), seedContainer.RectTransform), ToolBox.RandomSeed(8)); + var seedContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.04f), paddedRightPanel.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft); + Vector2 randomizeButtonRelativeSize = GetRandomizeButtonRelativeSize(); + Vector2 elementRelativeSize = GetSeedElementRelativeSize(); + var seedLabel = new GUITextBlock(new RectTransform(elementRelativeSize, seedContainer.RectTransform), TextManager.Get("leveleditor.levelseed")); + seedBox = new GUITextBox(new RectTransform(elementRelativeSize, seedContainer.RectTransform), GetLevelSeed()); + var seedButton = new GUIButton(new RectTransform(randomizeButtonRelativeSize, seedContainer.RectTransform), style: "RandomizeButton") + { + OnClicked = (button, userData) => + { + if(seedBox == null) { return false; } + seedBox.Text = GetLevelSeed(); + return true; + } + }; + seedContainer.RectTransform.SizeChanged += () => + { + Vector2 randomizeButtonRelativeSize = GetRandomizeButtonRelativeSize(); + Vector2 elementRelativeSize = GetSeedElementRelativeSize(); + seedLabel.RectTransform.RelativeSize = elementRelativeSize; + seedBox.RectTransform.RelativeSize = elementRelativeSize; + seedButton.RectTransform.RelativeSize = randomizeButtonRelativeSize; + }; + Vector2 GetRandomizeButtonRelativeSize() => 0.2f * seedContainer.Rect.Width > seedContainer.Rect.Height ? + new Vector2(Math.Min((float)seedContainer.Rect.Height / seedContainer.Rect.Width, 0.2f), 1.0f) : + new Vector2(0.15f, Math.Min((0.2f * seedContainer.Rect.Width) / seedContainer.Rect.Height, 1.0f)); + Vector2 GetSeedElementRelativeSize() => new Vector2(0.5f * (1.0f - randomizeButtonRelativeSize.X), 1.0f); + static string GetLevelSeed() => ToolBox.RandomSeed(8); mirrorLevel = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.02f), paddedRightPanel.RectTransform), TextManager.Get("mirrorentityx")); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs index 2a12028a9..2ca44aba9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs @@ -679,7 +679,7 @@ namespace Barotrauma return true; } - private IEnumerable SelectScreenWithWaitCursor(Screen screen) + private IEnumerable SelectScreenWithWaitCursor(Screen screen) { GUI.SetCursorWaiting(); //tiny delay to get the cursor to render @@ -719,7 +719,7 @@ namespace Barotrauma } #endregion - public void QuickStart(bool fixedSeed = false, string sub = null) + public void QuickStart(bool fixedSeed = false, string sub = null, float difficulty = 40, LevelGenerationParams levelGenerationParams = null) { if (fixedSeed) { @@ -751,7 +751,7 @@ namespace Barotrauma GameModePreset.DevSandbox, missionPrefabs: null); //(gamesession.GameMode as SinglePlayerCampaign).GenerateMap(ToolBox.RandomSeed(8)); - gamesession.StartRound(fixedSeed ? "abcd" : ToolBox.RandomSeed(8), difficulty: 40); + gamesession.StartRound(fixedSeed ? "abcd" : ToolBox.RandomSeed(8), difficulty, levelGenerationParams); GameMain.GameScreen.Select(); // TODO: modding support string[] jobIdentifiers = new string[] { "captain", "engineer", "mechanic", "securityofficer", "medicaldoctor" }; @@ -890,7 +890,7 @@ namespace Barotrauma } } - private IEnumerable WaitForSubmarineHashCalculations(GUIMessageBox messageBox) + private IEnumerable WaitForSubmarineHashCalculations(GUIMessageBox messageBox) { string originalText = messageBox.Text.Text; int doneCount = 0; @@ -1452,7 +1452,7 @@ namespace Barotrauma } } - private IEnumerable WairForRemoteContentReceived() + private IEnumerable WairForRemoteContentReceived() { while (true) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs index 40b99af75..1d1c19e48 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs @@ -18,9 +18,7 @@ namespace Barotrauma private readonly GUILayoutGroup infoFrameContent; private readonly GUIFrame myCharacterFrame; - private readonly GUIListBox subList, modeList; - - private readonly GUIListBox chatBox, playerList; + private readonly GUIListBox chatBox; private readonly GUIButton serverLogReverseButton; private readonly GUIListBox serverLogBox, serverLogFilterTicks; @@ -73,7 +71,8 @@ namespace Barotrauma private readonly GUIComponent gameModeContainer; private readonly GUIButton spectateButton; private readonly GUILayoutGroup roundControlsHolder; - public GUIButton SettingsButton { get; private set; } + + public readonly GUIButton SettingsButton; public static GUIButton JobInfoFrame; private readonly GUITickBox spectateBox; @@ -85,12 +84,15 @@ namespace Barotrauma private bool createPendingChangesText = true; public GUIButton PlayerFrame; + public readonly GUIButton SubVisibilityButton; + + private readonly GUITextBox subSearchBox; + private readonly GUIComponent subPreviewContainer; private readonly GUITickBox autoRestartBox; private readonly GUITextBlock autoRestartText; - private readonly GUIDropDown shuttleList; private readonly GUITickBox shuttleTickBox; private readonly GUIComponent settingsBlocker; @@ -161,20 +163,11 @@ namespace Barotrauma private readonly GUITextBlock publicOrPrivate; - public GUIListBox SubList - { - get { return subList; } - } + public readonly GUIListBox SubList; - public GUIDropDown ShuttleList - { - get { return shuttleList; } - } + public readonly GUIDropDown ShuttleList; - public GUIListBox ModeList - { - get { return modeList; } - } + public readonly GUIListBox ModeList; private int selectedModeIndex; public int SelectedModeIndex @@ -184,7 +177,7 @@ namespace Barotrauma { if (HighlightedModeIndex == selectedModeIndex) { - modeList.Select(value); + ModeList.Select(value); } selectedModeIndex = value; } @@ -192,17 +185,14 @@ namespace Barotrauma public int HighlightedModeIndex { - get { return modeList.SelectedIndex; } + get { return ModeList.SelectedIndex; } set { - modeList.Select(value, true); + ModeList.Select(value, true); } } - public GUIListBox PlayerList - { - get { return playerList; } - } + public readonly GUIListBox PlayerList; public GUITextBox CharacterNameBox { @@ -228,16 +218,9 @@ namespace Barotrauma private set; } - public SubmarineInfo SelectedSub - { - get { return subList.SelectedData as SubmarineInfo; } - set { subList.Select(value); } - } + public SubmarineInfo SelectedSub => SubList.SelectedData as SubmarineInfo; - public SubmarineInfo SelectedShuttle - { - get { return shuttleList.SelectedData as SubmarineInfo; } - } + public SubmarineInfo SelectedShuttle => ShuttleList.SelectedData as SubmarineInfo; public MultiPlayerCampaignSetupUI CampaignSetupUI; public List CampaignSubmarines = new List(); @@ -253,7 +236,7 @@ namespace Barotrauma public GameModePreset SelectedMode { - get { return modeList.SelectedData as GameModePreset; } + get { return ModeList.SelectedData as GameModePreset; } } public MissionType MissionType @@ -529,7 +512,7 @@ namespace Barotrauma //player list ------------------------------------------------------------------ - playerList = new GUIListBox(new RectTransform(new Vector2(0.4f, 1.0f), socialHolderHorizontal.RectTransform)) + PlayerList = new GUIListBox(new RectTransform(new Vector2(0.4f, 1.0f), socialHolderHorizontal.RectTransform)) { OnSelected = (component, userdata) => { SelectPlayer(userdata as Client); return true; } }; @@ -737,25 +720,65 @@ namespace Barotrauma }; var serverMessageContainer = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.75f), serverInfoHolder.RectTransform)); - ServerMessage = new GUITextBox(new RectTransform(Vector2.One, serverMessageContainer.Content.RectTransform), style: "GUITextBoxNoBorder") + ServerMessage = new GUITextBox(new RectTransform(Vector2.One, serverMessageContainer.Content.RectTransform), + style: "GUITextBoxNoBorder", wrap: true, textAlignment: Alignment.TopLeft); + var serverMessageHint = new GUITextBlock(new RectTransform(Vector2.One, ServerMessage.RectTransform), + textColor: Color.DarkGray * 0.6f, textAlignment: Alignment.TopLeft, font: GUI.Style.Font, text: TextManager.Get("ClickToWriteServerMessage")); + + void updateServerMessageScrollBasedOnCaret() { - Wrap = true + float caretY = ServerMessage.CaretScreenPos.Y; + float bottomCaretExtent = ServerMessage.Font.LineHeight * 1.5f; + float topCaretExtent = -ServerMessage.Font.LineHeight * 0.5f; + if (caretY + bottomCaretExtent > serverMessageContainer.Rect.Bottom) + { + serverMessageContainer.ScrollBar.BarScroll + = (caretY - ServerMessage.Rect.Top - serverMessageContainer.Rect.Height + bottomCaretExtent) + / (ServerMessage.Rect.Height - serverMessageContainer.Rect.Height); + } + else if (caretY + topCaretExtent < serverMessageContainer.Rect.Top) + { + serverMessageContainer.ScrollBar.BarScroll + = (caretY - ServerMessage.Rect.Top + topCaretExtent) + / (ServerMessage.Rect.Height - serverMessageContainer.Rect.Height); + } + } + + ServerMessage.OnSelected += (textBox, key) => + { + serverMessageHint.Visible = false; + updateServerMessageScrollBasedOnCaret(); }; ServerMessage.OnTextChanged += (textBox, text) => { Vector2 textSize = textBox.Font.MeasureString(textBox.WrappedText); textBox.RectTransform.NonScaledSize = new Point(textBox.RectTransform.NonScaledSize.X, Math.Max(serverMessageContainer.Content.Rect.Height, (int)textSize.Y + 10)); serverMessageContainer.UpdateScrollBarSize(); - serverMessageContainer.BarScroll = 1.0f; + serverMessageHint.Visible = !textBox.Selected && !textBox.Readonly && string.IsNullOrWhiteSpace(textBox.Text); + return true; + }; + ServerMessage.OnEnterPressed += (textBox, text) => + { + string str = textBox.Text; + int caretIndex = textBox.CaretIndex; + textBox.Text = $"{str[..caretIndex]}\n{str[caretIndex..]}"; + textBox.CaretIndex = caretIndex + 1; + return true; }; ServerMessage.OnDeselected += (textBox, key) => { if (!textBox.Readonly) { - GameMain.Client.ServerSettings.ClientAdminWrite(ServerSettings.NetFlags.Message); + GameMain.Client?.ServerSettings?.ClientAdminWrite(ServerSettings.NetFlags.Message); } + serverMessageHint.Visible = !textBox.Readonly && string.IsNullOrWhiteSpace(textBox.Text); }; + + ServerMessage.OnKeyHit += (sender, key) => updateServerMessageScrollBasedOnCaret(); + + + clientHiddenElements.Add(serverMessageHint); clientReadonlyElements.Add(ServerMessage); //submarine list ------------------------------------------------------------------ @@ -768,26 +791,36 @@ namespace Barotrauma var subLabel = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.055f), subHolder.RectTransform) { MinSize = new Point(0, 25) }, TextManager.Get("Submarine"), font: GUI.SubHeadingFont); + SubVisibilityButton + = new GUIButton( + new RectTransform(Vector2.One * 1.2f, subLabel.RectTransform, anchor: Anchor.CenterRight, + scaleBasis: ScaleBasis.BothHeight), + style: "EyeButton") + { + OnClicked = (button, o) => + { + CreateSubmarineVisibilityMenu(); + return false; + } + }; + clientHiddenElements.Add(SubVisibilityButton); + var filterContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.05f), subHolder.RectTransform), isHorizontal: true) { Stretch = true }; var searchTitle = new GUITextBlock(new RectTransform(new Vector2(0.001f, 1.0f), filterContainer.RectTransform), TextManager.Get("serverlog.filter"), textAlignment: Alignment.CenterLeft, font: GUI.Font); - var searchBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 1.0f), filterContainer.RectTransform, Anchor.CenterRight), font: GUI.Font, createClearButton: true); - filterContainer.RectTransform.MinSize = searchBox.RectTransform.MinSize; - searchBox.OnSelected += (sender, userdata) => { searchTitle.Visible = false; }; - searchBox.OnDeselected += (sender, userdata) => { searchTitle.Visible = true; }; - searchBox.OnTextChanged += (textBox, text) => + subSearchBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 1.0f), filterContainer.RectTransform, Anchor.CenterRight), font: GUI.Font, createClearButton: true); + filterContainer.RectTransform.MinSize = subSearchBox.RectTransform.MinSize; + subSearchBox.OnSelected += (sender, userdata) => { searchTitle.Visible = false; }; + subSearchBox.OnDeselected += (sender, userdata) => { searchTitle.Visible = true; }; + subSearchBox.OnTextChanged += (textBox, text) => { - foreach (GUIComponent child in subList.Content.Children) - { - if (!(child.UserData is SubmarineInfo sub)) { continue; } - child.Visible = string.IsNullOrEmpty(text) || sub.DisplayName.ToLower().Contains(text.ToLower()); - } + UpdateSubVisibility(); return true; }; - subList = new GUIListBox(new RectTransform(Vector2.One, subHolder.RectTransform)) + SubList = new GUIListBox(new RectTransform(Vector2.One, subHolder.RectTransform)) { OnSelected = VotableClicked }; @@ -832,7 +865,7 @@ namespace Barotrauma shuttleTickBox.TextBlock.TextScale = 1.0f; } }; - shuttleList = new GUIDropDown(new RectTransform(Vector2.One, shuttleHolder.RectTransform), elementCount: 10) + ShuttleList = new GUIDropDown(new RectTransform(Vector2.One, shuttleHolder.RectTransform), elementCount: 10) { OnSelected = (component, obj) => { @@ -840,8 +873,8 @@ namespace Barotrauma return true; } }; - shuttleList.ListBox.RectTransform.MinSize = new Point(250, 0); - shuttleHolder.RectTransform.MinSize = new Point(0, shuttleList.RectTransform.Children.Max(c => c.MinSize.Y)); + ShuttleList.ListBox.RectTransform.MinSize = new Point(250, 0); + shuttleHolder.RectTransform.MinSize = new Point(0, ShuttleList.RectTransform.Children.Max(c => c.MinSize.Y)); subPreviewContainer = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.9f), rightColumn.RectTransform), style: null); subPreviewContainer.RectTransform.SizeChanged += () => @@ -871,7 +904,7 @@ namespace Barotrauma UserData = "modevotes", Visible = false }; - modeList = new GUIListBox(new RectTransform(Vector2.One, gameModeHolder.RectTransform)) + ModeList = new GUIListBox(new RectTransform(Vector2.One, gameModeHolder.RectTransform)) { OnSelected = VotableClicked }; @@ -880,7 +913,7 @@ namespace Barotrauma { if (mode.IsSinglePlayer) { continue; } - var modeFrame = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.15f), modeList.Content.RectTransform), style: null) + var modeFrame = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.15f), ModeList.Content.RectTransform), style: null) { UserData = mode }; @@ -938,7 +971,7 @@ namespace Barotrauma { OnClicked = (_, __) => { - GameMain.Client.RequestSelectMode(modeList.Content.GetChildIndex(modeList.Content.GetChildByUserData(GameModePreset.Sandbox))); + GameMain.Client.RequestSelectMode(ModeList.Content.GetChildIndex(ModeList.Content.GetChildByUserData(GameModePreset.Sandbox))); return true; } }; @@ -1221,7 +1254,7 @@ namespace Barotrauma GUI.ClearCursorWait(); } - public IEnumerable WaitForStartRound(GUIButton startButton) + public IEnumerable WaitForStartRound(GUIButton startButton) { GUI.SetCursorWaiting(); string headerText = TextManager.Get("RoundStartingPleaseWait"); @@ -1264,6 +1297,8 @@ namespace Barotrauma { if (GameMain.NetworkMember == null) { return; } + visibilityMenuOrder.Clear(); + CharacterAppearanceCustomizationMenu?.Dispose(); JobSelectionFrame = null; @@ -1362,7 +1397,7 @@ namespace Barotrauma ServerMessage.Readonly = !GameMain.Client.HasPermission(ClientPermissions.ManageSettings); shuttleTickBox.Enabled = GameMain.Client.HasPermission(ClientPermissions.ManageSettings); SubList.Enabled = !CampaignFrame.Visible && (GameMain.Client.ServerSettings.Voting.AllowSubVoting || GameMain.Client.HasPermission(ClientPermissions.SelectSub)); - shuttleList.Enabled = shuttleList.ButtonEnabled = GameMain.Client.HasPermission(ClientPermissions.SelectSub); + ShuttleList.Enabled = ShuttleList.ButtonEnabled = GameMain.Client.HasPermission(ClientPermissions.SelectSub); ModeList.Enabled = GameMain.Client.ServerSettings.Voting.AllowModeVoting || GameMain.Client.HasPermission(ClientPermissions.SelectMode); LogButtons.Visible = GameMain.Client.HasPermission(ClientPermissions.ServerLog); GameMain.Client.ShowLogButton.Visible = GameMain.Client.HasPermission(ClientPermissions.ServerLog); @@ -1370,6 +1405,8 @@ namespace Barotrauma roundControlsHolder.Children.ForEach(c => c.RectTransform.RelativeSize = Vector2.One); roundControlsHolder.Recalculate(); + SubVisibilityButton.Visible = GameMain.Client.HasPermission(ClientPermissions.ManageSettings); + ReadyToStartBox.Parent.Visible = !GameMain.Client.GameStarted; RefreshGameModeContent(); @@ -1557,7 +1594,7 @@ namespace Barotrauma }; } - UpdateJobPreferences(); + UpdateJobPreferences(characterInfo); appearanceFrame = new GUIFrame(new RectTransform(Vector2.One, characterInfoFrame.RectTransform), style: "GUIFrameListBox") { @@ -1853,7 +1890,7 @@ namespace Barotrauma } else { - if (subList == shuttleList || subList == shuttleList.ListBox || subList == shuttleList.ListBox.Content) + if (subList == ShuttleList || subList == ShuttleList.ListBox || subList == ShuttleList.ListBox.Content) { subTextBlock.TextColor = new Color(subTextBlock.TextColor, sub.HasTag(SubmarineTag.Shuttle) ? 1.0f : 0.6f); } @@ -1865,9 +1902,22 @@ namespace Barotrauma frame.ToolTip = TextManager.Get("ContentPackageMismatch") + "\n\n" + frame.RawToolTip; } + CreateSubmarineClassText( + frame, + sub, + subTextBlock, + subList); + } + + private void CreateSubmarineClassText( + GUIComponent parent, + SubmarineInfo sub, + GUITextBlock subTextBlock, + GUIComponent subList) + { if (sub.HasTag(SubmarineTag.Shuttle)) { - var shuttleText = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), frame.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(GUI.IntScale(20), 0) }, + var shuttleText = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), parent.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(GUI.IntScale(20), 0) }, TextManager.Get("Shuttle", fallBackTag: "RespawnShuttle"), textAlignment: Alignment.CenterRight, font: GUI.SmallFont) { TextColor = subTextBlock.TextColor * 0.8f, @@ -1875,10 +1925,10 @@ namespace Barotrauma CanBeFocused = false }; //make shuttles more dim in the sub list (selecting a shuttle as the main sub is allowed but not recommended) - if (subList == this.subList.Content) + if (subList == this.SubList.Content) { subTextBlock.TextColor *= 0.8f; - foreach (GUIComponent child in frame.Children) + foreach (GUIComponent child in parent.Children) { child.Color *= 0.8f; } @@ -1886,17 +1936,17 @@ namespace Barotrauma } else { - var classText = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), frame.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(GUI.IntScale(20), 0) }, - TextManager.Get($"submarineclass.{sub.SubmarineClass}"), textAlignment: Alignment.CenterRight, font: GUI.SmallFont) + var classText = new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), parent.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(GUI.IntScale(20), 0) }, + TextManager.Get($"submarineclass.{sub.SubmarineClass}"), textAlignment: Alignment.CenterRight, font: GUI.SmallFont) { UserData = "classtext", TextColor = subTextBlock.TextColor * 0.8f, - ToolTip = subTextBlock.RawToolTip + ToolTip = subTextBlock.RawToolTip, + CanBeFocused = false }; } - } - + public bool VotableClicked(GUIComponent component, object userData) { if (GameMain.Client == null) { return false; } @@ -1995,7 +2045,7 @@ namespace Barotrauma public void AddPlayer(Client client) { - GUITextBlock textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.1f), playerList.Content.RectTransform) { MinSize = new Point(0, (int)(30 * GUI.Scale)) }, + GUITextBlock textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.1f), PlayerList.Content.RectTransform) { MinSize = new Point(0, (int)(30 * GUI.Scale)) }, client.Name, textAlignment: Alignment.CenterLeft, font: GUI.SmallFont, style: null) { Padding = Vector4.One * 10.0f * GUI.Scale, @@ -2109,8 +2159,8 @@ namespace Barotrauma public void RemovePlayer(Client client) { - GUIComponent child = playerList.Content.GetChildByUserData(client); - if (child != null) { playerList.RemoveChild(child); } + GUIComponent child = PlayerList.Content.GetChildByUserData(client); + if (child != null) { PlayerList.RemoveChild(child); } } public void SelectPlayer(GUITextBlock component, GUITextBlock.ClickableArea area) @@ -2459,7 +2509,7 @@ namespace Barotrauma private bool ClosePlayerFrame(GUIButton button, object userData) { PlayerFrame = null; - playerList.Deselect(); + PlayerList.Deselect(); return true; } @@ -2520,7 +2570,7 @@ namespace Barotrauma GUI.Style.Apply(micIcon, targetMicStyle); } - foreach (GUIComponent child in playerList.Content.Children) + foreach (GUIComponent child in PlayerList.Content.Children) { if (child.UserData is Client client) { @@ -2752,13 +2802,13 @@ namespace Barotrauma appearanceFrame.ClearChildren(); - var info = GameMain.Client.CharacterInfo; + var info = GameMain.Client.CharacterInfo ?? Character.Controlled?.Info; CharacterAppearanceCustomizationMenu = new CharacterInfo.AppearanceCustomizationMenu(info, appearanceFrame) { OnHeadSwitch = menu => { StoreHead(true); - UpdateJobPreferences(); + UpdateJobPreferences(info); SelectAppearanceTab(button, _); }, OnSliderMoved = (bar, scroll) => @@ -2818,7 +2868,7 @@ namespace Barotrauma } } - UpdateJobPreferences(); + UpdateJobPreferences(GameMain.Client.CharacterInfo ?? Character.Controlled?.Info); if (moveToNext) { @@ -3014,16 +3064,16 @@ namespace Barotrauma public void SelectMode(int modeIndex) { - if (modeIndex < 0 || modeIndex >= modeList.Content.CountChildren) { return; } + if (modeIndex < 0 || modeIndex >= ModeList.Content.CountChildren) { return; } - if ((GameModePreset)modeList.Content.GetChild(modeIndex).UserData != GameModePreset.MultiPlayerCampaign) + if ((GameModePreset)ModeList.Content.GetChild(modeIndex).UserData != GameModePreset.MultiPlayerCampaign) { ToggleCampaignMode(false); } - var prevMode = modeList.Content.GetChild(selectedModeIndex).UserData as GameModePreset; + var prevMode = ModeList.Content.GetChild(selectedModeIndex).UserData as GameModePreset; - if ((HighlightedModeIndex == selectedModeIndex || HighlightedModeIndex < 0) && modeList.SelectedIndex != modeIndex) { modeList.Select(modeIndex, true); } + if ((HighlightedModeIndex == selectedModeIndex || HighlightedModeIndex < 0) && ModeList.SelectedIndex != modeIndex) { ModeList.Select(modeIndex, true); } selectedModeIndex = modeIndex; if ((prevMode == GameModePreset.PvP) != (SelectedMode == GameModePreset.PvP)) @@ -3043,7 +3093,7 @@ namespace Barotrauma public void HighlightMode(int modeIndex) { - if (modeIndex < 0 || modeIndex >= modeList.Content.CountChildren) { return; } + if (modeIndex < 0 || modeIndex >= ModeList.Content.CountChildren) { return; } HighlightedModeIndex = modeIndex; RefreshGameModeContent(); @@ -3139,7 +3189,7 @@ namespace Barotrauma RefreshEnabledElements(); if (enabled) { - modeList.Select(GameModePreset.MultiPlayerCampaign, true); + ModeList.Select(GameModePreset.MultiPlayerCampaign, true); } } @@ -3147,17 +3197,17 @@ namespace Barotrauma { string name = submarine?.Name; bool displayed = false; - subList.OnSelected -= VotableClicked; - subList.Deselect(); + SubList.OnSelected -= VotableClicked; + SubList.Deselect(); subPreviewContainer.ClearChildren(); - foreach (GUIComponent child in subList.Content.Children) + foreach (GUIComponent child in SubList.Content.Children) { if (!(child.UserData is SubmarineInfo sub)) { continue; } //just check the name, even though the campaign sub may not be the exact same version //we're selecting the sub just for show, the selection is not actually used for anything if (sub.Name == name) { - subList.Select(sub); + SubList.Select(sub); if (SubmarineInfo.SavedSubmarines.Contains(sub)) { CreateSubPreview(sub); @@ -3166,7 +3216,7 @@ namespace Barotrauma break; } } - subList.OnSelected += VotableClicked; + SubList.OnSelected += VotableClicked; if (!displayed) { CreateSubPreview(submarine); @@ -3194,11 +3244,13 @@ namespace Barotrauma return true; } - private void UpdateJobPreferences() + private void UpdateJobPreferences(CharacterInfo characterInfo) { + if (characterInfo == null) { return; } + GUICustomComponent characterIcon = JobPreferenceContainer.GetChild(); JobPreferenceContainer.RemoveChild(characterIcon); - GameMain.Client.CharacterInfo.CreateIcon(new RectTransform(new Vector2(1.0f, 0.4f), JobPreferenceContainer.RectTransform, Anchor.TopCenter) { RelativeOffset = new Vector2(0.0f, 0.025f) }); + characterInfo.CreateIcon(new RectTransform(new Vector2(1.0f, 0.4f), JobPreferenceContainer.RectTransform, Anchor.TopCenter) { RelativeOffset = new Vector2(0.0f, 0.025f) }); GUIListBox listBox = JobPreferenceContainer.GetChild(); /*foreach (Sprite sprite in jobPreferenceSprites) { sprite.Remove(); } @@ -3231,7 +3283,7 @@ namespace Barotrauma variantButton.OnClicked = (btn, obj) => { btn.Parent.UserData = obj; - UpdateJobPreferences(); + UpdateJobPreferences(characterInfo); return false; }; } @@ -3340,7 +3392,7 @@ namespace Barotrauma //matching sub found and already selected, all good if (sub != null) { - if (subList == this.subList) + if (subList == this.SubList) { CreateSubPreview(sub); } @@ -3533,6 +3585,249 @@ namespace Barotrauma } } + private List visibilityMenuOrder = new List(); + private void CreateSubmarineVisibilityMenu() + { + var messageBox = new GUIMessageBox(TextManager.Get("SubmarineVisibility"), "", + buttons: Array.Empty(), + relativeSize: new Vector2(0.75f, 0.75f)); + messageBox.Content.ChildAnchor = Anchor.TopCenter; + var columns = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.9f), messageBox.Content.RectTransform), isHorizontal: true); + + GUILayoutGroup createColumn(float width) + => new GUILayoutGroup(new RectTransform(new Vector2(width, 1.0f), columns.RectTransform)) + { Stretch = true }; + + GUIListBox createColumnListBox(string labelTag) + { + var column = createColumn(0.45f); + var label = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.1f), column.RectTransform), + TextManager.Get(labelTag), textAlignment: Alignment.Center); + return new GUIListBox(new RectTransform(new Vector2(1.0f, 0.9f), column.RectTransform)) + { + CurrentSelectMode = GUIListBox.SelectMode.RequireShiftToSelectMultiple, + CurrentDragMode = GUIListBox.DragMode.DragOutsideBox, + HideDraggedElement = true + }; + } + + void handleDraggingAcrossLists(GUIListBox from, GUIListBox to) + { + //TODO: put this in a static class once modding-refactor gets merged + + if (to.Rect.Contains(PlayerInput.MousePosition) && from.DraggedElement != null) + { + //move the dragged elements to the index determined previously + var draggedElement = from.DraggedElement; + + var selected = from.AllSelected.ToList(); + selected.Sort((a, b) => from.Content.GetChildIndex(a) - from.Content.GetChildIndex(b)); + + float oldCount = to.Content.CountChildren; + float newCount = oldCount + selected.Count; + + var offset = draggedElement.RectTransform.AbsoluteOffset; + offset += from.Content.Rect.Location; + offset -= to.Content.Rect.Location; + + for (int i = 0; i < selected.Count; i++) + { + var c = selected[i]; + c.Parent.RemoveChild(c); + c.RectTransform.Parent = to.Content.RectTransform; + c.RectTransform.RepositionChildInHierarchy((int)oldCount+i); + } + + from.DraggedElement = null; + from.Deselect(); + from.RecalculateChildren(); + from.RectTransform.RecalculateScale(true); + to.RecalculateChildren(); + to.RectTransform.RecalculateScale(true); + to.Select(selected); + + //recalculate the dragged element's offset so it doesn't jump around + draggedElement.RectTransform.AbsoluteOffset = offset; + + to.DraggedElement = draggedElement; + + to.BarScroll = to.BarScroll * (oldCount / newCount); + } + } + + var visibleSubsList = createColumnListBox("VisibleSubmarines"); + var centerColumn = createColumn(0.1f); + + void centerSpacing() + { + new GUIFrame(new RectTransform(new Vector2(1.0f, 0.4f), centerColumn.RectTransform), style: null); + } + + GUIButton centerButton(string style) + => new GUIButton( + new RectTransform(new Vector2(1.0f, 0.1f), centerColumn.RectTransform), + style: style); + + var hiddenSubsList = createColumnListBox("HiddenSubmarines"); + + void addSubToList(SubmarineInfo sub, GUIListBox list) + { + var modFrame = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.08f), list.Content.RectTransform), + style: "ListBoxElement") + { + UserData = sub + }; + + var frameContent = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.9f), modFrame.RectTransform, Anchor.Center), isHorizontal: true, childAnchor: Anchor.CenterLeft) + { + Stretch = true, + RelativeSpacing = 0.02f + }; + + var dragIndicator = new GUIButton(new RectTransform(new Vector2(0.1f, 0.5f), frameContent.RectTransform, scaleBasis: ScaleBasis.BothHeight), + style: "GUIDragIndicator") + { + CanBeFocused = false + }; + + var subName = new GUITextBlock(new RectTransform(new Vector2(0.6f, 1.0f), frameContent.RectTransform), + text: sub.Name) + { + CanBeFocused = false + }; + + CreateSubmarineClassText( + frameContent, + sub, + subName, + list.Content); + } + + foreach (var sub in GameMain.Client.ServerSubmarines + .OrderBy(s => visibilityMenuOrder.Contains(s)) + .ThenBy(s => visibilityMenuOrder.IndexOf(s))) + { + addSubToList(sub, + GameMain.Client.ServerSettings.HiddenSubs.Contains(sub.Name) ? hiddenSubsList : visibleSubsList); + } + + void onRearranged(GUIListBox listBox, object userData) + { + visibilityMenuOrder.Clear(); + visibilityMenuOrder.AddRange(visibleSubsList.Content.Children.Select(c => c.UserData as SubmarineInfo)); + visibilityMenuOrder.AddRange(hiddenSubsList.Content.Children.Select(c => c.UserData as SubmarineInfo)); + } + + visibleSubsList.OnRearranged = onRearranged; + hiddenSubsList.OnRearranged = onRearranged; + + void swapListItems(GUIListBox from, GUIListBox to) + { + to.Deselect(); + var selected = from.AllSelected.ToArray(); + int lastIndex = from.Content.GetChildIndex(selected.LastOrDefault()); + int nextIndex = lastIndex + 1; + GUIComponent nextComponent = null; + if (lastIndex >= 0 && nextIndex < from.Content.CountChildren) + { + nextComponent = from.Content.GetChild(nextIndex); + } + foreach (var frame in selected) + { + frame.Parent.RemoveChild(frame); + frame.RectTransform.Parent = to.Content.RectTransform; + } + from.RecalculateChildren(); + from.RectTransform.RecalculateScale(true); + to.RecalculateChildren(); + to.RectTransform.RecalculateScale(true); + to.Select(selected); + if (nextComponent != null) { from.Select(nextComponent.ToEnumerable()); } + } + + centerSpacing(); + var visibleToHidden = centerButton("GUIButtonToggleRight"); + visibleToHidden.OnClicked = (button, o) => + { + swapListItems(visibleSubsList, hiddenSubsList); + return false; + }; + var hiddenToVisible = centerButton("GUIButtonToggleLeft"); + hiddenToVisible.OnClicked = (button, o) => + { + swapListItems(hiddenSubsList, visibleSubsList); + return false; + }; + centerSpacing(); + + var buttonLayout + = new GUILayoutGroup(new RectTransform(new Vector2(0.7f, 0.1f), messageBox.Content.RectTransform), + isHorizontal: true) + { + RelativeSpacing = 0.01f + }; + var cancelButton = new GUIButton(new RectTransform(new Vector2(0.5f, 1.0f), buttonLayout.RectTransform), + TextManager.Get("Cancel")) + { + OnClicked = (button, o) => + { + messageBox.Close(); + return false; + } + }; + var okButton = new GUIButton(new RectTransform(new Vector2(0.5f, 1.0f), buttonLayout.RectTransform), + TextManager.Get("OK")) + { + OnClicked = (button, o) => + { + var hiddenSubs = GameMain.Client.ServerSettings.HiddenSubs; + hiddenSubs.Clear(); + hiddenSubs.UnionWith(hiddenSubsList.Content.Children.Select(c => (c.UserData as SubmarineInfo).Name)); + GameMain.Client.ServerSettings.ClientAdminWrite(ServerSettings.NetFlags.HiddenSubs); + messageBox.Close(); + return false; + } + }; + + new GUICustomComponent(new RectTransform(Vector2.Zero, messageBox.RectTransform), + onUpdate: (f, component) => + { + handleDraggingAcrossLists(visibleSubsList, hiddenSubsList); + handleDraggingAcrossLists(hiddenSubsList, visibleSubsList); + if (PlayerInput.PrimaryMouseButtonClicked() + && !GUI.IsMouseOn(visibleToHidden) + && !GUI.IsMouseOn(hiddenToVisible)) + { + if (!GUI.IsMouseOn(hiddenSubsList) + || !hiddenSubsList.Content.IsParentOf(GUI.MouseOn)) + { + hiddenSubsList.Deselect(); + } + + if (!GUI.IsMouseOn(visibleSubsList) + || !visibleSubsList.Content.IsParentOf(GUI.MouseOn)) + { + visibleSubsList.Deselect(); + } + } + }, + onDraw: (spriteBatch, component) => + { + visibleSubsList.DraggedElement?.DrawManually(spriteBatch, true, true); + hiddenSubsList.DraggedElement?.DrawManually(spriteBatch, true, true); + }); + } + + public void UpdateSubVisibility() + { + foreach (GUIComponent child in SubList.Content.Children) + { + if (!(child.UserData is SubmarineInfo sub)) { continue; } + child.Visible = !GameMain.Client.ServerSettings.HiddenSubs.Contains(sub.Name) + && (string.IsNullOrEmpty(subSearchBox.Text) || sub.DisplayName.Contains(subSearchBox.Text, StringComparison.OrdinalIgnoreCase)); + } + } + public void OnRoundEnded() { CampaignCharacterDiscarded = false; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/Screen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/Screen.cs index a966ab977..6d2513216 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/Screen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/Screen.cs @@ -43,7 +43,7 @@ namespace Barotrauma CoroutineManager.StartCoroutine(UpdateColorFade(from, to, duration)); } - private IEnumerable UpdateColorFade(Color from, Color to, float duration) + private IEnumerable UpdateColorFade(Color from, Color to, float duration) { while (Selected != this) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs index 4430efdb1..0d07b20c1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen.cs @@ -578,6 +578,7 @@ namespace Barotrauma RecalculateHolder(); } serverInfo.CreatePreviewWindow(serverPreview.Content); + serverPreview.ForceLayoutRecalculation(); btn.Children.ForEach(c => c.SpriteEffects = serverPreviewContainer.Visible ? SpriteEffects.None : SpriteEffects.FlipHorizontally); } return true; @@ -1715,7 +1716,7 @@ namespace Barotrauma CoroutineManager.StartCoroutine(WaitForRefresh()); } - private IEnumerable WaitForRefresh() + private IEnumerable WaitForRefresh() { waitingForRefresh = true; if (refreshDisableTimer > DateTime.Now) @@ -2058,7 +2059,7 @@ namespace Barotrauma FilterServers(); } - private IEnumerable EstimateLobbyPing(ServerInfo serverInfo, GUITextBlock serverPingText) + private IEnumerable EstimateLobbyPing(ServerInfo serverInfo, GUITextBlock serverPingText) { while (!steamPingInfoReady) { @@ -2096,7 +2097,7 @@ namespace Barotrauma waitingForRefresh = false; } - private IEnumerable SendMasterServerRequest() + private IEnumerable SendMasterServerRequest() { RestClient client = null; try @@ -2271,7 +2272,7 @@ namespace Barotrauma return true; } - private IEnumerable ConnectToServer(string endpoint, string serverName) + private IEnumerable ConnectToServer(string endpoint, string serverName) { string serverIP = null; UInt64 serverSteamID = SteamManager.SteamIDStringToUInt64(endpoint); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs index 350ff7ac5..9da115082 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/SteamWorkshopScreen.cs @@ -304,7 +304,7 @@ namespace Barotrauma float subscribePollAdditionalWait = 0.0f; - private IEnumerable PollSubscribedItems() + private IEnumerable PollSubscribedItems() { if (!SteamManager.IsInitialized) { yield return CoroutineStatus.Success; } @@ -364,7 +364,7 @@ namespace Barotrauma } } - public IEnumerable RefreshDownloadState() + public IEnumerable RefreshDownloadState() { bool isDownloading = true; while (true) @@ -831,7 +831,7 @@ namespace Barotrauma } } - private IEnumerable WaitForItemPreviewDownloaded(Steamworks.Ugc.Item? item, GUIListBox listBox, string previewImagePath) + private IEnumerable WaitForItemPreviewDownloaded(Steamworks.Ugc.Item? item, GUIListBox listBox, string previewImagePath) { while (true) { @@ -1835,7 +1835,7 @@ namespace Barotrauma } - private IEnumerable WaitForPublish(SteamManager.WorkshopPublishStatus workshopPublishStatus) + private IEnumerable WaitForPublish(SteamManager.WorkshopPublishStatus workshopPublishStatus) { var item = workshopPublishStatus.Item; var coroutine = workshopPublishStatus.Coroutine; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs index 76be7c17f..1550a1afa 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs @@ -369,11 +369,20 @@ namespace Barotrauma { ToolTip = TextManager.Get("AddSubToolTip") }; + + List<(string Name, SubmarineInfo Sub)> subs = new List<(string Name, SubmarineInfo Sub)>(); + foreach (SubmarineInfo sub in SubmarineInfo.SavedSubmarines) { if (sub.Type != SubmarineType.Player) { continue; } - linkedSubBox.AddItem(sub.Name, sub); + subs.Add((sub.Name, sub)); } + + foreach (var (name, sub) in subs.OrderBy(tuple => tuple.Name)) + { + linkedSubBox.AddItem(name, sub); + } + linkedSubBox.OnSelected += SelectLinkedSub; linkedSubBox.OnDropped += (component, obj) => { @@ -1220,11 +1229,19 @@ namespace Barotrauma string downloadFolder = Path.GetFullPath(SaveUtil.SubmarineDownloadFolder); linkedSubBox.ClearChildren(); + + List<(string Name, SubmarineInfo Sub)> subs = new List<(string Name, SubmarineInfo Sub)>(); + foreach (SubmarineInfo sub in SubmarineInfo.SavedSubmarines) { if (sub.Type != SubmarineType.Player) { continue; } if (Path.GetDirectoryName(Path.GetFullPath(sub.FilePath)) == downloadFolder) { continue; } - linkedSubBox.AddItem(sub.Name, sub); + subs.Add((sub.Name, sub)); + } + + foreach (var (subName, sub) in subs.OrderBy(tuple => tuple.Name)) + { + linkedSubBox.AddItem(subName, sub); } cam.UpdateTransform(); @@ -1294,7 +1311,7 @@ namespace Barotrauma /// /// /// - private static IEnumerable AutoSaveCoroutine() + private static IEnumerable AutoSaveCoroutine() { DateTime target = DateTime.Now.AddMinutes(GameSettings.AutoSaveIntervalSeconds); DateTime tempTarget = DateTime.Now; @@ -1998,14 +2015,21 @@ namespace Barotrauma var gapPositionDropDown = new GUIDropDown(new RectTransform(new Vector2(0.5f, 1f), gapPositionGroup.RectTransform), text: "", selectMultiple: true); - Submarine.MainSub.Info?.OutpostModuleInfo?.DetermineGapPositions(Submarine.MainSub); - foreach (var gapPos in Enum.GetValues(typeof(OutpostModuleInfo.GapPosition))) + var outpostModuleInfo = Submarine.MainSub.Info?.OutpostModuleInfo; + if (outpostModuleInfo != null) { - if ((OutpostModuleInfo.GapPosition)gapPos == OutpostModuleInfo.GapPosition.None) { continue; } - gapPositionDropDown.AddItem(TextManager.Capitalize(gapPos.ToString()), gapPos); - if (Submarine.MainSub.Info?.OutpostModuleInfo?.GapPositions.HasFlag((OutpostModuleInfo.GapPosition)gapPos) ?? false) + if (outpostModuleInfo.GapPositions == OutpostModuleInfo.GapPosition.None) { - gapPositionDropDown.SelectItem(gapPos); + outpostModuleInfo.DetermineGapPositions(Submarine.MainSub); + } + foreach (var gapPos in Enum.GetValues(typeof(OutpostModuleInfo.GapPosition))) + { + if ((OutpostModuleInfo.GapPosition)gapPos == OutpostModuleInfo.GapPosition.None) { continue; } + gapPositionDropDown.AddItem(TextManager.Capitalize(gapPos.ToString()), gapPos); + if (outpostModuleInfo.GapPositions.HasFlag((OutpostModuleInfo.GapPosition)gapPos)) + { + gapPositionDropDown.SelectItem(gapPos); + } } } @@ -4774,7 +4798,7 @@ namespace Barotrauma if (dummyCharacter != null) { - dummyCharacter.AnimController.FindHull(dummyCharacter.CursorWorldPosition, false); + dummyCharacter.AnimController.FindHull(dummyCharacter.CursorWorldPosition, setSubmarine: false); foreach (Item item in dummyCharacter.Inventory.AllItems) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs index 45a3e50bf..3bdc5a04d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundChannel.cs @@ -221,7 +221,7 @@ namespace Barotrauma.Sounds { if (!MathUtils.IsValid(value)) { return; } - gain = Math.Clamp(value, 0.0f, 1.0f); + gain = Math.Max(value, 0.0f); if (ALSourceIndex < 0) { return; } @@ -525,6 +525,8 @@ namespace Barotrauma.Sounds throw new Exception("Failed to bind buffer to source (" + ALSourceIndex.ToString() + ":" + sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex) + "," + alBuffer.ToString() + "): " + debugName + ", " + Al.GetErrorString(alError)); } + SetProperties(); + Al.SourcePlay(sound.Owner.GetSourceFromIndex(Sound.SourcePoolIndex, ALSourceIndex)); alError = Al.GetError(); if (alError != Al.NoError) @@ -570,16 +572,9 @@ namespace Barotrauma.Sounds } } Sound.Owner.InitStreamThread(); + SetProperties(); } } - - this.Position = position; - this.Gain = gain; - this.FrequencyMultiplier = freqMult; - this.Looping = false; - this.Near = near; - this.Far = far; - this.Category = category; #if !DEBUG } catch @@ -594,6 +589,17 @@ namespace Barotrauma.Sounds } #endif + void SetProperties() + { + this.Position = position; + this.Gain = gain; + this.FrequencyMultiplier = freqMult; + this.Looping = false; + this.Near = near; + this.Far = far; + this.Category = category; + } + Sound.Owner.Update(); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs index 377de997b..edfccb5b1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sounds/SoundPlayer.cs @@ -147,7 +147,7 @@ namespace Barotrauma MathUtils.NearlyEqual(rangeA, rangeB); } - public static IEnumerable Init() + public static IEnumerable Init() { OverrideMusicType = null; @@ -826,7 +826,7 @@ namespace Barotrauma //find appropriate music for the current situation string currentMusicType = GetCurrentMusicType(); float currentIntensity = GameMain.GameSession?.EventManager != null ? - GameMain.GameSession.EventManager.CurrentIntensity * 100.0f : 0.0f; + GameMain.GameSession.EventManager.MusicIntensity * 100.0f : 0.0f; IEnumerable suitableMusic = GetSuitableMusicClips(currentMusicType, currentIntensity); int mainTrackIndex = 0; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Sprite/Sprite.cs b/Barotrauma/BarotraumaClient/ClientSource/Sprite/Sprite.cs index ed81e93a2..ac6b119c5 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Sprite/Sprite.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Sprite/Sprite.cs @@ -84,7 +84,7 @@ namespace Barotrauma Vector4 sourceVector = Vector4.Zero; bool temp2 = false; - int maxLoadRetries = 3; + int maxLoadRetries = File.Exists(FilePath) ? 3 : 0; for (int i = 0; i <= maxLoadRetries; i++) { try @@ -169,7 +169,8 @@ namespace Barotrauma } else { - DebugConsole.ThrowError($"Sprite \"{file}\" not found! {Environment.StackTrace.CleanupStackTrace()}"); + DebugConsole.ThrowError($"Sprite \"{file}\" not found!"); + DebugConsole.Log(Environment.StackTrace.CleanupStackTrace()); } return null; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Utils/ToolBox.cs b/Barotrauma/BarotraumaClient/ClientSource/Utils/ToolBox.cs index 327dac75a..9c9646925 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Utils/ToolBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Utils/ToolBox.cs @@ -434,130 +434,8 @@ namespace Barotrauma return Color.Lerp(gradient[(int)scaledT], gradient[(int)Math.Min(scaledT + 1, gradient.Length - 1)], (scaledT - (int)scaledT)); } - public static string WrapText(string text, float lineLength, ScalableFont font, float textScale = 1.0f, bool playerInput = false) //TODO: could integrate this into the ScalableFont class directly - { - Vector2 textSize = font.MeasureString(text); - if (textSize.X <= lineLength) { return text; } - - if (!playerInput) - { - text = text.Replace("\n", " \n "); - } - - List words = new List(); - string currWord = ""; - - for (int i = 0; i < text.Length; i++) - { - if (TextManager.IsCJK(text[i].ToString())) - { - if (currWord.Length > 0) - { - words.Add(currWord); - currWord = ""; - } - words.Add(text[i].ToString()); - } - else if (text[i] == ' ') - { - if (currWord.Length > 0) - { - words.Add(currWord); - currWord = ""; - } - words.Add(string.Empty); - } - else - { - currWord += text[i]; - } - } - if (currWord.Length > 0) - { - words.Add(currWord); - currWord = ""; - } - - StringBuilder wrappedText = new StringBuilder(); - float linePos = 0f; - Vector2 spaceSize = font.MeasureString(" ") * textScale; - for (int i = 0; i < words.Count; ++i) - { - string currentWord = words[i]; - if (currentWord.Length == 0) - { - // space - currentWord = " "; - } - else if (string.IsNullOrWhiteSpace(currentWord) && currentWord != "\n") - { - continue; - } - - Vector2 size = words[i].Length == 0 ? spaceSize : font.MeasureString(currentWord) * textScale; - - if (size.X > lineLength) - { - float splitSize = 0.0f; - List splitWord = new List() { string.Empty }; - int k = 0; - - for (int j = 0; j < currentWord.Length; j++) - { - splitWord[k] += currentWord[j]; - splitSize += (font.MeasureString(currentWord[j].ToString()) * textScale).X; - - if (splitSize + linePos > lineLength) - { - linePos = splitSize = 0.0f; - splitWord[k] = splitWord[k].Remove(splitWord[k].Length - 1) + "\n"; - if (splitWord[k].Length <= 1) { break; } - j--; - splitWord.Add(string.Empty); - k++; - } - } - - for (int j = 0; j < splitWord.Count; j++) - { - wrappedText.Append(splitWord[j]); - } - - linePos = splitSize; - } - else - { - if (linePos + size.X < lineLength) - { - wrappedText.Append(currentWord); - if (currentWord == "\n") - { - linePos = 0.0f; - } - else - { - linePos += size.X; - } - } - else - { - wrappedText.Append("\n"); - wrappedText.Append(currentWord); - - linePos = size.X; - } - } - } - - if (!playerInput) - { - return wrappedText.ToString().Replace(" \n ", "\n"); - } - else - { - return wrappedText.ToString(); - } - } + public static string WrapText(string text, float lineLength, ScalableFont font, float textScale = 1.0f) + => font.WrapText(text, lineLength / textScale); public static void ParseConnectCommand(string[] args, out string name, out string endpoint, out UInt64 lobbyId) { diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj index 5b8084010..26d363261 100644 --- a/Barotrauma/BarotraumaClient/LinuxClient.csproj +++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.15.13.0 + 0.15.15.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 Barotrauma @@ -122,7 +122,7 @@ - + diff --git a/Barotrauma/BarotraumaClient/MacClient.csproj b/Barotrauma/BarotraumaClient/MacClient.csproj index 0eda78d04..ee44c8626 100644 --- a/Barotrauma/BarotraumaClient/MacClient.csproj +++ b/Barotrauma/BarotraumaClient/MacClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.15.13.0 + 0.15.15.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 Barotrauma @@ -123,7 +123,7 @@ - + diff --git a/Barotrauma/BarotraumaClient/WindowsClient.csproj b/Barotrauma/BarotraumaClient/WindowsClient.csproj index a09d8c2d7..cb3312d5f 100644 --- a/Barotrauma/BarotraumaClient/WindowsClient.csproj +++ b/Barotrauma/BarotraumaClient/WindowsClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.15.13.0 + 0.15.15.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 Barotrauma @@ -126,7 +126,7 @@ - + diff --git a/Barotrauma/BarotraumaServer/LinuxServer.csproj b/Barotrauma/BarotraumaServer/LinuxServer.csproj index e0eefab46..83c32f101 100644 --- a/Barotrauma/BarotraumaServer/LinuxServer.csproj +++ b/Barotrauma/BarotraumaServer/LinuxServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.15.13.0 + 0.15.15.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaServer/MacServer.csproj b/Barotrauma/BarotraumaServer/MacServer.csproj index 44c6758d0..1e7744b49 100644 --- a/Barotrauma/BarotraumaServer/MacServer.csproj +++ b/Barotrauma/BarotraumaServer/MacServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.15.13.0 + 0.15.15.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs b/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs index c0998cfbc..8a6511484 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Characters/Character.cs @@ -60,5 +60,10 @@ namespace Barotrauma { GameMain.NetworkMember.CreateEntityEvent(this, new object[] { NetEntityEvent.Type.UpdateMoney }); } + + partial void OnTalentGiven(string talentIdentifier) + { + GameServer.Log($"{GameServer.CharacterLogName(this)} has gained the talent '{talentIdentifier}'", ServerLog.MessageType.Talent); + } } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterInfo.cs index 81abdaf26..91e38cf04 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterInfo.cs @@ -29,6 +29,7 @@ namespace Barotrauma if (Character == null || Character.Removed) { return; } if (prevAmount != newAmount) { + GameServer.Log($"{GameServer.CharacterLogName(Character)} has gained {newAmount - prevAmount} experience ({prevAmount} -> {newAmount})", ServerLog.MessageType.Talent); GameMain.NetworkMember.CreateEntityEvent(Character, new object[] { NetEntityEvent.Type.UpdateExperience }); } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs index ae7c4e523..80b8a45b2 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs @@ -98,7 +98,7 @@ namespace Barotrauma { ColoredText msg = queuedMessages.Dequeue(); Messages.Add(msg); - if (GameSettings.SaveDebugConsoleLogs) + if (GameSettings.SaveDebugConsoleLogs || GameSettings.VerboseLogging) { unsavedMessages.Add(msg); if (unsavedMessages.Count >= messagesPerFile) @@ -281,7 +281,7 @@ namespace Barotrauma { var msg = queuedMessages.Dequeue(); Messages.Add(msg); - if (GameSettings.SaveDebugConsoleLogs) + if (GameSettings.SaveDebugConsoleLogs || GameSettings.VerboseLogging) { unsavedMessages.Add(msg); if (unsavedMessages.Count >= messagesPerFile) @@ -1315,7 +1315,7 @@ namespace Barotrauma commands.Add(new Command("sub|submarine", "submarine [name]: Select the submarine for the next round.", (string[] args) => { - SubmarineInfo sub = GameMain.NetLobbyScreen.GetSubList().Find(s => s.Name.ToLower() == string.Join(" ", args).ToLower()); + SubmarineInfo sub = GameMain.NetLobbyScreen.GetSubList().Find(s => s.Name.Equals(string.Join(" ", args), StringComparison.OrdinalIgnoreCase)); if (sub != null) { @@ -1377,7 +1377,7 @@ namespace Barotrauma commands.Add(new Command("endgame|endround|end", "end/endgame/endround: End the current round.", (string[] args) => { - if (Screen.Selected == GameMain.NetLobbyScreen) return; + if (Screen.Selected == GameMain.NetLobbyScreen) { return; } GameMain.Server.EndGame(); })); @@ -1399,11 +1399,18 @@ namespace Barotrauma commands.Add(new Command("eventdata", "", (string[] args) => { - if (args.Length == 0) return; - ServerEntityEvent ev = GameMain.Server.EntityEventManager.Events[Convert.ToUInt16(args[0])]; + if (args.Length == 0) { return; } + if (!UInt16.TryParse(args[0], NumberStyles.Any, CultureInfo.InvariantCulture, out ushort eventId)) { return; } + ServerEntityEvent ev = GameMain.Server.EntityEventManager.Events.Find(ev => ev.ID == eventId); if (ev != null) { - NewMessage(ev.StackTrace.CleanupStackTrace(), Color.Lime); + string entityData = ""; + if (ev.Entity is { ID: var entityId, Removed: var removed, IdFreed: var idFreed }) + { + entityData = $"Entity ID: {entityId}; Entity removed: {removed}; Entity ID freed: {idFreed}"; + } + NewMessage($"EventData {eventId}\n{entityData}", Color.Lime); + //NewMessage(ev.StackTrace.CleanupStackTrace(), Color.Lime); } })); @@ -1578,16 +1585,13 @@ namespace Barotrauma (Client client, Vector2 cursorWorldPos, string[] args) => { Character tpCharacter = (args.Length == 0) ? client.Character : FindMatchingCharacter(args, false); - if (tpCharacter == null) return; - - //var cam = GameMain.GameScreen.Cam; - tpCharacter.AnimController.CurrentHull = null; - tpCharacter.Submarine = null; - tpCharacter.AnimController.SetPosition(ConvertUnits.ToSimUnits(cursorWorldPos)); - tpCharacter.AnimController.FindHull(cursorWorldPos, true); - if (tpCharacter.AIController?.SteeringManager is IndoorsSteeringManager pathSteering) + if (tpCharacter != null) { - pathSteering.ResetPath(); + tpCharacter.TeleportTo(cursorWorldPos); + if (tpCharacter.AIController?.SteeringManager is IndoorsSteeringManager pathSteering) + { + pathSteering.ResetPath(); + } } } ); @@ -1779,7 +1783,7 @@ namespace Barotrauma List talentTrees = new List(); if (args.Length == 0 || args[0].Equals("all", StringComparison.OrdinalIgnoreCase)) { - talentTrees.AddRange(TalentTree.JobTalentTrees.Values); + talentTrees.AddRange(TalentTree.JobTalentTrees); } else { @@ -2370,6 +2374,16 @@ namespace Barotrauma GameMain.Server.CreateEntityEvent(wall); } })); + commands.Add(new Command("stallfiletransfers", "stallfiletransfers [seconds]: A debug command that stalls each file transfer packet by the specified duration.", (string[] args) => + { + float seconds = 0.0f; + if (args.Length > 0) + { + float.TryParse(args[0], out seconds); + } + GameMain.Server.FileSender.StallPacketsTime = seconds; + NewMessage("Set file transfer stall time to " + seconds); + })); #endif } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/CombatMission.cs b/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/CombatMission.cs index 76e83ca8b..5ac067bf3 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/CombatMission.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Events/Missions/CombatMission.cs @@ -1,5 +1,4 @@ -using Barotrauma.Networking; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; namespace Barotrauma @@ -8,6 +7,8 @@ namespace Barotrauma { private readonly bool[] teamDead = new bool[2]; + private List[] crews; + private bool initialized = false; public override string Description diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs index ddaefc903..e0f044392 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs @@ -417,7 +417,7 @@ namespace Barotrauma SaveUtil.CleanUnnecessarySaveFiles(); - if (GameSettings.SaveDebugConsoleLogs) { DebugConsole.SaveLogs(); } + if (GameSettings.SaveDebugConsoleLogs || GameSettings.VerboseLogging) { DebugConsole.SaveLogs(); } if (GameSettings.SendUserStatistics) { GameAnalytics.OnQuit(); } MainThread = null; @@ -430,7 +430,7 @@ namespace Barotrauma stopwatch?.Start(); } - public CoroutineHandle ShowLoading(IEnumerable loader, bool waitKeyHit = true) + public CoroutineHandle ShowLoading(IEnumerable loader, bool waitKeyHit = true) { return CoroutineManager.StartCoroutine(loader); } diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs b/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs index d3c2fbed0..30853fb52 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs @@ -264,7 +264,7 @@ namespace Barotrauma if (c.Inventory == null) { continue; } if (Level.Loaded.Type == LevelData.LevelType.Outpost && c.Submarine != Level.Loaded.StartOutpost) { - Map.CurrentLocation.RegisterTakenItems(c.Inventory.AllItems.Where(it => it.SpawnedInOutpost && it.OriginalModuleIndex > 0)); + Map.CurrentLocation.RegisterTakenItems(c.Inventory.AllItems.Where(it => it.SpawnedInCurrentOutpost && it.OriginalModuleIndex > 0)); } if (c.Info != null && c.IsBot) @@ -281,7 +281,7 @@ namespace Barotrauma } } - protected override IEnumerable DoLevelTransition(TransitionType transitionType, LevelData newLevel, Submarine leavingSub, bool mirror, List traitorResults) + protected override IEnumerable DoLevelTransition(TransitionType transitionType, LevelData newLevel, Submarine leavingSub, bool mirror, List traitorResults) { lastUpdateID++; @@ -365,7 +365,7 @@ namespace Barotrauma else { PendingSubmarineSwitch = null; - GameMain.Server.EndGame(TransitionType.None); + GameMain.Server.EndGame(TransitionType.None, wasSaved: false); LoadCampaign(GameMain.GameSession.SavePath); LastSaveID++; LastUpdateID++; @@ -376,7 +376,7 @@ namespace Barotrauma //-------------------------------------- - GameMain.Server.EndGame(transitionType); + GameMain.Server.EndGame(transitionType, wasSaved: true); ForceMapUI = false; diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/ItemLabel.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/ItemLabel.cs index 02bcb9320..be9d09f71 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/ItemLabel.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/ItemLabel.cs @@ -58,7 +58,7 @@ namespace Barotrauma.Items.Components } } - private IEnumerable SendStateAfterDelay() + private IEnumerable SendStateAfterDelay() { while (sendStateTimer > 0.0f) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/LightComponent.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/LightComponent.cs index d7331f33b..53d331b9c 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/LightComponent.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/LightComponent.cs @@ -18,7 +18,7 @@ namespace Barotrauma.Items.Components } } - private IEnumerable SendStateAfterDelay() + private IEnumerable SendStateAfterDelay() { while (sendStateTimer > 0.0f) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Deconstructor.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Deconstructor.cs index 49db8e5ba..420b4c685 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Deconstructor.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Deconstructor.cs @@ -1,6 +1,4 @@ using Barotrauma.Networking; -using System.Linq; -using System.Xml.Linq; namespace Barotrauma.Items.Components { @@ -20,6 +18,7 @@ namespace Barotrauma.Items.Components public void ServerWrite(IWriteMessage msg, Client c, object[] extraData = null) { + msg.Write(user?.ID ?? 0); msg.Write(IsActive); msg.Write(progressTimer); } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Reactor.cs index dc3a1d4ae..61dbbd7e5 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Machines/Reactor.cs @@ -5,6 +5,8 @@ namespace Barotrauma.Items.Components { partial class Reactor { + const float NetworkUpdateIntervalLow = 10.0f; + private Client blameOnBroken; private float? nextServerLogWriteTime; @@ -17,19 +19,19 @@ namespace Barotrauma.Items.Components float fissionRate = msg.ReadRangedSingle(0.0f, 100.0f, 8); float turbineOutput = msg.ReadRangedSingle(0.0f, 100.0f, 8); - if (!item.CanClientAccess(c)) return; + if (!item.CanClientAccess(c)) { return; } IsActive = true; if (!autoTemp && AutoTemp) blameOnBroken = c; - if (turbineOutput < targetTurbineOutput) blameOnBroken = c; - if (fissionRate > targetFissionRate) blameOnBroken = c; + if (turbineOutput < TargetTurbineOutput) blameOnBroken = c; + if (fissionRate > TargetFissionRate) blameOnBroken = c; if (!_powerOn && powerOn) blameOnBroken = c; AutoTemp = autoTemp; _powerOn = powerOn; - targetFissionRate = fissionRate; - targetTurbineOutput = turbineOutput; + TargetFissionRate = fissionRate; + TargetTurbineOutput = turbineOutput; LastUser = c.Character; if (nextServerLogWriteTime == null) @@ -46,8 +48,8 @@ namespace Barotrauma.Items.Components msg.Write(autoTemp); msg.Write(_powerOn); msg.WriteRangedSingle(temperature, 0.0f, 100.0f, 8); - msg.WriteRangedSingle(targetFissionRate, 0.0f, 100.0f, 8); - msg.WriteRangedSingle(targetTurbineOutput, 0.0f, 100.0f, 8); + msg.WriteRangedSingle(TargetFissionRate, 0.0f, 100.0f, 8); + msg.WriteRangedSingle(TargetTurbineOutput, 0.0f, 100.0f, 8); msg.WriteRangedSingle(degreeOfSuccess, 0.0f, 1.0f, 8); } } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/MemoryComponent.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/MemoryComponent.cs index 39297e684..8a093a7d5 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/MemoryComponent.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/MemoryComponent.cs @@ -18,7 +18,7 @@ namespace Barotrauma.Items.Components } } - private IEnumerable SendStateAfterDelay() + private IEnumerable SendStateAfterDelay() { while (sendStateTimer > 0.0f) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/Terminal.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/Terminal.cs index 517f51201..cbd3638ca 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/Terminal.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/Signal/Terminal.cs @@ -1,6 +1,7 @@ using Barotrauma.Networking; using System.Collections.Generic; using System.Linq; +using Microsoft.Xna.Framework; namespace Barotrauma.Items.Components { @@ -19,17 +20,17 @@ namespace Barotrauma.Items.Components GameServer.Log(GameServer.CharacterLogName(c.Character) + " entered \"" + newOutputValue + "\" on " + item.Name, ServerLog.MessageType.ItemInteraction); OutputValue = newOutputValue; - ShowOnDisplay(newOutputValue, addToHistory: true); + ShowOnDisplay(newOutputValue, addToHistory: true, TextColor); item.SendSignal(newOutputValue, "signal_out"); item.CreateServerEvent(this); } } - partial void ShowOnDisplay(string input, bool addToHistory) + partial void ShowOnDisplay(string input, bool addToHistory, Color color) { if (addToHistory) { - messageHistory.Add(input); + messageHistory.Add(new TerminalMessage(input, color)); while (messageHistory.Count > MaxMessages) { messageHistory.RemoveAt(0); @@ -41,7 +42,7 @@ namespace Barotrauma.Items.Components { //split too long messages to multiple parts int msgIndex = 0; - foreach (string str in messageHistory) + foreach (var (str, _) in messageHistory) { string msgToSend = str; if (string.IsNullOrEmpty(msgToSend)) diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/TriggerComponent.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/TriggerComponent.cs new file mode 100644 index 000000000..2ebea696e --- /dev/null +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/TriggerComponent.cs @@ -0,0 +1,12 @@ +using Barotrauma.Networking; + +namespace Barotrauma.Items.Components +{ + partial class TriggerComponent : ItemComponent, IServerSerializable + { + public void ServerWrite(IWriteMessage msg, Client c, object[] extraData = null) + { + msg.WriteRangedSingle(CurrentForceFluctuation, 0.0f, 1.0f, 8); + } + } +} diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs index c7b6eb206..f936f258b 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs @@ -280,7 +280,7 @@ namespace Barotrauma } msg.Write(body == null ? (byte)0 : (byte)body.BodyType); - msg.Write(SpawnedInOutpost); + msg.Write(SpawnedInCurrentOutpost); msg.Write(AllowStealing); msg.WriteRangedInteger(Quality, 0, Items.Components.Quality.MaxQuality); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Map/Hull.cs b/Barotrauma/BarotraumaServer/ServerSource/Map/Hull.cs index e7744bf45..dd99114fd 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Map/Hull.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Map/Hull.cs @@ -103,7 +103,7 @@ namespace Barotrauma return; } - message.Write(false); + message.Write(false); //not a ballast flora update message.WriteRangedSingle(MathHelper.Clamp(waterVolume / Volume, 0.0f, 1.5f), 0.0f, 1.5f, 8); message.WriteRangedSingle(MathHelper.Clamp(OxygenPercentage, 0.0f, 100.0f), 0.0f, 100.0f, 8); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs index cfb20d850..c0ee6722f 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs @@ -133,12 +133,14 @@ namespace Barotrauma.Networking public static bool IsValidName(string name, ServerSettings serverSettings) { + if (string.IsNullOrWhiteSpace(name)) { return false; } + char[] disallowedChars = new char[] { ';', ',', '<', '>', '/', '\\', '[', ']', '"', '?' }; - if (name.Any(c => disallowedChars.Contains(c))) return false; + if (name.Any(c => disallowedChars.Contains(c))) { return false; } foreach (char character in name) { - if (!serverSettings.AllowedClientNameChars.Any(charRange => (int)character >= charRange.First && (int)character <= charRange.Second)) return false; + if (!serverSettings.AllowedClientNameChars.Any(charRange => (int)character >= charRange.First && (int)character <= charRange.Second)) { return false; } } return true; diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/FileTransfer/FileSender.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/FileTransfer/FileSender.cs index 020725453..ea78a0062 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/FileTransfer/FileSender.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/FileTransfer/FileSender.cs @@ -108,6 +108,10 @@ namespace Barotrauma.Networking private readonly ServerPeer peer; +#if DEBUG + public float StallPacketsTime { get; set; } +#endif + public List ActiveTransfers { get { return activeTransfers; } @@ -264,6 +268,9 @@ namespace Barotrauma.Networking } peer.Send(message, transfer.Connection, DeliveryMethod.Unreliable); +#if DEBUG + transfer.WaitTimer = Math.Max(transfer.WaitTimer, StallPacketsTime); +#endif } catch (Exception e) diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs index 4425cbc2d..d374ae874 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs @@ -75,6 +75,11 @@ namespace Barotrauma.Networking private readonly ServerEntityEventManager entityEventManager; private FileSender fileSender; + + public FileSender FileSender + { + get { return fileSender; } + } #if DEBUG public void PrintSenderTransters() { @@ -139,7 +144,7 @@ namespace Barotrauma.Networking CoroutineManager.StartCoroutine(StartServer(isPublic)); } - private IEnumerable StartServer(bool isPublic) + private IEnumerable StartServer(bool isPublic) { bool error = false; try @@ -391,7 +396,7 @@ namespace Barotrauma.Networking character.KillDisconnectedTimer += deltaTime; character.SetStun(1.0f); - Client owner = connectedClients.Find(c => c.EndpointMatches(character.OwnerClientEndPoint)); + Client owner = connectedClients.Find(c => (c.Character == null || c.Character == character) && c.EndpointMatches(character.OwnerClientEndPoint)); if ((OwnerConnection == null || owner?.Connection != OwnerConnection) && character.KillDisconnectedTimer > serverSettings.KillDisconnectedTime) { @@ -486,7 +491,7 @@ namespace Barotrauma.Networking else if (isCrewDead && (GameMain.GameSession?.GameMode is CampaignMode)) { #if !DEBUG - endRoundDelay = 1.0f; + endRoundDelay = 2.0f; endRoundTimer += deltaTime; #endif } @@ -517,7 +522,7 @@ namespace Barotrauma.Networking { Log("Ending round (no living players left)", ServerLog.MessageType.ServerMessage); } - EndGame(); + EndGame(wasSaved: false); return; } } @@ -896,7 +901,7 @@ namespace Barotrauma.Networking if (c.Connection == OwnerConnection) { SendDirectChatMessage(errorStr, c, ChatMessageType.MessageBox); - EndGame(); + EndGame(wasSaved: false); } else { @@ -989,8 +994,11 @@ namespace Barotrauma.Networking public override void CreateEntityEvent(INetSerializable entity, object[] extraData = null) { - if (!(entity is IServerSerializable)) throw new InvalidCastException("entity is not IServerSerializable"); - entityEventManager.CreateEvent(entity as IServerSerializable, extraData); + if (!(entity is IServerSerializable serverSerializable)) + { + throw new InvalidCastException($"Entity is not {nameof(IServerSerializable)}"); + } + entityEventManager.CreateEvent(serverSerializable, extraData); } private byte GetNewClientID() @@ -1129,6 +1137,8 @@ namespace Barotrauma.Networking lastRecvEntityEventID = (UInt16)(c.FirstNewEventID - 1); c.LastRecvEntityEventID = lastRecvEntityEventID; DebugConsole.Log("Finished midround syncing " + c.Name + " - switching from ID " + prevID + " to " + c.LastRecvEntityEventID); + //notify the client of the state of the respawn manager (so they show the respawn prompt if needed) + if (respawnManager != null) { CreateEntityEvent(respawnManager); } } else { @@ -1315,18 +1325,23 @@ namespace Barotrauma.Networking break; case ClientPermissions.ManageRound: bool end = inc.ReadBoolean(); + bool save = inc.ReadBoolean(); if (end) { if (gameStarted) { Log("Client \"" + GameServer.ClientLogName(sender) + "\" ended the round.", ServerLog.MessageType.ServerMessage); - if (mpCampaign != null && Level.IsLoadedOutpost) + if (mpCampaign != null && Level.IsLoadedOutpost && save) { mpCampaign.SavePlayers(); - GameMain.GameSession.SubmarineInfo = new SubmarineInfo(GameMain.GameSession.Submarine); - SaveUtil.SaveGame(GameMain.GameSession.SavePath); + GameMain.GameSession.SubmarineInfo = new SubmarineInfo(GameMain.GameSession.Submarine); + SaveUtil.SaveGame(GameMain.GameSession.SavePath); } - EndGame(); + else + { + save = false; + } + EndGame(wasSaved: save); } } else @@ -2005,9 +2020,9 @@ namespace Barotrauma.Networking if (initiatedStartGame || gameStarted) { return false; } Log("Starting a new round...", ServerLog.MessageType.ServerMessage); - SubmarineInfo selectedSub = null; SubmarineInfo selectedShuttle = GameMain.NetLobbyScreen.SelectedShuttle; + SubmarineInfo selectedSub; if (serverSettings.Voting.AllowSubVoting) { selectedSub = serverSettings.Voting.HighestVoted(VoteType.Sub, connectedClients); @@ -2037,7 +2052,7 @@ namespace Barotrauma.Networking return true; } - private IEnumerable InitiateStartGame(SubmarineInfo selectedSub, SubmarineInfo selectedShuttle, GameModePreset selectedMode) + private IEnumerable InitiateStartGame(SubmarineInfo selectedSub, SubmarineInfo selectedShuttle, GameModePreset selectedMode) { initiatedStartGame = true; @@ -2079,7 +2094,6 @@ namespace Barotrauma.Networking while (fileSender.ActiveTransfers.Count > 0 && waitForTransfersTimer > 0.0f) { waitForTransfersTimer -= CoroutineManager.UnscaledDeltaTime; - yield return CoroutineStatus.Running; } } @@ -2090,7 +2104,7 @@ namespace Barotrauma.Networking yield return CoroutineStatus.Success; } - private IEnumerable StartGame(SubmarineInfo selectedSub, SubmarineInfo selectedShuttle, GameModePreset selectedMode, CampaignSettings settings) + private IEnumerable StartGame(SubmarineInfo selectedSub, SubmarineInfo selectedShuttle, GameModePreset selectedMode, CampaignSettings settings) { entityEventManager.Clear(); @@ -2474,7 +2488,7 @@ namespace Barotrauma.Networking msg.Write(serverSettings.LockAllDefaultWires); msg.Write(serverSettings.AllowRagdollButton); msg.Write(serverSettings.UseRespawnShuttle); - msg.Write((byte)GameMain.Config.LosMode); + msg.Write((byte)serverSettings.LosMode); msg.Write(includesFinalize); msg.WritePadBits(); serverSettings.WriteMonsterEnabled(msg); @@ -2498,6 +2512,7 @@ namespace Barotrauma.Networking int nextLocationIndex = campaign.Map.Locations.FindIndex(l => l.LevelData == campaign.NextLevel); int nextConnectionIndex = campaign.Map.Connections.FindIndex(c => c.LevelData == campaign.NextLevel); msg.Write(campaign.CampaignID); + msg.Write(campaign.LastSaveID); msg.Write(nextLocationIndex); msg.Write(nextConnectionIndex); msg.Write(campaign.Map.SelectedLocationIndex); @@ -2549,7 +2564,7 @@ namespace Barotrauma.Networking GameMain.GameSession.CrewManager?.ServerWriteActiveOrders(msg); } - public void EndGame(CampaignMode.TransitionType transitionType = CampaignMode.TransitionType.None) + public void EndGame(CampaignMode.TransitionType transitionType = CampaignMode.TransitionType.None, bool wasSaved = false) { if (!gameStarted) { @@ -2610,6 +2625,7 @@ namespace Barotrauma.Networking IWriteMessage msg = new WriteOnlyMessage(); msg.Write((byte)ServerPacketHeader.ENDGAME); msg.Write((byte)transitionType); + msg.Write(wasSaved); msg.Write(endMessage); msg.Write((byte)missions.Count); foreach (Mission mission in missions) @@ -3247,7 +3263,7 @@ namespace Barotrauma.Networking ((float)EndVoteCount / (float)EndVoteMax) >= serverSettings.EndVoteRequiredRatio) { Log("Ending round by votes (" + EndVoteCount + "/" + (EndVoteMax - EndVoteCount) + ")", ServerLog.MessageType.ServerMessage); - EndGame(); + EndGame(wasSaved: false); } } @@ -3329,7 +3345,7 @@ namespace Barotrauma.Networking serverSettings.SaveClientPermissions(); } - private IEnumerable SendClientPermissionsAfterClientListSynced(Client recipient, Client client) + private IEnumerable SendClientPermissionsAfterClientListSynced(Client recipient, Client client) { DateTime timeOut = DateTime.Now + new TimeSpan(0, 0, 10); while (recipient.LastRecvClientListUpdate < LastClientListUpdateID) diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/KarmaManager.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/KarmaManager.cs index b0f520261..a0bab780e 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/KarmaManager.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/KarmaManager.cs @@ -43,6 +43,8 @@ namespace Barotrauma get; private set; } = new Dictionary(); + + public int DangerousItemsContained { get; set; } } public bool TestMode = false; @@ -575,6 +577,25 @@ namespace Barotrauma } } + public void OnItemContained(Item containedItem, Item container, Character character) + { + if (containedItem == null || container == null || character == null || character.IsTraitor) { return; } + if (container.Prefab.Identifier == "weldingtool" && containedItem.HasTag("oxygensource")) + { + var client = GameMain.Server.ConnectedClients.Find(c => c.Character == character); + if (client == null) { return; } + float amount = -DangerousItemContainKarmaDecrease; + var memory = GetClientMemory(client); + if (IsDangerousItemContainKarmaDecreaseIncremental) + { + amount *= memory.DangerousItemsContained; + } + amount = Math.Max(amount, -MaxDangerousItemContainKarmaDecrease); + AdjustKarma(character, amount, "Put an oxygen tank inside a welding tool"); + clientMemories[client].DangerousItemsContained = memory.DangerousItemsContained + 1; + } + } + private void AdjustKarma(Character target, float amount, string debugKarmaChangeReason = "") { if (target == null) { return; } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs index 95aa0e83f..1feb6ffc1 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs @@ -113,22 +113,7 @@ namespace Barotrauma.Networking public void CreateEvent(IServerSerializable entity, object[] extraData = null) { - if (entity == null || !(entity is Entity)) - { - DebugConsole.ThrowError("Can't create an entity event for " + entity + "!"); - return; - } - - if (((Entity)entity).Removed && !(entity is Level)) - { - DebugConsole.ThrowError("Can't create an entity event for " + entity + " - the entity has been removed.\n"+Environment.StackTrace.CleanupStackTrace()); - return; - } - if (((Entity)entity).IdFreed) - { - DebugConsole.ThrowError("Can't create an entity event for " + entity + " - the ID of the entity has been freed.\n"+Environment.StackTrace.CleanupStackTrace()); - return; - } + if (!ValidateEntity(entity)) { return; } var newEvent = new ServerEntityEvent(entity, (UInt16)(ID + 1)); if (extraData != null) newEvent.SetData(extraData); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs index 1d2ab8e2e..840b4e972 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/RespawnManager.cs @@ -49,6 +49,29 @@ namespace Barotrauma.Networking } } + private bool IsRespawnPromptPendingForClient(Client c) + { + if (!UseRespawnPrompt || !(GameMain.GameSession.GameMode is MultiPlayerCampaign campaign)) { return false; } + + if (!c.InGame) { return false; } + if (c.SpectateOnly && (GameMain.Server.ServerSettings.AllowSpectating || GameMain.Server.OwnerConnection == c.Connection)) { return false; } + if (c.Character != null && !c.Character.IsDead) { return false; } + + var matchingData = campaign.GetClientCharacterData(c); + if (matchingData != null && matchingData.HasSpawned) + { + if (Character.CharacterList.Any(c => c.Info == matchingData.CharacterInfo && !c.IsDead)) + { + return false; + } + else if (!c.WaitForNextRoundRespawn.HasValue) + { + return true; + } + } + return false; + } + private List GetBotsToRespawn() { if (GameMain.Server.ServerSettings.BotSpawnMode == BotSpawnMode.Normal) @@ -304,7 +327,7 @@ namespace Barotrauma.Networking c.WaitForNextRoundRespawn = null; var matchingData = campaign?.GetClientCharacterData(c); - if (matchingData != null && !matchingData.HasSpawned) + if (matchingData != null) { c.CharacterInfo = matchingData.CharacterInfo; } @@ -493,9 +516,9 @@ namespace Barotrauma.Networking if (characterInfo?.Job == null) { return; } foreach (Skill skill in characterInfo.Job.Skills) { - var skillPrefab = characterInfo.Job.Prefab.Skills.Find(s => skill.Prefab == s); + var skillPrefab = characterInfo.Job.Prefab.Skills.Find(s => skill.Identifier.Equals(s.Identifier, StringComparison.OrdinalIgnoreCase)); if (skillPrefab == null) { continue; } - skill.Level = MathHelper.Lerp(skill.Level, skillPrefab.LevelRange.X, SkillReductionOnCampaignMidroundRespawn); + skill.Level = MathHelper.Lerp(skill.Level, skillPrefab.LevelRange.Start, SkillReductionOnCampaignMidroundRespawn); } } @@ -511,9 +534,14 @@ namespace Barotrauma.Networking msg.Write((float)(ReturnTime - DateTime.Now).TotalSeconds); break; case State.Waiting: + MultiPlayerCampaign campaign = GameMain.GameSession.GameMode as MultiPlayerCampaign; + var matchingData = campaign?.GetClientCharacterData(c); + bool forceSpawnInMainSub = matchingData != null && !matchingData.HasSpawned; msg.Write((ushort)pendingRespawnCount); msg.Write((ushort)requiredRespawnCount); + msg.Write(IsRespawnPromptPendingForClient(c)); msg.Write(RespawnCountdownStarted); + msg.Write(forceSpawnInMainSub); msg.Write((float)(RespawnTime - DateTime.Now).TotalSeconds); break; case State.Returning: diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs index 5da3ddd5f..7ac6e30e5 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Xml.Linq; +using Barotrauma.Extensions; namespace Barotrauma.Networking { @@ -55,6 +56,8 @@ namespace Barotrauma.Networking WriteExtraCargo(outMsg); + WriteHiddenSubs(outMsg); + Voting.ServerWrite(outMsg); if (c.HasPermission(Networking.ClientPermissions.ManageSettings)) @@ -127,6 +130,12 @@ namespace Barotrauma.Networking changed |= Whitelist.ServerAdminRead(incMsg, c); } + if (flags.HasFlag(NetFlags.HiddenSubs)) + { + ReadHiddenSubs(incMsg); + changed |= true; + } + if (flags.HasFlag(NetFlags.Misc)) { int orBits = incMsg.ReadRangedInteger(0, (int)Barotrauma.MissionType.All) & (int)Barotrauma.MissionType.All; @@ -205,6 +214,8 @@ namespace Barotrauma.Networking doc.Root.SetAttributeValue("ServerMessage", ServerMessageText); + doc.Root.SetAttributeValue("HiddenSubs", string.Join(",", HiddenSubs)); + doc.Root.SetAttributeValue("AllowedRandomMissionTypes", string.Join(",", AllowedRandomMissionTypes)); doc.Root.SetAttributeValue("AllowedClientNameChars", string.Join(",", AllowedClientNameChars.Select(c => c.First + "-" + c.Second))); @@ -243,6 +254,11 @@ namespace Barotrauma.Networking SerializableProperties = SerializableProperty.DeserializeProperties(this, doc.Root); + if (string.IsNullOrEmpty(doc.Root.GetAttributeString("losmode", ""))) + { + LosMode = GameMain.Config.LosMode; + } + AutoRestart = doc.Root.GetAttributeBool("autorestart", false); Voting.AllowSubVoting = SubSelectionMode == SelectionMode.Vote; @@ -253,6 +269,8 @@ namespace Barotrauma.Networking GameMain.NetLobbyScreen.SetTraitorsEnabled(traitorsEnabled); + HiddenSubs.UnionWith(doc.Root.GetAttributeStringArray("HiddenSubs", Array.Empty())); + string[] defaultAllowedClientNameChars = new string[] { "32-33", @@ -337,6 +355,18 @@ namespace Barotrauma.Networking } } + public void SelectNonHiddenSubmarine() + { + if (HiddenSubs.Contains(GameMain.NetLobbyScreen.SelectedSub.Name)) + { + var candidates = GameMain.NetLobbyScreen.GetSubList().Where(s => !HiddenSubs.Contains(s.Name)).ToArray(); + if (candidates.Any()) + { + GameMain.NetLobbyScreen.SelectedSub = candidates.GetRandom(Rand.RandSync.Unsynced); + } + } + } + public void LoadClientPermissions() { ClientPermissions.Clear(); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/Voting.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/Voting.cs index 889f82de4..ec62dc818 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/Voting.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/Voting.cs @@ -155,23 +155,23 @@ namespace Barotrauma msg.Write(allowSubVoting); if (allowSubVoting) { - List> voteList = GetVoteList(VoteType.Sub, GameMain.Server.ConnectedClients); + IReadOnlyDictionary voteList = GetVoteCounts(VoteType.Sub, GameMain.Server.ConnectedClients); msg.Write((byte)voteList.Count); - foreach (Pair vote in voteList) + foreach (KeyValuePair vote in voteList) { - msg.Write((byte)vote.Second); - msg.Write(((SubmarineInfo)vote.First).Name); + msg.Write((byte)vote.Value); + msg.Write(vote.Key.Name); } } msg.Write(AllowModeVoting); if (allowModeVoting) { - List> voteList = GetVoteList(VoteType.Mode, GameMain.Server.ConnectedClients); + IReadOnlyDictionary voteList = GetVoteCounts(VoteType.Mode, GameMain.Server.ConnectedClients); msg.Write((byte)voteList.Count); - foreach (Pair vote in voteList) + foreach (KeyValuePair vote in voteList) { - msg.Write((byte)vote.Second); - msg.Write(((GameModePreset)vote.First).Identifier); + msg.Write((byte)vote.Value); + msg.Write(vote.Key.Identifier); } } msg.Write(AllowEndVoting); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Program.cs b/Barotrauma/BarotraumaServer/ServerSource/Program.cs index 03bbb4e15..43583e932 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Program.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Program.cs @@ -42,11 +42,11 @@ namespace Barotrauma #endif Console.WriteLine("Barotrauma Dedicated Server " + GameMain.Version + " (" + AssemblyInfo.BuildString + ", branch " + AssemblyInfo.GitBranch + ", revision " + AssemblyInfo.GitRevision + ")"); - if(Console.IsOutputRedirected) + if (Console.IsOutputRedirected) { Console.WriteLine("Output redirection detected; colored text and command input will be disabled."); } - if(Console.IsInputRedirected) + if (Console.IsInputRedirected) { Console.WriteLine("Redirected input is detected but is not supported by this application. Input will be ignored."); } @@ -154,9 +154,9 @@ namespace Barotrauma sb.AppendLine("Last debug messages:"); DebugConsole.Clear(); - for (int i = DebugConsole.Messages.Count - 1; i > 0 && i > DebugConsole.Messages.Count - 15; i-- ) + for (int i = DebugConsole.Messages.Count - 1; i > 0 && i > DebugConsole.Messages.Count - 15; i--) { - sb.AppendLine(" "+DebugConsole.Messages[i].Time+" - "+DebugConsole.Messages[i].Text); + sb.AppendLine(" " + DebugConsole.Messages[i].Time + " - " + DebugConsole.Messages[i].Text); } string crashReport = sb.ToString(); @@ -167,7 +167,9 @@ namespace Barotrauma } Console.Write(crashReport); - File.WriteAllText(filePath,sb.ToString()); + File.WriteAllText(filePath, sb.ToString()); + + if (GameSettings.SaveDebugConsoleLogs || GameSettings.VerboseLogging) { DebugConsole.SaveLogs(); } if (GameSettings.SendUserStatistics) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Screens/NetLobbyScreen.cs b/Barotrauma/BarotraumaServer/ServerSource/Screens/NetLobbyScreen.cs index c24ba4ba1..77f81cc49 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Screens/NetLobbyScreen.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Screens/NetLobbyScreen.cs @@ -271,6 +271,8 @@ namespace Barotrauma var allowedGameModes = Array.FindAll(GameModes, m => !m.IsSinglePlayer && m != GameModePreset.MultiPlayerCampaign); SelectedModeIdentifier = allowedGameModes[Rand.Range(0, allowedGameModes.Length)].Identifier; } + + GameMain.Server.ServerSettings.SelectNonHiddenSubmarine(); } } } diff --git a/Barotrauma/BarotraumaServer/WindowsServer.csproj b/Barotrauma/BarotraumaServer/WindowsServer.csproj index 9454f5d56..7b8278d09 100644 --- a/Barotrauma/BarotraumaServer/WindowsServer.csproj +++ b/Barotrauma/BarotraumaServer/WindowsServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.15.13.0 + 0.15.15.0 Copyright © FakeFish 2018-2020 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml b/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml index b2bb40191..2f110d253 100644 --- a/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml +++ b/Barotrauma/BarotraumaShared/Data/ContentPackages/Vanilla 0.9.xml @@ -78,6 +78,7 @@ + @@ -204,7 +205,8 @@ - + + diff --git a/Barotrauma/BarotraumaShared/Data/karmasettings.xml b/Barotrauma/BarotraumaShared/Data/karmasettings.xml index 4ab2df218..7467a8269 100644 --- a/Barotrauma/BarotraumaShared/Data/karmasettings.xml +++ b/Barotrauma/BarotraumaShared/Data/karmasettings.xml @@ -25,7 +25,10 @@ resetkarmabetweenrounds="true" dangerousitemstealkarmadecrease="15" dangerousitemstealbots="false" - ballastflorakarmaincrease="0.05" /> + ballastflorakarmaincrease="0.05" + dangerousitemcontainkarmadecrease="5.0" + isdangerousitemcontainkarmadecreaseincremental="true" + maxdangerousitemcontainkarmadecrease="30" /> + ballastflorakarmaincrease="0.03" + dangerousitemcontainkarmadecrease="5.0" + isdangerousitemcontainkarmadecreaseincremental="true" + maxdangerousitemcontainkarmadecrease="30" /> + ballastflorakarmaincrease="0.05" + dangerousitemcontainkarmadecrease="5.0" + isdangerousitemcontainkarmadecreaseincremental="true" + maxdangerousitemcontainkarmadecrease="30" /> \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/CameraTransition.cs b/Barotrauma/BarotraumaShared/SharedSource/CameraTransition.cs index 060108b4b..8189c8fac 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/CameraTransition.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/CameraTransition.cs @@ -64,7 +64,7 @@ namespace Barotrauma #endif } - private IEnumerable Update(ISpatialEntity targetEntity, Camera cam) + private IEnumerable Update(ISpatialEntity targetEntity, Camera cam) { if (targetEntity == null || (targetEntity is Entity e && e.Removed)) { yield return CoroutineStatus.Success; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/AITarget.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/AITarget.cs index b105f540e..3522c45dc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/AITarget.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/AITarget.cs @@ -229,7 +229,7 @@ namespace Barotrauma { if (sectorRad >= MathHelper.TwoPi) { return true; } Vector2 diff = worldPosition - WorldPosition; - return MathUtils.GetShortestAngle(MathUtils.VectorToAngle(diff), MathUtils.VectorToAngle(sectorDir)) <= sectorRad * 0.5f; + return Math.Abs(MathUtils.GetShortestAngle(MathUtils.VectorToAngle(diff), MathUtils.VectorToAngle(sectorDir))) <= sectorRad * 0.5f; } public void Remove() diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs index 9c32b8721..6e654e1cb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs @@ -524,11 +524,12 @@ namespace Barotrauma if (Character.LockHands) { return; } if (ObjectiveManager.CurrentObjective == null) { return; } if (Character.CurrentHull == null) { return; } - bool oxygenLow = !Character.AnimController.HeadInWater && Character.OxygenAvailable < CharacterHealth.LowOxygenThreshold; + bool oxygenLow = !Character.AnimController.HeadInWater && Character.OxygenAvailable < CharacterHealth.LowOxygenThreshold && Character.NeedsOxygen; bool isCarrying = ObjectiveManager.HasActiveObjective() || ObjectiveManager.HasActiveObjective(); bool NeedsDivingGearOnPath(AIObjectiveGoTo gotoObjective) { + if (!Character.NeedsAir) { return false; } bool insideSteering = SteeringManager == PathSteering && PathSteering.CurrentPath != null && !PathSteering.IsPathDirty; Hull targetHull = gotoObjective.GetTargetHull(); return gotoObjective.Target != null && targetHull == null || @@ -567,6 +568,7 @@ namespace Barotrauma Character.AnimController.HeadInWater || Character.Submarine == null || (Character.Submarine.TeamID != Character.TeamID && !Character.IsEscorted) || + ObjectiveManager.CurrentOrders.Any(o => o.Objective.KeepDivingGearOn) || ObjectiveManager.CurrentObjective.GetSubObjectivesRecursive(true).Any(o => o.KeepDivingGearOn) || Character.CurrentHull.OxygenPercentage < HULL_LOW_OXYGEN_PERCENTAGE + 10; bool IsOrderedToWait() => Character.IsOnPlayerTeam && ObjectiveManager.CurrentOrder is AIObjectiveGoTo goTo && goTo.Target == Character; @@ -625,7 +627,7 @@ namespace Barotrauma if (removeDivingSuit) { var divingSuit = Character.Inventory.FindItemByTag(AIObjectiveFindDivingGear.HEAVY_DIVING_GEAR); - if (divingSuit != null) + if (divingSuit != null && !divingSuit.HasTag(AIObjectiveFindDivingGear.DIVING_GEAR_WEARABLE_INDOORS)) { if (oxygenLow || Character.Submarine?.TeamID != Character.TeamID || ObjectiveManager.GetCurrentPriority() >= AIObjectiveManager.RunPriority) { @@ -950,7 +952,7 @@ namespace Barotrauma if (item.CurrentHull != hull) { continue; } if (AIObjectiveRepairItems.IsValidTarget(item, Character)) { - if (item.Repairables.All(r => item.ConditionPercentage > r.RepairIconThreshold)) { continue; } + if (!item.Repairables.Any(r => r.IsBelowRepairIconThreshold)) { continue; } if (AddTargets(Character, item) && newOrder == null && !ObjectiveManager.HasActiveObjective()) { var orderPrefab = Order.GetPrefab("reportbrokendevices"); @@ -1117,6 +1119,7 @@ namespace Barotrauma // Don't react to attackers that are outside of the sub (e.g. AoE attacks) return; } + bool isAttackerFightingEnemy = false; if (IsFriendly(attacker)) { if (attacker.AnimController.Anim == Barotrauma.AnimController.Animation.CPR && attacker.SelectedCharacter == Character) @@ -1136,7 +1139,6 @@ namespace Barotrauma } else { - (GameMain.GameSession?.GameMode as CampaignMode)?.OutpostNPCAttacked(Character, attacker, attackResult); // Inform other NPCs if (cumulativeDamage > 1 || totalDamage >= 10) { @@ -1184,6 +1186,10 @@ namespace Barotrauma } } } + if (!isAttackerFightingEnemy) + { + (GameMain.GameSession?.GameMode as CampaignMode)?.OutpostNPCAttacked(Character, attacker, attackResult); + } } } else @@ -1211,7 +1217,15 @@ namespace Barotrauma if (!(otherCharacter.AIController is HumanAIController otherHumanAI)) { continue; } if (!otherHumanAI.IsFriendly(Character)) { continue; } bool isWitnessing = otherHumanAI.VisibleHulls.Contains(Character.CurrentHull) || otherHumanAI.VisibleHulls.Contains(attacker.CurrentHull); - if (!isWitnessing && !CheckReportRange(Character, otherCharacter, ReportRange)) { continue; } + if (!isWitnessing) + { + //if the other character did not witness the attack, and the character is not within report range (or capable of reporting) + //don't react to the attack + if (Character.IsDead || Character.IsUnconscious || !CheckReportRange(Character, otherCharacter, ReportRange)) + { + continue; + } + } var combatMode = DetermineCombatMode(otherCharacter, cumulativeDamage, isWitnessing, dmgThreshold: attacker.TeamID == Character.TeamID ? 50 : 10); float delay = isWitnessing ? GetReactionTime() : Rand.Range(2.0f, 5.0f, Rand.RandSync.Unsynced); otherHumanAI.AddCombatObjective(combatMode, attacker, delay); @@ -1244,18 +1258,20 @@ namespace Barotrauma return AIObjectiveCombat.CombatMode.None; } // If there are any enemies around, just ignore the friendly fire - if (Character.CharacterList.Any(ch => ch.Submarine == Character.Submarine && !ch.Removed && !ch.IsDead && !ch.IsIncapacitated && !IsFriendly(ch) && VisibleHulls.Contains(ch.CurrentHull))) + if (Character.CharacterList.Any(ch => ch.Submarine == Character.Submarine && !ch.Removed && !ch.IsIncapacitated && !IsFriendly(ch) && VisibleHulls.Contains(ch.CurrentHull))) { + isAttackerFightingEnemy = true; return AIObjectiveCombat.CombatMode.None; } else if (isWitnessing && Character.CombatAction != null && !c.IsSecurity) { return Character.CombatAction.WitnessReaction; } - else if (Character.IsInstigator && attacker.IsPlayer) + else if (attacker.IsPlayer && FindInstigator() is Character instigator) { - // The guards don't react when the player attacks instigators. - return c.IsSecurity ? AIObjectiveCombat.CombatMode.None : (Character.CombatAction != null ? Character.CombatAction.WitnessReaction : AIObjectiveCombat.CombatMode.Retreat); + // The guards don't react when the player there's an instigator around + isAttackerFightingEnemy = true; + return c.IsSecurity ? AIObjectiveCombat.CombatMode.None : (instigator.CombatAction != null ? instigator.CombatAction.WitnessReaction : AIObjectiveCombat.CombatMode.Retreat); } else if (attacker.TeamID == CharacterTeamType.FriendlyNPC && !(attacker.AIController.IsMentallyUnstable || attacker.AIController.IsMentallyUnstable)) { @@ -1295,6 +1311,22 @@ namespace Barotrauma return c.IsSecurity ? AIObjectiveCombat.CombatMode.Arrest : AIObjectiveCombat.CombatMode.Retreat; } } + + Character FindInstigator() + { + if (Character.IsInstigator) + { + return Character; + } + else if (c.AIController is HumanAIController humanAi) + { + return Character.CharacterList.FirstOrDefault(ch => ch.Submarine == c.Submarine && !ch.Removed && !ch.IsIncapacitated && ch.IsInstigator && humanAi.VisibleHulls.Contains(ch.CurrentHull)); + } + else + { + return null; + } + } } } } @@ -1416,15 +1448,20 @@ namespace Barotrauma return true; } - public static bool NeedsDivingGear(Hull hull, out bool needsSuit) + public bool NeedsDivingGear(Hull hull, out bool needsSuit) { + if (!Character.NeedsAir) + { + needsSuit = false; + return false; + } needsSuit = false; if (hull == null || hull.WaterPercentage > 90 || hull.LethalPressure > 0 || hull.ConnectedGaps.Any(gap => !gap.IsRoomToRoom && gap.Open > 0.5f)) { - needsSuit = true; + needsSuit = !Character.HasAbilityFlag(AbilityFlags.ImmuneToPressure); return true; } if (hull.WaterPercentage > 60 || hull.OxygenPercentage < HULL_LOW_OXYGEN_PERCENTAGE + 1) @@ -1570,9 +1607,9 @@ namespace Barotrauma Character thief = character; bool someoneSpoke = false; - bool stolenItemsInside = item.OwnInventory?.FindAllItems(it => it.SpawnedInOutpost && !it.AllowStealing, recursive: true).Any() ?? false; + bool stolenItemsInside = item.OwnInventory?.FindAllItems(it => it.SpawnedInCurrentOutpost && !it.AllowStealing, recursive: true).Any() ?? false; - if ((item.SpawnedInOutpost && !item.AllowStealing || stolenItemsInside) && thief.TeamID != CharacterTeamType.FriendlyNPC && !item.HasTag("handlocker")) + if ((item.SpawnedInCurrentOutpost && !item.AllowStealing || stolenItemsInside) && thief.TeamID != CharacterTeamType.FriendlyNPC && !item.HasTag("handlocker")) { foreach (Character otherCharacter in Character.CharacterList) { @@ -1624,7 +1661,7 @@ namespace Barotrauma } } } - else if (item.OwnInventory?.FindItem(it => it.SpawnedInOutpost && !item.AllowStealing, true) is { } foundItem) + else if (item.OwnInventory?.FindItem(it => it.SpawnedInCurrentOutpost && !item.AllowStealing, true) is { } foundItem) { ItemTaken(foundItem, character); } @@ -1698,7 +1735,7 @@ namespace Barotrauma if (item.CurrentHull != hull) { continue; } if (AIObjectiveRepairItems.IsValidTarget(item, character)) { - if (item.Repairables.All(r => item.ConditionPercentage >= r.RepairThreshold)) { continue; } + if (item.Repairables.All(r => r.IsBelowRepairThreshold)) { continue; } AddTargets(character, item); } } @@ -1786,7 +1823,7 @@ namespace Barotrauma { if (isCurrentHull) { - CurrentHullSafety = 0; + CurrentHullSafety = character.NeedsAir ? 0 : 100; } return CurrentHullSafety; } @@ -1809,8 +1846,8 @@ namespace Barotrauma private static float CalculateHullSafety(Hull hull, IEnumerable visibleHulls, Character character, bool ignoreWater = false, bool ignoreOxygen = false, bool ignoreFire = false, bool ignoreEnemies = false) { - if (hull == null) { return 0; } - if (hull.LethalPressure > 0 && character.PressureProtection <= 0) { return 0; } + if (hull == null) { return character.NeedsAir ? 0 : 100; } + if (hull.LethalPressure > 0 && character.PressureProtection <= 0 && !character.HasAbilityFlag(AbilityFlags.ImmuneToPressure)) { return 0; } // Oxygen factor should be 1 with 70% oxygen or more and 0.1 when the oxygen level is 30% or lower. // With insufficient oxygen, the safety of the hull should be 39, all the other factors aside. So, just below the HULL_SAFETY_THRESHOLD. float oxygenFactor = ignoreOxygen ? 1 : MathHelper.Lerp((HULL_SAFETY_THRESHOLD - 1) / 100, 1, MathUtils.InverseLerp(HULL_LOW_OXYGEN_PERCENTAGE, 100 - HULL_LOW_OXYGEN_PERCENTAGE, hull.OxygenPercentage)); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/IndoorsSteeringManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/IndoorsSteeringManager.cs index d2b1edb72..418b72362 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/IndoorsSteeringManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/IndoorsSteeringManager.cs @@ -204,11 +204,7 @@ namespace Barotrauma pathFinder.ApplyPenaltyToOutsideNodes = character.Submarine != null && character.PressureProtection <= 0; var newPath = pathFinder.FindPath(currentPos, target, character.Submarine, "(Character: " + character.Name + ")", minGapSize, startNodeFilter, endNodeFilter, nodeFilter, checkVisibility: checkVisibility); bool useNewPath = needsNewPath || currentPath == null || currentPath.CurrentNode == null || character.Submarine != null && findPathTimer < -1 && Math.Abs(character.AnimController.TargetMovement.Combine()) <= 0; - if (newPath.Unreachable || newPath.Nodes.None()) - { - useNewPath = false; - } - else if (!useNewPath && currentPath != null && currentPath.CurrentNode != null) + if (!useNewPath && currentPath != null && currentPath.CurrentNode != null && newPath.Nodes.Any() && !newPath.Unreachable) { // Check if the new path is the same as the old, in which case we just ignore it and continue using the old path (or the progress would reset). if (IsIdenticalPath()) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/LatchOntoAI.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/LatchOntoAI.cs index 69270a61e..88d3df439 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/LatchOntoAI.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/LatchOntoAI.cs @@ -12,20 +12,19 @@ namespace Barotrauma class LatchOntoAI { const float RaycastInterval = 5.0f; - private float raycastTimer; - - private Structure targetWall; private Body targetBody; private Vector2 attachSurfaceNormal; - private Submarine targetSubmarine; - private Character targetCharacter; private readonly Character character; public bool AttachToSub { get; private set; } public bool AttachToWalls { get; private set; } public bool AttachToCharacters { get; private set; } + public Submarine TargetSubmarine { get; private set; } + public Structure TargetWall { get; private set; } + public Character TargetCharacter { get; private set; } + private readonly float minDeattachSpeed, maxDeattachSpeed, maxAttachDuration, coolDown; private readonly float damageOnDetach, detachStun; private readonly bool weld; @@ -51,7 +50,7 @@ namespace Barotrauma public bool IsAttached => AttachJoints.Count > 0; - public bool IsAttachedToSub => IsAttached && targetSubmarine != null && targetCharacter == null; + public bool IsAttachedToSub => IsAttached && TargetSubmarine != null && TargetCharacter == null; public LatchOntoAI(XElement element, EnemyAIController enemyAI) { @@ -93,9 +92,9 @@ namespace Barotrauma var sub = wall.Submarine; if (sub == null) { return; } Reset(); - targetWall = wall; - targetSubmarine = sub; - targetBody = targetSubmarine.PhysicsBody.FarseerBody; + TargetWall = wall; + TargetSubmarine = sub; + targetBody = TargetSubmarine.PhysicsBody.FarseerBody; this.attachSurfaceNormal = attachSurfaceNormal; _attachPos = attachPos; } @@ -103,23 +102,20 @@ namespace Barotrauma public void SetAttachTarget(Character target) { if (!AttachToCharacters) { return; } + if (target.Submarine != character.Submarine) { return; } Reset(); - targetCharacter = target; - targetSubmarine = target.Submarine; + TargetCharacter = target; targetBody = target.AnimController.Collider.FarseerBody; attachSurfaceNormal = Vector2.Normalize(character.WorldPosition - target.WorldPosition); } public void Update(EnemyAIController enemyAI, float deltaTime) { - if (character.Submarine != null) + if (TargetCharacter != null && character.Submarine != TargetCharacter.Submarine || + character.Submarine != null && TargetSubmarine != null && TargetCharacter == null) { - if (targetCharacter != null && targetCharacter.Submarine != targetSubmarine || - character.Submarine != null && targetSubmarine != null && targetCharacter == null) - { - DeattachFromBody(reset: true); - return; - } + DeattachFromBody(reset: true); + return; } if (IsAttached) { @@ -150,7 +146,7 @@ namespace Barotrauma return; } } - if (targetCharacter != null) + if (TargetCharacter != null) { if (enemyAI.AttackingLimb?.attack == null) { @@ -159,10 +155,14 @@ namespace Barotrauma else { float range = enemyAI.AttackingLimb.attack.DamageRange * 2f; - if (Vector2.DistanceSquared(targetCharacter.WorldPosition, enemyAI.AttackingLimb.WorldPosition) > range * range) + if (Vector2.DistanceSquared(TargetCharacter.WorldPosition, enemyAI.AttackingLimb.WorldPosition) > range * range) { DeattachFromBody(reset: true, cooldown: 1); } + else + { + TargetCharacter.Latchers.Add(this); + } } } } @@ -176,15 +176,15 @@ namespace Barotrauma deattachCheckTimer -= deltaTime; } - if (targetCharacter != null) + if (TargetCharacter != null) { // Own sim pos -> target where we are _attachPos = character.SimPosition; } Vector2 transformedAttachPos = _attachPos; - if (character.Submarine == null && targetSubmarine != null) + if (character.Submarine == null && TargetSubmarine != null) { - transformedAttachPos += ConvertUnits.ToSimUnits(targetSubmarine.Position); + transformedAttachPos += ConvertUnits.ToSimUnits(TargetSubmarine.Position); } if (transformedAttachPos != Vector2.Zero) { @@ -267,7 +267,7 @@ namespace Barotrauma if (enemyAI.AttackingLimb == null) { break; } if (targetBody == null) { break; } if (IsAttached && AttachJoints[0].BodyB == targetBody) { break; } - Vector2 referencePos = targetCharacter != null ? targetCharacter.WorldPosition : ConvertUnits.ToDisplayUnits(transformedAttachPos); + Vector2 referencePos = TargetCharacter != null ? TargetCharacter.WorldPosition : ConvertUnits.ToDisplayUnits(transformedAttachPos); if (Vector2.DistanceSquared(referencePos, enemyAI.AttackingLimb.WorldPosition) < enemyAI.AttackingLimb.attack.DamageRange * enemyAI.AttackingLimb.attack.DamageRange) { AttachToBody(transformedAttachPos); @@ -286,11 +286,11 @@ namespace Barotrauma deattach = true; attachCooldown = coolDown; } - if (!deattach && targetWall != null && targetSubmarine != null) + if (!deattach && TargetWall != null && TargetSubmarine != null) { // Deattach if the wall is broken enough where we are attached to - int targetSection = targetWall.FindSectionIndex(attachLimb.WorldPosition, world: true, clamp: true); - if (enemyAI.CanPassThroughHole(targetWall, targetSection)) + int targetSection = TargetWall.FindSectionIndex(attachLimb.WorldPosition, world: true, clamp: true); + if (enemyAI.CanPassThroughHole(TargetWall, targetSection)) { deattach = true; attachCooldown = coolDown; @@ -298,7 +298,7 @@ namespace Barotrauma if (!deattach) { // Deattach if the velocity is high - float velocity = targetSubmarine.Velocity == Vector2.Zero ? 0.0f : targetSubmarine.Velocity.Length(); + float velocity = TargetSubmarine.Velocity == Vector2.Zero ? 0.0f : TargetSubmarine.Velocity.Length(); deattach = velocity > maxDeattachSpeed; if (!deattach) { @@ -385,11 +385,8 @@ namespace Barotrauma } as Joint; GameMain.World.Add(colliderJoint); - AttachJoints.Add(colliderJoint); - if (targetCharacter != null) - { - targetCharacter.Latchers.Add(this); - } + AttachJoints.Add(colliderJoint); + TargetCharacter?.Latchers.Add(this); if (maxAttachDuration > 0) { deattachCheckTimer = maxAttachDuration; @@ -407,25 +404,19 @@ namespace Barotrauma { attachCooldown = cooldown; } + TargetCharacter?.Latchers.Remove(this); if (reset) { Reset(); } - if (targetCharacter != null) - { - targetCharacter.Latchers.Remove(this); - } } private void Reset() { - if (targetCharacter != null) - { - targetCharacter.Latchers.Remove(this); - } - targetCharacter = null; - targetWall = null; - targetSubmarine = null; + TargetCharacter?.Latchers.Remove(this); + TargetCharacter = null; + TargetWall = null; + TargetSubmarine = null; targetBody = null; AttachPos = null; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjective.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjective.cs index 23bfc48ad..6986c8940 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjective.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjective.cs @@ -93,13 +93,6 @@ namespace Barotrauma _abandon = value; if (_abandon) { -#if DEBUG - if (HumanAIController.debugai && objectiveManager.IsOrder(this) && !objectiveManager.IsCurrentOrder() && !objectiveManager.IsCurrentOrder()) - { - // TODO: dismiss - throw new Exception("Order abandoned!"); - } -#endif OnAbandon(); } } @@ -247,7 +240,7 @@ namespace Barotrauma } } - protected bool IsAllowed + public bool IsAllowed { get { @@ -271,7 +264,7 @@ namespace Barotrauma if (!IsAllowed) { Priority = 0; - Abandon = !isOrder; + Abandon = true; return Priority; } if (isOrder) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCleanupItems.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCleanupItems.cs index f0cf653a8..dab9b3d1f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCleanupItems.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCleanupItems.cs @@ -94,7 +94,7 @@ namespace Barotrauma if (item == null) { return false; } if (item.IgnoreByAI(character)) { return false; } if (!item.IsInteractable(character)) { return false; } - if (item.SpawnedInOutpost) { return false; } + if ((item.SpawnedInCurrentOutpost && !item.AllowStealing) == character.IsOnPlayerTeam) { return false; } if (item.ParentInventory != null) { if (item.Container == null) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs index 6bdddd863..857c56da9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs @@ -294,10 +294,6 @@ namespace Barotrauma } } - private bool IsLoaded(ItemComponent weapon, bool checkContainedItems = true) => - weapon.HasRequiredContainedItems(character, addMessage: false) && - (!checkContainedItems || weapon.Item.OwnInventory == null || weapon.Item.OwnInventory.AllItems.Any(i => i.Condition > 0)); - private bool TryArm() { if (character.LockHands || Enemy == null) @@ -325,7 +321,7 @@ namespace Barotrauma Weapon = null; continue; } - if (IsLoaded(WeaponComponent, checkContainedItems: true)) + if (WeaponComponent.IsLoaded(character)) { // All good, the weapon is loaded break; @@ -380,6 +376,7 @@ namespace Barotrauma constructor: () => new AIObjectiveGetItem(character, "weapon", objectiveManager, equip: true, checkInventory: false) { AllowStealing = HumanAIController.IsMentallyUnstable, + EvaluateCombatPriority = false, // Use a custom formula instead GetItemPriority = i => { if (Weapon != null && (i == Weapon || i.Prefab.Identifier == Weapon.Prefab.Identifier)) { return 0; } @@ -433,7 +430,7 @@ namespace Barotrauma // Not in the inventory anymore or cannot find the weapon component return false; } - if (!IsLoaded(WeaponComponent)) + if (!WeaponComponent.IsLoaded(character)) { // Try reloading (and seek ammo) if (!Reload(seekAmmo)) @@ -475,7 +472,7 @@ namespace Barotrauma foreach (var weapon in weaponList) { float priority = weapon.CombatPriority; - if (!IsLoaded(weapon)) + if (!weapon.IsLoaded(character)) { if (weapon is RangedWeapon && enemyIsClose) { @@ -564,31 +561,6 @@ namespace Barotrauma } return weaponComponent.Item; - static Attack GetAttackDefinition(ItemComponent weapon) - { - Attack attack = null; - if (weapon is MeleeWeapon meleeWeapon) - { - attack = meleeWeapon.Attack; - } - else if (weapon is RangedWeapon rangedWeapon) - { - attack = rangedWeapon.FindProjectile(triggerOnUseOnContainers: false)?.Attack; - } - return attack; - } - - static float GetLethalDamage(ItemComponent weapon) - { - float lethalDmg = 0; - Attack attack = GetAttackDefinition(weapon); - if (attack != null) - { - lethalDmg = attack.GetTotalDamage(); - } - return lethalDmg; - } - float ApproximateStunDamage(ItemComponent weapon, Attack attack) { // Try to reduce the priority using the actual damage values and status effects. @@ -628,6 +600,31 @@ namespace Barotrauma } } + public static float GetLethalDamage(ItemComponent weapon) + { + float lethalDmg = 0; + Attack attack = GetAttackDefinition(weapon); + if (attack != null) + { + lethalDmg = attack.GetTotalDamage(); + } + return lethalDmg; + } + + private static Attack GetAttackDefinition(ItemComponent weapon) + { + Attack attack = null; + if (weapon is MeleeWeapon meleeWeapon) + { + attack = meleeWeapon.Attack; + } + else if (weapon is RangedWeapon rangedWeapon) + { + attack = rangedWeapon.FindProjectile(triggerOnUseOnContainers: false)?.Attack; + } + return attack; + } + private HashSet FindWeaponsFromInventory() { weapons.Clear(); @@ -788,7 +785,6 @@ namespace Barotrauma { UsePathingOutside = false, IgnoreIfTargetDead = true, - DialogueIdentifier = "dialogcannotreachtarget", TargetName = Enemy.DisplayName, AlwaysUseEuclideanDistance = false }, @@ -812,7 +808,7 @@ namespace Barotrauma ItemPrefab prefab = ItemPrefab.Find(null, "handcuffs"); if (prefab != null) { - Entity.Spawner.AddToSpawnQueue(prefab, character.Inventory, onSpawned: (Item i) => i.SpawnedInOutpost = true); + Entity.Spawner.AddToSpawnQueue(prefab, character.Inventory, onSpawned: (Item i) => i.SpawnedInCurrentOutpost = true); } } RemoveFollowTarget(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveContainItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveContainItem.cs index 5fa7abede..249a7818d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveContainItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveContainItem.cs @@ -144,7 +144,6 @@ namespace Barotrauma { TryAddSubObjective(ref goToObjective, () => new AIObjectiveGoTo(container.Item, character, objectiveManager, getDivingGearIfNeeded: AllowToFindDivingGear) { - DialogueIdentifier = "dialogcannotreachtarget", TargetName = container.Item.Name, AbortCondition = obj => container?.Item == null || container.Item.Removed || container.Item.IsThisOrAnyContainerIgnoredByAI(character) || diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindDivingGear.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindDivingGear.cs index c42d0c6f0..5afa3665f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindDivingGear.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindDivingGear.cs @@ -19,10 +19,15 @@ namespace Barotrauma private AIObjectiveContainItem getOxygen; private Item targetItem; - public static float MIN_OXYGEN = 10; - public static string HEAVY_DIVING_GEAR = "deepdiving"; - public static string LIGHT_DIVING_GEAR = "lightdiving"; - public static string OXYGEN_SOURCE = "oxygensource"; + public const float MIN_OXYGEN = 10; + + public const string HEAVY_DIVING_GEAR = "deepdiving"; + public const string LIGHT_DIVING_GEAR = "lightdiving"; + /// + /// Diving gear that's suitable for wearing indoors (-> the bots don't try to unequip it when they don't need diving gear) + /// + public const string DIVING_GEAR_WEARABLE_INDOORS = "divinggear_wearableindoors"; + public const string OXYGEN_SOURCE = "oxygensource"; protected override bool CheckObjectiveSpecific() => targetItem != null && character.HasEquippedItem(targetItem, slotType: InvSlotType.OuterClothes | InvSlotType.Head); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindSafety.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindSafety.cs index 2c8f6a40b..7dc9de1d2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindSafety.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveFindSafety.cs @@ -46,10 +46,17 @@ namespace Barotrauma } if (character.CurrentHull == null) { - Priority = (objectiveManager.IsCurrentOrder() || - objectiveManager.IsCurrentOrder() || - objectiveManager.Objectives.Any(o => o.Priority > 0 && o is AIObjectiveCombat)) - && HumanAIController.HasDivingSuit(character) ? 0 : 100; + if (!character.NeedsAir) + { + Priority = 0; + } + else + { + Priority = (objectiveManager.IsCurrentOrder() || + objectiveManager.IsCurrentOrder() || + objectiveManager.Objectives.Any(o => o.Priority > 0 && o is AIObjectiveCombat)) + && HumanAIController.HasDivingSuit(character) ? 0 : 100; + } } else { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItem.cs index afc834674..f42c4a725 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItem.cs @@ -1,6 +1,7 @@ using Barotrauma.Items.Components; using Microsoft.Xna.Framework; using System; +using System.Collections.Immutable; using System.Collections.Generic; using System.Linq; @@ -11,6 +12,7 @@ namespace Barotrauma public override string Identifier { get; set; } = "get item"; public override bool AbandonWhenCannotCompleteSubjectives => false; + public override bool AllowMultipleInstances => true; public HashSet ignoredItems = new HashSet(); @@ -19,7 +21,7 @@ namespace Barotrauma public float TargetCondition { get; set; } = 1; public bool AllowDangerousPressure { get; set; } - private readonly string[] identifiersOrTags; + private readonly ImmutableArray identifiersOrTags; //if the item can't be found, spawn it in the character's inventory (used by outpost NPCs) private bool spawnItemIfNotFound = false; @@ -31,6 +33,7 @@ namespace Barotrauma public Item TargetItem => targetItem; private int currSearchIndex; public string[] ignoredContainerIdentifiers; + public string[] ignoredIdentifiersOrTags; private AIObjectiveGoTo goToObjective; private float currItemPriority; private readonly bool checkInventory; @@ -51,6 +54,10 @@ namespace Barotrauma public bool AllowVariants { get; set; } public bool Equip { get; set; } public bool Wear { get; set; } + public bool RequireLoaded { get; set; } + public bool EvaluateCombatPriority { get; set; } + public bool CheckPathForEachItem { get; set; } + public bool SpeakIfFails { get; set; } public InvSlotType? EquipSlotType { get; set; } @@ -67,18 +74,41 @@ namespace Barotrauma public AIObjectiveGetItem(Character character, string identifierOrTag, AIObjectiveManager objectiveManager, bool equip = true, bool checkInventory = true, float priorityModifier = 1, bool spawnItemIfNotFound = false) : this(character, new string[] { identifierOrTag }, objectiveManager, equip, checkInventory, priorityModifier, spawnItemIfNotFound) { } - public AIObjectiveGetItem(Character character, string[] identifiersOrTags, AIObjectiveManager objectiveManager, bool equip = true, bool checkInventory = true, float priorityModifier = 1, bool spawnItemIfNotFound = false) + public AIObjectiveGetItem(Character character, IEnumerable identifiersOrTags, AIObjectiveManager objectiveManager, bool equip = true, bool checkInventory = true, float priorityModifier = 1, bool spawnItemIfNotFound = false) : base(character, objectiveManager, priorityModifier) { currSearchIndex = -1; Equip = equip; - this.identifiersOrTags = identifiersOrTags; this.spawnItemIfNotFound = spawnItemIfNotFound; - for (int i = 0; i < identifiersOrTags.Length; i++) - { - identifiersOrTags[i] = identifiersOrTags[i].ToLowerInvariant(); - } this.checkInventory = checkInventory; + this.identifiersOrTags = ParseGearTags(identifiersOrTags).ToImmutableArray(); + ignoredIdentifiersOrTags = ParseIgnoredTags(identifiersOrTags).ToArray(); + } + + public static IEnumerable ParseGearTags(IEnumerable identifiersOrTags) + { + var tags = new List(); + foreach (string tag in identifiersOrTags) + { + if (!tag.Contains('!')) + { + tags.Add(tag.ToLowerInvariant()); + } + } + return tags; + } + + public static IEnumerable ParseIgnoredTags(IEnumerable identifiersOrTags) + { + var ignoredTags = new List(); + foreach (string tag in identifiersOrTags) + { + if (tag.Contains('!')) + { + ignoredTags.Add(tag.Remove("!").ToLowerInvariant()); + } + } + return ignoredTags; } private bool CheckInventory() @@ -219,6 +249,13 @@ namespace Barotrauma } else { + if (!Equip) + { + // Try equipping and wearing the item + Wear = true; + Equip = true; + return; + } #if DEBUG DebugConsole.NewMessage($"{character.Name}: Failed to equip/move the item '{targetItem.Name}' into the character inventory. Aborting.", Color.Red); #endif @@ -243,6 +280,10 @@ namespace Barotrauma { // Try again ignoredItems.Add(targetItem); + if (targetItem != moveToTarget && moveToTarget is Item item) + { + ignoredItems.Add(item); + } ResetInternal(); } else @@ -269,7 +310,15 @@ namespace Barotrauma } float priority = Math.Clamp(objectiveManager.GetCurrentPriority(), 10, 100); - bool checkPath = priority >= AIObjectiveManager.LowestOrderPriority && (objectiveManager.IsCurrentOrder() || objectiveManager.CurrentOrder is AIObjectiveGoTo gotoOrder && gotoOrder.isFollowOrderObjective); + if (!CheckPathForEachItem) + { + // While following the player, let's ensure that there's a valid path to the target before accepting it. + // Otherwise it will take some time for us to find a valid item when there are multiple items that we can't reach and some that we can. + // This is relatively expensive, so let's do this only when it significantly improves the behavior. + // Only allow one path find call per frame. + CheckPathForEachItem = priority >= AIObjectiveManager.LowestOrderPriority && (objectiveManager.IsCurrentOrder() || objectiveManager.CurrentOrder is AIObjectiveGoTo gotoOrder && gotoOrder.isFollowOrderObjective); + } + bool checkPath = CheckPathForEachItem; bool hasCalledPathFinder = false; int itemsPerFrame = (int)priority; for (int i = 0; i < itemsPerFrame && currSearchIndex < Item.ItemList.Count - 1; i++) @@ -280,14 +329,20 @@ namespace Barotrauma if (itemSub == null) { continue; } Submarine mySub = character.Submarine; if (mySub == null) { continue; } + if (!checkInventory) + { + // Ignore items in the inventory when defined not to check it. + if (item.IsOwnedBy(character)) { continue; } + } if (!AllowStealing) { - if (character.TeamID == CharacterTeamType.FriendlyNPC != item.SpawnedInOutpost) { continue; } + if (character.TeamID == CharacterTeamType.FriendlyNPC != item.SpawnedInCurrentOutpost) { continue; } } if (!CheckItem(item)) { continue; } if (item.Container != null) { if (item.Container.HasTag("donttakeitems")) { continue; } + if (ignoredItems.Contains(item.Container)) { continue; } if (ignoredContainerIdentifiers != null) { if (ignoredContainerIdentifiers.Contains(item.ContainerIdentifier)) { continue; } @@ -315,17 +370,51 @@ namespace Barotrauma float yDist = Math.Abs(character.WorldPosition.Y - itemPos.Y); yDist = yDist > 100 ? yDist * 5 : 0; float dist = Math.Abs(character.WorldPosition.X - itemPos.X) + yDist; - float distanceFactor = MathHelper.Lerp(1, 0, MathUtils.InverseLerp(0, 10000, dist)); + float minDistFactor = EvaluateCombatPriority ? 0.1f : 0; + float distanceFactor = MathHelper.Lerp(1, minDistFactor, MathUtils.InverseLerp(100, 10000, dist)); itemPriority *= distanceFactor; - itemPriority *= item.Condition / item.MaxCondition; + if (EvaluateCombatPriority) + { + var mw = item.GetComponent(); + var rw = item.GetComponent(); + float combatFactor = 0; + if (mw != null) + { + if (mw.CombatPriority > 0) + { + combatFactor = mw.CombatPriority / 100; + } + else + { + // The combat factor of items with zero combat priority is not allowed to be greater than 0.1f + combatFactor = Math.Min(AIObjectiveCombat.GetLethalDamage(mw) / 1000, 0.1f); + } + } + else if (rw != null) + { + if (rw.CombatPriority > 0) + { + combatFactor = rw.CombatPriority / 100; + } + else + { + combatFactor = Math.Min(AIObjectiveCombat.GetLethalDamage(rw) / 1000, 0.1f); + } + } + else + { + combatFactor = Math.Min(item.Components.Sum(ic => AIObjectiveCombat.GetLethalDamage(ic)) / 1000, 0.1f); + } + itemPriority *= combatFactor; + } + else + { + itemPriority *= item.Condition / item.MaxCondition; + } // Ignore if the item has a lower priority than the currently selected one if (itemPriority < currItemPriority) { continue; } if (!hasCalledPathFinder && PathSteering != null && checkPath) { - // While following the player, let's ensure that there's a valid path to the target before accepting it. - // Otherwise it will take some time for us to find a valid item when there are multiple items that we can't reach and some that we can. - // This is relatively expensive, so let's do this only when it significantly improves the behavior. - // Only allow one path find call per frame. hasCalledPathFinder = true; var path = PathSteering.PathFinder.FindPath(character.SimPosition, item.SimPosition, character.Submarine, errorMsgStr: $"AIObjectiveGetItem {character.DisplayName}", nodeFilter: node => node.Waypoint.CurrentHull != null); if (path.Unreachable) { continue; } @@ -355,7 +444,7 @@ namespace Barotrauma targetItem = spawnedItem; if (character.TeamID == CharacterTeamType.FriendlyNPC && (character.Submarine?.Info.IsOutpost ?? false)) { - spawnedItem.SpawnedInOutpost = true; + spawnedItem.SpawnedInCurrentOutpost = true; } }); } @@ -365,7 +454,6 @@ namespace Barotrauma #if DEBUG DebugConsole.NewMessage($"{character.Name}: Cannot find an item with the following identifier(s) or tag(s): {string.Join(", ", identifiersOrTags)}", Color.Yellow); #endif - SpeakCannotFind(); Abandon = true; } } @@ -375,34 +463,19 @@ namespace Barotrauma protected override bool CheckObjectiveSpecific() { if (IsCompleted) { return true; } - if (targetItem != null) + if (targetItem == null) { - if (Equip && EquipSlotType.HasValue) - { - return character.HasEquippedItem(targetItem, EquipSlotType.Value); - } - else - { - return character.HasItem(targetItem, Equip); - } - } - else if (identifiersOrTags != null) - { - var matchingItem = character.Inventory.FindItem(i => CheckItem(i), recursive: true); - if (matchingItem != null) - { - if (Equip && EquipSlotType.HasValue) - { - return character.HasEquippedItem(matchingItem, EquipSlotType.Value); - } - else - { - return !Equip || character.HasEquippedItem(matchingItem); - } - } + // Not yet ready return false; } - return false; + if (Equip && EquipSlotType.HasValue) + { + return character.HasEquippedItem(targetItem, EquipSlotType.Value); + } + else + { + return character.HasItem(targetItem, Equip); + } } private bool CheckItem(Item item) @@ -410,8 +483,10 @@ namespace Barotrauma if (!item.IsInteractable(character)) { return false; } if (item.IsThisOrAnyContainerIgnoredByAI(character)) { return false; } if (ignoredItems.Contains(item)) { return false; }; + if (ignoredIdentifiersOrTags != null && ignoredIdentifiersOrTags.Any(id => item.prefab.Identifier == id || item.HasTag(id))) { return false; } if (item.Condition < TargetCondition) { return false; } if (ItemFilter != null && !ItemFilter(item)) { return false; } + if (RequireLoaded && item.Components.Any(i => !i.IsLoaded(character))) { return false; } return identifiersOrTags.Any(id => id == item.Prefab.Identifier || item.HasTag(id) || (AllowVariants && item.Prefab.VariantOf?.Identifier == id)); } @@ -437,15 +512,20 @@ namespace Barotrauma protected override void OnAbandon() { base.OnAbandon(); - if (moveToTarget == null) { return; } + if (moveToTarget != null) + { #if DEBUG - DebugConsole.NewMessage($"{character.Name}: Get item failed to reach {moveToTarget}", Color.Yellow); + DebugConsole.NewMessage($"{character.Name}: Get item failed to reach {moveToTarget}", Color.Yellow); #endif + } + if (SpeakIfFails) + { + SpeakCannotFind(); + } } private void SpeakCannotFind() { - // TODO: Use the item name as the variable here. if (character.IsOnPlayerTeam && objectiveManager.CurrentOrder == objectiveManager.CurrentObjective) { string msg = TextManager.Get("dialogcannotfinditem", true); @@ -455,19 +535,5 @@ namespace Barotrauma } } } - - // TODO: remove? - private void SpeakCannotReach() - { - if (character.IsOnPlayerTeam && objectiveManager.CurrentOrder == objectiveManager.CurrentObjective) - { - string TargetName = (moveToTarget as MapEntity)?.Name ?? (moveToTarget as Character)?.Name ?? moveToTarget.ToString(); - string msg = TargetName == null ? TextManager.Get("dialogcannotreachtarget", true) : TextManager.GetWithVariable("dialogcannotreachtarget", "[name]", TargetName, formatCapitals: !(moveToTarget is Character)); - if (msg != null) - { - character.Speak(msg, identifier: "dialogcannotreachtarget", minDurationBetweenSimilar: 20.0f); - } - } - } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItems.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItems.cs new file mode 100644 index 000000000..ee84492d9 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGetItems.cs @@ -0,0 +1,91 @@ +#nullable enable +using Barotrauma.Extensions; +using System.Linq; +using System.Collections.Generic; +using System.Collections.Immutable; + +namespace Barotrauma +{ + class AIObjectiveGetItems : AIObjective + { + public override string Identifier { get; set; } = "get items"; + public override string DebugTag => $"{Identifier}"; + public override bool KeepDivingGearOn => true; + + public bool AllowStealing { get; set; } + public bool TakeWholeStack { get; set; } + public bool AllowVariants { get; set; } + public bool Equip { get; set; } + public bool Wear { get; set; } + public bool CheckInventory { get; set; } + public bool EvaluateCombatPriority { get; set; } + public bool CheckPathForEachItem { get; set; } + public bool RequireLoaded { get; set; } + + private readonly ImmutableArray gearTags; + private readonly string[] ignoredTags; + private bool subObjectivesCreated; + + public readonly HashSet achievedItems = new HashSet(); + + public AIObjectiveGetItems(Character character, AIObjectiveManager objectiveManager, IEnumerable identifiersOrTags, float priorityModifier = 1) : base(character, objectiveManager, priorityModifier) + { + gearTags = AIObjectiveGetItem.ParseGearTags(identifiersOrTags).ToImmutableArray(); + ignoredTags = AIObjectiveGetItem.ParseIgnoredTags(identifiersOrTags).ToArray(); + } + + protected override bool CheckObjectiveSpecific() => subObjectivesCreated && subObjectives.None(); + + protected override void Act(float deltaTime) + { + if (character.LockHands) + { + Abandon = true; + return; + } + if (!subObjectivesCreated) + { + foreach (string tag in gearTags) + { + AIObjectiveGetItem? getItem = null; + TryAddSubObjective(ref getItem, () => + new AIObjectiveGetItem(character, tag, objectiveManager, Equip, CheckInventory) + { + AllowVariants = AllowVariants, + Wear = Wear, + TakeWholeStack = TakeWholeStack, + AllowStealing = AllowStealing, + ignoredIdentifiersOrTags = ignoredTags, + CheckPathForEachItem = CheckPathForEachItem, + RequireLoaded = RequireLoaded + }, + onCompleted: () => + { + var item = getItem?.TargetItem; + if (item?.IsOwnedBy(character) != null) + { + achievedItems.Add(item); + } + }, + onAbandon: () => + { + var item = getItem?.TargetItem; + if (item != null) + { + achievedItems.Remove(item); + } + RemoveSubObjective(ref getItem); + }); + } + subObjectivesCreated = true; + } + } + + public override void Reset() + { + base.Reset(); + subObjectivesCreated = false; + achievedItems.Clear(); + } + } +} diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGoTo.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGoTo.cs index 154e88ec9..17930516a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGoTo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveGoTo.cs @@ -27,6 +27,7 @@ namespace Barotrauma public bool isFollowOrderObjective; public bool mimic; public bool SpeakIfFails { get; set; } = true; + public bool DebugLogWhenFails { get; set; } = true; public bool UsePathingOutside { get; set; } = true; public float extraDistanceWhileSwimming; @@ -61,6 +62,9 @@ namespace Barotrauma } } + // TODO: Currently we never check the visibility (to the end node), which is actually unintentional. + // I don't think it has caused any issues so far, so let's keep defaulting to false for now, because the less we do raycasts the better. + // However, if there are cases where the bots attempt to go through walls (select the end node that is behind an obstacle), we should set this true. public bool CheckVisibility { get; set; } public bool IgnoreIfTargetDead { get; set; } public bool AllowGoingOutside { get; set; } @@ -77,7 +81,7 @@ namespace Barotrauma public override bool AllowOutsideSubmarine => AllowGoingOutside; public override bool AllowInAnySub => true; - public string DialogueIdentifier { get; set; } + public string DialogueIdentifier { get; set; } = "dialogcannotreachtarget"; public string TargetName { get; set; } public ISpatialEntity Target { get; private set; } @@ -149,7 +153,10 @@ namespace Barotrauma private void SpeakCannotReach() { #if DEBUG - DebugConsole.NewMessage($"{character.Name}: Cannot reach the target: {Target}", Color.Yellow); + if (DebugLogWhenFails) + { + DebugConsole.NewMessage($"{character.Name}: Cannot reach the target: {Target}", Color.Yellow); + } #endif if (character.IsOnPlayerTeam && objectiveManager.CurrentOrder == objectiveManager.CurrentObjective && DialogueIdentifier != null && SpeakIfFails) { @@ -170,17 +177,12 @@ namespace Barotrauma Abandon = true; return; } - if (Target == character || character.SelectedBy != null && HumanAIController.IsFriendly(character.SelectedBy)) + if (cannotFollow || Target == character || character.SelectedBy != null && HumanAIController.IsFriendly(character.SelectedBy)) { // Wait character.AIController.SteeringManager.Reset(); return; } - if (cannotFollow) - { - // Wait - character.AIController.SteeringManager.Reset(); - } if (!character.IsClimbing) { character.SelectedConstruction = null; @@ -211,26 +213,33 @@ namespace Barotrauma } bool insideSteering = SteeringManager == PathSteering && PathSteering.CurrentPath != null && !PathSteering.IsPathDirty; bool isInside = character.CurrentHull != null; - bool targetIsOutside = (Target != null && targetHull == null) || (insideSteering && PathSteering.CurrentPath.HasOutdoorsNodes); - if (isInside && targetIsOutside && !AllowGoingOutside) + bool hasOutdoorNodes = insideSteering && PathSteering.CurrentPath.HasOutdoorsNodes; + if (isInside && hasOutdoorNodes && !AllowGoingOutside) { Abandon = true; } - else if (HumanAIController.IsCurrentPathNullOrUnreachable) + else if (HumanAIController.SteeringManager == PathSteering) { waitUntilPathUnreachable -= deltaTime; - SteeringManager.Reset(); - if (waitUntilPathUnreachable < 0) + if (HumanAIController.IsCurrentPathNullOrUnreachable) + { + SteeringManager.Reset(); + if (waitUntilPathUnreachable < 0) + { + waitUntilPathUnreachable = pathWaitingTime; + if (repeat) + { + SpeakCannotReach(); + } + else + { + Abandon = true; + } + } + } + else if (HumanAIController.HasValidPath(requireNonDirty: true, requireUnfinished: false)) { waitUntilPathUnreachable = pathWaitingTime; - if (repeat) - { - SpeakCannotReach(); - } - else - { - Abandon = true; - } } } if (!Abandon) @@ -238,16 +247,16 @@ namespace Barotrauma if (getDivingGearIfNeeded && !character.LockHands) { Character followTarget = Target as Character; - bool needsDivingSuit = !isInside || targetIsOutside; - bool needsDivingGear = needsDivingSuit || HumanAIController.NeedsDivingGear(targetHull, out needsDivingSuit); + bool needsDivingSuit = (!isInside || hasOutdoorNodes) && character.NeedsAir && !character.HasAbilityFlag(AbilityFlags.ImmuneToPressure); + bool needsDivingGear = (needsDivingSuit || HumanAIController.NeedsDivingGear(targetHull, out needsDivingSuit)) && character.NeedsAir; if (mimic) { - if (HumanAIController.HasDivingSuit(followTarget)) + if (HumanAIController.HasDivingSuit(followTarget) && character.NeedsAir) { needsDivingGear = true; needsDivingSuit = true; } - else if (HumanAIController.HasDivingMask(followTarget)) + else if (HumanAIController.HasDivingMask(followTarget) && character.NeedsAir) { needsDivingGear = true; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs index 383264b6f..443d8b340 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveManager.cs @@ -323,7 +323,6 @@ namespace Barotrauma SortObjectives(); } - private CoroutineHandle speakRoutine; public void SetOrder(Order order, string option, int priority, Character orderGiver, bool speak) { if (character.IsDead) @@ -379,6 +378,7 @@ namespace Barotrauma var newCurrentOrder = CreateObjective(order, option, orderGiver); if (newCurrentOrder != null) { + newCurrentOrder.Abandoned += () => DismissSelf(order, option); CurrentOrders.Add(new OrderInfo(order, option, priority, newCurrentOrder)); } if (!HasOrders()) @@ -386,53 +386,12 @@ namespace Barotrauma // Recreate objectives, because some of them may be removed, if impossible to complete (e.g. due to path finding) CreateAutonomousObjectives(); } - else + else if (newCurrentOrder != null) { - // This should be redundant, because all the objectives are reset when they are selected as active. - newCurrentOrder?.Reset(); - if (speak && character.IsOnPlayerTeam) { - character.Speak(TextManager.Get("DialogAffirmative"), null, 1.0f); - //if (speakRoutine != null) - //{ - // CoroutineManager.StopCoroutines(speakRoutine); - //} - //speakRoutine = CoroutineManager.InvokeAfter(() => - //{ - // if (GameMain.GameSession == null || Level.Loaded == null) { return; } - // if (newCurrentOrder != null && character.SpeechImpediment < 100.0f) - // { - // if (newCurrentOrder is AIObjectiveRepairItems repairItems && repairItems.Targets.None()) - // { - // character.Speak(TextManager.Get("DialogNoRepairTargets"), null, 3.0f, "norepairtargets"); - // } - // else if (newCurrentOrder is AIObjectiveChargeBatteries chargeBatteries && chargeBatteries.Targets.None()) - // { - // character.Speak(TextManager.Get("DialogNoBatteries"), null, 3.0f, "nobatteries"); - // } - // else if (newCurrentOrder is AIObjectiveExtinguishFires extinguishFires && extinguishFires.Targets.None()) - // { - // character.Speak(TextManager.Get("DialogNoFire"), null, 3.0f, "nofire"); - // } - // else if (newCurrentOrder is AIObjectiveFixLeaks fixLeaks && fixLeaks.Targets.None()) - // { - // character.Speak(TextManager.Get("DialogNoLeaks"), null, 3.0f, "noleaks"); - // } - // else if (newCurrentOrder is AIObjectiveFightIntruders fightIntruders && fightIntruders.Targets.None()) - // { - // character.Speak(TextManager.Get("DialogNoEnemies"), null, 3.0f, "noenemies"); - // } - // else if (newCurrentOrder is AIObjectiveRescueAll rescueAll && rescueAll.Targets.None()) - // { - // character.Speak(TextManager.Get("DialogNoRescueTargets"), null, 3.0f, "norescuetargets"); - // } - // else if (newCurrentOrder is AIObjectivePumpWater pumpWater && pumpWater.Targets.None()) - // { - // character.Speak(TextManager.Get("DialogNoPumps"), null, 3.0f, "nopumps"); - // } - // } - //}, 3); + string msg = newCurrentOrder.IsAllowed ? TextManager.Get("DialogAffirmative") : TextManager.Get("DialogNegative"); + character.Speak(msg, delay: 1.0f); } } } @@ -465,7 +424,6 @@ namespace Barotrauma break; case "return": newObjective = new AIObjectiveReturn(character, orderGiver, this, priorityModifier: priorityModifier); - newObjective.Abandoned += () => DismissSelf(order, option); newObjective.Completed += () => DismissSelf(order, option); break; case "fixleaks": @@ -491,12 +449,10 @@ namespace Barotrauma if (!order.TargetItemComponent.Item.IsInteractable(character)) { return null; } newObjective = new AIObjectiveOperateItem(targetPump, character, this, option, false, priorityModifier: priorityModifier) { - IsLoop = true, + IsLoop = false, Override = orderGiver != null && orderGiver.IsCommanding }; - // ItemComponent.AIOperate() returns false by default -> We'd have to set IsLoop = false and implement a custom override of AIOperate for the Pump.cs, - // if we want that the bot just switches the pump on/off and continues doing something else. - // If we want that the bot does the objective and then forgets about it, I think we could do the same plus dismiss when the bot is done. + newObjective.Completed += () => DismissSelf(order, option); } else { @@ -566,6 +522,26 @@ namespace Barotrauma case "escapehandcuffs": newObjective = new AIObjectiveEscapeHandcuffs(character, this, priorityModifier: priorityModifier); break; + case "prepareforexpedition": + newObjective = new AIObjectivePrepare(character, this, order.TargetItems) + { + KeepActiveWhenReady = true, + CheckInventory = true, + Equip = false, + FindAllItems = true + }; + break; + case "findweapon": + newObjective = new AIObjectivePrepare(character, this, order.TargetItems) + { + KeepActiveWhenReady = false, + CheckInventory = false, + Equip = true, + EvaluateCombatPriority = true, + FindAllItems = false + }; + newObjective.Completed += () => DismissSelf(order, option); + break; default: if (order.TargetItemComponent == null) { return null; } if (!order.TargetItemComponent.Item.IsInteractable(character)) { return null; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveOperateItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveOperateItem.cs index 5db86b049..82d572d2a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveOperateItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveOperateItem.cs @@ -213,7 +213,6 @@ namespace Barotrauma { TryAddSubObjective(ref goToObjective, () => new AIObjectiveGoTo(target.Item, character, objectiveManager, closeEnough: 50) { - DialogueIdentifier = "dialogcannotreachtarget", TargetName = target.Item.Name, endNodeFilter = node => node.Waypoint.Ladders == null }, diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectivePrepare.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectivePrepare.cs new file mode 100644 index 000000000..a7edab712 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectivePrepare.cs @@ -0,0 +1,150 @@ +#nullable enable +using Barotrauma.Extensions; +using System.Linq; +using System.Collections.Generic; +using System.Collections.Immutable; + +namespace Barotrauma +{ + class AIObjectivePrepare : AIObjective + { + public override string Identifier { get; set; } = "prepare"; + public override string DebugTag => $"{Identifier}"; + public override bool KeepDivingGearOn => true; + + private AIObjectiveGetItem? getSingleItemObjective; + private AIObjectiveGetItems? getMultipleItemsObjective; + private bool subObjectivesCreated; + private readonly ImmutableArray gearTags; + private readonly HashSet items = new HashSet(); + public bool KeepActiveWhenReady { get; set; } + public bool CheckInventory { get; set; } + public bool FindAllItems { get; set; } + public bool Equip { get; set; } + public bool EvaluateCombatPriority { get; set; } + + private AIObjective? GetSubObjective() => getSingleItemObjective ?? getMultipleItemsObjective as AIObjective; + + public AIObjectivePrepare(Character character, AIObjectiveManager objectiveManager, IEnumerable items, float priorityModifier = 1) + : base(character, objectiveManager, priorityModifier) + { + gearTags = items.ToImmutableArray(); + } + + protected override bool CheckObjectiveSpecific() => IsCompleted; + + protected override float GetPriority() + { + if (!IsAllowed) + { + Priority = 0; + Abandon = true; + return Priority; + } + Priority = objectiveManager.GetOrderPriority(this); + var subObjective = GetSubObjective(); + if (subObjective != null && subObjective.IsCompleted) + { + Priority = 0; + items.RemoveWhere(i => i == null || i.Removed || !i.IsOwnedBy(character)); + if (items.None()) + { + Abandon = true; + + } + else if (items.Any(i => i.Components.Any(i => !i.IsLoaded(character)))) + { + Reset(); + } + } + return Priority; + } + + protected override void Act(float deltaTime) + { + if (character.LockHands) + { + Abandon = true; + return; + } + if (!subObjectivesCreated) + { + if (FindAllItems) + { + if (!TryAddSubObjective(ref getMultipleItemsObjective, () => new AIObjectiveGetItems(character, objectiveManager, gearTags) + { + CheckInventory = CheckInventory, + Equip = Equip, + EvaluateCombatPriority = EvaluateCombatPriority, + RequireLoaded = true + }, + onCompleted: () => + { + if (KeepActiveWhenReady) + { + if (getMultipleItemsObjective != null) + { + foreach (var item in getMultipleItemsObjective.achievedItems) + { + if (item?.IsOwnedBy(character) != null) + { + items.Add(item); + } + } + } + } + else + { + IsCompleted = true; + } + }, + onAbandon: () => Abandon = true)) + { + Abandon = true; + } + } + else + { + if (!TryAddSubObjective(ref getSingleItemObjective, () => new AIObjectiveGetItem(character, gearTags, objectiveManager, equip: Equip, checkInventory: CheckInventory) + { + EvaluateCombatPriority = EvaluateCombatPriority, + SpeakIfFails = true, + RequireLoaded = true + }, + onCompleted: () => + { + if (KeepActiveWhenReady) + { + if (getSingleItemObjective != null) + { + var item = getSingleItemObjective?.TargetItem; + if (item?.IsOwnedBy(character) != null) + { + items.Add(item); + } + } + } + else + { + IsCompleted = true; + } + }, + onAbandon: () => Abandon = true)) + { + Abandon = true; + } + } + subObjectivesCreated = true; + } + } + + public override void Reset() + { + base.Reset(); + items.Clear(); + subObjectivesCreated = false; + RemoveSubObjective(ref getMultipleItemsObjective); + RemoveSubObjective(ref getSingleItemObjective); + } + } +} diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs index a6132f8cb..cd6b24016 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs @@ -107,7 +107,7 @@ namespace Barotrauma { foreach (RelatedItem requiredItem in kvp.Value) { - var getItemObjective = new AIObjectiveGetItem(character, requiredItem.Identifiers, objectiveManager, true) + var getItemObjective = new AIObjectiveGetItem(character, requiredItem.Identifiers, objectiveManager, equip: true) { AllowVariants = requiredItem.AllowVariants }; @@ -219,8 +219,7 @@ namespace Barotrauma { // Don't stop in ladders, because we can't interact with other items while holding the ladders. endNodeFilter = node => node.Waypoint.Ladders == null, - // Allow repairing hatches and airlock doors. - AllowGoingOutside = HumanAIController.ObjectiveManager.IsCurrentOrder() && Item.GetComponent() != null + TargetName = Item.Name }; if (repairTool != null) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItems.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItems.cs index 58bc98213..92f1e67e6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItems.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItems.cs @@ -91,8 +91,7 @@ namespace Barotrauma public static bool NearlyFullCondition(Item item) { - float condition = item.ConditionPercentage; - return item.Repairables.All(r => condition >= r.RepairThreshold); + return item.Repairables.All(r => !r.IsBelowRepairThreshold); } protected override float TargetEvaluation() diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs index 3d7b364ca..0da0eecd3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs @@ -319,9 +319,32 @@ namespace Barotrauma { itemListStr = itemNameList[0]; } + else if (itemNameList.Count == 2) + { + //[treatment1] or [treatment2] + itemListStr = TextManager.GetWithVariables( + "DialogRequiredTreatmentOptionsLast", + new string[] { "[treatment1]", "[treatment2]" }, + new string[] { itemNameList[0], itemNameList[1] }); + } else { - itemListStr = string.Join(" or ", string.Join(", ", itemNameList.Take(itemNameList.Count - 1)), itemNameList.Last()); + //[treatment1], [treatment2], [treatment3] ... or [treatmentx] + itemListStr = TextManager.GetWithVariables( + "DialogRequiredTreatmentOptionsFirst", + new string[] { "[treatment1]", "[treatment2]" }, + new string[] { itemNameList[0], itemNameList[1] }); + for (int i = 2; i < itemNameList.Count - 1; i++) + { + itemListStr = TextManager.GetWithVariables( + "DialogRequiredTreatmentOptionsFirst", + new string[] { "[treatment1]", "[treatment2]" }, + new string[] { itemListStr, itemNameList[i] }); + } + itemListStr = TextManager.GetWithVariables( + "DialogRequiredTreatmentOptionsLast", + new string[] { "[treatment1]", "[treatment2]" }, + new string[] { itemListStr, itemNameList.Last() }); } if (targetCharacter != character && character.IsOnPlayerTeam) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescueAll.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescueAll.cs index eb7504c08..d27ef7b37 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescueAll.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescueAll.cs @@ -79,6 +79,7 @@ namespace Barotrauma { if (target == null || target.IsDead || target.Removed) { return false; } if (target.IsInstigator) { return false; } + if (target.IsPet) { return false; } if (!HumanAIController.IsFriendly(character, target, onlySameTeam: true)) { return false; } if (character.AIController is HumanAIController humanAI) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Order.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Order.cs index 57b024e16..694b78aa2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Order.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Order.cs @@ -170,6 +170,7 @@ namespace Barotrauma public bool HasOptions => (IsPrefab ? Options : Prefab.Options).Length > 1; public bool IsPrefab { get; private set; } public readonly bool MustManuallyAssign; + public readonly bool AutoDismiss; public readonly OrderTarget TargetPosition; @@ -363,6 +364,7 @@ namespace Barotrauma MustManuallyAssign = orderElement.GetAttributeBool("mustmanuallyassign", false); IsIgnoreOrder = Identifier == "ignorethis" || Identifier == "unignorethis"; DrawIconWhenContained = orderElement.GetAttributeBool("displayiconwhencontained", false); + AutoDismiss = orderElement.GetAttributeBool("autodismiss", Category == OrderCategory.Movement); } /// diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs index 37a5a7029..7012a205f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs @@ -1048,7 +1048,8 @@ namespace Barotrauma void UpdateClimbing() { - if (character.SelectedConstruction == null || character.SelectedConstruction.GetComponent() == null || character.IsIncapacitated) + var ladder = character.SelectedConstruction?.GetComponent(); + if (ladder == null || character.IsIncapacitated) { Anim = Animation.None; return; @@ -1075,22 +1076,29 @@ namespace Barotrauma if (leftHand == null || rightHand == null || head == null || torso == null) { return; } Vector2 ladderSimPos = ConvertUnits.ToSimUnits( - character.SelectedConstruction.Rect.X + character.SelectedConstruction.Rect.Width / 2.0f, - character.SelectedConstruction.Rect.Y); + ladder.Item.Rect.X + ladder.Item.Rect.Width / 2.0f, + ladder.Item.Rect.Y); - Vector2 ladderSimSize = ConvertUnits.ToSimUnits(character.SelectedConstruction.Rect.Size.ToVector2()); + Vector2 ladderSimSize = ConvertUnits.ToSimUnits(ladder.Item.Rect.Size.ToVector2()); + + float lowestLadderSimPos = ladderSimPos.Y - ladderSimPos.Y; + var lowestNearbyLadder = GetLowestNearbyLadder(ladder); + if (lowestNearbyLadder != null && lowestNearbyLadder != ladder) + { + ladderSimSize.Y = ConvertUnits.ToSimUnits(ladder.Item.WorldRect.Y - (lowestNearbyLadder.Item.WorldRect.Y - lowestNearbyLadder.Item.Rect.Size.Y)); + } float stepHeight = ConvertUnits.ToSimUnits(30.0f); - if (currentHull == null && character.SelectedConstruction.Submarine != null) + if (currentHull == null && ladder.Item.Submarine != null) { - ladderSimPos += character.SelectedConstruction.Submarine.SimPosition; + ladderSimPos += ladder.Item.Submarine.SimPosition; } - else if (currentHull?.Submarine != null && currentHull.Submarine != character.SelectedConstruction.Submarine && character.SelectedConstruction.Submarine != null) + else if (currentHull?.Submarine != null && currentHull.Submarine != ladder.Item.Submarine && ladder.Item.Submarine != null) { - ladderSimPos += character.SelectedConstruction.Submarine.SimPosition - currentHull.Submarine.SimPosition; + ladderSimPos += ladder.Item.Submarine.SimPosition - currentHull.Submarine.SimPosition; } - else if (currentHull?.Submarine != null && character.SelectedConstruction.Submarine == null) + else if (currentHull?.Submarine != null && ladder.Item.Submarine == null) { ladderSimPos -= currentHull.Submarine.SimPosition; } @@ -1174,25 +1182,35 @@ namespace Barotrauma float movementFactor = (handPos.Y / stepHeight) * (float)Math.PI; movementFactor = 0.8f + (float)Math.Abs(Math.Sin(movementFactor)); - Vector2 subSpeed = currentHull != null || character.SelectedConstruction.Submarine == null - ? Vector2.Zero : character.SelectedConstruction.Submarine.Velocity; + Vector2 subSpeed = currentHull != null || ladder.Item.Submarine == null + ? Vector2.Zero : ladder.Item.Submarine.Velocity; Vector2 climbForce = new Vector2(0.0f, movement.Y + 0.3f) * movementFactor; + //reached the top of the ladders -> can't go further up if (character.SimPosition.Y > ladderSimPos.Y) { climbForce.Y = Math.Min(0.0f, climbForce.Y); } + //reached the bottom -> can't go further down + float minHeightFromFloor = ColliderHeightFromFloor / 2 + Collider.height; + if (floorFixture != null && + !floorFixture.CollisionCategories.HasFlag(Physics.CollisionStairs) && + !floorFixture.CollisionCategories.HasFlag(Physics.CollisionPlatform) && + character.SimPosition.Y < standOnFloorY + minHeightFromFloor) + { + climbForce.Y = MathHelper.Clamp((standOnFloorY + minHeightFromFloor - character.SimPosition.Y) * 5.0f, climbForce.Y, 1.0f); + } //apply forces to the collider to move the Character up/down Collider.ApplyForce((climbForce * 20.0f + subSpeed * 50.0f) * Collider.Mass); float movementMultiplier = targetMovement.Y < 0 ? 0 : 1; head.body.SmoothRotate(MathHelper.PiOver4 * movementMultiplier * Dir, WalkParams.HeadTorque); - if (!character.SelectedConstruction.Prefab.Triggers.Any()) + if (!ladder.Item.Prefab.Triggers.Any()) { character.SelectedConstruction = null; return; } - Rectangle trigger = character.SelectedConstruction.Prefab.Triggers.FirstOrDefault(); - trigger = character.SelectedConstruction.TransformTrigger(trigger); + Rectangle trigger = ladder.Item.Prefab.Triggers.FirstOrDefault(); + trigger = ladder.Item.TransformTrigger(trigger); bool isRemote = false; bool isClimbing = true; @@ -1221,6 +1239,19 @@ namespace Barotrauma character.SelectedConstruction = null; IgnorePlatforms = false; } + + Ladder GetLowestNearbyLadder(Ladder currentLadder, float threshold = 16.0f) + { + foreach (Ladder ladder in Ladder.List) + { + if (ladder == currentLadder || !ladder.Item.IsInteractable(character)) { continue; } + if (Math.Abs(ladder.Item.WorldPosition.X - currentLadder.Item.WorldPosition.X) > threshold) { continue; } + if (ladder.Item.WorldPosition.Y > currentLadder.Item.WorldPosition.Y) { continue; } + if ((currentLadder.Item.WorldRect.Y - currentLadder.Item.Rect.Height) - ladder.Item.WorldRect.Y > threshold) { continue; } + return ladder; + } + return null; + } } void UpdateDying(float deltaTime) @@ -1576,6 +1607,7 @@ namespace Barotrauma Vector2 shoulderPos = rightShoulder.WorldAnchorA; Vector2 dragDir = inWater ? Vector2.Normalize(targetLimb.SimPosition - shoulderPos) : Vector2.UnitY; + if (!MathUtils.IsValid(dragDir)) { dragDir = Vector2.UnitY; } targetAnchor = shoulderPos - dragDir * ConvertUnits.ToSimUnits(upperArmLength + forearmLength); targetForce = 200.0f; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs index 5913768c7..9dafa66bc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs @@ -121,6 +121,7 @@ namespace Barotrauma protected Vector2 overrideTargetMovement; protected float floorY, standOnFloorY; + protected Fixture floorFixture; protected Vector2 floorNormal = Vector2.UnitY; protected float surfaceY; @@ -488,6 +489,7 @@ namespace Barotrauma limbDictionary = new Dictionary(); limbs = new Limb[RagdollParams.Limbs.Count]; RagdollParams.Limbs.ForEach(l => AddLimb(l)); + if (limbs.Contains(null)) { return; } SetupDrawOrder(); } @@ -548,19 +550,23 @@ namespace Barotrauma byte ID = Convert.ToByte(limbParams.ID); Limb limb = new Limb(this, character, limbParams); limb.body.FarseerBody.OnCollision += OnLimbCollision; + if (ID >= Limbs.Length) + { + throw new Exception($"Failed to add a limb to the character \"{Character?.ConfigPath ?? "null"}\" (limb index {ID} out of bounds). The ragdoll file may be configured incorrectly."); + } Limbs[ID] = limb; Mass += limb.Mass; - if (!limbDictionary.ContainsKey(limb.type)) limbDictionary.Add(limb.type, limb); + if (!limbDictionary.ContainsKey(limb.type)) { limbDictionary.Add(limb.type, limb); } } public void AddLimb(Limb limb) { - if (Limbs.Contains(limb)) return; + if (Limbs.Contains(limb)) { return; } limb.body.FarseerBody.OnCollision += OnLimbCollision; Array.Resize(ref limbs, Limbs.Length + 1); Limbs[Limbs.Length - 1] = limb; Mass += limb.Mass; - if (!limbDictionary.ContainsKey(limb.type)) limbDictionary.Add(limb.type, limb); + if (!limbDictionary.ContainsKey(limb.type)) { limbDictionary.Add(limb.type, limb); } SetupDrawOrder(); } @@ -923,8 +929,8 @@ namespace Barotrauma } Hull newHull = Hull.FindHull(findPos, currentHull); - - if (newHull == currentHull) return; + + if (newHull == currentHull) { return; } if (!CanEnterSubmarine || (character.AIController != null && !character.AIController.CanEnterSubmarine)) { @@ -957,16 +963,16 @@ namespace Barotrauma if (newHull?.Submarine == null && currentHull?.Submarine != null) { //don't teleport out yet if the character is going through a gap - if (Gap.FindAdjacent(currentHull.ConnectedGaps, findPos, 150.0f) != null) { return; } if (Gap.FindAdjacent(Gap.GapList.Where(g => g.Submarine == currentHull.Submarine), findPos, 150.0f) != null) { return; } + if (Limbs.Any(l => Gap.FindAdjacent(currentHull.ConnectedGaps, l.WorldPosition, ConvertUnits.ToDisplayUnits(l.body.GetSize().Combine())) != null)) { return; } character.MemLocalState?.Clear(); - Teleport(ConvertUnits.ToSimUnits(currentHull.Submarine.Position), currentHull.Submarine.Velocity); + Teleport(ConvertUnits.ToSimUnits(currentHull.Submarine.Position), currentHull.Submarine.Velocity, detachProjectiles: false); } //out -> in else if (currentHull == null && newHull.Submarine != null) { character.MemLocalState?.Clear(); - Teleport(-ConvertUnits.ToSimUnits(newHull.Submarine.Position), -newHull.Submarine.Velocity); + Teleport(-ConvertUnits.ToSimUnits(newHull.Submarine.Position), -newHull.Submarine.Velocity, detachProjectiles: false); } //from one sub to another else if (newHull != null && currentHull != null && newHull.Submarine != currentHull.Submarine) @@ -974,13 +980,13 @@ namespace Barotrauma character.MemLocalState?.Clear(); Vector2 newSubPos = newHull.Submarine == null ? Vector2.Zero : newHull.Submarine.Position; Vector2 prevSubPos = currentHull.Submarine == null ? Vector2.Zero : currentHull.Submarine.Position; - - Teleport(ConvertUnits.ToSimUnits(prevSubPos - newSubPos), Vector2.Zero); + Teleport(ConvertUnits.ToSimUnits(prevSubPos - newSubPos), Vector2.Zero, detachProjectiles: false); } } CurrentHull = newHull; character.Submarine = currentHull?.Submarine; + character.AttachedProjectiles.ForEach(p => p?.Item?.UpdateTransform()); } private void PreventOutsideCollision() @@ -1013,7 +1019,7 @@ namespace Barotrauma } } - public void Teleport(Vector2 moveAmount, Vector2 velocityChange) + public void Teleport(Vector2 moveAmount, Vector2 velocityChange, bool detachProjectiles = true) { foreach (Limb limb in Limbs) { @@ -1036,7 +1042,7 @@ namespace Barotrauma character.DisableImpactDamageTimer = 0.25f; - SetPosition(Collider.SimPosition + moveAmount); + SetPosition(Collider.SimPosition + moveAmount, detachProjectiles: detachProjectiles); character.CursorPosition += moveAmount; Collider?.UpdateDrawPosition(); @@ -1500,6 +1506,7 @@ namespace Barotrauma { onGround = false; Stairs = null; + floorFixture = null; Vector2 rayStart = simPosition; float height = ColliderHeightFromFloor; if (HeadPosition.HasValue && MathUtils.IsValid(HeadPosition.Value)) { height = Math.Max(height, HeadPosition.Value); } @@ -1572,6 +1579,7 @@ namespace Barotrauma if (standOnFloorFixture != null && !IsHanging) { + floorFixture = standOnFloorFixture; standOnFloorY = rayStart.Y + (rayEnd.Y - rayStart.Y) * standOnFloorFraction; if (rayStart.Y - standOnFloorY < Collider.height * 0.5f + Collider.radius + ColliderHeightFromFloor * 1.2f) { @@ -1612,7 +1620,7 @@ namespace Barotrauma } } - public void SetPosition(Vector2 simPosition, bool lerp = false, bool ignorePlatforms = true, bool forceMainLimbToCollider = false) + public void SetPosition(Vector2 simPosition, bool lerp = false, bool ignorePlatforms = true, bool forceMainLimbToCollider = false, bool detachProjectiles = true) { if (!MathUtils.IsValid(simPosition)) { @@ -1625,13 +1633,28 @@ namespace Barotrauma } if (MainLimb == null) { return; } + // A Work-around for an issue with teleporting the characters: + // Detach every latcher when either one of the latchers or the target is teleported, + // because otherwise all the characters are teleported to invalid positions. if (Character.AIController is EnemyAIController enemyAI && enemyAI.LatchOntoAI != null && enemyAI.LatchOntoAI.IsAttached) { + var target = enemyAI.LatchOntoAI.TargetCharacter; + if (target != null) + { + target.Latchers.ForEachMod(l => l?.DeattachFromBody(reset: true)); + target.Latchers.Clear(); + } enemyAI.LatchOntoAI.DeattachFromBody(reset: true); } - Character.Latchers.ForEachMod(l => l.DeattachFromBody(reset: true)); + Character.Latchers.ForEachMod(l => l?.DeattachFromBody(reset: true)); Character.Latchers.Clear(); + if (detachProjectiles) + { + character.AttachedProjectiles.ForEachMod(p => p?.Unstick()); + character.AttachedProjectiles.Clear(); + } + Vector2 limbMoveAmount = forceMainLimbToCollider ? simPosition - MainLimb.SimPosition : simPosition - Collider.SimPosition; if (lerp) { @@ -1712,7 +1735,7 @@ namespace Barotrauma if (distSqrd > resetDist * resetDist) { //ragdoll way too far, reset position - SetPosition(Collider.SimPosition, true, forceMainLimbToCollider: true); + SetPosition(Collider.SimPosition, lerp: true, forceMainLimbToCollider: true); } if (distSqrd > allowedDist * allowedDist) { @@ -1732,7 +1755,7 @@ namespace Barotrauma else if (collisionsDisabled) { //set the position of the ragdoll to make sure limbs don't get stuck inside walls when re-enabling collisions - SetPosition(Collider.SimPosition, true); + SetPosition(Collider.SimPosition, lerp: true); collisionsDisabled = false; //force collision categories to be updated prevCollisionCategory = Category.None; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs index 639a02146..d6cbaf017 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs @@ -130,6 +130,7 @@ namespace Barotrauma } public readonly HashSet Latchers = new HashSet(); + public readonly HashSet AttachedProjectiles = new HashSet(); protected readonly Dictionary activeTeamChanges = new Dictionary(); protected ActiveTeamChange currentTeamChange; @@ -265,7 +266,7 @@ namespace Barotrauma private CharacterPrefab prefab; public readonly CharacterParams Params; - public string SpeciesName => Params.SpeciesName; + public string SpeciesName => Params?.SpeciesName ?? "null"; public string Group => Params.Group; public bool IsHumanoid => Params.Humanoid; public bool IsHusk => Params.Husk; @@ -2640,7 +2641,7 @@ namespace Barotrauma ApplyStatusEffects(ActionType.Always, deltaTime); PreviousHull = CurrentHull; - CurrentHull = Hull.FindHull(WorldPosition, CurrentHull, true); + CurrentHull = Hull.FindHull(WorldPosition, CurrentHull, useWorldCoordinates: true); speechBubbleTimer = Math.Max(0.0f, speechBubbleTimer - deltaTime); @@ -2710,7 +2711,7 @@ namespace Barotrauma if (GameMain.NetworkMember == null || !GameMain.NetworkMember.IsClient) { Implode(); - if (IsDead) { return; } + if (IsDead) { return; } } } } @@ -2719,7 +2720,9 @@ namespace Barotrauma PressureTimer = 0.0f; } } - else if ((GameMain.NetworkMember == null || !GameMain.NetworkMember.IsClient) && WorldPosition.Y < CharacterHealth.CrushDepth) + else if ((GameMain.NetworkMember == null || !GameMain.NetworkMember.IsClient) && + PressureProtection < (Level.Loaded?.GetRealWorldDepth(WorldPosition.Y) ?? 1.0f) && + WorldPosition.Y < CharacterHealth.CrushDepth) { //implode if below crush depth, and either outside or in a high-pressure hull if (AnimController.CurrentHull == null || AnimController.CurrentHull.LethalPressure >= 80.0f) @@ -3124,47 +3127,53 @@ namespace Barotrauma //set the character order only if the character is close enough to hear the message if (!force && orderGiver != null && !CanHearCharacter(orderGiver)) { return; } - if (order != null && order.OrderGiver != orderGiver) + if (order != null) { - order.OrderGiver = orderGiver; - } - - switch (order?.Category) - { - case OrderCategory.Operate when order?.TargetEntity != null: - // If there's another character operating the same device, make them dismiss themself - foreach (var character in CharacterList) + if (order.OrderGiver != orderGiver) + { + order.OrderGiver = orderGiver; + } + if (order.AutoDismiss) + { + switch (order.Category) { - if (character == this) { continue; } - if (character.TeamID != TeamID) { continue; } - if (!(character.AIController is HumanAIController)) { continue; } - if (!HumanAIController.IsActive(character)) { continue; } - foreach (var currentOrder in character.CurrentOrders) - { - if (currentOrder.Order == null) { continue; } - if (currentOrder.Order.Category != OrderCategory.Operate) { continue; } - if (currentOrder.Order.Identifier != order.Identifier) { continue; } - if (currentOrder.Order.TargetEntity != order.TargetEntity) { continue; } - character.SetOrder(Order.GetPrefab("dismissed"), Order.GetDismissOrderOption(currentOrder), currentOrder.ManualPriority, character, speak: speak, force: force); + case OrderCategory.Operate when order.TargetEntity != null: + // If there's another character operating the same device, make them dismiss themself + foreach (var character in CharacterList) + { + if (character == this) { continue; } + if (character.TeamID != TeamID) { continue; } + if (!(character.AIController is HumanAIController)) { continue; } + if (!HumanAIController.IsActive(character)) { continue; } + foreach (var currentOrder in character.CurrentOrders) + { + if (currentOrder.Order == null) { continue; } + if (currentOrder.Order.Category != OrderCategory.Operate) { continue; } + if (currentOrder.Order.Identifier != order.Identifier) { continue; } + if (currentOrder.Order.TargetEntity != order.TargetEntity) { continue; } + if (!currentOrder.Order.AutoDismiss) { continue; } + character.SetOrder(Order.GetPrefab("dismissed"), Order.GetDismissOrderOption(currentOrder), currentOrder.ManualPriority, character, speak: speak, force: force); + break; + } + } + break; + case OrderCategory.Movement: + // If there character has another movement order, dismiss that order + OrderInfo? orderToReplace = null; + foreach (var currentOrder in CurrentOrders) + { + if (currentOrder.Order == null) { continue; } + if (currentOrder.Order.Category != OrderCategory.Movement) { continue; } + orderToReplace = currentOrder; + break; + } + if (orderToReplace.HasValue && orderToReplace.Value.Order.AutoDismiss) + { + SetOrder(Order.GetPrefab("dismissed"), Order.GetDismissOrderOption(orderToReplace.Value), orderToReplace.Value.ManualPriority, this, speak: speak, force: force); + } break; - } } - break; - case OrderCategory.Movement: - // If there character has another movement order, dismiss that order - OrderInfo? orderToReplace = null; - foreach (var currentOrder in CurrentOrders) - { - if (currentOrder.Order == null) { continue; } - if (currentOrder.Order.Category != OrderCategory.Movement) { continue; } - orderToReplace = currentOrder; - break; - } - if (orderToReplace.HasValue) - { - SetOrder(Order.GetPrefab("dismissed"), Order.GetDismissOrderOption(orderToReplace.Value), orderToReplace.Value.ManualPriority, this, speak: speak, force: force); - } - break; + } } // Prevent adding duplicate orders @@ -3624,7 +3633,7 @@ namespace Barotrauma { if (attacker.TeamID == TeamID) { - afflictions = afflictions.Where(a => !a.Prefab.IsBuff); + afflictions = afflictions.Where(a => a.Prefab.IsBuff); if (!afflictions.Any()) { return new AttackResult(); } } } @@ -3936,6 +3945,7 @@ namespace Barotrauma } SelectedConstruction = null; + SelectedCharacter = null; AnimController.ResetPullJoints(); @@ -4063,10 +4073,11 @@ namespace Barotrauma public void TeleportTo(Vector2 worldPos) { + CurrentHull = null; AnimController.CurrentHull = null; Submarine = null; - AnimController.SetPosition(ConvertUnits.ToSimUnits(worldPos), false); - AnimController.FindHull(worldPos, true); + AnimController.SetPosition(ConvertUnits.ToSimUnits(worldPos), lerp: false); + AnimController.FindHull(worldPos, setSubmarine: true); } public static void SaveInventory(Inventory inventory, XElement parentElement) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs index c193a3918..00212a48b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs @@ -1176,7 +1176,7 @@ namespace Barotrauma int salary = 0; foreach (Skill skill in Job.Skills) { - salary += (int)(skill.Level * skill.Prefab.PriceMultiplier); + salary += (int)(skill.Level * skill.PriceMultiplier); } return (int)(salary * Job.Prefab.PriceMultiplier); @@ -1274,19 +1274,18 @@ namespace Barotrauma return Math.Max(GetTotalTalentPoints() - GetUnlockedTalentsInTree().Count(), 0); } - public float GetProgressTowardsNextLevel() + public int GetProgressTowardsNextLevel() { - float progress = (ExperiencePoints - GetExperienceRequiredForCurrentLevel()) / (GetExperienceRequiredToLevelUp() - GetExperienceRequiredForCurrentLevel()); - return progress; + return (ExperiencePoints - GetExperienceRequiredForCurrentLevel()) / (GetExperienceRequiredToLevelUp() - GetExperienceRequiredForCurrentLevel()); } - public float GetExperienceRequiredForCurrentLevel() + public int GetExperienceRequiredForCurrentLevel() { GetCurrentLevel(out int experienceRequired); return experienceRequired; } - public float GetExperienceRequiredToLevelUp() + public int GetExperienceRequiredToLevelUp() { int level = GetCurrentLevel(out int experienceRequired); return experienceRequired + ExperienceRequiredPerLevel(level); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs index 5203f1728..165ed8bdd 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionHusk.cs @@ -174,7 +174,8 @@ namespace Barotrauma private void CharacterDead(Character character, CauseOfDeath causeOfDeath) { if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; } - if (Strength < TransformThresholdOnDeath || character.Removed) + if (Strength < TransformThresholdOnDeath || character.Removed || + character.CharacterHealth.GetAllAfflictions().Any(a => a.GetActiveEffect()?.BlockTransformation.Contains(Prefab.Identifier) ?? false)) { UnsubscribeFromDeathEvent(); return; @@ -193,7 +194,7 @@ namespace Barotrauma CoroutineManager.StartCoroutine(CreateAIHusk()); } - private IEnumerable CreateAIHusk() + private IEnumerable CreateAIHusk() { //character already in remove queue (being removed by something else, for example a modded affliction that uses AfflictionHusk as the base) // -> don't spawn the AI husk diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs index f527262ad..e20ac25cf 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs @@ -234,6 +234,11 @@ namespace Barotrauma [Serialize("0,0,0,0", false)] public Color MaxBodyTint { get; private set; } + /// + /// Prevents AfflictionHusks with the specified identifier(s) from transforming the character into an AI-controlled character + /// + public string[] BlockTransformation { get; private set; } + public readonly Dictionary AfflictionStatValues = new Dictionary(); public readonly HashSet AfflictionAbilityFlags = new HashSet(); @@ -245,6 +250,7 @@ namespace Barotrauma SerializableProperty.DeserializeProperties(this, element); resistanceFor = element.GetAttributeStringArray("resistancefor", new string[0], convertToLowerInvariant: true); + BlockTransformation = element.GetAttributeStringArray("blocktransformation", new string[0], convertToLowerInvariant: true); foreach (XElement subElement in element.Elements()) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/HumanPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/HumanPrefab.cs index e1dfcebc8..0c7fb8a78 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/HumanPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/HumanPrefab.cs @@ -153,7 +153,10 @@ namespace Barotrauma (GameMain.GameSession.GameMode as CampaignMode)?.AssignNPCMenuInteraction(npc, CampaignInteractionType); if (positionToStayIn != null && humanAI != null) { - humanAI.ObjectiveManager.SetForcedOrder(new AIObjectiveGoTo(positionToStayIn, npc, humanAI.ObjectiveManager, repeat: true, getDivingGearIfNeeded: false, closeEnough: 200)); + humanAI.ObjectiveManager.SetForcedOrder(new AIObjectiveGoTo(positionToStayIn, npc, humanAI.ObjectiveManager, repeat: true, getDivingGearIfNeeded: false, closeEnough: 200) + { + DebugLogWhenFails = false + }); } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs index 2841d305e..04c7a3acd 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Job.cs @@ -9,7 +9,7 @@ namespace Barotrauma { private readonly JobPrefab prefab; - private Dictionary skills; + private readonly Dictionary skills; public string Name { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/JobPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/JobPrefab.cs index 5bb3e5286..442f29ab9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/JobPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/JobPrefab.cs @@ -282,7 +282,7 @@ namespace Barotrauma Variants = variant; - Skills.Sort((x,y) => y.LevelRange.X.CompareTo(x.LevelRange.X)); + Skills.Sort((x,y) => y.LevelRange.Start.CompareTo(x.LevelRange.Start)); // Disabled on purpose, TODO: remove all references? //ClothingElement = element.GetChildElement("PortraitClothing"); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Skill.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Skill.cs index f3a502403..e4fab177c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Skill.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/Skill.cs @@ -34,14 +34,14 @@ namespace Barotrauma } } - internal SkillPrefab Prefab { get; private set; } + public readonly float PriceMultiplier = 1.0f; public Skill(SkillPrefab prefab) { - this.Prefab = prefab; Identifier = prefab.Identifier; - level = Rand.Range(prefab.LevelRange.X, prefab.LevelRange.Y, Rand.RandSync.Server); + level = Rand.Range(prefab.LevelRange.Start, prefab.LevelRange.End, Rand.RandSync.Server); icon = GetIcon(); + PriceMultiplier = prefab.PriceMultiplier; } public Skill(string identifier, float level) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/SkillPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/SkillPrefab.cs index 8aa7bf6b4..d4bb305f3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/SkillPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Jobs/SkillPrefab.cs @@ -7,7 +7,7 @@ namespace Barotrauma { public readonly string Identifier; - public Vector2 LevelRange { get; private set; } + public Range LevelRange { get; private set; } /// /// How much this skill affects characters' hiring cost @@ -23,12 +23,13 @@ namespace Barotrauma var levelString = element.GetAttributeString("level", ""); if (levelString.Contains(",")) { - LevelRange = XMLExtensions.ParseVector2(levelString, false); + var rangeVector2 = XMLExtensions.ParseVector2(levelString, false); + LevelRange = new Range(rangeVector2.X, rangeVector2.Y); } else { float skillLevel = float.Parse(levelString, System.Globalization.CultureInfo.InvariantCulture); - LevelRange = new Vector2(skillLevel, skillLevel); + LevelRange = new Range(skillLevel, skillLevel); } IsPrimarySkill = element.GetAttributeBool("primary", false); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs index 9731b08d5..8f5eb2299 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs @@ -430,8 +430,15 @@ namespace Barotrauma public float Dir { - get { return ((dir == Direction.Left) ? -1.0f : 1.0f); } - set { dir = (value == -1.0f) ? Direction.Left : Direction.Right; } + get { return (dir == Direction.Left) ? -1.0f : 1.0f; } + set + { + dir = (value == -1.0f) ? Direction.Left : Direction.Right; + if (body != null) + { + body.Dir = Dir; + } + } } public int RefJointIndex => Params.RefJoint; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionAttackData.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionAttackData.cs index ee5fedac0..1112c063a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionAttackData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionAttackData.cs @@ -16,10 +16,12 @@ namespace Barotrauma.Abilities private readonly string itemIdentifier; private readonly string[] tags; private readonly WeaponType weapontype; + private bool ignoreNonHarmfulAttacks; public AbilityConditionAttackData(CharacterTalent characterTalent, XElement conditionElement) : base(characterTalent, conditionElement) { itemIdentifier = conditionElement.GetAttributeString("itemidentifier", ""); tags = conditionElement.GetAttributeStringArray("tags", new string[0], convertToLowerInvariant: true); + ignoreNonHarmfulAttacks = conditionElement.GetAttributeBool("ignorenonharmfulattacks", false); switch (conditionElement.GetAttributeString("weapontype", "")) { case "melee": @@ -35,8 +37,15 @@ namespace Barotrauma.Abilities { if (abilityObject is AbilityAttackData attackData) { - Item item = attackData?.SourceAttack?.SourceItem; + if (ignoreNonHarmfulAttacks && attackData.SourceAttack != null) + { + if (attackData.SourceAttack.Stun <= 0.0f && (attackData.SourceAttack.Afflictions?.All(a => a.Key.Prefab.IsBuff) ?? true)) + { + return false; + } + } + Item item = attackData?.SourceAttack?.SourceItem; if (item == null) { DebugConsole.AddWarning($"Source Item was not found in {this} for talent {characterTalent.DebugIdentifier}!"); @@ -61,10 +70,13 @@ namespace Barotrauma.Abilities switch (weapontype) { + // it is possible that an item that has both a melee and a projectile component will return true + // even when not used as a melee/ranged weapon respectively + // attackdata should contain data regarding whether the attack is melee or not case WeaponType.Melee: return item.GetComponent() != null; case WeaponType.Ranged: - return item.GetComponent() != null; + return item.GetComponent() != null; } return true; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionData.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionData.cs index fe3608df4..0d25f107e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionData.cs @@ -18,13 +18,13 @@ namespace Barotrauma.Abilities protected void LogAbilityConditionError(AbilityObject abilityObject, Type expectedData) { - DebugConsole.ThrowError($"Used data-reliant ability condition when data is incompatible! Expected {expectedData}, but received {abilityObject}"); + DebugConsole.ThrowError($"Used data-reliant ability condition when data is incompatible! Expected {expectedData}, but received {abilityObject} in talent {characterTalent.DebugIdentifier}"); } protected abstract bool MatchesConditionSpecific(AbilityObject abilityObject); public override bool MatchesCondition() { - DebugConsole.ThrowError("Used data-reliant ability condition in a state-based ability! This is not allowed."); + DebugConsole.ThrowError($"Used data-reliant ability condition in a state-based ability in talent {characterTalent.DebugIdentifier}! This is not allowed."); return false; } public override bool MatchesCondition(AbilityObject abilityObject) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbility.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbility.cs index 650bf1863..0abc6dbc1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbility.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbility.cs @@ -79,17 +79,17 @@ namespace Barotrauma.Abilities protected virtual void ApplyEffect() { - DebugConsole.AddWarning($"Ability {this} used improperly! This ability does not have a definition for ApplyEffect"); + DebugConsole.AddWarning($"Ability {this} used improperly! This ability does not have a definition for ApplyEffect in talent {CharacterTalent.DebugIdentifier}"); } protected virtual void ApplyEffect(AbilityObject abilityObject) { - DebugConsole.AddWarning($"Ability {this} used improperly! This ability does not take a parameter for ApplyEffect"); + DebugConsole.AddWarning($"Ability {this} used improperly! This ability does not take a parameter for ApplyEffect in talent {CharacterTalent.DebugIdentifier}"); } protected void LogabilityObjectMismatch() { - DebugConsole.ThrowError($"Incompatible ability! Ability {this} is incompatitible with this type of ability effect type."); + DebugConsole.ThrowError($"Incompatible ability! Ability {this} is incompatitible with this type of ability effect type in talent {CharacterTalent.DebugIdentifier}"); } // XML diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs index a59955d4d..c30ac8152 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs @@ -10,8 +10,10 @@ namespace Barotrauma.Abilities protected readonly List statusEffects; + private readonly bool applyToSelf; private readonly bool nearbyCharactersAppliesToSelf; private readonly bool nearbyCharactersAppliesToAllies; + private readonly bool nearbyCharactersAppliesToEnemies; private readonly bool applyToSelected; readonly List targets = new List(); @@ -19,9 +21,11 @@ namespace Barotrauma.Abilities public CharacterAbilityApplyStatusEffects(CharacterAbilityGroup characterAbilityGroup, XElement abilityElement) : base(characterAbilityGroup, abilityElement) { statusEffects = CharacterAbilityGroup.ParseStatusEffects(CharacterTalent, abilityElement.GetChildElement("statuseffects")); + applyToSelf = abilityElement.GetAttributeBool("applytoself", false); applyToSelected = abilityElement.GetAttributeBool("applytoselected", false); nearbyCharactersAppliesToSelf = abilityElement.GetAttributeBool("nearbycharactersappliestoself", true); nearbyCharactersAppliesToAllies = abilityElement.GetAttributeBool("nearbycharactersappliestoallies", true); + nearbyCharactersAppliesToEnemies = abilityElement.GetAttributeBool("nearbycharactersappliestoenemies", true); } protected void ApplyEffectSpecific(Character targetCharacter) @@ -46,6 +50,10 @@ namespace Barotrauma.Abilities { targets.RemoveAll(c => c is Character otherCharacter && HumanAIController.IsFriendly(otherCharacter, Character)); } + if (!nearbyCharactersAppliesToEnemies) + { + targets.RemoveAll(c => c is Character otherCharacter && !HumanAIController.IsFriendly(otherCharacter, Character)); + } statusEffect.SetUser(Character); statusEffect.Apply(ActionType.OnAbility, EffectDeltaTime, targetCharacter, targets); } @@ -75,7 +83,7 @@ namespace Barotrauma.Abilities protected override void ApplyEffect(AbilityObject abilityObject) { - if ((abilityObject as IAbilityCharacter)?.Character is Character targetCharacter) + if ((abilityObject as IAbilityCharacter)?.Character is Character targetCharacter && !applyToSelf) { ApplyEffectSpecific(targetCharacter); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToAllies.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToAllies.cs index 9cbaa17eb..a2fc33e5c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToAllies.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToAllies.cs @@ -31,5 +31,10 @@ namespace Barotrauma.Abilities } } + protected override void ApplyEffect(AbilityObject abilityObject) + { + ApplyEffect(); + } + } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAttackData.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAttackData.cs index 30b6eb7c4..8b4245dc9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAttackData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAttackData.cs @@ -5,7 +5,7 @@ namespace Barotrauma.Abilities { class CharacterAbilityModifyAttackData : CharacterAbility { - private readonly List afflictions; + private readonly List afflictions = new List(); private readonly float addedDamageMultiplier; private readonly float addedPenetration; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityUnlockTree.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityUnlockTree.cs index b9f26160c..8a88acea6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityUnlockTree.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityUnlockTree.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System.Collections.Generic; +using System.Linq; using System.Xml.Linq; namespace Barotrauma.Abilities @@ -15,14 +16,19 @@ namespace Barotrauma.Abilities if (!TalentTree.JobTalentTrees.TryGetValue(Character.Info.Job.Prefab.Identifier, out TalentTree talentTree)) { return; } var subTree = talentTree.TalentSubTrees.Find(t => t.TalentOptionStages.Any(ts => ts.Talents.Contains(CharacterTalent.Prefab))); + if (subTree != null) { + subTree.ForceUnlock = true; foreach (var talentOption in subTree.TalentOptionStages) { foreach (var talent in talentOption.Talents) { if (talent == CharacterTalent.Prefab) { continue; } - Character.GiveTalent(talent); + if (Character.GiveTalent(talent)) + { + Character.Info.AdditionalTalentPoints++; + } } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentPrefab.cs index 277af65b0..193bf9c8f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentPrefab.cs @@ -101,37 +101,40 @@ namespace Barotrauma XDocument doc = XMLExtensions.TryLoadXml(file.Path); if (doc == null) { return; } - var rootElement = doc.Root; - switch (rootElement.Name.ToString().ToLowerInvariant()) + void loadSinglePrefab(XElement element, bool isOverride) { - case "talent": - TalentPrefabs.Add(new TalentPrefab(rootElement, file.Path), false); - break; - case "talents": - foreach (var element in rootElement.Elements()) - { - if (element.IsOverride()) - { - var itemElement = element.GetChildElement("talent"); - if (itemElement != null) - { - TalentPrefabs.Add(new TalentPrefab(rootElement, file.Path), true); - } - else - { - DebugConsole.ThrowError($"Cannot find a talent element from the children of the override element defined in {file.Path}"); - } - } - else - { - TalentPrefabs.Add(new TalentPrefab(element, file.Path), false); - } - } - break; - default: - DebugConsole.ThrowError($"Invalid XML root element: '{rootElement.Name.ToString()}' in {file.Path}"); - break; + TalentPrefabs.Add(new TalentPrefab(element, file.Path) { ContentPackage = file.ContentPackage }, isOverride); } + + void loadMultiplePrefabs(XElement element, bool isOverride) + { + foreach (var subElement in element.Elements()) + { + interpretElement(subElement, isOverride); + } + } + + void interpretElement(XElement subElement, bool isOverride) + { + if (subElement.IsOverride()) + { + loadMultiplePrefabs(subElement, true); + } + else if (subElement.Name.LocalName.Equals("talents", StringComparison.OrdinalIgnoreCase)) + { + loadMultiplePrefabs(subElement, isOverride); + } + else if (subElement.Name.LocalName.Equals("talent", StringComparison.OrdinalIgnoreCase)) + { + loadSinglePrefab(subElement, isOverride); + } + else + { + DebugConsole.ThrowError($"Invalid XML element for the {nameof(TalentPrefab)} prefab type: '{subElement.Name}' in {file.Path}"); + } + } + + interpretElement(doc.Root, false); } public static void LoadAll(IEnumerable files) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs index 02377cba0..20f7865ae 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs @@ -5,7 +5,7 @@ using System.Xml.Linq; namespace Barotrauma { - class TalentTree + class TalentTree : IPrefab, IDisposable { public enum TalentTreeStageState { @@ -16,7 +16,7 @@ namespace Barotrauma Highlighted } - public static readonly Dictionary JobTalentTrees = new Dictionary(); + public static readonly PrefabCollection JobTalentTrees = new PrefabCollection(); public readonly List TalentSubTrees = new List(); @@ -26,13 +26,21 @@ namespace Barotrauma private set; } + public string OriginalName => Identifier; + + public string Identifier { get; } + + public string FilePath { get; } + + public ContentPackage ContentPackage { get; set; } + public TalentTree(XElement element, string filePath) { ConfigElement = element; + FilePath = filePath; + Identifier = element.GetAttributeString("jobidentifier", "").ToLowerInvariant(); - string jobIdentifier = element.GetAttributeString("jobidentifier", "").ToLowerInvariant(); - - if (string.IsNullOrEmpty(jobIdentifier)) + if (string.IsNullOrEmpty(Identifier)) { DebugConsole.ThrowError($"No job defined for talent tree in \"{filePath}\"!"); return; @@ -50,20 +58,15 @@ namespace Barotrauma TalentPrefab talentPrefab = TalentPrefab.TalentPrefabs.Find(c => c.Identifier.Equals(talent, StringComparison.OrdinalIgnoreCase)); if (talentPrefab == null) { - DebugConsole.AddWarning($"Talent tree for job {jobIdentifier} contains non-existent talent {talent}! Talent tree not added."); + DebugConsole.AddWarning($"Talent tree for job {Identifier} contains non-existent talent {talent}! Talent tree not added."); return; } if (!duplicateSet.Add(talent)) { - DebugConsole.ThrowError($"Talent tree for job {jobIdentifier} contains duplicate talent {talent}! Talent tree not added."); + DebugConsole.ThrowError($"Talent tree for job {Identifier} contains duplicate talent {talent}! Talent tree not added."); return; } } - - if (!JobTalentTrees.TryAdd(jobIdentifier, this)) - { - DebugConsole.ThrowError($"Could not add talent tree for job {jobIdentifier}! A talent tree for this job is already likely defined"); - } } public bool TalentIsInTree(string talentIdentifier) @@ -78,37 +81,40 @@ namespace Barotrauma XDocument doc = XMLExtensions.TryLoadXml(file.Path); if (doc == null) { return; } - var rootElement = doc.Root; - switch (rootElement.Name.ToString().ToLowerInvariant()) + void loadSinglePrefab(XElement element, bool isOverride) { - case "talenttree": - new TalentTree(rootElement, file.Path); - break; - case "talenttrees": - foreach (var element in rootElement.Elements()) - { - if (element.IsOverride()) - { - var treeElement = element.GetChildElement("talenttree"); - if (treeElement != null) - { - new TalentTree(rootElement, file.Path); - } - else - { - DebugConsole.ThrowError($"Cannot find a talent tree element from the children of the override element defined in {file.Path}"); - } - } - else - { - new TalentTree(element, file.Path); - } - } - break; - default: - DebugConsole.ThrowError($"Invalid XML root element: '{rootElement.Name}' in {file.Path}"); - break; + JobTalentTrees.Add(new TalentTree(element, file.Path) { ContentPackage = file.ContentPackage }, isOverride); } + + void loadMultiplePrefabs(XElement element, bool isOverride) + { + foreach (var subElement in element.Elements()) + { + interpretElement(subElement, isOverride); + } + } + + void interpretElement(XElement subElement, bool isOverride) + { + if (subElement.IsOverride()) + { + loadMultiplePrefabs(subElement, true); + } + else if (subElement.Name.LocalName.Equals("talenttrees", StringComparison.OrdinalIgnoreCase)) + { + loadMultiplePrefabs(subElement, isOverride); + } + else if (subElement.Name.LocalName.Equals("talenttree", StringComparison.OrdinalIgnoreCase)) + { + loadSinglePrefab(subElement, isOverride); + } + else + { + DebugConsole.ThrowError($"Invalid XML element for the {nameof(TalentTree)} prefab type: '{subElement.Name}' in {file.Path}"); + } + } + + interpretElement(doc.Root, false); } public static void LoadAll(IEnumerable files) @@ -190,6 +196,8 @@ namespace Barotrauma foreach (var subTree in talentTree.TalentSubTrees) { + if (subTree.ForceUnlock && subTree.TalentOptionStages.Any(option => option.Talents.Any(t => t.Identifier == talentIdentifier))) { return true; } + foreach (var talentOptionStage in subTree.TalentOptionStages) { bool hasTalentInThisTier = talentOptionStage.Talents.Any(t => selectedTalents.Contains(t.Identifier)); @@ -220,7 +228,7 @@ namespace Barotrauma canStillUnlock = false; foreach (string talent in selectedTalents) { - if (IsViableTalentForCharacter(controlledCharacter, talent, viableTalents)) + if (!viableTalents.Contains(talent) && IsViableTalentForCharacter(controlledCharacter, talent, viableTalents)) { viableTalents.Add(talent); canStillUnlock = true; @@ -229,6 +237,14 @@ namespace Barotrauma } return viableTalents; } + + private bool disposed = false; + public void Dispose() + { + if (disposed) { return; } + disposed = true; + JobTalentTrees.Remove(this); + } } class TalentSubTree @@ -237,6 +253,8 @@ namespace Barotrauma public string DisplayName { get; } + public bool ForceUnlock; + public readonly List TalentOptionStages = new List(); public TalentSubTree(XElement subTreeElement) diff --git a/Barotrauma/BarotraumaShared/SharedSource/CoroutineManager.cs b/Barotrauma/BarotraumaShared/SharedSource/CoroutineManager.cs index 2ee6801ac..bdde120e8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/CoroutineManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/CoroutineManager.cs @@ -5,14 +5,64 @@ using System.Threading; namespace Barotrauma { - enum CoroutineStatus + abstract class CoroutineStatus { - Running, Success, Failure + public static CoroutineStatus Running => EnumCoroutineStatus.Running; + public static CoroutineStatus Success => EnumCoroutineStatus.Success; + public static CoroutineStatus Failure => EnumCoroutineStatus.Failure; + + public abstract bool CheckFinished(float deltaTime); + public abstract bool EndsCoroutine(CoroutineHandle handle); + } + + class EnumCoroutineStatus : CoroutineStatus + { + private enum StatusValue + { + Running, Success, Failure + } + + private readonly StatusValue Value; + + private EnumCoroutineStatus(StatusValue value) { Value = value; } + + public new readonly static EnumCoroutineStatus Running = new EnumCoroutineStatus(StatusValue.Running); + public new readonly static EnumCoroutineStatus Success = new EnumCoroutineStatus(StatusValue.Success); + public new readonly static EnumCoroutineStatus Failure = new EnumCoroutineStatus(StatusValue.Failure); + + public override bool CheckFinished(float deltaTime) + { + return true; + } + + public override bool EndsCoroutine(CoroutineHandle handle) + { + if (Value == StatusValue.Failure) + { + DebugConsole.ThrowError("Coroutine \"" + handle.Name + "\" has failed"); + } + return Value != StatusValue.Running; + } + + public override bool Equals(object obj) + { + return obj is EnumCoroutineStatus other && Value == other.Value; + } + + public override int GetHashCode() + { + return Value.GetHashCode(); + } + + public override string ToString() + { + return Value.ToString(); + } } class CoroutineHandle { - public readonly IEnumerator Coroutine; + public readonly IEnumerator Coroutine; public readonly string Name; public Exception Exception; @@ -20,7 +70,7 @@ namespace Barotrauma public Thread Thread; - public CoroutineHandle(IEnumerator coroutine, string name = "", bool useSeparateThread = false) + public CoroutineHandle(IEnumerator coroutine, string name = "", bool useSeparateThread = false) { Coroutine = coroutine; Name = string.IsNullOrWhiteSpace(name) ? coroutine.ToString() : name; @@ -36,7 +86,7 @@ namespace Barotrauma public static float UnscaledDeltaTime, DeltaTime; - public static CoroutineHandle StartCoroutine(IEnumerable func, string name = "", bool useSeparateThread = false) + public static CoroutineHandle StartCoroutine(IEnumerable func, string name = "", bool useSeparateThread = false) { var handle = new CoroutineHandle(func.GetEnumerator(), name); lock (Coroutines) @@ -63,7 +113,7 @@ namespace Barotrauma return StartCoroutine(DoInvokeAfter(action, delay)); } - private static IEnumerable DoInvokeAfter(Action action, float delay) + private static IEnumerable DoInvokeAfter(Action action, float delay) { if (action == null) { @@ -127,9 +177,7 @@ namespace Barotrauma bool joined = false; while (!joined) { -#if CLIENT CrossThread.ProcessTasks(); -#endif joined = coroutine.Thread.Join(TimeSpan.FromMilliseconds(500)); } } @@ -137,35 +185,26 @@ namespace Barotrauma } } + private static bool PerformCoroutineStep(CoroutineHandle handle) + { + var current = handle.Coroutine.Current; + if (current != null) + { + if (current.EndsCoroutine(handle) || handle.AbortRequested) { return true; } + if (!current.CheckFinished(UnscaledDeltaTime)) { return false; } + } + if (!handle.Coroutine.MoveNext()) { return true; } + return false; + } + public static void ExecuteCoroutineThread(CoroutineHandle handle) { try { while (!handle.AbortRequested) { - if (handle.Coroutine.Current != null) - { - WaitForSeconds wfs = handle.Coroutine.Current as WaitForSeconds; - if (wfs != null) - { - Thread.Sleep((int)(wfs.TotalTime * 1000)); - } - else - { - switch ((CoroutineStatus)handle.Coroutine.Current) - { - case CoroutineStatus.Success: - return; - - case CoroutineStatus.Failure: - DebugConsole.ThrowError("Coroutine \"" + handle.Name + "\" has failed"); - return; - } - } - } - - Thread.Yield(); - if (!handle.Coroutine.MoveNext()) return; + if (PerformCoroutineStep(handle)) { return; } + Thread.Sleep((int)(UnscaledDeltaTime * 1000)); } } catch (ThreadAbortException) @@ -187,36 +226,13 @@ namespace Barotrauma #endif if (handle.Thread == null) { - if (handle.AbortRequested) { return true; } - if (handle.Coroutine.Current != null) - { - WaitForSeconds wfs = handle.Coroutine.Current as WaitForSeconds; - if (wfs != null) - { - if (!wfs.CheckFinished(UnscaledDeltaTime)) return false; - } - else - { - switch ((CoroutineStatus)handle.Coroutine.Current) - { - case CoroutineStatus.Success: - return true; - - case CoroutineStatus.Failure: - DebugConsole.ThrowError("Coroutine \"" + handle.Name + "\" has failed"); - return true; - } - } - } - - handle.Coroutine.MoveNext(); - return false; + return PerformCoroutineStep(handle); } else { if (handle.Thread.ThreadState.HasFlag(ThreadState.Stopped)) { - if (handle.Exception!=null || (CoroutineStatus)handle.Coroutine.Current == CoroutineStatus.Failure) + if (handle.Exception!=null || handle.Coroutine.Current == CoroutineStatus.Failure) { DebugConsole.ThrowError("Coroutine \"" + handle.Name + "\" has failed"); } @@ -262,7 +278,7 @@ namespace Barotrauma } } - class WaitForSeconds + class WaitForSeconds : CoroutineStatus { public readonly float TotalTime; @@ -276,7 +292,7 @@ namespace Barotrauma this.ignorePause = ignorePause; } - public bool CheckFinished(float deltaTime) + public override bool CheckFinished(float deltaTime) { #if !SERVER if (ignorePause || !GUI.PauseMenuOpen) @@ -288,5 +304,10 @@ namespace Barotrauma #endif return timer <= 0.0f; } + + public override bool EndsCoroutine(CoroutineHandle handle) + { + return false; + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs index 859d6f2fd..56ab5b7f2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs @@ -109,7 +109,7 @@ namespace Barotrauma public static bool CheatsEnabled; private static readonly List unsavedMessages = new List(); - private static readonly int messagesPerFile = 5000; + private static readonly int messagesPerFile = 800; public const string SavePath = "ConsoleLogs"; private static void AssignOnExecute(string names, Action onExecute) @@ -878,7 +878,7 @@ namespace Barotrauma List talentTrees = new List(); if (args.Length == 0 || args[0].Equals("all", StringComparison.OrdinalIgnoreCase)) { - talentTrees.AddRange(TalentTree.JobTalentTrees.Values); + talentTrees.AddRange(TalentTree.JobTalentTrees); } else { @@ -1062,7 +1062,7 @@ namespace Barotrauma }, null)); - IEnumerable TestLevels() + IEnumerable TestLevels() { SubmarineInfo selectedSub = null; string subName = GameMain.Config.QuickStartSubmarineName; @@ -1410,6 +1410,29 @@ namespace Barotrauma } }, null, isCheat: true)); + commands.Add(new Command("despawnnow", "despawnnow [character]: Immediately despawns the specified dead character. If the character argument is omitted, all dead characters are despawned.", (string[] args) => + { + if (args.Length == 0) + { + foreach (Character c in Character.CharacterList.Where(c => c.IsDead).ToList()) + { + c.DespawnNow(); + } + } + else + { + Character character = FindMatchingCharacter(args); + character?.DespawnNow(); + } + }, + () => + { + return new string[][] + { + Character.CharacterList.Where(c => c.IsDead).Select(c => c.Name).Distinct().ToArray() + }; + }, isCheat: true)); + commands.Add(new Command("setclientcharacter", "setclientcharacter [client name] [character name]: Gives the client control of the specified character.", null, () => { @@ -1832,7 +1855,7 @@ namespace Barotrauma #if CLIENT activeQuestionText = null; #endif - NewMessage(command, Color.White, true); + NewCommand(command); //reset the variable before invoking the delegate because the method may need to activate another question var temp = activeQuestionCallback; activeQuestionCallback = null; @@ -1857,7 +1880,7 @@ namespace Barotrauma if (!firstCommand.Equals("admin", StringComparison.OrdinalIgnoreCase)) { - NewMessage(command, Color.White, true); + NewCommand(command); } #if CLIENT @@ -2173,15 +2196,37 @@ namespace Barotrauma } } - public static void NewMessage(string msg, bool isCommand = false) + public static void ShowError(string msg, Color? color = null) { + color ??= Color.Red; + NewMessage(msg, color.Value, isCommand: false, isError: true); + } + + public static void NewCommand(string command, Color? color = null) + { + color ??= Color.White; + NewMessage(command, color.Value, isCommand: true, isError: false); + } + + public static void NewMessage(string msg, Color? color = null, bool debugOnly = false) + { + color ??= Color.White; + if (debugOnly) + { +#if DEBUG + NewMessage(msg, color.Value, isCommand: false, isError: false); +#endif + } + else + { + NewMessage(msg, color.Value, isCommand: false, isError: false); + } #if DEBUG Console.WriteLine(msg); #endif - NewMessage(msg, Color.White, isCommand); } - public static void NewMessage(string msg, Color color, bool isCommand = false, bool isError = false) + private static void NewMessage(string msg, Color color, bool isCommand, bool isError) { if (string.IsNullOrEmpty(msg)) { return; } @@ -2271,7 +2316,10 @@ namespace Barotrauma public static void Log(string message) { - if (GameSettings.VerboseLogging) NewMessage(message, Color.Gray); + if (GameSettings.VerboseLogging) + { + NewMessage(message, Color.Gray); + } } public static void ThrowError(string error, Exception e = null, bool createMessageBox = false, bool appendStackTrace = false) @@ -2309,7 +2357,7 @@ namespace Barotrauma } #endif - NewMessage(error, Color.Red, isError: true); + ShowError(error); } public static void AddWarning(string warning) @@ -2319,7 +2367,7 @@ namespace Barotrauma } #if CLIENT - private static IEnumerable CreateMessageBox(string errorMsg) + private static IEnumerable CreateMessageBox(string errorMsg) { while (GUI.Style == null) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs index d42fb1cf6..8293cc1e5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs @@ -121,7 +121,7 @@ namespace Barotrauma { foreach (Item item in newCharacter.Inventory.AllItems) { - item.SpawnedInOutpost = true; + item.SpawnedInCurrentOutpost = true; item.AllowStealing = false; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs index 0e0e9a77c..434b1c217 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs @@ -33,6 +33,8 @@ namespace Barotrauma private float currentIntensity; //The exact intensity of the current situation, current intensity is lerped towards this value private float targetIntensity; + //follows targetIntensity a bit faster than currentIntensity to prevent e.g. combat musing staying on very long after the monsters are dead + private float musicIntensity; //How low the intensity has to be for an event to be triggered. //Gradually increases with time, so additional problems can still appear eventually even if @@ -50,7 +52,11 @@ namespace Barotrauma private float calculateDistanceTraveledTimer; private float distanceTraveled; - private float avgCrewHealth, avgHullIntegrity, floodingAmount, fireAmount, enemyDanger, monsterTotalStrength; + private float avgCrewHealth, avgHullIntegrity, floodingAmount, fireAmount, enemyDanger, monsterStrength; + public float CumulativeMonsterStrengthMain; + public float CumulativeMonsterStrengthRuins; + public float CumulativeMonsterStrengthWrecks; + public float CumulativeMonsterStrengthCaves; private float roundDuration; @@ -78,6 +84,10 @@ namespace Barotrauma { get { return currentIntensity; } } + public float MusicIntensity + { + get { return musicIntensity; } + } public List ActiveEvents { @@ -85,7 +95,22 @@ namespace Barotrauma } public readonly Queue QueuedEvents = new Queue(); - + + private struct TimeStamp + { + public readonly double Time; + public readonly Event Event; + + public TimeStamp(Event e) + { + Event = e; + Time = Timing.TotalTime; + } + } + + private readonly List timeStamps = new List(); + public void AddTimeStamp(Event e) => timeStamps.Add(new TimeStamp(e)); + public EventManager() { isClient = GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient; @@ -99,6 +124,7 @@ namespace Barotrauma if (isClient) { return; } + timeStamps.Clear(); pendingEventSets.Clear(); selectedEvents.Clear(); activeEvents.Clear(); @@ -202,8 +228,12 @@ namespace Barotrauma crewAwayResetTimer = 0.0f; intensityUpdateTimer = 0.0f; CalculateCurrentIntensity(0.0f); - currentIntensity = targetIntensity; + currentIntensity = musicIntensity = targetIntensity; eventCoolDown = 0.0f; + CumulativeMonsterStrengthMain = 0; + CumulativeMonsterStrengthRuins = 0; + CumulativeMonsterStrengthWrecks = 0; + CumulativeMonsterStrengthCaves = 0; } private void SelectSettings() @@ -401,11 +431,7 @@ namespace Barotrauma { if (level == null) { return; } if (level.LevelData.HasHuntingGrounds && eventSet.DisableInHuntingGrounds) { return; } -#if DEBUG - DebugConsole.NewMessage($"Loading event set {eventSet.DebugIdentifier}", Color.LightBlue); -#else - DebugConsole.Log($"Loading event set {eventSet.DebugIdentifier}"); -#endif + DebugConsole.NewMessage($"Loading event set {eventSet.DebugIdentifier}", Color.LightBlue, debugOnly: true); int applyCount = 1; List> spawnPosFilter = new List>(); if (eventSet.PerRuin) @@ -413,7 +439,7 @@ namespace Barotrauma applyCount = level.Ruins.Count(); foreach (var ruin in level.Ruins) { - spawnPosFilter.Add((Level.InterestingPosition pos) => { return pos.Ruin == ruin; }); + spawnPosFilter.Add(pos => pos.Ruin == ruin); } } else if (eventSet.PerCave) @@ -421,7 +447,7 @@ namespace Barotrauma applyCount = level.Caves.Count(); foreach (var cave in level.Caves) { - spawnPosFilter.Add((Level.InterestingPosition pos) => { return pos.Cave == cave; }); + spawnPosFilter.Add(pos => pos.Cave == cave); } } else if (eventSet.PerWreck) @@ -430,7 +456,7 @@ namespace Barotrauma applyCount = wrecks.Count(); foreach (var wreck in wrecks) { - spawnPosFilter.Add((Level.InterestingPosition pos) => { return pos.Submarine == wreck; }); + spawnPosFilter.Add(pos => pos.Submarine == wreck); } } @@ -463,11 +489,7 @@ namespace Barotrauma if (newEvent == null) { continue; } newEvent.Init(true); if (i < spawnPosFilter.Count) { newEvent.SpawnPosFilter = spawnPosFilter[i]; } -#if DEBUG - DebugConsole.NewMessage($"Initialized event {newEvent}"); -#else - DebugConsole.Log($"Initialized event {newEvent}"); -#endif + DebugConsole.NewMessage($"Initialized event {newEvent}", debugOnly: true); if (!selectedEvents.ContainsKey(eventSet)) { selectedEvents.Add(eventSet, new List()); @@ -498,11 +520,7 @@ namespace Barotrauma var newEvent = eventPrefab.CreateInstance(); if (newEvent == null) { continue; } newEvent.Init(true); -#if DEBUG - DebugConsole.NewMessage($"Initialized event {newEvent}"); -#else - DebugConsole.Log($"Initialized event {newEvent}"); -#endif + DebugConsole.NewMessage($"Initialized event {newEvent}", debugOnly: true); if (!selectedEvents.ContainsKey(eventSet)) { selectedEvents.Add(eventSet, new List()); @@ -525,6 +543,7 @@ namespace Barotrauma var allowedEventSets = eventSets.Where(es => + es.IsCampaignSet == GameMain.GameSession?.GameMode is CampaignMode && level.Difficulty >= es.MinLevelDifficulty && level.Difficulty <= es.MaxLevelDifficulty && level.LevelData.Type == es.LevelType && (string.IsNullOrEmpty(es.BiomeIdentifier) || es.BiomeIdentifier.Equals(level.LevelData.Biome.Identifier, StringComparison.OrdinalIgnoreCase))); @@ -647,6 +666,7 @@ namespace Barotrauma isCrewAway = false; crewAwayDuration = 0.0f; eventThreshold += settings.EventThresholdIncrease * deltaTime; + eventThreshold = Math.Min(eventThreshold, 1.0f); eventCoolDown -= deltaTime; } @@ -739,7 +759,7 @@ namespace Barotrauma // enemy amount -------------------------------------------------------- enemyDanger = 0.0f; - monsterTotalStrength = 0; + monsterStrength = 0; foreach (Character character in Character.CharacterList) { if (character.IsIncapacitated || !character.Enabled || character.IsPet || character.Params.CompareGroup("human")) { continue; } @@ -749,28 +769,9 @@ namespace Barotrauma if (!enemyAI.AIParams.StayInAbyss) { // Ignore abyss monsters because they can stay active for quite great distances. They'll be taken into account when they target the sub. - monsterTotalStrength += enemyAI.CombatStrength; + monsterStrength += enemyAI.CombatStrength; } - // Example combat strengths: - // Hammerheadspawn 1 - // Moloch Pupa 1 - // Terminal cell 20 - // Leucocyte 40 - // Husk 90 - // Crawler 100 - // Unarmored Mudraptor 140 - // Spineling 150 - // Tigerthresher 200 - // Armored Mudraptor 210 - // Watcher 400 - // Golden Hammerhead 400 - // Hammerhead 500 - // Hammerhead Matriarch 550 - // Bonethresher 600 - // Moloch 1250 - // Black Moloch 1500 - // Endworm 10000 if (character.CurrentHull?.Submarine != null && (character.CurrentHull.Submarine == Submarine.MainSub || Submarine.MainSub.DockedTo.Contains(character.CurrentHull.Submarine))) { @@ -792,7 +793,7 @@ namespace Barotrauma // 5 Mudraptors -> +0.21 (0.42 in total, before they get inside). // 3 Hammerheads -> +0.3 (0.6 in total, if they all target the sub). // 2 Molochs -> +0.5 (1.0 in total, if both target the sub). - enemyDanger += monsterTotalStrength / 5000f; + enemyDanger += monsterStrength / 5000f; enemyDanger = MathHelper.Clamp(enemyDanger, 0.0f, 1.0f); // The definitions above aim for that we never spawn more monsters that the player (and the performance) can handle. @@ -868,11 +869,15 @@ namespace Barotrauma { //25 seconds for intensity to go from 0.0 to 1.0 currentIntensity = Math.Min(currentIntensity + 0.04f * IntensityUpdateInterval, targetIntensity); + //20 seconds for intensity to go from 0.0 to 1.0 + musicIntensity = Math.Min(musicIntensity + 0.05f * IntensityUpdateInterval, targetIntensity); } else { //400 seconds for intensity to go from 1.0 to 0.0 currentIntensity = Math.Max(currentIntensity - 0.0025f * IntensityUpdateInterval, targetIntensity); + //20 seconds for intensity to go from 1.0 to 0.0 + musicIntensity = Math.Max(musicIntensity - 0.05f * IntensityUpdateInterval, targetIntensity); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventPrefab.cs index 3938f6db0..856f99d79 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventPrefab.cs @@ -13,6 +13,7 @@ namespace Barotrauma public float Commonness; public string Identifier; public string BiomeIdentifier; + public float SpawnDistance; public bool UnlockPathEvent; public string UnlockPathTooltip; @@ -46,25 +47,30 @@ namespace Barotrauma UnlockPathTooltip = element.GetAttributeString("unlockpathtooltip", "lockedpathtooltip"); UnlockPathReputation = element.GetAttributeInt("unlockpathreputation", 0); UnlockPathFaction = element.GetAttributeString("unlockpathfaction", ""); + + SpawnDistance = element.GetAttributeFloat("spawndistance", 0); + } + + public bool TryCreateInstance(out T instance) where T : Event + { + instance = CreateInstance() as T; + return instance is T; } public Event CreateInstance() { ConstructorInfo constructor = EventType.GetConstructor(new[] { typeof(EventPrefab) }); - object instance = null; + Event instance = null; try { - instance = constructor.Invoke(new object[] { this }); + instance = constructor.Invoke(new object[] { this }) as Event; } catch (Exception ex) { DebugConsole.ThrowError(ex.InnerException != null ? ex.InnerException.ToString() : ex.ToString()); } - - Event ev = (Event)instance; - if (!ev.LevelMeetsRequirements()) { return null; } - - return (Event)instance; + if (instance != null && !instance.LevelMeetsRequirements()) { return null; } + return instance; } public override string ToString() diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs index ca7667dca..0f2fb31d8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs @@ -14,6 +14,7 @@ namespace Barotrauma { public readonly EventSet RootSet; public readonly Dictionary MonsterCounts = new Dictionary(); + public float MonsterStrength; public EventDebugStats(EventSet rootSet) { @@ -63,6 +64,8 @@ namespace Barotrauma return GetAllEventPrefabs().Find(prefab => string.Equals(prefab.Identifier, identifer, StringComparison.Ordinal)); } + public readonly bool IsCampaignSet; + //0-100 public readonly float MinLevelDifficulty, MaxLevelDifficulty; @@ -193,6 +196,7 @@ namespace Barotrauma DelayWhenCrewAway = element.GetAttributeBool("delaywhencrewaway", !PerRuin && !PerCave && !PerWreck); OncePerOutpost = element.GetAttributeBool("onceperoutpost", false); TriggerEventCooldown = element.GetAttributeBool("triggereventcooldown", true); + IsCampaignSet = element.GetAttributeBool("campaign", LevelType == LevelData.LevelType.Outpost); Commonness[""] = element.GetAttributeFloat("commonness", 1.0f); foreach (XElement subElement in element.Elements()) @@ -205,7 +209,7 @@ namespace Barotrauma { if (overrideElement.Name.ToString().Equals("override", StringComparison.OrdinalIgnoreCase)) { - string levelType = overrideElement.GetAttributeString("leveltype", ""); + string levelType = overrideElement.GetAttributeString("leveltype", "").ToLowerInvariant(); if (!Commonness.ContainsKey(levelType)) { Commonness.Add(levelType, overrideElement.GetAttributeFloat("commonness", 0.0f)); @@ -227,8 +231,8 @@ namespace Barotrauma EventPrefabs.Add(new SubEventPrefab( debugIdentifier, identifiers, - commonness>=0f ? commonness : (float?)null, - probability>=0f ? probability : (float?)null)); + commonness >= 0f ? commonness : (float?)null, + probability >= 0f ? probability : (float?)null)); } else { @@ -347,7 +351,7 @@ namespace Barotrauma } } - public static List GetDebugStatistics(int simulatedRoundCount = 100) + public static List GetDebugStatistics(int simulatedRoundCount = 100, Func filter = null) { List debugLines = new List(); @@ -357,82 +361,75 @@ namespace Barotrauma for (int i = 0; i < simulatedRoundCount; i++) { var newStats = new EventDebugStats(eventSet); - CheckEventSet(newStats, eventSet); + CheckEventSet(newStats, eventSet, filter); stats.Add(newStats); } debugLines.Add($"Event stats ({eventSet.DebugIdentifier}): "); LogEventStats(stats, debugLines); } - for (int difficulty = 0; difficulty <= 100; difficulty += 10) - { - debugLines.Add($"Event stats on difficulty level {difficulty}: "); - List stats = new List(); - for (int i = 0; i < simulatedRoundCount; i++) - { - EventSet selectedSet = List.Where(s => difficulty >= s.MinLevelDifficulty && difficulty <= s.MaxLevelDifficulty).GetRandom(); - if (selectedSet == null) { continue; } - var newStats = new EventDebugStats(selectedSet); - CheckEventSet(newStats, selectedSet); - stats.Add(newStats); - } - LogEventStats(stats, debugLines); - } - return debugLines; - static void CheckEventSet(EventDebugStats stats, EventSet thisSet) + static void CheckEventSet(EventDebugStats stats, EventSet thisSet, Func filter = null) { if (thisSet.ChooseRandom) { var unusedEvents = thisSet.EventPrefabs.ToList(); - for (int i = 0; i < thisSet.EventCount; i++) + if (unusedEvents.Any()) { - var eventPrefab = ToolBox.SelectWeightedRandom(unusedEvents, unusedEvents.Select(e => e.Commonness).ToList(), Rand.RandSync.Unsynced); - if (eventPrefab.Prefabs.Any(p => p != null)) + for (int i = 0; i < thisSet.EventCount; i++) { - AddEvents(stats, eventPrefab.Prefabs); - unusedEvents.Remove(eventPrefab); + var eventPrefab = ToolBox.SelectWeightedRandom(unusedEvents, unusedEvents.Select(e => e.Commonness).ToList()); + if (eventPrefab.Prefabs.Any(p => p != null)) + { + AddEvents(stats, eventPrefab.Prefabs, filter); + unusedEvents.Remove(eventPrefab); + } } } + List values = thisSet.ChildSets.SelectMany(s => s.Commonness.Values).ToList(); + EventSet childSet = ToolBox.SelectWeightedRandom(thisSet.ChildSets, values); + if (childSet != null) + { + CheckEventSet(stats, childSet, filter); + } } else { foreach (var eventPrefab in thisSet.EventPrefabs) { - AddEvents(stats, eventPrefab.Prefabs); + AddEvents(stats, eventPrefab.Prefabs, filter); + } + foreach (var childSet in thisSet.ChildSets) + { + CheckEventSet(stats, childSet, filter); } - } - foreach (var childSet in thisSet.ChildSets) - { - CheckEventSet(stats, childSet); } } - static void AddEvents(EventDebugStats stats, IEnumerable eventPrefabs) - => eventPrefabs.ForEach(p => AddEvent(stats, p)); + static void AddEvents(EventDebugStats stats, IEnumerable eventPrefabs, Func filter = null) + => eventPrefabs.ForEach(p => AddEvent(stats, p, filter)); - static void AddEvent(EventDebugStats stats, EventPrefab eventPrefab) + static void AddEvent(EventDebugStats stats, EventPrefab eventPrefab, Func filter = null) { - if (eventPrefab.EventType == typeof(MonsterEvent)) + if (eventPrefab.EventType == typeof(MonsterEvent) && eventPrefab.TryCreateInstance(out MonsterEvent monsterEvent)) { - float spawnProbability = eventPrefab.ConfigElement.GetAttributeFloat("spawnprobability", 1.0f); - if (Rand.Value(Rand.RandSync.Server) > spawnProbability) - { - return; - } + if (filter != null && !filter(monsterEvent)) { return; } - string character = eventPrefab.ConfigElement.GetAttributeString("characterfile", ""); - System.Diagnostics.Debug.Assert(!string.IsNullOrEmpty(character)); - int amount = eventPrefab.ConfigElement.GetAttributeInt("amount", 0); - int minAmount = eventPrefab.ConfigElement.GetAttributeInt("minamount", amount); - int maxAmount = eventPrefab.ConfigElement.GetAttributeInt("maxamount", amount); + float spawnProbability = monsterEvent.Prefab.Probability; + if (Rand.Value() > spawnProbability) { return; } - int count = Rand.Range(minAmount, maxAmount + 1); + string character = monsterEvent.speciesName; + int count = Rand.Range(monsterEvent.MinAmount, monsterEvent.MaxAmount + 1); if (count <= 0) { return; } - if (!stats.MonsterCounts.ContainsKey(character)) { stats.MonsterCounts[character] = 0; } stats.MonsterCounts[character] += count; + + var aiElement = CharacterPrefab.FindBySpeciesName(character)?.XDocument?.Root?.GetChildElement("ai"); + if (aiElement != null) + { + stats.MonsterStrength += aiElement.GetAttributeFloat("combatstrength", 0) * count; + } } } @@ -445,16 +442,21 @@ namespace Barotrauma } else { - stats.Sort((s1, s2) => { return s1.MonsterCounts.Values.Sum().CompareTo(s2.MonsterCounts.Values.Sum()); }); - - EventDebugStats minStats = stats.First(); - EventDebugStats maxStats = stats.First(); - debugLines.Add($" Minimum monster spawns: {stats.First().MonsterCounts.Values.Sum()}"); + stats.Sort((s1, s2) => s1.MonsterCounts.Values.Sum().CompareTo(s2.MonsterCounts.Values.Sum())); + debugLines.Add($" Minimum monster count: {stats.First().MonsterCounts.Values.Sum()}"); debugLines.Add($" {LogMonsterCounts(stats.First())}"); - debugLines.Add($" Median monster spawns: {stats[stats.Count / 2].MonsterCounts.Values.Sum()}"); + debugLines.Add($" Median monster count: {stats[stats.Count / 2].MonsterCounts.Values.Sum()}"); debugLines.Add($" {LogMonsterCounts(stats[stats.Count / 2])}"); - debugLines.Add($" Maximum monster spawns: {stats.Last().MonsterCounts.Values.Sum()}"); + debugLines.Add($" Maximum monster count: {stats.Last().MonsterCounts.Values.Sum()}"); debugLines.Add($" {LogMonsterCounts(stats.Last())}"); + debugLines.Add($" Average monster count: {StringFormatter.FormatZeroDecimal((float)stats.Average(s => s.MonsterCounts.Values.Sum()))}"); + debugLines.Add($" "); + + stats.Sort((s1, s2) => s1.MonsterStrength.CompareTo(s2.MonsterStrength)); + debugLines.Add($" Minimum monster strength: {StringFormatter.FormatZeroDecimal(stats.First().MonsterStrength)}"); + debugLines.Add($" Median monster strength: {StringFormatter.FormatZeroDecimal(stats[stats.Count / 2].MonsterStrength)}"); + debugLines.Add($" Maximum monster strength: {StringFormatter.FormatZeroDecimal(stats.Last().MonsterStrength)}"); + debugLines.Add($" Average monster strength: {StringFormatter.FormatZeroDecimal(stats.Average(s => s.MonsterStrength))}"); debugLines.Add($" "); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/AbandonedOutpostMission.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/AbandonedOutpostMission.cs index 7869cd1b0..65d851338 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/AbandonedOutpostMission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/AbandonedOutpostMission.cs @@ -1,4 +1,5 @@ using Barotrauma.Extensions; +using Barotrauma.Items.Components; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; @@ -161,6 +162,24 @@ namespace Barotrauma #endif } } + + //if any of the target items is a reactor, prevent exploding it from damaging the player's sub + foreach (Item item in items) + { + if (item.GetComponent() is Reactor reactor && (reactor.statusEffectLists?.ContainsKey(ActionType.OnBroken) ?? false)) + { + foreach (var statusEffect in reactor.statusEffectLists[ActionType.OnBroken]) + { + foreach (Explosion explosion in statusEffect.Explosions) + { + foreach (Submarine sub in Submarine.Loaded) + { + if (sub.TeamID == CharacterTeamType.Team1) { explosion.IgnoredSubmarines.Add(sub); } + } + } + } + } + } } private void InitCharacters(Submarine submarine) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CargoMission.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CargoMission.cs index d51ccd3fd..ce5311135 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CargoMission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CargoMission.cs @@ -207,7 +207,7 @@ namespace Barotrauma var item = new Item(itemPrefab, position.Value, cargoRoomSub) { - SpawnedInOutpost = true, + SpawnedInCurrentOutpost = true, AllowStealing = false }; item.FindHull(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CombatMission.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CombatMission.cs index c1f7f26be..30a7c608c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CombatMission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/CombatMission.cs @@ -1,4 +1,3 @@ -using Barotrauma.Extensions; using System.Collections.Generic; namespace Barotrauma @@ -6,8 +5,6 @@ namespace Barotrauma partial class CombatMission : Mission { private Submarine[] subs; - // TODO: not used - private List[] crews; private readonly string[] descriptions; private static string[] teamNames = { "Team A", "Team B" }; @@ -103,15 +100,16 @@ namespace Barotrauma subs[0].NeutralizeBallast(); subs[0].TeamID = CharacterTeamType.Team1; - subs[0].DockedTo.ForEach(s => s.TeamID = CharacterTeamType.Team1); + subs[0].GetConnectedSubs().ForEach(s => s.TeamID = CharacterTeamType.Team1); subs[1].NeutralizeBallast(); subs[1].TeamID = CharacterTeamType.Team2; - subs[1].DockedTo.ForEach(s => s.TeamID = CharacterTeamType.Team2); + subs[1].GetConnectedSubs().ForEach(s => s.TeamID = CharacterTeamType.Team2); subs[1].SetPosition(subs[1].FindSpawnPos(Level.Loaded.EndPosition)); subs[1].FlipX(); - +#if SERVER crews = new List[] { new List(), new List() }; +#endif } public override void End() diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/PirateMission.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/PirateMission.cs index 39a4e2d01..f71ef9992 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/PirateMission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/PirateMission.cs @@ -203,6 +203,14 @@ namespace Barotrauma enemySub.TeamID = CharacterTeamType.None; //make the enemy sub withstand atleast the same depth as the player sub enemySub.RealWorldCrushDepth = Math.Max(enemySub.RealWorldCrushDepth, Submarine.MainSub.RealWorldCrushDepth); + if (Level.Loaded != null) + { + //...and the depth of the patrol positions + 1000 m + foreach (var patrolPos in patrolPositions) + { + enemySub.RealWorldCrushDepth = Math.Max(enemySub.RealWorldCrushDepth, Level.Loaded.GetRealWorldDepth(patrolPos.Y) + 1000); + } + } enemySub.ImmuneToBallastFlora = true; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/MonsterEvent.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/MonsterEvent.cs index 4cfd77e2f..e591f532c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/MonsterEvent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/MonsterEvent.cs @@ -9,8 +9,8 @@ namespace Barotrauma { class MonsterEvent : Event { - private readonly string speciesName; - private readonly int minAmount, maxAmount; + public readonly string speciesName; + public readonly int minAmount, maxAmount; private List monsters; private readonly float scatter; @@ -20,7 +20,7 @@ namespace Barotrauma private bool disallowed; - private readonly Level.PositionType spawnPosType; + public readonly Level.PositionType SpawnPosType; private readonly string spawnPointTag; private bool spawnPending; @@ -77,15 +77,15 @@ namespace Barotrauma var spawnPosTypeStr = prefab.ConfigElement.GetAttributeString("spawntype", ""); if (string.IsNullOrWhiteSpace(spawnPosTypeStr) || - !Enum.TryParse(spawnPosTypeStr, true, out spawnPosType)) + !Enum.TryParse(spawnPosTypeStr, true, out SpawnPosType)) { - spawnPosType = Level.PositionType.MainPath; + SpawnPosType = Level.PositionType.MainPath; } //backwards compatibility if (prefab.ConfigElement.GetAttributeBool("spawndeep", false)) { - spawnPosType = Level.PositionType.Abyss; + SpawnPosType = Level.PositionType.Abyss; } spawnPointTag = prefab.ConfigElement.GetAttributeString("spawnpointtag", string.Empty); @@ -143,7 +143,7 @@ namespace Barotrauma private List GetAvailableSpawnPositions() { - var availablePositions = Level.Loaded.PositionsOfInterest.FindAll(p => spawnPosType.HasFlag(p.PositionType)); + var availablePositions = Level.Loaded.PositionsOfInterest.FindAll(p => SpawnPosType.HasFlag(p.PositionType)); var removals = new List(); foreach (var position in availablePositions) { @@ -188,8 +188,8 @@ namespace Barotrauma spawnPos = Vector2.Zero; var availablePositions = GetAvailableSpawnPositions(); var chosenPosition = new Level.InterestingPosition(Point.Zero, Level.PositionType.MainPath, isValid: false); - bool isRuinOrWreck = spawnPosType.HasFlag(Level.PositionType.Ruin) || spawnPosType.HasFlag(Level.PositionType.Wreck); - if (affectSubImmediately && !isRuinOrWreck && !spawnPosType.HasFlag(Level.PositionType.Abyss)) + bool isRuinOrWreck = SpawnPosType.HasFlag(Level.PositionType.Ruin) || SpawnPosType.HasFlag(Level.PositionType.Wreck); + if (affectSubImmediately && !isRuinOrWreck && !SpawnPosType.HasFlag(Level.PositionType.Abyss)) { if (availablePositions.None()) { @@ -288,11 +288,14 @@ namespace Barotrauma spawnPos = chosenPosition.Position.ToVector2(); if (chosenPosition.Submarine != null || chosenPosition.Ruin != null) { - var spawnPoint = - WayPoint.GetRandom(SpawnType.Enemy, sub: chosenPosition.Submarine ?? chosenPosition.Ruin?.Submarine, useSyncedRand: false, spawnPointTag: spawnPointTag); + bool ignoreSubmarine = chosenPosition.Ruin != null; + var spawnPoint = WayPoint.GetRandom(SpawnType.Enemy, sub: chosenPosition.Submarine, useSyncedRand: false, spawnPointTag: spawnPointTag, ignoreSubmarine: ignoreSubmarine); if (spawnPoint != null) { - System.Diagnostics.Debug.Assert(spawnPoint.Submarine == (chosenPosition.Submarine ?? chosenPosition.Ruin?.Submarine)); + if (!ignoreSubmarine) + { + System.Diagnostics.Debug.Assert(spawnPoint.Submarine == chosenPosition.Submarine); + } spawnPos = spawnPoint.WorldPosition; } else @@ -303,32 +306,42 @@ namespace Barotrauma return; } } - else if ((chosenPosition.PositionType == Level.PositionType.MainPath || chosenPosition.PositionType == Level.PositionType.SidePath) - && offset > 0) + else if (chosenPosition.PositionType == Level.PositionType.MainPath || chosenPosition.PositionType == Level.PositionType.SidePath) { - Vector2 dir; - var waypoints = WayPoint.WayPointList.FindAll(wp => wp.Submarine == null); - var nearestWaypoint = waypoints.OrderBy(wp => Vector2.DistanceSquared(wp.WorldPosition, spawnPos.Value)).FirstOrDefault(); - if (nearestWaypoint != null) + if (offset > 0) { - int currentIndex = waypoints.IndexOf(nearestWaypoint); - var nextWaypoint = waypoints[Math.Min(currentIndex + 20, waypoints.Count - 1)]; - dir = Vector2.Normalize(nextWaypoint.WorldPosition - nearestWaypoint.WorldPosition); - // Ensure that the spawn position is not offset to the left. - if (dir.X < 0) + Vector2 dir; + var waypoints = WayPoint.WayPointList.FindAll(wp => wp.Submarine == null && wp.Ruin == null); + var nearestWaypoint = waypoints.OrderBy(wp => Vector2.DistanceSquared(wp.WorldPosition, spawnPos.Value)).FirstOrDefault(); + if (nearestWaypoint != null) { - dir.X = 0; + int currentIndex = waypoints.IndexOf(nearestWaypoint); + var nextWaypoint = waypoints[Math.Min(currentIndex + 20, waypoints.Count - 1)]; + dir = Vector2.Normalize(nextWaypoint.WorldPosition - nearestWaypoint.WorldPosition); + // Ensure that the spawn position is not offset to the left. + if (dir.X < 0) + { + dir.X = 0; + } + } + else + { + dir = new Vector2(1, Rand.Range(-1, 1)); + } + Vector2 targetPos = spawnPos.Value + dir * offset; + var targetWaypoint = waypoints.OrderBy(wp => Vector2.DistanceSquared(wp.WorldPosition, targetPos)).FirstOrDefault(); + if (targetWaypoint != null) + { + spawnPos = targetWaypoint.WorldPosition; } } - else + // Ensure that the position is not inside a submarine (in practice wrecks). + if (Submarine.Loaded.Any(s => ToolBox.GetWorldBounds(s.Borders.Center, s.Borders.Size).ContainsWorld(spawnPos.Value))) { - dir = new Vector2(1, Rand.Range(-1, 1)); - } - Vector2 targetPos = spawnPos.Value + dir * offset; - var targetWaypoint = waypoints.OrderBy(wp => Vector2.DistanceSquared(wp.WorldPosition, targetPos)).FirstOrDefault(); - if (targetWaypoint != null) - { - spawnPos = targetWaypoint.WorldPosition; + //no suitable position found, disable the event + spawnPos = null; + Finished(); + return; } } spawnPending = true; @@ -371,7 +384,7 @@ namespace Barotrauma if (spawnPending) { //wait until there are no submarines at the spawnpos - if (spawnPosType.HasFlag(Level.PositionType.MainPath) || spawnPosType.HasFlag(Level.PositionType.SidePath) || spawnPosType.HasFlag(Level.PositionType.Abyss)) + if (SpawnPosType.HasFlag(Level.PositionType.MainPath) || SpawnPosType.HasFlag(Level.PositionType.SidePath) || SpawnPosType.HasFlag(Level.PositionType.Abyss)) { foreach (Submarine submarine in Submarine.Loaded) { @@ -380,17 +393,29 @@ namespace Barotrauma if (Vector2.DistanceSquared(submarine.WorldPosition, spawnPos.Value) < minDist * minDist) { return; } } } - - //if spawning in a ruin/cave, wait for someone to be close to it to spawning - //unnecessary monsters in places the players might never visit during the round - if (spawnPosType.HasFlag(Level.PositionType.Ruin) || spawnPosType.HasFlag(Level.PositionType.Cave) || spawnPosType.HasFlag(Level.PositionType.Wreck)) + float minDistance = Prefab.SpawnDistance; + if (minDistance <= 0) + { + if (SpawnPosType.HasFlag(Level.PositionType.Cave)) + { + minDistance = 8000; + } + else if (SpawnPosType.HasFlag(Level.PositionType.Ruin)) + { + minDistance = 5000; + } + else if (SpawnPosType.HasFlag(Level.PositionType.Wreck)) + { + minDistance = 3000; + } + } + if (minDistance > 0) { bool someoneNearby = false; - float minDist = Sonar.DefaultSonarRange * 0.8f; foreach (Submarine submarine in Submarine.Loaded) { if (submarine.Info.Type != SubmarineType.Player) { continue; } - if (Vector2.DistanceSquared(submarine.WorldPosition, spawnPos.Value) < minDist * minDist) + if (Vector2.DistanceSquared(submarine.WorldPosition, spawnPos.Value) < MathUtils.Pow2(minDistance)) { someoneNearby = true; break; @@ -400,7 +425,7 @@ namespace Barotrauma { if (c == Character.Controlled || c.IsRemotePlayer) { - if (Vector2.DistanceSquared(c.WorldPosition, spawnPos.Value) < minDist * minDist) + if (Vector2.DistanceSquared(c.WorldPosition, spawnPos.Value) < MathUtils.Pow2(minDistance)) { someoneNearby = true; break; @@ -411,7 +436,7 @@ namespace Barotrauma } - if (spawnPosType.HasFlag(Level.PositionType.Abyss) || spawnPosType.HasFlag(Level.PositionType.AbyssCave)) + if (SpawnPosType.HasFlag(Level.PositionType.Abyss) || SpawnPosType.HasFlag(Level.PositionType.AbyssCave)) { bool anyInAbyss = false; foreach (Submarine submarine in Submarine.Loaded) @@ -432,7 +457,7 @@ namespace Barotrauma int amount = Rand.Range(minAmount, maxAmount + 1); monsters = new List(); float scatterAmount = scatter; - if (spawnPosType.HasFlag(Level.PositionType.SidePath)) + if (SpawnPosType.HasFlag(Level.PositionType.SidePath)) { var sidePaths = Level.Loaded.Tunnels.Where(t => t.Type == Level.TunnelType.SidePath); if (sidePaths.Any()) @@ -444,7 +469,7 @@ namespace Barotrauma scatterAmount = scatter; } } - else if (!spawnPosType.HasFlag(Level.PositionType.MainPath)) + else if (!SpawnPosType.HasFlag(Level.PositionType.MainPath)) { scatterAmount = 0; } @@ -474,6 +499,27 @@ namespace Barotrauma } Character createdCharacter = Character.Create(speciesName, pos, seed, characterInfo: null, isRemotePlayer: false, hasAi: true, createNetworkEvent: true); + var eventManager = GameMain.GameSession.EventManager; + if (eventManager != null) + { + if (SpawnPosType.HasFlag(Level.PositionType.MainPath) || SpawnPosType.HasFlag(Level.PositionType.SidePath)) + { + eventManager.CumulativeMonsterStrengthMain += createdCharacter.Params.AI.CombatStrength; + eventManager.AddTimeStamp(this); + } + else if (SpawnPosType.HasFlag(Level.PositionType.Ruin)) + { + eventManager.CumulativeMonsterStrengthRuins += createdCharacter.Params.AI.CombatStrength; + } + else if (SpawnPosType.HasFlag(Level.PositionType.Wreck)) + { + eventManager.CumulativeMonsterStrengthWrecks += createdCharacter.Params.AI.CombatStrength; + } + else if (SpawnPosType.HasFlag(Level.PositionType.Cave)) + { + eventManager.CumulativeMonsterStrengthCaves += createdCharacter.Params.AI.CombatStrength; + } + } if (GameMain.GameSession.IsCurrentLocationRadiated()) { AfflictionPrefab radiationPrefab = AfflictionPrefab.RadiationSickness; @@ -490,6 +536,7 @@ namespace Barotrauma //this will do nothing if the monsters have no swarm behavior defined, //otherwise it'll make the spawned characters act as a swarm SwarmBehavior.CreateSwarm(monsters.Cast()); + DebugConsole.NewMessage($"Spawned: {ToString()}. Strength: {StringFormatter.FormatZeroDecimal(monsters.Sum(m => m.Params.AI.CombatStrength))}.", Color.LightBlue, debugOnly: true); } }, Rand.Range(0f, amount / 2f)); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Extensions/StringFormatter.cs b/Barotrauma/BarotraumaShared/SharedSource/Extensions/StringFormatter.cs index f16c75460..cb128e00d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Extensions/StringFormatter.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Extensions/StringFormatter.cs @@ -56,7 +56,7 @@ namespace Barotrauma public static string Format(this float value, int decimalCount) { - return value.ToString($"F{decimalCount.ToString()}", CultureInfo.InvariantCulture); + return value.ToString($"F{decimalCount}", CultureInfo.InvariantCulture); } public static string FormatSingleDecimal(this Vector2 value) diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs index 8f0c37464..84d41b23a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs @@ -254,7 +254,7 @@ namespace Barotrauma if (!validContainer.Key.Inventory.CanBePut(itemPrefab, quality: quality)) { break; } var item = new Item(itemPrefab, validContainer.Key.Item.Position, validContainer.Key.Item.Submarine) { - SpawnedInOutpost = validContainer.Key.Item.SpawnedInOutpost, + SpawnedInCurrentOutpost = validContainer.Key.Item.SpawnedInCurrentOutpost, AllowStealing = validContainer.Key.Item.AllowStealing, Quality = quality, OriginalModuleIndex = validContainer.Key.Item.OriginalModuleIndex, diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs index a1dfda365..ef3ddc9f4 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs @@ -393,7 +393,7 @@ namespace Barotrauma /// protected abstract void LoadInitialLevel(); - protected abstract IEnumerable DoLevelTransition(TransitionType transitionType, LevelData newLevel, Submarine leavingSub, bool mirror, List traitorResults = null); + protected abstract IEnumerable DoLevelTransition(TransitionType transitionType, LevelData newLevel, Submarine leavingSub, bool mirror, List traitorResults = null); /// /// Which type of transition between levels is currently possible (if any) @@ -572,7 +572,7 @@ namespace Barotrauma { foreach (Item item in Item.ItemList) { - if (!item.SpawnedInOutpost || item.OriginalModuleIndex < 0) { continue; } + if (!item.SpawnedInCurrentOutpost || item.OriginalModuleIndex < 0) { continue; } var owner = item.GetRootInventoryOwner(); if ((!(owner?.Submarine?.Info?.IsOutpost ?? false)) || (owner is Character character && character.TeamID == CharacterTeamType.Team1) || item.Submarine == null || !item.Submarine.Info.IsOutpost) { @@ -712,7 +712,7 @@ namespace Barotrauma } } - private IEnumerable DoCharacterWait(Character npc, Character interactor) + private IEnumerable DoCharacterWait(Character npc, Character interactor) { if (npc == null || interactor == null) { yield return CoroutineStatus.Failure; } @@ -907,7 +907,7 @@ namespace Barotrauma public int NumberOfMissionsAtLocation(Location location) { - return Map.CurrentLocation.SelectedMissions.Count(m => m.Locations.Contains(location)); + return Map?.CurrentLocation?.SelectedMissions?.Count(m => m.Locations.Contains(location)) ?? 0; } public void CheckTooManyMissions(Location currentLocation, Client sender) diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs index 9523e5299..0c9628fc9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs @@ -312,7 +312,7 @@ namespace Barotrauma return isRadiated; } - public void StartRound(string levelSeed, float? difficulty = null) + public void StartRound(string levelSeed, float? difficulty = null, LevelGenerationParams levelGenerationParams = null) { LevelData randomLevel = null; foreach (Mission mission in Missions.Union(GameMode.Missions)) @@ -324,11 +324,11 @@ namespace Barotrauma { LocationType locationType = LocationType.List.FirstOrDefault(lt => missionPrefab.AllowedLocationTypes.Any(m => m.Equals(lt.Identifier, StringComparison.OrdinalIgnoreCase))); CreateDummyLocations(locationType); - randomLevel = LevelData.CreateRandom(levelSeed, difficulty, requireOutpost: true); + randomLevel = LevelData.CreateRandom(levelSeed, difficulty, levelGenerationParams, requireOutpost: true); break; } } - randomLevel ??= LevelData.CreateRandom(levelSeed, difficulty); + randomLevel ??= LevelData.CreateRandom(levelSeed, difficulty, levelGenerationParams); StartRound(randomLevel); } @@ -351,6 +351,8 @@ namespace Barotrauma return; } + Submarine.LockX = Submarine.LockY = false; + LevelData = levelData; Submarine.Unload(); @@ -511,10 +513,6 @@ namespace Barotrauma mpCampaign.UpgradeManager.ApplyUpgrades(); mpCampaign.UpgradeManager.SanityCheckUpgrades(Submarine); } - if (GameMode is CampaignMode) - { - Submarine.WarmStartPower(); - } } GameMain.Config.RecentlyEncounteredCreatures.Clear(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/GeneticMaterial.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/GeneticMaterial.cs index ae34d86fe..636c96300 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/GeneticMaterial.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/GeneticMaterial.cs @@ -158,7 +158,7 @@ namespace Barotrauma.Items.Components if (!CanBeCombinedWith(otherGeneticMaterial)) { return false; } float conditionIncrease = Rand.Range(ConditionIncreaseOnCombineMin, ConditionIncreaseOnCombineMax); - conditionIncrease += user.GetStatValue(StatTypes.GeneticMaterialRefineBonus); + conditionIncrease += user?.GetStatValue(StatTypes.GeneticMaterialRefineBonus) ?? 0.0f; if (item.Prefab == otherGeneticMaterial.item.Prefab) { item.Condition = Math.Max(item.Condition, otherGeneticMaterial.item.Condition) + conditionIncrease; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs index 299afe98d..2233fd79a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs @@ -110,7 +110,9 @@ namespace Barotrauma.Items.Components if (Item.RequireAimToUse && hitPos < MathHelper.PiOver4) { return false; } ActivateNearbySleepingCharacters(); - reloadTimer = reload / (1 + character.GetStatValue(StatTypes.MeleeAttackSpeed)); + reloadTimer = reload; + reloadTimer /= (1f + character.GetStatValue(StatTypes.MeleeAttackSpeed)); + reloadTimer /= (1f + item.GetQualityModifier(Quality.StatType.StrikingSpeedMultiplier)); item.body.FarseerBody.CollisionCategories = Physics.CollisionProjectile; item.body.FarseerBody.CollidesWith = Physics.CollisionCharacter | Physics.CollisionWall; @@ -385,7 +387,7 @@ namespace Barotrauma.Items.Components { Attack.SetUser(User); Attack.DamageMultiplier = 1 + User.GetStatValue(StatTypes.MeleeAttackMultiplier); - Attack.DamageMultiplier *= 1.0f + item.GetQualityModifier(Quality.StatType.AttackMultiplier); + Attack.DamageMultiplier *= 1.0f + item.GetQualityModifier(Quality.StatType.StrikingPowerMultiplier); if (targetLimb != null) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Pickable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Pickable.cs index 55170d2ea..f7fc8ec5a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Pickable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Pickable.cs @@ -142,7 +142,7 @@ namespace Barotrauma.Items.Components return false; } - private IEnumerable WaitForPick(Character picker, float requiredTime) + private IEnumerable WaitForPick(Character picker, float requiredTime) { activePicker = picker; picker.PickingItem = item; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs index abb8dd7ef..89f3efb8b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs @@ -149,7 +149,8 @@ namespace Barotrauma.Items.Components { float degreeOfFailure = 1.0f - DegreeOfSuccess(user); degreeOfFailure *= degreeOfFailure; - return MathHelper.ToRadians(MathHelper.Lerp(Spread, UnskilledSpread, degreeOfFailure)); + float spread = MathHelper.Lerp(Spread, UnskilledSpread, degreeOfFailure) / (1f + user.GetStatValue(StatTypes.RangedSpreadReduction)); + return MathHelper.ToRadians(spread); } private readonly List limbBodies = new List(); @@ -203,7 +204,7 @@ namespace Barotrauma.Items.Components { lastProjectile?.Item.GetComponent()?.Snap(); } - float damageMultiplier = 1f + item.GetQualityModifier(Quality.StatType.AttackMultiplier); + float damageMultiplier = 1f + item.GetQualityModifier(Quality.StatType.StoppingPowerMultiplier); projectile.Shoot(character, character.AnimController.AimSourceSimPos, barrelPos, rotation + spread, ignoredBodies: limbBodies.ToList(), createNetworkEvent: false, damageMultiplier); projectile.Item.GetComponent()?.Attach(Item, projectile.Item); if (i == 0) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs index be0b65af9..5c8801e2a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs @@ -632,6 +632,10 @@ namespace Barotrauma.Items.Components public virtual void FlipY(bool relativeToSub) { } + public bool IsLoaded(Character user, bool checkContainedItems = true) => + HasRequiredContainedItems(user, addMessage: false) && + (!checkContainedItems || Item.OwnInventory == null || Item.OwnInventory.AllItems.Any(i => i.Condition > 0)); + public bool HasRequiredContainedItems(Character user, bool addMessage, string msg = null) { if (!requiredItems.ContainsKey(RelatedItem.RelationType.Contained)) { return true; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs index 27b8542ff..5cad0a43c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs @@ -470,7 +470,9 @@ namespace Barotrauma.Items.Components if (!AllowDragAndDrop && user != null) { return false; } if (!slotRestrictions.Any(s => s.MatchesItem(item))) { return false; } if (user != null && !user.CanAccessInventory(Inventory)) { return false; } - + //genetic materials use special logic for combining, don't allow doing it by placing them inside each other here + if (item.GetComponent() != null) { return false; } + if (Inventory.TryPutItem(item, user)) { IsActive = true; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemLabel.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemLabel.cs index 9cf2e1842..b65b42486 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemLabel.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemLabel.cs @@ -13,6 +13,8 @@ namespace Barotrauma.Items.Components partial void OnStateChanged(); + private string prevColorSignal; + public override void ReceiveSignal(Signal signal, Connection connection) { switch (connection.Name) @@ -22,6 +24,13 @@ namespace Barotrauma.Items.Components Text = signal.value; OnStateChanged(); break; + case "set_text_color": + if (signal.value != prevColorSignal) + { + TextColor = XMLExtensions.ParseColor(signal.value, false); + prevColorSignal = signal.value; + } + break; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs index f8eb62c33..a83b29b97 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs @@ -221,7 +221,7 @@ namespace Barotrauma.Items.Components if (targetItem == otherItem) { continue; } if (deconstructProduct.RequiredOtherItem.Any(r => otherItem.HasTag(r) || r.Equals(otherItem.Prefab.Identifier, StringComparison.OrdinalIgnoreCase))) { - user.CheckTalents(AbilityEffectType.OnGeneticMaterialCombinedOrRefined); + user?.CheckTalents(AbilityEffectType.OnGeneticMaterialCombinedOrRefined); foreach (Character character in Character.GetFriendlyCrew(user)) { character.CheckTalents(AbilityEffectType.OnCrewGeneticMaterialCombinedOrRefined); @@ -264,6 +264,8 @@ namespace Barotrauma.Items.Components { Entity.Spawner.AddToSpawnQueue(itemPrefab, outputContainer.Inventory, condition, onSpawned: (Item spawnedItem) => { + spawnedItem.StolenDuringRound = targetItem.StolenDuringRound; + spawnedItem.AllowStealing = targetItem.AllowStealing; for (int i = 0; i < outputContainer.Capacity; i++) { var containedItem = outputContainer.Inventory.GetItemAt(i); @@ -283,7 +285,13 @@ namespace Barotrauma.Items.Components foreach (ItemContainer ic in targetItem.GetComponents()) { if (ic?.Inventory == null || ic.RemoveContainedItemsOnDeconstruct) { continue; } - ic.Inventory.AllItemsMod.ForEach(containedItem => outputContainer.Inventory.TryPutItem(containedItem, user: null)); + foreach (Item containedItem in ic.Inventory.AllItemsMod) + { + if (!outputContainer.Inventory.TryPutItem(containedItem, user: null)) + { + containedItem.Drop(dropper: null); + } + } } inputContainer.Inventory.RemoveItem(targetItem); Entity.Spawner.AddToRemoveQueue(targetItem); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs index c7d83ec42..279644ef0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs @@ -20,6 +20,11 @@ namespace Barotrauma.Items.Components private string savedFabricatedItem; private float savedTimeUntilReady, savedRequiredTime; + private readonly Dictionary> availableIngredients = new Dictionary>(); + + const float RefreshIngredientsInterval = 1.0f; + private float refreshIngredientsTimer; + private bool hasPower; private Character user; @@ -174,6 +179,8 @@ namespace Barotrauma.Items.Components if (selectedItem == null) { return; } if (!outputContainer.Inventory.CanBePut(selectedItem.TargetItem, selectedItem.OutCondition * selectedItem.TargetItem.Health)) { return; } + RefreshAvailableIngredients(); + #if CLIENT itemList.Enabled = false; activateButton.Text = TextManager.Get("FabricatorCancel"); @@ -242,7 +249,13 @@ namespace Barotrauma.Items.Components public override void Update(float deltaTime, Camera cam) { - var availableIngredients = GetAvailableIngredients(); + if (refreshIngredientsTimer <= 0.0f) + { + RefreshAvailableIngredients(); + refreshIngredientsTimer = RefreshIngredientsInterval; + } + refreshIngredientsTimer -= deltaTime; + if (fabricatedItem == null || !CanBeFabricated(fabricatedItem, availableIngredients, user)) { CancelFabricating(); @@ -271,56 +284,87 @@ namespace Barotrauma.Items.Components State = FabricatorState.Active; } + float tinkeringStrength = 0f; var repairable = item.GetComponent(); if (repairable != null) { repairable.LastActiveTime = (float)Timing.TotalTime + 10.0f; + if (repairable.IsTinkering) + { + tinkeringStrength = repairable.TinkeringStrength; + } } ApplyStatusEffects(ActionType.OnActive, deltaTime, null); if (powerConsumption <= 0) { Voltage = 1.0f; } - float tinkeringStrength = 0f; - if (repairable.IsTinkering) - { - tinkeringStrength = repairable.TinkeringStrength; - } float fabricationSpeedIncrease = 1f + tinkeringStrength * TinkeringSpeedIncrease; timeUntilReady -= deltaTime * fabricationSpeedIncrease * Math.Min(Voltage, 1.0f); UpdateRequiredTimeProjSpecific(); - if (timeUntilReady > 0.0f) { return; } + if (timeUntilReady <= 0.0f) + { + Fabricate(); + } + } + + private void Fabricate() + { + RefreshAvailableIngredients(); + if (fabricatedItem == null || !CanBeFabricated(fabricatedItem, availableIngredients, user)) + { + CancelFabricating(); + return; + } + + bool ingredientsStolen = false; + bool ingredientsAllowStealing = true; if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) { - fabricatedItem.RequiredItems.ForEach(requiredItem => { + fabricatedItem.RequiredItems.ForEach(requiredItem => + { for (int usedPrefabsAmount = 0; usedPrefabsAmount < requiredItem.Amount; usedPrefabsAmount++) { foreach (ItemPrefab requiredPrefab in requiredItem.ItemPrefabs) { if (!availableIngredients.ContainsKey(requiredPrefab.Identifier)) { continue; } - var availablePrefabs = availableIngredients[requiredPrefab.Identifier]; - var availablePrefab = availablePrefabs.FirstOrDefault(potentialPrefab => + var availableItems = availableIngredients[requiredPrefab.Identifier]; + var availableItem = availableItems.FirstOrDefault(potentialPrefab => { return potentialPrefab.ConditionPercentage >= requiredItem.MinCondition * 100.0f && potentialPrefab.ConditionPercentage <= requiredItem.MaxCondition * 100.0f; }); - if (availablePrefab == null) { continue; } + if (availableItem == null) { continue; } - if (requiredItem.UseCondition && availablePrefab.ConditionPercentage - requiredItem.MinCondition * 100 > 0.0f) //Leave it behind with reduced condition if it has enough to stay above 0 + ingredientsStolen |= availableItem.StolenDuringRound; + if (!availableItem.AllowStealing) { - availablePrefab.Condition -= availablePrefab.Prefab.Health * requiredItem.MinCondition; - continue; + ingredientsAllowStealing = false; } - availablePrefabs.Remove(availablePrefab); - Entity.Spawner.AddToRemoveQueue(availablePrefab); - inputContainer.Inventory.RemoveItem(availablePrefab); + //Leave it behind with reduced condition if it has enough to stay above 0 + if (requiredItem.UseCondition && availableItem.ConditionPercentage - requiredItem.MinCondition * 100 > 0.0f) + { + availableItem.Condition -= availableItem.Prefab.Health * requiredItem.MinCondition; + continue; + } + if (availableItem.OwnInventory != null) + { + foreach (Item containedItem in availableItem.OwnInventory.AllItemsMod) + { + containedItem.Drop(dropper: null); + } + } + + availableItems.Remove(availableItem); + Entity.Spawner.AddToRemoveQueue(availableItem); + inputContainer.Inventory.RemoveItem(availableItem); } } }); @@ -351,6 +395,9 @@ namespace Barotrauma.Items.Components onSpawned: (Item spawnedItem) => { onItemSpawned(spawnedItem, tempUser); + spawnedItem.Quality = quality; + spawnedItem.StolenDuringRound = ingredientsStolen; + spawnedItem.AllowStealing = ingredientsAllowStealing; //reset the condition in case the max condition is higher than the prefab's due to e.g. quality modifiers spawnedItem.Condition = spawnedItem.MaxCondition * outCondition; }); @@ -361,6 +408,9 @@ namespace Barotrauma.Items.Components onSpawned: (Item spawnedItem) => { onItemSpawned(spawnedItem, tempUser); + spawnedItem.Quality = quality; + spawnedItem.StolenDuringRound = ingredientsStolen; + spawnedItem.AllowStealing = ingredientsAllowStealing; //reset the condition in case the max condition is higher than the prefab's due to e.g. quality modifiers spawnedItem.Condition = spawnedItem.MaxCondition * outCondition; }); @@ -408,6 +458,7 @@ namespace Barotrauma.Items.Components CancelFabricating(); } + } private int GetFabricatedItemQuality(FabricationRecipe fabricatedItem, Character user) @@ -446,8 +497,8 @@ namespace Barotrauma.Items.Components var availablePrefabs = availableIngredients[requiredPrefab.Identifier]; foreach (Item availablePrefab in availablePrefabs) { - if (availablePrefab.Condition / availablePrefab.Prefab.Health >= requiredItem.MinCondition && - availablePrefab.Condition / availablePrefab.Prefab.Health <= requiredItem.MaxCondition) + if (availablePrefab.ConditionPercentage / 100.0f >= requiredItem.MinCondition && + availablePrefab.ConditionPercentage / 100.0f <= requiredItem.MaxCondition) { availablePrefabsAmount++; } @@ -490,14 +541,10 @@ namespace Barotrauma.Items.Components return SkillRequirementMultiplier; } - /// - /// Get a list of all items available in the input container and linked containers - /// - /// - private Dictionary> GetAvailableIngredients() + private void RefreshAvailableIngredients() { - List availableIngredients = new List(); - availableIngredients.AddRange(inputContainer.Inventory.AllItems); + List itemList = new List(); + itemList.AddRange(inputContainer.Inventory.AllItems); foreach (MapEntity linkedTo in item.linkedTo) { if (linkedTo is Item linkedItem) @@ -511,34 +558,38 @@ namespace Barotrauma.Items.Components itemContainer = deconstructor.OutputContainer; } - availableIngredients.AddRange(itemContainer.Inventory.AllItems); + itemList.AddRange(itemContainer.Inventory.AllItems); + } + } + for (int i = 0; i < itemList.Count; i++) + { + var container = itemList[i].GetComponent(); + if (container != null) + { + itemList.AddRange(container.Inventory.AllItems); } } #if CLIENT if (Character.Controlled?.Inventory != null) { - availableIngredients.AddRange(Character.Controlled.Inventory.AllItems); + itemList.AddRange(Character.Controlled.Inventory.AllItems); } #else if (user?.Inventory != null) { - availableIngredients.AddRange(user.Inventory.AllItems); + itemList.AddRange(user.Inventory.AllItems); } #endif - - Dictionary> ingredientsDictionary = new Dictionary>(); - for (int i = 0; i < availableIngredients.Count; i++) + availableIngredients.Clear(); + foreach (Item item in itemList) { - var itemIdentifier = availableIngredients[i].prefab.Identifier; - if (!ingredientsDictionary.ContainsKey(itemIdentifier)) + var itemIdentifier = item.prefab.Identifier; + if (!availableIngredients.ContainsKey(itemIdentifier)) { - ingredientsDictionary[itemIdentifier] = new List(availableIngredients.Count); + availableIngredients[itemIdentifier] = new List(itemList.Count); } - - ingredientsDictionary[itemIdentifier].Add(availableIngredients[i]); + availableIngredients[itemIdentifier].Add(item); } - - return ingredientsDictionary; } /// @@ -552,7 +603,6 @@ namespace Barotrauma.Items.Components bool isClient = GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient; - var availableIngredients = GetAvailableIngredients(); targetItem.RequiredItems.ForEach(requiredItem => { for (int i = 0; i < requiredItem.Amount; i++) { @@ -588,6 +638,7 @@ namespace Barotrauma.Items.Components } } }); + RefreshAvailableIngredients(); } public override XElement Save(XElement parentElement) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs index 351e57ef4..4fa70bb68 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs @@ -190,28 +190,38 @@ namespace Barotrauma.Items.Components #if CLIENT if (GameMain.Client != null) { return false; } #endif - - if (objective.Option.Equals("stoppumping", StringComparison.OrdinalIgnoreCase)) + switch (objective.Option.ToLowerInvariant()) { + case "pumpout": #if SERVER - if (objective.Override || FlowPercentage > 0.0f) - { - item.CreateServerEvent(this); - } + if (objective.Override || !IsActive || FlowPercentage > -100.0f) + { + item.CreateServerEvent(this); + } #endif - IsActive = false; - FlowPercentage = 0.0f; - } - else - { + IsActive = true; + FlowPercentage = -100.0f; + break; + case "pumpin": #if SERVER - if (objective.Override || !IsActive || FlowPercentage > -100.0f) - { - item.CreateServerEvent(this); - } + if (objective.Override || !IsActive || FlowPercentage < 100.0f) + { + item.CreateServerEvent(this); + } #endif - IsActive = true; - FlowPercentage = -100.0f; + IsActive = true; + FlowPercentage = 100.0f; + break; + case "stoppumping": +#if SERVER + if (objective.Override || FlowPercentage > 0.0f) + { + item.CreateServerEvent(this); + } +#endif + IsActive = false; + FlowPercentage = 0.0f; + break; } return true; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs index 8655b2618..273862942 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs @@ -12,7 +12,6 @@ namespace Barotrauma.Items.Components partial class Reactor : Powered, IServerSerializable, IClientSerializable { const float NetworkUpdateIntervalHigh = 0.5f; - const float NetworkUpdateIntervalLow = 10.0f; //the rate at which the reactor is being run on (higher rate -> higher temperature) private float fissionRate; @@ -38,9 +37,8 @@ namespace Barotrauma.Items.Components private float maxPowerOutput; - private Queue loadQueue = new Queue(); - private float load; - + private readonly Queue loadQueue = new Queue(); + private bool unsentChanges; private float sendUpdateTimer; @@ -158,11 +156,6 @@ namespace Barotrauma.Items.Components set { /*do nothing*/ } } - private float correctTurbineOutput; - - private float targetFissionRate; - private float targetTurbineOutput; - [Serialize(false, true, description: "Is the automatic temperature control currently on. Indended to be used by StatusEffect conditionals (setting the value from XML is not recommended).")] public bool AutoTemp { @@ -181,6 +174,18 @@ namespace Barotrauma.Items.Components [Serialize(0.0f, true)] public float AvailableFuel { get; set; } + [Serialize(0.0f, true)] + public new float Load { get; private set; } + + [Serialize(0.0f, true)] + public float TargetFissionRate { get; set; } + + [Serialize(0.0f, true)] + public float TargetTurbineOutput { get; set; } + + [Serialize(0.0f, true)] + public float CorrectTurbineOutput { get; set; } + public Reactor(Item item, XElement element) : base(item, element) { @@ -199,8 +204,8 @@ namespace Barotrauma.Items.Components { GameServer.Log(GameServer.CharacterLogName(lastUser) + " adjusted reactor settings: " + "Temperature: " + (int)(temperature * 100.0f) + - ", Fission rate: " + (int)targetFissionRate + - ", Turbine output: " + (int)targetTurbineOutput + + ", Fission rate: " + (int)TargetFissionRate + + ", Turbine output: " + (int)TargetTurbineOutput + (autoTemp ? ", Autotemp ON" : ", Autotemp OFF"), ServerLog.MessageType.ItemInteraction); @@ -223,7 +228,7 @@ namespace Barotrauma.Items.Components } #if CLIENT - if(PowerOn && AvailableFuel < 1) + if (PowerOn && AvailableFuel < 1) { HintManager.OnReactorOutOfFuel(this); } @@ -236,15 +241,15 @@ namespace Barotrauma.Items.Components //so the player doesn't have to keep adjusting the rate impossibly fast when the load fluctuates heavily if (!MathUtils.NearlyEqual(MaxPowerOutput, 0.0f)) { - correctTurbineOutput += MathHelper.Clamp((load / MaxPowerOutput * 100.0f) - correctTurbineOutput, -10.0f, 10.0f) * deltaTime; + CorrectTurbineOutput += MathHelper.Clamp((Load / MaxPowerOutput * 100.0f) - CorrectTurbineOutput, -10.0f, 10.0f) * deltaTime; } //calculate tolerances of the meters based on the skills of the user //more skilled characters have larger "sweet spots", making it easier to keep the power output at a suitable level float tolerance = MathHelper.Lerp(2.5f, 10.0f, degreeOfSuccess); - optimalTurbineOutput = new Vector2(correctTurbineOutput - tolerance, correctTurbineOutput + tolerance); + optimalTurbineOutput = new Vector2(CorrectTurbineOutput - tolerance, CorrectTurbineOutput + tolerance); tolerance = MathHelper.Lerp(5.0f, 20.0f, degreeOfSuccess); - allowedTurbineOutput = new Vector2(correctTurbineOutput - tolerance, correctTurbineOutput + tolerance); + allowedTurbineOutput = new Vector2(CorrectTurbineOutput - tolerance, CorrectTurbineOutput + tolerance); optimalTemperature = Vector2.Lerp(new Vector2(40.0f, 60.0f), new Vector2(30.0f, 70.0f), degreeOfSuccess); allowedTemperature = Vector2.Lerp(new Vector2(30.0f, 70.0f), new Vector2(10.0f, 90.0f), degreeOfSuccess); @@ -260,9 +265,9 @@ namespace Barotrauma.Items.Components Temperature += MathHelper.Clamp(Math.Sign(temperatureDiff) * 10.0f * deltaTime, -Math.Abs(temperatureDiff), Math.Abs(temperatureDiff)); //if (item.InWater && AvailableFuel < 100.0f) Temperature -= 12.0f * deltaTime; - FissionRate = MathHelper.Lerp(fissionRate, Math.Min(targetFissionRate, AvailableFuel), deltaTime); + FissionRate = MathHelper.Lerp(fissionRate, Math.Min(TargetFissionRate, AvailableFuel), deltaTime); - TurbineOutput = MathHelper.Lerp(turbineOutput, targetTurbineOutput, deltaTime); + TurbineOutput = MathHelper.Lerp(turbineOutput, TargetTurbineOutput, deltaTime); float temperatureFactor = Math.Min(temperature / 50.0f, 1.0f); currPowerConsumption = -MaxPowerOutput * Math.Min(turbineOutput / 100.0f, temperatureFactor); @@ -276,7 +281,7 @@ namespace Barotrauma.Items.Components float maxAutoAdjust = maxPowerOutput * 0.1f; autoAdjustAmount = MathHelper.Lerp( autoAdjustAmount, - MathHelper.Clamp(-load - currPowerConsumption, -maxAutoAdjust, maxAutoAdjust), + MathHelper.Clamp(-Load - currPowerConsumption, -maxAutoAdjust, maxAutoAdjust), deltaTime * 10.0f); } else @@ -287,8 +292,8 @@ namespace Barotrauma.Items.Components if (!PowerOn) { - targetFissionRate = 0.0f; - targetTurbineOutput = 0.0f; + TargetFissionRate = 0.0f; + TargetTurbineOutput = 0.0f; } else if (autoTemp) { @@ -317,56 +322,30 @@ namespace Barotrauma.Items.Components } } - if (!loadQueue.Any() && PowerOn) - { - //loadQueue is empty, round must've just started - //reset the fission rate, turbine output and - //temperature to optimal levels to prevent fires - //at the start of the round - correctTurbineOutput = MathUtils.NearlyEqual(MaxPowerOutput, 0.0f) ? 0.0f : currentLoad / MaxPowerOutput * 100.0f; - tolerance = MathHelper.Lerp(2.5f, 10.0f, degreeOfSuccess); - optimalTurbineOutput = new Vector2(correctTurbineOutput - tolerance, correctTurbineOutput + tolerance); - tolerance = MathHelper.Lerp(5.0f, 20.0f, degreeOfSuccess); - allowedTurbineOutput = new Vector2(correctTurbineOutput - tolerance, correctTurbineOutput + tolerance); - - DebugConsole.Log($"Degree of success: {degreeOfSuccess}"); - DebugConsole.Log($"Current load: {currentLoad}"); - DebugConsole.Log($"Max power output: {MaxPowerOutput}"); - DebugConsole.Log($"Available fuel: {AvailableFuel}"); - - float desiredTurbineOutput = MathHelper.Clamp(correctTurbineOutput, 0.0f, 100.0f); - DebugConsole.Log($"Turbine output reset: {targetTurbineOutput}, {turbineOutput} -> {desiredTurbineOutput}"); - targetTurbineOutput = desiredTurbineOutput; - turbineOutput = desiredTurbineOutput; - - float desiredTemperature = (optimalTemperature.X + optimalTemperature.Y) / 2.0f; - DebugConsole.Log($"Temperature reset: {temperature} -> {desiredTemperature}"); - temperature = desiredTemperature; - - float desiredFissionRate = GetFissionRateForTargetTemperatureAndTurbineOutput(desiredTemperature, desiredTurbineOutput); - DebugConsole.Log($"Fission rate reset: {targetFissionRate}, {fissionRate} -> {desiredFissionRate}"); - targetFissionRate = desiredFissionRate; - fissionRate = desiredFissionRate; - } - loadQueue.Enqueue(currentLoad); while (loadQueue.Count() > 60.0f) { - load = loadQueue.Average(); + Load = loadQueue.Average(); loadQueue.Dequeue(); } + float fuelLeft = 0.0f; + var containedItems = item.OwnInventory?.AllItems; + if (containedItems != null) + { + foreach (Item item in containedItems) + { + if (!item.HasTag("reactorfuel")) { continue; } + if (fissionRate > 0.0f) + { + item.Condition -= fissionRate / 100.0f * fuelConsumptionRate * deltaTime; + } + fuelLeft += item.ConditionPercentage; + } + } + if (fissionRate > 0.0f) { - var containedItems = item.OwnInventory?.AllItems; - if (containedItems != null) - { - foreach (Item item in containedItems) - { - if (!item.HasTag("reactorfuel")) { continue; } - item.Condition -= fissionRate / 100.0f * fuelConsumptionRate * deltaTime; - } - } if (item.AiTarget != null && MaxPowerOutput > 0) { var aiTarget = item.AiTarget; @@ -385,8 +364,9 @@ namespace Barotrauma.Items.Components item.SendSignal(((int)(temperature * 100.0f)).ToString(), "temperature_out"); item.SendSignal(((int)-CurrPowerConsumption).ToString(), "power_value_out"); - item.SendSignal(((int)load).ToString(), "load_value_out"); + item.SendSignal(((int)Load).ToString(), "load_value_out"); item.SendSignal(((int)AvailableFuel).ToString(), "fuel_out"); + item.SendSignal(((int)fuelLeft).ToString(), "fuel_percentage_left"); UpdateFailures(deltaTime); #if CLIENT @@ -407,8 +387,7 @@ namespace Barotrauma.Items.Components { item.CreateServerEvent(this); } -#endif -#if CLIENT +#elif CLIENT if (GameMain.Client != null) { item.CreateClientEvent(this); @@ -424,12 +403,6 @@ namespace Barotrauma.Items.Components return fissionRate * (prevAvailableFuel / 100.0f) * 2.0f; } - private float GetFissionRateForTargetTemperatureAndTurbineOutput(float temperature, float turbineOutput) - { - if (MathUtils.NearlyEqual(AvailableFuel, 0f)) { return 0f; } - return (temperature + turbineOutput) / (AvailableFuel / 100f) / 2f; - } - /// /// Do we need more fuel to generate enough power to match the current load. /// @@ -438,7 +411,7 @@ namespace Barotrauma.Items.Components private bool NeedMoreFuel(float minimumOutputRatio, float minCondition = 0) { float remainingFuel = item.ContainedItems.Sum(i => i.Condition); - if (remainingFuel <= minCondition && load > 0.0f) + if (remainingFuel <= minCondition && Load > 0.0f) { return true; } @@ -455,7 +428,7 @@ namespace Barotrauma.Items.Components float theoreticalMaxOutput = Math.Min(maxTurbineOutput / 100.0f, temperatureFactor) * MaxPowerOutput; //maximum output not enough, we need more fuel - return theoreticalMaxOutput < load * minimumOutputRatio; + return theoreticalMaxOutput < Load * minimumOutputRatio; } private bool TooMuchFuel() @@ -467,7 +440,7 @@ namespace Barotrauma.Items.Components float minimumHeat = GetGeneratedHeat(optimalFissionRate.X); //if we need a very high turbine output to keep the engine from overheating, there's too much fuel - return minimumHeat > Math.Min(correctTurbineOutput * 1.5f, 90); + return minimumHeat > Math.Min(CorrectTurbineOutput * 1.5f, 90); } private void UpdateFailures(float deltaTime) @@ -514,26 +487,26 @@ namespace Barotrauma.Items.Components public void UpdateAutoTemp(float speed, float deltaTime) { float desiredTurbineOutput = (optimalTurbineOutput.X + optimalTurbineOutput.Y) / 2.0f; - targetTurbineOutput += MathHelper.Clamp(desiredTurbineOutput - targetTurbineOutput, -speed, speed) * deltaTime; - targetTurbineOutput = MathHelper.Clamp(targetTurbineOutput, 0.0f, 100.0f); + TargetTurbineOutput += MathHelper.Clamp(desiredTurbineOutput - TargetTurbineOutput, -speed, speed) * deltaTime; + TargetTurbineOutput = MathHelper.Clamp(TargetTurbineOutput, 0.0f, 100.0f); float desiredFissionRate = (optimalFissionRate.X + optimalFissionRate.Y) / 2.0f; - targetFissionRate += MathHelper.Clamp(desiredFissionRate - targetFissionRate, -speed, speed) * deltaTime; + TargetFissionRate += MathHelper.Clamp(desiredFissionRate - TargetFissionRate, -speed, speed) * deltaTime; if (temperature > (optimalTemperature.X + optimalTemperature.Y) / 2.0f) { - targetFissionRate = Math.Min(targetFissionRate - speed * 2 * deltaTime, allowedFissionRate.Y); + TargetFissionRate = Math.Min(TargetFissionRate - speed * 2 * deltaTime, allowedFissionRate.Y); } - else if (-currPowerConsumption < load) + else if (-currPowerConsumption < Load) { - targetFissionRate = Math.Min(targetFissionRate + speed * 2 * deltaTime, 100.0f); + TargetFissionRate = Math.Min(TargetFissionRate + speed * 2 * deltaTime, 100.0f); } - targetFissionRate = MathHelper.Clamp(targetFissionRate, 0.0f, 100.0f); + TargetFissionRate = MathHelper.Clamp(TargetFissionRate, 0.0f, 100.0f); //don't push the target too far from the current fission rate //otherwise we may "overshoot", cranking the target fission rate all the way up because it takes a while //for the actual fission rate and temperature to follow - targetFissionRate = MathHelper.Clamp(targetFissionRate, FissionRate - 5, FissionRate + 5); + TargetFissionRate = MathHelper.Clamp(TargetFissionRate, FissionRate - 5, FissionRate + 5); } public void PowerUpImmediately() @@ -557,8 +530,8 @@ namespace Barotrauma.Items.Components currPowerConsumption = 0.0f; Temperature -= deltaTime * 1000.0f; - targetFissionRate = Math.Max(targetFissionRate - deltaTime * 10.0f, 0.0f); - targetTurbineOutput = Math.Max(targetTurbineOutput - deltaTime * 10.0f, 0.0f); + TargetFissionRate = Math.Max(TargetFissionRate - deltaTime * 10.0f, 0.0f); + TargetTurbineOutput = Math.Max(TargetTurbineOutput - deltaTime * 10.0f, 0.0f); #if CLIENT FissionRateScrollBar.BarScroll = 1.0f - FissionRate / 100.0f; TurbineOutputScrollBar.BarScroll = 1.0f - TurbineOutput / 100.0f; @@ -583,7 +556,6 @@ namespace Barotrauma.Items.Components containedItem.Condition = 0.0f; } } - #if SERVER GameServer.Log("Reactor meltdown!", ServerLog.MessageType.ItemInteraction); if (GameMain.Server != null) @@ -696,15 +668,15 @@ namespace Barotrauma.Items.Components bool prevAutoTemp = autoTemp; bool prevPowerOn = _powerOn; - float prevFissionRate = targetFissionRate; - float prevTurbineOutput = targetTurbineOutput; + float prevFissionRate = TargetFissionRate; + float prevTurbineOutput = TargetTurbineOutput; if (shutDown) { PowerOn = false; AutoTemp = false; - targetFissionRate = 0.0f; - targetTurbineOutput = 0.0f; + TargetFissionRate = 0.0f; + TargetTurbineOutput = 0.0f; unsentChanges = true; return true; } @@ -730,8 +702,8 @@ namespace Barotrauma.Items.Components #endif if (autoTemp != prevAutoTemp || prevPowerOn != _powerOn || - Math.Abs(prevFissionRate - targetFissionRate) > 1.0f || - Math.Abs(prevTurbineOutput - targetTurbineOutput) > 1.0f) + Math.Abs(prevFissionRate - TargetFissionRate) > 1.0f || + Math.Abs(prevTurbineOutput - TargetTurbineOutput) > 1.0f) { unsentChanges = true; } @@ -767,32 +739,32 @@ namespace Barotrauma.Items.Components switch (connection.Name) { case "shutdown": - if (targetFissionRate > 0.0f || targetTurbineOutput > 0.0f) + if (TargetFissionRate > 0.0f || TargetTurbineOutput > 0.0f) { PowerOn = false; AutoTemp = false; - targetFissionRate = 0.0f; - targetTurbineOutput = 0.0f; + TargetFissionRate = 0.0f; + TargetTurbineOutput = 0.0f; if (GameMain.NetworkMember?.IsServer ?? false) { unsentChanges = true; } } break; case "set_fissionrate": if (PowerOn && float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out float newFissionRate)) { - targetFissionRate = MathHelper.Clamp(newFissionRate, 0.0f, 100.0f); + TargetFissionRate = MathHelper.Clamp(newFissionRate, 0.0f, 100.0f); if (GameMain.NetworkMember?.IsServer ?? false) { unsentChanges = true; } #if CLIENT - FissionRateScrollBar.BarScroll = targetFissionRate / 100.0f; + FissionRateScrollBar.BarScroll = TargetFissionRate / 100.0f; #endif } break; case "set_turbineoutput": if (PowerOn && float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out float newTurbineOutput)) { - targetTurbineOutput = MathHelper.Clamp(newTurbineOutput, 0.0f, 100.0f); + TargetTurbineOutput = MathHelper.Clamp(newTurbineOutput, 0.0f, 100.0f); if (GameMain.NetworkMember?.IsServer ?? false) { unsentChanges = true; } #if CLIENT - TurbineOutputScrollBar.BarScroll = targetTurbineOutput / 100.0f; + TurbineOutputScrollBar.BarScroll = TargetTurbineOutput / 100.0f; #endif } break; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs index a656e622b..c0a64ef76 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs @@ -17,6 +17,8 @@ namespace Barotrauma.Items.Components public const float DefaultSonarRange = 10000.0f; + public const float PassivePowerConsumption = 0.1f; + class ConnectedTransducer { public readonly SonarTransducer Transducer; @@ -150,7 +152,7 @@ namespace Barotrauma.Items.Components public override void Update(float deltaTime, Camera cam) { - currPowerConsumption = (currentMode == Mode.Active) ? powerConsumption : powerConsumption * 0.1f; + currPowerConsumption = (currentMode == Mode.Active) ? powerConsumption : powerConsumption * PassivePowerConsumption; UpdateOnActiveEffects(deltaTime); @@ -332,7 +334,9 @@ namespace Barotrauma.Items.Components if (connection.Name == "transducer_in") { var transducer = signal.source.GetComponent(); - if (transducer == null) return; + if (transducer == null) { return; } + + transducer.ConnectedSonar = this; var connectedTransducer = connectedTransducers.Find(t => t.Transducer == transducer); if (connectedTransducer == null) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/SonarTransducer.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/SonarTransducer.cs index 3d09af2aa..b4c9c7252 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/SonarTransducer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/SonarTransducer.cs @@ -8,6 +8,8 @@ namespace Barotrauma.Items.Components private float sendSignalTimer; + public Sonar ConnectedSonar; + public SonarTransducer(Item item, XElement element) : base(item, element) { IsActive = true; @@ -17,7 +19,7 @@ namespace Barotrauma.Items.Components { UpdateOnActiveEffects(deltaTime); - CurrPowerConsumption = powerConsumption; + CurrPowerConsumption = powerConsumption * (ConnectedSonar?.CurrentMode == Sonar.Mode.Active ? 1.0f : Sonar.PassivePowerConsumption); if (Voltage >= MinVoltage) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs index 8cc3945de..b44026a4f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs @@ -61,6 +61,8 @@ namespace Barotrauma.Items.Components public List IgnoredBodies; + private Character stickTargetCharacter; + private Character _user; public Character User { @@ -614,8 +616,8 @@ namespace Barotrauma.Items.Components return; } - //target very far from the item -> update the item's transform to make sure it's inside the same sub as the target (or outside) - if (Math.Abs(stickJoint.JointTranslation) > 100.0f) + // Update the item's transform to make sure it's inside the same sub as the target (or outside) + if (StickTarget?.UserData is Limb target && target.Submarine != item.Submarine || Math.Abs(stickJoint.JointTranslation) > 100.0f) { item.UpdateTransform(); } @@ -866,7 +868,7 @@ namespace Barotrauma.Items.Components (DoesStick || (StickToCharacters && (target.Body.UserData is Limb || target.Body.UserData is Character)) || (StickToStructures && target.Body.UserData is Structure) || - (StickToItems && target.Body.UserData is Item))) + (StickToItems && target.Body.UserData is Item))) { Vector2 dir = new Vector2( (float)Math.Cos(item.body.Rotation), @@ -965,9 +967,14 @@ namespace Barotrauma.Items.Components GameMain.World.Add(stickJoint); IsActive = true; + if (targetBody.UserData is Limb limb) + { + stickTargetCharacter = limb.character; + stickTargetCharacter.AttachedProjectiles.Add(this); + } } - private void Unstick() + public void Unstick() { StickTarget = null; if (stickJoint != null) @@ -979,25 +986,21 @@ namespace Barotrauma.Items.Components stickJoint = null; } if (!item.body.FarseerBody.IsBullet) { IsActive = false; } + item.GetComponent()?.Snap(); + if (stickTargetCharacter != null) + { + stickTargetCharacter.AttachedProjectiles.Remove(this); + stickTargetCharacter = null; + } } protected override void RemoveComponentSpecific() { base.RemoveComponentSpecific(); - if (stickJoint != null) + if (IsStuckToTarget || stickJoint != null || stickTargetCharacter != null) { - try - { - GameMain.World.Remove(stickJoint); - } - catch - { - //the body that the projectile was stuck to has been removed - } - - stickJoint = null; + Unstick(); } - } partial void LaunchProjSpecific(Vector2 startLocation, Vector2 endLocation); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Quality.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Quality.cs index 5ffe84c32..75f82175c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Quality.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Quality.cs @@ -26,6 +26,10 @@ namespace Barotrauma.Items.Components RepairToolStructureRepairMultiplier, RepairToolStructureDamageMultiplier, RepairToolDeattachTimeMultiplier, + StoppingPowerMultiplier, + StrikingPowerMultiplier, + StrikingSpeedMultiplier, + FiringRateMultiplier, // unused as of now AttackMultiplier, AttackSpeedMultiplier, @@ -33,7 +37,6 @@ namespace Barotrauma.Items.Components RangedSpreadReduction, ChargeSpeedMultiplier, MovementSpeedMultiplier, - // generic stats to be used for various needs, declared just in case (localization) EffectivenessMultiplier, PowerOutputMultiplier, ConsumptionReductionMultiplier, diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs index 38331c971..7a6f66a64 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs @@ -105,11 +105,6 @@ namespace Barotrauma.Items.Components public bool IsTinkering { get; private set; } = false; - public float RepairIconThreshold - { - get { return RepairThreshold / 2; } - } - public Character CurrentFixer { get; private set; } private Item currentRepairItem; @@ -118,6 +113,9 @@ namespace Barotrauma.Items.Components public float TinkeringStrength => tinkeringStrength; + public bool IsBelowRepairThreshold => item.ConditionPercentage <= RepairThreshold; + public bool IsBelowRepairIconThreshold => item.ConditionPercentage <= RepairThreshold / 2; + public enum FixActions : int { None = 0, @@ -179,8 +177,17 @@ namespace Barotrauma.Items.Components if (bestRepairItem != null && bestRepairItem.Prefab.CannotRepairFail) { return true; } // unpowered (electrical) items can be repaired without a risk of electrical shock - if (requiredSkills.Any(s => s != null && s.Identifier.Equals("electrical", StringComparison.OrdinalIgnoreCase)) && - item.GetComponent() is Powered powered && powered.Voltage < 0.1f) { return true; } + if (requiredSkills.Any(s => s != null && s.Identifier.Equals("electrical", StringComparison.OrdinalIgnoreCase))) + { + if (item.GetComponent() is Reactor reactor) + { + if (MathUtils.NearlyEqual(reactor.CurrPowerConsumption, 0.0f, 0.1f)) { return true; } + } + else if (item.GetComponent() is Powered powered && powered.Voltage < 0.1f) + { + return true; + } + } if (Rand.Range(0.0f, 0.5f) < RepairDegreeOfSuccess(character, requiredSkills)) { return true; } @@ -393,7 +400,7 @@ namespace Barotrauma.Items.Components float successFactor = requiredSkills.Count == 0 ? 1.0f : RepairDegreeOfSuccess(CurrentFixer, requiredSkills); //item must have been below the repair threshold for the player to get an achievement or XP for repairing it - if (item.ConditionPercentage < RepairThreshold) + if (IsBelowRepairThreshold) { wasBroken = true; } @@ -524,7 +531,7 @@ namespace Barotrauma.Items.Components public void AdjustPowerConsumption(ref float powerConsumption) { - if (item.ConditionPercentage < RepairThreshold) + if (IsBelowRepairThreshold) { powerConsumption *= MathHelper.Lerp(1.5f, 1.0f, item.Condition / item.MaxCondition); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Rope.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Rope.cs index 1e696bf14..432e96f31 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Rope.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Rope.cs @@ -306,9 +306,13 @@ namespace Barotrauma.Items.Components forceDir.X = Math.Clamp(forceDir.X, -0.1f, 0.1f); } } - float force = LerpForces ? MathHelper.Lerp(0, TargetPullForce, MathUtils.InverseLerp(0, MaxLength / 3, distance)) : TargetPullForce; + float force = LerpForces ? MathHelper.Lerp(0, TargetPullForce, MathUtils.InverseLerp(0, MaxLength / 3, distance - 50)) : TargetPullForce; targetBody?.ApplyForce(-forceDir * force); - targetCharacter?.AnimController.Collider.ApplyForce(-forceDir * force * 3); + var targetRagdoll = targetCharacter?.AnimController; + if (targetRagdoll != null && (targetRagdoll.InWater || targetRagdoll.OnGround)) + { + targetRagdoll.Collider.ApplyForce(-forceDir * force * 3); + } } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/AndComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/AndComponent.cs index 70215590e..d54ec8b92 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/AndComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/AndComponent.cs @@ -19,6 +19,10 @@ namespace Barotrauma.Items.Components get { return timeFrame; } set { + if (value > timeFrame) + { + timeSinceReceived[0] = timeSinceReceived[1] = Math.Max(value * 2.0f, 0.1f); + } timeFrame = Math.Max(0.0f, value); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ArithmeticComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ArithmeticComponent.cs index 98c580ec4..ecf63774b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ArithmeticComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ArithmeticComponent.cs @@ -39,6 +39,10 @@ namespace Barotrauma.Items.Components get { return timeFrame; } set { + if (value > timeFrame) + { + timeSinceReceived[0] = timeSinceReceived[1] = Math.Max(value * 2.0f, 0.1f); + } timeFrame = Math.Max(0.0f, value); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/DelayComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/DelayComponent.cs index e2f327502..3249973db 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/DelayComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/DelayComponent.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Xml.Linq; - +using Microsoft.Xna.Framework; namespace Barotrauma.Items.Components { class DelayComponent : ItemComponent @@ -114,6 +114,18 @@ namespace Barotrauma.Items.Components }; signalQueue.Enqueue(prevQueuedSignal); break; + case "set_delay": + if (float.TryParse(signal.value, out float newDelay)) + { + newDelay = MathHelper.Clamp(newDelay, 0, 60); + if (signalQueue.Count > 0 && newDelay != Delay) + { + prevQueuedSignal = null; + signalQueue.Clear(); + } + Delay = newDelay; + } + break; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/EqualsComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/EqualsComponent.cs index 6283a3449..19175aaf3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/EqualsComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/EqualsComponent.cs @@ -62,6 +62,10 @@ namespace Barotrauma.Items.Components get { return timeFrame; } set { + if (value > timeFrame) + { + timeSinceReceived[0] = timeSinceReceived[1] = Math.Max(value * 2.0f, 0.1f); + } timeFrame = Math.Max(0.0f, value); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs index 90814c3cb..876e785e3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs @@ -43,7 +43,16 @@ namespace Barotrauma.Items.Components } } - public float Rotation; + private float rotation; + public float Rotation + { + get { return rotation; } + set + { + rotation = value; + SetLightSourceTransform(); + } + } [Editable, Serialize(true, true, description: "Should structures cast shadows when light from this light source hits them. " + "Disabling shadows increases the performance of the game, and is recommended for lights with a short range.", alwaysUseInstanceValues: true)] @@ -246,39 +255,14 @@ namespace Barotrauma.Items.Components SetLightSourceState(false, 0.0f); return; } -#if CLIENT - if (ParentBody != null) - { - Light.Position = ParentBody.Position; - } - else if (turret != null) - { - Light.Position = new Vector2(item.Rect.X + turret.TransformedBarrelPos.X, item.Rect.Y - turret.TransformedBarrelPos.Y); - } - else - { - Light.Position = item.Position; - } -#endif + + SetLightSourceTransform(); + PhysicsBody body = ParentBody ?? item.body; - if (body != null) + if (body != null && !body.Enabled) { -#if CLIENT - Light.Rotation = body.Dir > 0.0f ? body.DrawRotation : body.DrawRotation - MathHelper.Pi; - Light.LightSpriteEffect = (body.Dir > 0.0f) ? SpriteEffects.None : SpriteEffects.FlipVertically; -#endif - if (!body.Enabled) - { - SetLightSourceState(false, 0.0f); - return; - } - } - else - { -#if CLIENT - Light.Rotation = -Rotation - MathHelper.ToRadians(item.Rotation); - Light.LightSpriteEffect = item.SpriteEffects; -#endif + SetLightSourceState(false, 0.0f); + return; } currPowerConsumption = powerConsumption; @@ -333,6 +317,9 @@ namespace Barotrauma.Items.Components if (signal.value != prevColorSignal) { LightColor = XMLExtensions.ParseColor(signal.value, false); +#if CLIENT + SetLightSourceState(Light.Enabled, currentBrightness); +#endif prevColorSignal = signal.value; } break; @@ -350,5 +337,8 @@ namespace Barotrauma.Items.Components } partial void SetLightSourceState(bool enabled, float brightness); + + partial void SetLightSourceTransform(); + } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MemoryComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MemoryComponent.cs index 045ffd45a..39ee77a58 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MemoryComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MemoryComponent.cs @@ -34,7 +34,12 @@ namespace Barotrauma.Items.Components } } - protected bool writeable = true; + [Editable, Serialize(true, true, description: "Can the value stored in the memory component be changed via signals.", alwaysUseInstanceValues: true)] + public bool Writeable + { + get; + set; + } public MemoryComponent(Item item, XElement element) : base(item, element) @@ -54,7 +59,7 @@ namespace Barotrauma.Items.Components switch (connection.Name) { case "signal_in": - if (writeable) + if (Writeable) { string prevValue = Value; Value = signal.value; @@ -66,7 +71,7 @@ namespace Barotrauma.Items.Components break; case "signal_store": case "lock_state": - writeable = signal.value == "1"; + Writeable = signal.value == "1"; break; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MotionSensor.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MotionSensor.cs index 0ead9540d..14abecf89 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MotionSensor.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/MotionSensor.cs @@ -131,6 +131,13 @@ namespace Barotrauma.Items.Components set; } + [Serialize(true, true, description: "Should the sensor trigger when the item itself moves.")] + public bool DetectOwnMotion + { + get; + set; + } + public MotionSensor(Item item, XElement element) : base(item, element) { @@ -168,7 +175,7 @@ namespace Barotrauma.Items.Components MotionDetected = false; updateTimer = UpdateInterval; - if (item.body != null && item.body.Enabled) + if (item.body != null && item.body.Enabled && DetectOwnMotion) { if (Math.Abs(item.body.LinearVelocity.X) > MinimumVelocity || Math.Abs(item.body.LinearVelocity.Y) > MinimumVelocity) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RegExFindComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RegExFindComponent.cs index d19349597..8e7ea8674 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RegExFindComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/RegExFindComponent.cs @@ -6,6 +6,8 @@ namespace Barotrauma.Items.Components { class RegExFindComponent : ItemComponent { + private static readonly TimeSpan timeout = TimeSpan.FromSeconds(Timing.Step); + private string expression; private string receivedSignal; @@ -67,7 +69,10 @@ namespace Barotrauma.Items.Components try { - regex = new Regex(@expression); + regex = new Regex( + @expression, + options: RegexOptions.None, + matchTimeout: timeout); } catch @@ -97,11 +102,14 @@ namespace Barotrauma.Items.Components previousResult = match.Success; previousGroups = UseCaptureGroup && previousResult ? match.Groups : null; previousReceivedSignal = receivedSignal; - } - catch + catch (Exception e) { - item.SendSignal("ERROR", "signal_out"); + item.SendSignal( + e is RegexMatchTimeoutException + ? "TIMEOUT" + : "ERROR", + "signal_out"); previousResult = false; return; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/StringComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/StringComponent.cs index 45189882f..5333bec84 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/StringComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/StringComponent.cs @@ -24,6 +24,10 @@ namespace Barotrauma.Items.Components get { return timeFrame; } set { + if (value > timeFrame) + { + timeSinceReceived[0] = timeSinceReceived[1] = Math.Max(value * 2.0f, 0.1f); + } timeFrame = Math.Max(0.0f, value); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Terminal.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Terminal.cs index 335827046..1c4bb9b4f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Terminal.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/Terminal.cs @@ -2,16 +2,35 @@ using System.Collections.Generic; using System.Linq; using System.Xml.Linq; +using Microsoft.Xna.Framework; namespace Barotrauma.Items.Components { + readonly struct TerminalMessage + { + public readonly string Text; + public readonly Color Color; + + public TerminalMessage(string text, Color color) + { + Text = text; + Color = color; + } + + public void Deconstruct(out string text, out Color color) + { + text = Text; + color = Color; + } + } + partial class Terminal : ItemComponent { private const int MaxMessageLength = ChatMessage.MaxLength; private const int MaxMessages = 60; - private List messageHistory = new List(MaxMessages); + private List messageHistory = new List(MaxMessages); public string DisplayedWelcomeMessage { @@ -37,19 +56,39 @@ namespace Barotrauma.Items.Components /// public string ShowMessage { - get { return messageHistory.Count == 0 ? string.Empty : messageHistory.Last(); } + get { return messageHistory.Count == 0 ? string.Empty : messageHistory.Last().Text; } set { if (string.IsNullOrEmpty(value)) { return; } - ShowOnDisplay(value, addToHistory: true); + ShowOnDisplay(value, addToHistory: true, TextColor); } } [Editable, Serialize(false, true, description: "The terminal will use a monospace font if this box is ticked.", alwaysUseInstanceValues: true)] public bool UseMonospaceFont { get; set; } + private Color textColor = Color.LimeGreen; + + [Editable, Serialize("50,205,50,255", true, description: "Color of the terminal text.", alwaysUseInstanceValues: true)] + public Color TextColor + { + get => textColor; + set + { + textColor = value; +#if CLIENT + if (inputBox is { } input) + { + input.TextColor = value; + } +#endif + } + } + private string OutputValue { get; set; } + private string prevColorSignal; + public Terminal(Item item, XElement element) : base(item, element) { @@ -59,18 +98,39 @@ namespace Barotrauma.Items.Components partial void InitProjSpecific(XElement element); - partial void ShowOnDisplay(string input, bool addToHistory); + partial void ShowOnDisplay(string input, bool addToHistory, Color color); public override void ReceiveSignal(Signal signal, Connection connection) { - if (connection.Name != "signal_in") { return; } - if (signal.value.Length > MaxMessageLength) + switch (connection.Name) { - signal.value = signal.value.Substring(0, MaxMessageLength); - } + case "set_text": - string inputSignal = signal.value.Replace("\\n", "\n"); - ShowOnDisplay(inputSignal, addToHistory: true); + if (signal.value.Length > MaxMessageLength) + { + signal.value = signal.value.Substring(0, MaxMessageLength); + } + + string inputSignal = signal.value.Replace("\\n", "\n"); + ShowOnDisplay(inputSignal, addToHistory: true, TextColor); + break; + case "set_text_color": + if (signal.value != prevColorSignal) + { + TextColor = XMLExtensions.ParseColor(signal.value, false); + prevColorSignal = signal.value; + } + break; + case "clear_text" when signal.value != "0": + messageHistory.Clear(); +#if CLIENT + if (historyBox?.Content is { } history) + { + history.ClearChildren(); + } +#endif + break; + } } public override void OnItemLoaded() @@ -83,7 +143,7 @@ namespace Barotrauma.Items.Components base.OnItemLoaded(); if (!string.IsNullOrEmpty(DisplayedWelcomeMessage)) { - ShowOnDisplay(DisplayedWelcomeMessage, addToHistory: !isSubEditor); + ShowOnDisplay(DisplayedWelcomeMessage, addToHistory: !isSubEditor, TextColor); DisplayedWelcomeMessage = ""; //remove welcome message if a game session is running so it doesn't reappear on successive rounds if (GameMain.GameSession != null && !isSubEditor) @@ -98,7 +158,8 @@ namespace Barotrauma.Items.Components var componentElement = base.Save(parentElement); for (int i = 0; i < messageHistory.Count; i++) { - componentElement.Add(new XAttribute("msg" + i, messageHistory[i])); + componentElement.Add(new XAttribute("msg" + i, messageHistory[i].Text)); + componentElement.Add(new XAttribute("color" + i, messageHistory[i].Color.ToStringHex())); } return componentElement; } @@ -109,8 +170,9 @@ namespace Barotrauma.Items.Components for (int i = 0; i < MaxMessages; i++) { string msg = componentElement.GetAttributeString("msg" + i, null); - if (msg == null) { break; } - ShowOnDisplay(msg, addToHistory: true); + if (msg is null) { break; } + Color color = componentElement.GetAttributeColor("color" + i, TextColor); + ShowOnDisplay(msg, addToHistory: true, color); } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/TrigonometricFunctionComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/TrigonometricFunctionComponent.cs index 7d3e3caad..6814915aa 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/TrigonometricFunctionComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/TrigonometricFunctionComponent.cs @@ -17,8 +17,8 @@ namespace Barotrauma.Items.Components Atan, } - private float[] receivedSignal = new float[2]; - private float[] timeSinceReceived = new float[2]; + private readonly float[] receivedSignal = new float[2]; + private readonly float[] timeSinceReceived = new float[2]; [Serialize(FunctionType.Sin, false, description: "Which kind of function to run the input through.", alwaysUseInstanceValues: true)] public FunctionType Function diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs index 70d4403b1..06e12a07a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs @@ -125,7 +125,17 @@ namespace Barotrauma.Items.Components if (sender.TeamID != TeamID && !AllowCrossTeamCommunication) { return false; - } + } + + //if the component is not linked to chat and has nothing connected to the output, sending a signal to it does nothing + // = no point in receiving + if (!LinkToChat) + { + if (signalOutConnection == null || !signalOutConnection.Wires.Any(w => w != null)) + { + return false; + } + } if (Vector2.DistanceSquared(item.WorldPosition, sender.item.WorldPosition) > sender.range * sender.range) { return false; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/TriggerComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/TriggerComponent.cs index 10ef02bdb..b7ff7d8bb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/TriggerComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/TriggerComponent.cs @@ -9,7 +9,7 @@ using System.Xml.Linq; namespace Barotrauma.Items.Components { - class TriggerComponent : ItemComponent + partial class TriggerComponent : ItemComponent { [Editable, Serialize(0.0f, true, description: "The maximum amount of force applied to the triggering entitites.", alwaysUseInstanceValues: true)] public float Force { get; set; } @@ -18,12 +18,32 @@ namespace Barotrauma.Items.Components private float Radius { get; set; } private float RadiusInDisplayUnits { get; set; } private bool TriggeredOnce { get; set; } - + private float CurrentForceFluctuation { get; set; } = 1.0f; public bool TriggerActive { get; private set; } + private float ForceFluctuationTimer { get; set; } + private static float TimeInLevel + { + get + { + if (GameMain.GameSession != null) + { + return (float)(Timing.TotalTime - GameMain.GameSession.RoundStartTime); + } + else + { + return 0.0f; + } + } + } private readonly LevelTrigger.TriggererType triggeredBy; private readonly HashSet triggerers = new HashSet(); private readonly bool triggerOnce; + private readonly bool distanceBasedForce; + private readonly bool forceFluctuation; + private readonly float forceFluctuationStrength; + private readonly float forceFluctuationFrequency; + private readonly float forceFluctuationInterval; private readonly List statusEffectTargets = new List(); /// /// Effects applied to entities inside the trigger @@ -42,6 +62,15 @@ namespace Barotrauma.Items.Components DebugConsole.ThrowError($"Error in ForceComponent config: \"{triggeredByAttribute}\" is not a valid triggerer type."); } triggerOnce = element.GetAttributeBool("triggeronce", false); + distanceBasedForce = element.GetAttributeBool("distancebasedforce", false); + forceFluctuation = element.GetAttributeBool("forcefluctuation", false); + forceFluctuationStrength = element.GetAttributeFloat("forcefluctuationstrength", 1.0f); + forceFluctuationStrength = Math.Clamp(forceFluctuationStrength, 0.0f, 1.0f); + forceFluctuationFrequency = element.GetAttributeFloat("fluctuationfrequency", 1.0f); + forceFluctuationFrequency = Math.Max(forceFluctuationFrequency, 0.01f); + forceFluctuationInterval = element.GetAttributeFloat("fluctuationinterval", 0.01f); + forceFluctuationInterval = Math.Max(forceFluctuationInterval, 0.01f); + string parentDebugName = $"TriggerComponent in {item.Name}"; foreach (XElement subElement in element.Elements()) { @@ -128,6 +157,19 @@ namespace Barotrauma.Items.Components TriggerActive = triggerers.Any(); + if (forceFluctuation && TriggerActive && (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer)) + { + ForceFluctuationTimer += deltaTime; + if (ForceFluctuationTimer >= forceFluctuationInterval) + { + float v = MathF.Sin(2 * MathF.PI * forceFluctuationFrequency * TimeInLevel); + float amount = MathUtils.InverseLerp(-1.0f, 1.0f, v); + CurrentForceFluctuation = MathHelper.Lerp(1.0f - forceFluctuationStrength, 1.0f, amount); + ForceFluctuationTimer = 0.0f; + GameMain.NetworkMember?.CreateEntityEvent(this); + } + } + foreach (Entity triggerer in triggerers) { LevelTrigger.ApplyStatusEffects(statusEffects, item.WorldPosition, triggerer, deltaTime, statusEffectTargets); @@ -167,9 +209,9 @@ namespace Barotrauma.Items.Components { Vector2 diff = ConvertUnits.ToDisplayUnits(PhysicsBody.SimPosition - body.SimPosition); if (diff.LengthSquared() < 0.0001f) { return; } - float distanceFactor = LevelTrigger.GetDistanceFactor(body, PhysicsBody, RadiusInDisplayUnits); + float distanceFactor = distanceBasedForce ? LevelTrigger.GetDistanceFactor(body, PhysicsBody, RadiusInDisplayUnits) : 1.0f; if (distanceFactor <= 0.0f) { return; } - Vector2 force = distanceFactor * Force * Vector2.Normalize(diff); + Vector2 force = distanceFactor * (CurrentForceFluctuation * Force) * Vector2.Normalize(diff); if (force.LengthSquared() < 0.01f) { return; } body.ApplyForce(force); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Turret.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Turret.cs index 327c23181..9c4770659 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Turret.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Turret.cs @@ -68,6 +68,9 @@ namespace Barotrauma.Items.Components private const float TinkeringDamageIncrease = 0.2f; private const float TinkeringReloadDecrease = 0.2f; + public Character ActiveUser; + private float resetActiveUserTimer; + public float Rotation { get { return rotation; } @@ -362,7 +365,7 @@ namespace Barotrauma.Items.Components UpdateTransformedBarrelPos(); } - if (user != null && user.Removed) + if (user is { Removed: true }) { user = null; } @@ -371,6 +374,19 @@ namespace Barotrauma.Items.Components resetUserTimer -= deltaTime; if (resetUserTimer <= 0.0f) { user = null; } } + + if (ActiveUser is { Removed: true }) + { + ActiveUser = null; + } + else + { + resetActiveUserTimer -= deltaTime; + if (resetActiveUserTimer <= 0.0f) + { + ActiveUser = null; + } + } ApplyStatusEffects(ActionType.OnActive, deltaTime, null); @@ -744,8 +760,10 @@ namespace Barotrauma.Items.Components if (projectileComponent != null) { projectileComponent.Attacker = projectileComponent.User = user; - projectileComponent.Attack.DamageMultiplier = 1f + (TinkeringDamageIncrease * tinkeringStrength); - + if (projectileComponent.Attack != null) + { + projectileComponent.Attack.DamageMultiplier = 1f + (TinkeringDamageIncrease * tinkeringStrength); + } projectileComponent.Use(); projectile.GetComponent()?.Attach(item, projectile); projectileComponent.User = user; @@ -956,10 +974,11 @@ namespace Barotrauma.Items.Components public override bool AIOperate(float deltaTime, Character character, AIObjectiveOperateItem objective) { - if (character.AIController.SelectedAiTarget?.Entity is Character previousTarget && - previousTarget.IsDead) + if (character.AIController.SelectedAiTarget?.Entity is Character previousTarget && previousTarget.IsDead) { - character.Speak(TextManager.Get("DialogTurretTargetDead"), identifier: "killedtarget" + previousTarget.ID, minDurationBetweenSimilar: 10.0f); + character.Speak(TextManager.Get("DialogTurretTargetDead"), + identifier: "killedtarget" + previousTarget.ID, + minDurationBetweenSimilar: 10.0f); character.AIController.SelectTarget(null); } @@ -986,7 +1005,9 @@ namespace Barotrauma.Items.Components } else { - character.Speak(TextManager.Get("DialogSupercapacitorIsBroken"), identifier: "supercapacitorisbroken", minDurationBetweenSimilar: 30.0f); + character.Speak(TextManager.Get("DialogSupercapacitorIsBroken"), + identifier: "supercapacitorisbroken", + minDurationBetweenSimilar: 30.0f); canShoot = false; } } @@ -999,7 +1020,9 @@ namespace Barotrauma.Items.Components } if (lowestCharge <= 0 && batteryToLoad.Item.ConditionPercentage > 0) { - character.Speak(TextManager.Get("DialogTurretHasNoPower"), identifier: "turrethasnopower", minDurationBetweenSimilar: 30.0f); + character.Speak(TextManager.Get("DialogTurretHasNoPower"), + identifier: "turrethasnopower", + minDurationBetweenSimilar: 30.0f); canShoot = false; } } @@ -1039,7 +1062,9 @@ namespace Barotrauma.Items.Components { if (character.IsOnPlayerTeam) { - character.Speak(TextManager.GetWithVariable("DialogCannotLoadTurret", "[itemname]", item.Name, formatCapitals: true), identifier: "cannotloadturret", minDurationBetweenSimilar: 30.0f); + character.Speak(TextManager.GetWithVariable("DialogCannotLoadTurret", "[itemname]", item.Name, formatCapitals: true), + identifier: "cannotloadturret", + minDurationBetweenSimilar: 30.0f); } return true; } @@ -1049,7 +1074,9 @@ namespace Barotrauma.Items.Components loadItemsObjective.ignoredContainerIdentifiers = new string[] { containerItem.prefab.Identifier }; if (character.IsOnPlayerTeam) { - character.Speak(TextManager.GetWithVariable("DialogLoadTurret", "[itemname]", item.Name, formatCapitals: true), identifier: "loadturret", minDurationBetweenSimilar: 30.0f); + character.Speak(TextManager.GetWithVariable("DialogLoadTurret", "[itemname]", item.Name, formatCapitals: true), + identifier: "loadturret", + minDurationBetweenSimilar: 30.0f); } loadItemsObjective.Abandoned += CheckRemainingAmmo; loadItemsObjective.Completed += CheckRemainingAmmo; @@ -1063,11 +1090,15 @@ namespace Barotrauma.Items.Components int remainingAmmo = Submarine.MainSub.GetItems(false).Count(i => i.HasTag(ammoType) && i.Condition > 1); if (remainingAmmo == 0) { - character.Speak(TextManager.Get($"DialogOutOf{ammoType}", fallBackTag: "DialogOutOfTurretAmmo"), identifier: "outofammo", minDurationBetweenSimilar: 30.0f); + character.Speak(TextManager.Get($"DialogOutOf{ammoType}", fallBackTag: "DialogOutOfTurretAmmo"), + identifier: "outofammo", + minDurationBetweenSimilar: 30.0f); } else if (remainingAmmo < 3) { - character.Speak(TextManager.Get($"DialogLowOn{ammoType}"), identifier: "outofammo", minDurationBetweenSimilar: 30.0f); + character.Speak(TextManager.Get($"DialogLowOn{ammoType}"), + identifier: "outofammo", + minDurationBetweenSimilar: 30.0f); } } } @@ -1090,7 +1121,8 @@ namespace Barotrauma.Items.Components float closestDistance = maxDistance * maxDistance; - if (currentTarget != null) + bool hadCurrentTarget = currentTarget != null; + if (hadCurrentTarget) { if (currentTarget.Removed || currentTarget.IsDead) { @@ -1222,24 +1254,32 @@ namespace Barotrauma.Items.Components { if (character.IsOnPlayerTeam) { - if (character.AIController.SelectedAiTarget == null) + if (character.AIController.SelectedAiTarget == null && !hadCurrentTarget) { if (GameMain.Config.RecentlyEncounteredCreatures.Contains(closestEnemy.SpeciesName)) { - character.Speak(TextManager.Get("DialogNewTargetSpotted"), null, 0.0f, "newtargetspotted", 30.0f); + character.Speak(TextManager.Get("DialogNewTargetSpotted"), + identifier: "newtargetspotted", + minDurationBetweenSimilar: 30.0f); } else if (GameMain.Config.EncounteredCreatures.Any(name => name.Equals(closestEnemy.SpeciesName, StringComparison.OrdinalIgnoreCase))) { - character.Speak(TextManager.GetWithVariable("DialogIdentifiedTargetSpotted", "[speciesname]", closestEnemy.DisplayName), null, 0.0f, "identifiedtargetspotted", 30.0f); + character.Speak(TextManager.GetWithVariable("DialogIdentifiedTargetSpotted", "[speciesname]", closestEnemy.DisplayName), + identifier: "identifiedtargetspotted", + minDurationBetweenSimilar: 30.0f); } else { - character.Speak(TextManager.Get("DialogUnidentifiedTargetSpotted"), null, 0.0f, "unidentifiedtargetspotted", 5.0f); + character.Speak(TextManager.Get("DialogUnidentifiedTargetSpotted"), + identifier: "unidentifiedtargetspotted", + minDurationBetweenSimilar: 5.0f); } } else if (GameMain.Config.EncounteredCreatures.None(name => name.Equals(closestEnemy.SpeciesName, StringComparison.OrdinalIgnoreCase))) { - character.Speak(TextManager.Get("DialogUnidentifiedTargetSpotted"), null, 0.0f, "unidentifiedtargetspotted", 5.0f); + character.Speak(TextManager.Get("DialogUnidentifiedTargetSpotted"), + identifier: "unidentifiedtargetspotted", + minDurationBetweenSimilar: 5.0f); } character.AddEncounter(closestEnemy); } @@ -1247,7 +1287,9 @@ namespace Barotrauma.Items.Components } else if (closestEnemy == null && character.IsOnPlayerTeam) { - character.Speak(TextManager.Get("DialogIceSpireSpotted"), null, 0.0f, "icespirespotted", 60.0f); + character.Speak(TextManager.Get("DialogIceSpireSpotted"), + identifier: "icespirespotted", + minDurationBetweenSimilar: 60.0f); } character.CursorPosition = targetPos.Value; @@ -1289,7 +1331,9 @@ namespace Barotrauma.Items.Components if (!shoot) { return false; } if (character.IsOnPlayerTeam) { - character.Speak(TextManager.Get("DialogFireTurret"), null, 0.0f, "fireturret", 10.0f); + character.Speak(TextManager.Get("DialogFireTurret"), + identifier: "fireturret", + minDurationBetweenSimilar: 30.0f); } character.SetInput(InputType.Shoot, true, true); } @@ -1389,6 +1433,7 @@ namespace Barotrauma.Items.Components crosshairSprite?.Remove(); crosshairSprite = null; crosshairPointerSprite?.Remove(); crosshairPointerSprite = null; moveSoundChannel?.Dispose(); moveSoundChannel = null; + WeaponIndicatorSprite?.Remove(); WeaponIndicatorSprite = null; #endif } @@ -1503,12 +1548,16 @@ namespace Barotrauma.Items.Components IsActive = true; } user = sender; + ActiveUser = sender; + resetActiveUserTimer = 1f; resetUserTimer = 10.0f; break; case "trigger_in": if (signal.value == "0") { return; } item.Use((float)Timing.Step, sender); user = sender; + ActiveUser = sender; + resetActiveUserTimer = 1f; resetUserTimer = 10.0f; //triggering the Use method through item.Use will fail if the item is not characterusable and the signal was sent by a character //so lets do it manually @@ -1521,12 +1570,18 @@ namespace Barotrauma.Items.Components if (lightComponent != null && signal.value != "0") { lightComponent.IsOn = !lightComponent.IsOn; + UpdateLightComponent(); } break; case "set_light": if (lightComponent != null) { - lightComponent.IsOn = signal.value != "0"; + bool shouldBeOn = signal.value != "0"; + if (shouldBeOn != lightComponent.IsOn) + { + lightComponent.IsOn = shouldBeOn; + UpdateLightComponent(); + } } break; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs index c222b6a31..32a31cfe5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs @@ -802,13 +802,13 @@ namespace Barotrauma if (otherIsEquipped) { - existingItems.ForEach(existingItem => TryPutItem(existingItem, index, false, false, user, createNetworkEvent)); - stackedItems.ForEach(stackedItem => otherInventory.TryPutItem(stackedItem, otherIndex, false, false, user, createNetworkEvent)); + existingItems.ForEach(existingItem => TryPutItem(existingItem, index, false, false, user, createNetworkEvent, ignoreCondition: true)); + stackedItems.ForEach(stackedItem => otherInventory.TryPutItem(stackedItem, otherIndex, false, false, user, createNetworkEvent, ignoreCondition: true)); } else { - stackedItems.ForEach(stackedItem => otherInventory.TryPutItem(stackedItem, otherIndex, false, false, user, createNetworkEvent)); - existingItems.ForEach(existingItem => TryPutItem(existingItem, index, false, false, user, createNetworkEvent)); + stackedItems.ForEach(stackedItem => otherInventory.TryPutItem(stackedItem, otherIndex, false, false, user, createNetworkEvent, ignoreCondition: true)); + existingItems.ForEach(existingItem => TryPutItem(existingItem, index, false, false, user, createNetworkEvent, ignoreCondition: true)); } #if CLIENT diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs index 2fd8b35e8..bcc30233d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs @@ -473,7 +473,12 @@ namespace Barotrauma public float HealthMultiplier { get => healthMultiplier; - set { healthMultiplier = MathHelper.Clamp(value, 0.0f, float.PositiveInfinity); } + set + { + float prevConditionPercentage = ConditionPercentage; + healthMultiplier = MathHelper.Clamp(value, 0.0f, float.PositiveInfinity); + Condition = MaxCondition * prevConditionPercentage / 100.0f; + } } private float maxRepairConditionMultiplier = 1.0f; @@ -564,21 +569,26 @@ namespace Barotrauma public bool StolenDuringRound; - private bool spawnedInOutpost; - public bool SpawnedInOutpost + private bool spawnedInCurrentOutpost; + public bool SpawnedInCurrentOutpost { - get { return spawnedInOutpost; } + get { return spawnedInCurrentOutpost; } set { - if (!spawnedInOutpost && value) + if (!spawnedInCurrentOutpost && value) { OriginalOutpost = GameMain.GameSession?.StartLocation?.BaseName ?? ""; } - spawnedInOutpost = value; + spawnedInCurrentOutpost = value; } } - public bool AllowStealing = true; + [Serialize(true, true, alwaysUseInstanceValues: true)] + public bool AllowStealing + { + get; + set; + } private string originalOutpost; [Serialize("", true, alwaysUseInstanceValues: true)] @@ -588,9 +598,9 @@ namespace Barotrauma set { originalOutpost = value; - if (!string.IsNullOrEmpty(value) && GameMain.GameSession?.StartLocation?.BaseName == value) + if (!string.IsNullOrEmpty(value) && GameMain.GameSession?.LevelData?.Type == LevelData.LevelType.Outpost && GameMain.GameSession?.StartLocation?.BaseName == value) { - spawnedInOutpost = true; + spawnedInCurrentOutpost = true; } } } @@ -1736,10 +1746,10 @@ namespace Barotrauma Submarine prevSub = Submarine; var projectile = GetComponent(); - if (projectile?.StickTarget?.UserData is Limb limb) + if (projectile?.StickTarget?.UserData is Limb limb && limb.character != null) { - Submarine = body.Submarine = limb.character?.Submarine; - currentHull = limb.character?.CurrentHull; + Submarine = body.Submarine = limb.character.Submarine; + currentHull = limb.character.CurrentHull; } else { @@ -2125,7 +2135,7 @@ namespace Barotrauma } - private IEnumerable DelaySignal(Signal signal, Connection connection) + private IEnumerable DelaySignal(Signal signal, Connection connection) { do { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemInventory.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemInventory.cs index cf1870762..3870e883a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemInventory.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemInventory.cs @@ -103,6 +103,9 @@ namespace Barotrauma container.IsActive = true; container.OnItemContained(item); +#if SERVER + GameMain.Server?.KarmaManager?.OnItemContained(item, container.Item, user); +#endif } return wasPut; @@ -122,6 +125,9 @@ namespace Barotrauma container.IsActive = true; container.OnItemContained(item); +#if SERVER + GameMain.Server?.KarmaManager?.OnItemContained(item, container.Item, user); +#endif } return wasPut; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs index 8b501cd71..5090ae9ea 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs @@ -45,7 +45,8 @@ namespace Barotrauma { DebugConsole.AddWarning($"Invalid deconstruction output in \"{parentDebugName}\": the output item \"{ItemIdentifier}\" has the out condition set, but is also set to copy the condition of the deconstructed item. Ignoring the out condition."); } - RequiredDeconstructor = element.GetAttributeStringArray("requireddeconstructor", new string[0]); + RequiredDeconstructor = element.GetAttributeStringArray("requireddeconstructor", + element.Parent?.GetAttributeStringArray("requireddeconstructor", new string[0]) ?? new string[0]); RequiredOtherItem = element.GetAttributeStringArray("requiredotheritem", new string[0]); ActivateButtonText = element.GetAttributeString("activatebuttontext", string.Empty); InfoText = element.GetAttributeString("infotext", string.Empty); @@ -915,7 +916,7 @@ namespace Barotrauma string spriteFolder = ""; if (!subElement.GetAttributeString("texture", "").Contains("/")) { - spriteFolder = Path.GetDirectoryName(filePath); + spriteFolder = Path.GetDirectoryName(VariantOf?.FilePath ?? filePath); } CanSpriteFlipX = subElement.GetAttributeBool("canflipx", true); @@ -972,7 +973,7 @@ namespace Barotrauma string iconFolder = ""; if (!subElement.GetAttributeString("texture", "").Contains("/")) { - iconFolder = Path.GetDirectoryName(filePath); + iconFolder = Path.GetDirectoryName(VariantOf?.FilePath ?? filePath); } UpgradePreviewSprite = new Sprite(subElement, iconFolder, lazyLoad: true); UpgradePreviewScale = subElement.GetAttributeFloat("scale", 1.0f); @@ -983,7 +984,7 @@ namespace Barotrauma string iconFolder = ""; if (!subElement.GetAttributeString("texture", "").Contains("/")) { - iconFolder = Path.GetDirectoryName(filePath); + iconFolder = Path.GetDirectoryName(VariantOf?.FilePath ?? filePath); } InventoryIcon = new Sprite(subElement, iconFolder, lazyLoad: true); } @@ -993,7 +994,7 @@ namespace Barotrauma string iconFolder = ""; if (!subElement.GetAttributeString("texture", "").Contains("/")) { - iconFolder = Path.GetDirectoryName(filePath); + iconFolder = Path.GetDirectoryName(VariantOf?.FilePath ?? filePath); } MinimapIcon = new Sprite(subElement, iconFolder, lazyLoad: true); } @@ -1003,7 +1004,7 @@ namespace Barotrauma string iconFolder = ""; if (!subElement.GetAttributeString("texture", "").Contains("/")) { - iconFolder = Path.GetDirectoryName(filePath); + iconFolder = Path.GetDirectoryName(VariantOf?.FilePath ?? filePath); } InfectedSprite = new Sprite(subElement, iconFolder, lazyLoad: true); @@ -1014,7 +1015,7 @@ namespace Barotrauma string iconFolder = ""; if (!subElement.GetAttributeString("texture", "").Contains("/")) { - iconFolder = Path.GetDirectoryName(filePath); + iconFolder = Path.GetDirectoryName(VariantOf?.FilePath ?? filePath); } DamagedInfectedSprite = new Sprite(subElement, iconFolder, lazyLoad: true); @@ -1024,7 +1025,7 @@ namespace Barotrauma string brokenSpriteFolder = ""; if (!subElement.GetAttributeString("texture", "").Contains("/")) { - brokenSpriteFolder = Path.GetDirectoryName(filePath); + brokenSpriteFolder = Path.GetDirectoryName(VariantOf?.FilePath ?? filePath); } var brokenSprite = new BrokenItemSprite( @@ -1034,7 +1035,7 @@ namespace Barotrauma subElement.GetAttributePoint("offset", Point.Zero)); int spriteIndex = 0; - for (int i = 0; i < BrokenSprites.Count && BrokenSprites[i].MaxCondition < brokenSprite.MaxCondition; i++) + for (int i = 0; i < BrokenSprites.Count && BrokenSprites[i].MaxConditionPercentage < brokenSprite.MaxConditionPercentage; i++) { spriteIndex = i; } @@ -1044,7 +1045,7 @@ namespace Barotrauma string decorativeSpriteFolder = ""; if (!subElement.GetAttributeString("texture", "").Contains("/")) { - decorativeSpriteFolder = Path.GetDirectoryName(filePath); + decorativeSpriteFolder = Path.GetDirectoryName(VariantOf?.FilePath ?? filePath); } int groupID = 0; @@ -1070,7 +1071,7 @@ namespace Barotrauma string containedSpriteFolder = ""; if (!subElement.GetAttributeString("texture", "").Contains("/")) { - containedSpriteFolder = Path.GetDirectoryName(filePath); + containedSpriteFolder = Path.GetDirectoryName(VariantOf?.FilePath ?? filePath); } var containedSprite = new ContainedItemSprite(subElement, containedSpriteFolder, lazyLoad: true); if (containedSprite.Sprite != null) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Entity.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Entity.cs index 47525f812..27bd6bcde 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Entity.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Entity.cs @@ -7,7 +7,7 @@ using System.Text; namespace Barotrauma { - class Entity : ISpatialEntity + abstract class Entity : ISpatialEntity { public const ushort NullEntityID = 0; public const ushort EntitySpawnerID = ushort.MaxValue; @@ -16,8 +16,10 @@ namespace Barotrauma public const ushort ReservedIDStart = ushort.MaxValue - 3; + public const ushort MaxEntityCount = ushort.MaxValue - 2; //ushort.MaxValue - 2 because 0 and ushort.MaxValue are reserved values + private static Dictionary dictionary = new Dictionary(); - public static IEnumerable GetEntities() + public static IReadOnlyCollection GetEntities() { return dictionary.Values; } @@ -28,11 +30,9 @@ namespace Barotrauma protected AITarget aiTarget; - private bool idFreed; + public bool Removed { get; private set; } - public virtual bool Removed { get; private set; } - - public bool IdFreed => idFreed; + public bool IdFreed { get; private set; } public readonly ushort ID; @@ -75,43 +75,65 @@ namespace Barotrauma this.Submarine = submarine; spawnTime = Timing.TotalTime; - if (id != NullEntityID && dictionary.ContainsKey(id)) - { - throw new Exception($"ID {id} is taken by {dictionary[id]}"); - } - //give a unique ID ID = DetermineID(id, submarine); - + + if (dictionary.ContainsKey(ID)) + { + throw new Exception($"ID {ID} is taken by {dictionary[ID]}"); + } + dictionary.Add(ID, this); } protected virtual ushort DetermineID(ushort id, Submarine submarine) { - return id != NullEntityID ? - id : - FindFreeID(submarine == null ? (ushort)1 : submarine.IdOffset); + return id != NullEntityID + ? id + : FindFreeId(submarine == null ? (ushort)1 : submarine.IdOffset); } - public static ushort FindFreeID(ushort idOffset = 0) + private static ushort FindFreeId(ushort idOffset) { - //ushort.MaxValue - 2 because 0 and ushort.MaxValue are reserved values - if (dictionary.Count >= ushort.MaxValue - 2) + if (dictionary.Count >= MaxEntityCount) { - throw new Exception("Maximum amount of entities (" + (ushort.MaxValue - 1) + ") reached!"); + throw new Exception($"Maximum amount of entities ({MaxEntityCount}) reached!"); } - idOffset = Math.Max(idOffset, (ushort)1); - bool IDfound; ushort id = idOffset; - do + while (id < ReservedIDStart) { - id += 1; - IDfound = dictionary.ContainsKey(id); - } while (IDfound || id == NullEntityID || id > ReservedIDStart); + if (!dictionary.ContainsKey(id)) { break; } + id++; + }; return id; } + /// + /// Finds a contiguous block of free IDs of at least the given size + /// + /// The first ID in the found block, or zero if none are found + public static int FindFreeIdBlock(int minBlockSize) + { + int currentBlockSize = 0; + for (int i = 1; i < ReservedIDStart; i++) + { + if (dictionary.ContainsKey((ushort)i)) + { + currentBlockSize = 0; + } + else + { + currentBlockSize++; + if (currentBlockSize >= minBlockSize) + { + return i - (currentBlockSize-1); + } + } + } + return 0; + } + /// /// Find an entity based on the ID /// @@ -134,11 +156,11 @@ namespace Barotrauma } catch (Exception exception) { - DebugConsole.ThrowError("Error while removing entity \"" + e.ToString() + "\"", exception); + DebugConsole.ThrowError($"Error while removing entity \"{e}\"", exception); GameAnalyticsManager.AddErrorEventOnce( - "Entity.RemoveAll:Exception" + e.ToString(), + $"Entity.RemoveAll:Exception{e}", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, - "Error while removing entity \"" + e.ToString() + " (" + exception.Message + ")\n" + exception.StackTrace.CleanupStackTrace()); + $"Error while removing entity \"{e} ({exception.Message})\n{exception.StackTrace.CleanupStackTrace()}"); } } StringBuilder errorMsg = new StringBuilder(); @@ -167,7 +189,7 @@ namespace Barotrauma } catch (Exception exception) { - DebugConsole.ThrowError("Error while removing item \"" + item.ToString() + "\"", exception); + DebugConsole.ThrowError($"Error while removing item \"{item}\"", exception); } } Item.ItemList.Clear(); @@ -189,7 +211,7 @@ namespace Barotrauma } catch (Exception exception) { - DebugConsole.ThrowError("Error while removing character \"" + character.ToString() + "\"", exception); + DebugConsole.ThrowError($"Error while removing character \"{character}\"", exception); } } Character.CharacterList.Clear(); @@ -214,35 +236,33 @@ namespace Barotrauma /// public void FreeID() { - DebugConsole.Log("Removing entity " + ToString() + " (" + ID + ") from entity dictionary."); + if (IdFreed) { return; } + DebugConsole.Log($"Removing entity {ToString()} ({ID}) from entity dictionary."); if (!dictionary.TryGetValue(ID, out Entity existingEntity)) { - DebugConsole.Log("Entity " + ToString() + " (" + ID + ") not present in entity dictionary."); + DebugConsole.ThrowError($"Entity {ToString()} ({ID}) not present in entity dictionary."); GameAnalyticsManager.AddErrorEventOnce( - "Entity.FreeID:EntityNotFound" + ID, + $"Entity.FreeID:EntityNotFound{ID}", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, - "Entity " + ToString() + " (" + ID + ") not present in entity dictionary.\n" + Environment.StackTrace.CleanupStackTrace()); + $"Entity {ToString()} ({ID}) not present in entity dictionary.\n{Environment.StackTrace.CleanupStackTrace()}"); } else if (existingEntity != this) { - DebugConsole.Log("Entity ID mismatch in entity dictionary. Entity " + existingEntity + " had the ID " + ID + " (expecting " + ToString() + ")"); + DebugConsole.ThrowError($"Entity ID mismatch in entity dictionary. Entity {existingEntity} had the ID {ID} (expecting {ToString()})"); GameAnalyticsManager.AddErrorEventOnce("Entity.FreeID:EntityMismatch" + ID, GameAnalyticsSDK.Net.EGAErrorSeverity.Error, - "Entity ID mismatch in entity dictionary. Entity " + existingEntity + " had the ID " + ID + " (expecting " + ToString() + ")"); - - foreach (var keyValuePair in dictionary.Where(kvp => kvp.Value == this).ToList()) - { - dictionary.Remove(keyValuePair.Key); - } + $"Entity ID mismatch in entity dictionary. Entity {existingEntity} had the ID {ID} (expecting {ToString()})"); } - - dictionary.Remove(ID); - idFreed = true; + else + { + dictionary.Remove(ID); + } + IdFreed = true; } public virtual void Remove() { - if (!idFreed) FreeID(); + FreeID(); Removed = true; } @@ -255,8 +275,8 @@ namespace Barotrauma List lines = new List(); for (int i = 0; i < count; i++) { - lines.Add(entities[i].ID + ": " + entities[i].ToString()); - DebugConsole.ThrowError(entities[i].ID + ": " + entities[i].ToString()); + lines.Add($"{entities[i].ID}: {entities[i]}"); + DebugConsole.ThrowError($"{entities[i].ID}: {entities[i]}"); } if (!string.IsNullOrWhiteSpace(filename)) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs index 277b55925..e91c25f7b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs @@ -39,6 +39,8 @@ namespace Barotrauma private readonly float itemRepairStrength; + public readonly HashSet IgnoredSubmarines = new HashSet(); + public float EmpStrength { get; set; } public float BallastFloraDamage { get; set; } @@ -149,7 +151,7 @@ namespace Barotrauma if (!MathUtils.NearlyEqual(Attack.GetStructureDamage(1.0f), 0.0f) || !MathUtils.NearlyEqual(Attack.GetLevelWallDamage(1.0f), 0.0f)) { - RangedStructureDamage(worldPosition, displayRange, Attack.GetStructureDamage(1.0f), Attack.GetLevelWallDamage(1.0f), attacker); + RangedStructureDamage(worldPosition, displayRange, Attack.GetStructureDamage(1.0f), Attack.GetLevelWallDamage(1.0f), attacker, IgnoredSubmarines); } if (BallastFloraDamage > 0.0f) @@ -397,13 +399,14 @@ namespace Barotrauma /// /// Returns a dictionary where the keys are the structures that took damage and the values are the amount of damage taken /// - public static Dictionary RangedStructureDamage(Vector2 worldPosition, float worldRange, float damage, float levelWallDamage, Character attacker = null) + public static Dictionary RangedStructureDamage(Vector2 worldPosition, float worldRange, float damage, float levelWallDamage, Character attacker = null, IEnumerable ignoredSubmarines = null) { List structureList = new List(); float dist = 600.0f; foreach (MapEntity entity in MapEntity.mapEntityList) { if (!(entity is Structure structure)) { continue; } + if (ignoredSubmarines != null && entity.Submarine != null && ignoredSubmarines.Contains(entity.Submarine)) { continue; } if (structure.HasBody && !structure.IsPlatform && diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Gap.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Gap.cs index b662b9c00..9d2873a8e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Gap.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Gap.cs @@ -26,25 +26,25 @@ namespace Barotrauma } //a value between 0.0f-1.0f (0.0 = closed, 1.0f = open) - private float open; + private float open; //the force of the water flow which is exerted on physics bodies private Vector2 flowForce; private Hull flowTargetHull; private float openedTimer = 1.0f; - + private float higherSurface; private float lowerSurface; - + private Vector2 lerpedFlowForce; - + //if set to true, hull connections of this gap won't be updated when changes are being done to hulls public bool DisableHullRechecks; - + //can ambient light get through the gap even if it's not open public bool PassAmbientLight; - + //a collider outside the gap (for example an ice wall next to the sub) //used by ragdolls to prevent them from ending up inside colliders when teleporting out of the sub @@ -54,11 +54,11 @@ namespace Barotrauma public float Open { get { return open; } - set + set { if (float.IsNaN(value)) { return; } if (value > open) { openedTimer = 1.0f; } - open = MathHelper.Clamp(value, 0.0f, 1.0f); + open = MathHelper.Clamp(value, 0.0f, 1.0f); } } @@ -319,7 +319,7 @@ namespace Barotrauma if (openedTimer > 0.0f && flowForce.Length() > lerpedFlowForce.Length()) { //if the gap has just been opened/created, allow it to exert a large force instantly without any smoothing - lerpedFlowForce = flowForce; + lerpedFlowForce = flowForce; } else { @@ -375,7 +375,7 @@ namespace Barotrauma //make sure not to move more than what the room contains delta = Math.Min(((hull2.Pressure + subOffset.Y) - hull1.Pressure) * 5.0f * sizeModifier, Math.Min(hull2.WaterVolume, hull2.Volume)); - + //make sure not to place more water to the target room than it can hold delta = Math.Min(delta, hull1.Volume * Hull.MaxCompress - (hull1.WaterVolume)); hull1.WaterVolume += delta; @@ -405,7 +405,7 @@ namespace Barotrauma { hull2.Pressure = Math.Max(hull2.Pressure, ((hull1.Pressure-subOffset.Y) + hull2.Pressure) / 2); } - + flowForce = new Vector2(delta, 0.0f); } @@ -448,7 +448,7 @@ namespace Barotrauma hull2.WaterVolume -= delta; flowForce = new Vector2( - 0.0f, + 0.0f, Math.Min(Math.Min((hull2.Pressure + subOffset.Y) - hull1.Pressure, 200.0f), delta)); flowTargetHull = hull1; @@ -456,7 +456,7 @@ namespace Barotrauma if (hull1.WaterVolume > hull1.Volume) { hull1.Pressure = Math.Max(hull1.Pressure, (hull1.Pressure + (hull2.Pressure + subOffset.Y)) / 2); - } + } } //there's water in the upper room, drop to lower @@ -494,7 +494,7 @@ namespace Barotrauma hull1.LethalPressure = avgLethality; hull2.LethalPressure = avgLethality; } - else + else { hull1.LethalPressure = 0.0f; hull2.LethalPressure = 0.0f; @@ -511,7 +511,7 @@ namespace Barotrauma float sizeModifier = size * open * open; float delta = 500.0f * sizeModifier * deltaTime; - + //make sure not to place more water to the target room than it can hold delta = Math.Min(delta, hull1.Volume * Hull.MaxCompress - hull1.WaterVolume); hull1.WaterVolume += delta; @@ -526,7 +526,7 @@ namespace Barotrauma if (rect.X > hull1.Rect.X + hull1.Rect.Width / 2.0f) { flowForce = new Vector2(-delta, 0.0f); - + } else { @@ -554,7 +554,7 @@ namespace Barotrauma hull1.WaveVel[0] += vel; hull1.WaveVel[1] += vel; - } + } } else { @@ -651,12 +651,12 @@ namespace Barotrauma float totalOxygen = hull1.Oxygen + hull2.Oxygen; float totalVolume = (hull1.Volume + hull2.Volume); - + float deltaOxygen = (totalOxygen * hull1.Volume / totalVolume) - hull1.Oxygen; deltaOxygen = MathHelper.Clamp(deltaOxygen, -Hull.OxygenDistributionSpeed, Hull.OxygenDistributionSpeed); hull1.Oxygen += deltaOxygen; - hull2.Oxygen -= deltaOxygen; + hull2.Oxygen -= deltaOxygen; } public static Gap FindAdjacent(IEnumerable gaps, Vector2 worldPos, float allowedOrthogonalDist) @@ -724,7 +724,7 @@ namespace Barotrauma { if (!DisableHullRechecks) FindHulls(); } - + public static Gap Load(XElement element, Submarine submarine, IdRemap idRemap) { Rectangle rect = Rectangle.Empty; @@ -755,6 +755,8 @@ namespace Barotrauma { linkedToID = new List(), }; + + g.HiddenInGame = element.GetAttributeBool(nameof(HiddenInGame).ToLower(), g.HiddenInGame); return g; } @@ -764,7 +766,8 @@ namespace Barotrauma element.Add( new XAttribute("ID", ID), - new XAttribute("horizontal", IsHorizontal ? "true" : "false")); + new XAttribute("horizontal", IsHorizontal ? "true" : "false"), + new XAttribute(nameof(HiddenInGame).ToLower(), HiddenInGame)); element.Add(new XAttribute("rect", (int)(rect.X - Submarine.HiddenSubPosition.X) + "," + diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Hull.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Hull.cs index 47093bcf6..4268507a7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Hull.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Hull.cs @@ -1058,11 +1058,17 @@ namespace Barotrauma /// Does being exactly at the edge of the hull count as being inside? public static Hull FindHull(Vector2 position, Hull guess = null, bool useWorldCoordinates = true, bool inclusive = true) { - if (EntityGrids == null) return null; + if (EntityGrids == null) + { + return null; + } if (guess != null) { - if (Submarine.RectContains(useWorldCoordinates ? guess.WorldRect : guess.rect, position, inclusive)) return guess; + if (Submarine.RectContains(useWorldCoordinates ? guess.WorldRect : guess.rect, position, inclusive)) + { + return guess; + } } foreach (EntityGrid entityGrid in EntityGrids) @@ -1088,15 +1094,19 @@ namespace Barotrauma continue; } } - Vector2 transformedPosition = position; - if (useWorldCoordinates && entityGrid.Submarine != null) transformedPosition -= entityGrid.Submarine.Position; - + if (useWorldCoordinates && entityGrid.Submarine != null) + { + transformedPosition -= entityGrid.Submarine.Position; + } var entities = entityGrid.GetEntities(transformedPosition); - if (entities == null) continue; + if (entities == null) { continue; } foreach (Hull hull in entities) { - if (Submarine.RectContains(hull.rect, transformedPosition, inclusive)) return hull; + if (Submarine.RectContains(hull.rect, transformedPosition, inclusive)) + { + return hull; + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/ItemAssemblyPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/ItemAssemblyPrefab.cs index 21f78b9af..5793f5b9c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/ItemAssemblyPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/ItemAssemblyPrefab.cs @@ -145,8 +145,7 @@ namespace Barotrauma public static List PasteEntities(Vector2 position, Submarine sub, XElement configElement, string filePath = null, bool selectInstance = false) { - int idOffset = Entity.FindFreeID(1); - if (MapEntity.mapEntityList.Any()) { idOffset = MapEntity.mapEntityList.Max(e => e.ID); } + int idOffset = Entity.FindFreeIdBlock(configElement.Elements().Count()); List entities = MapEntity.LoadAll(sub, configElement, filePath, idOffset); if (entities.Count == 0) { return entities; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs index 698b5fbde..81ba3d49b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs @@ -202,10 +202,10 @@ namespace Barotrauma get { return startPosition.ToVector2(); } } - private Vector2 startExitPosition; + private Point startExitPosition; public Vector2 StartExitPosition { - get { return startExitPosition; } + get { return startExitPosition.ToVector2(); } } public Point Size @@ -218,10 +218,10 @@ namespace Barotrauma get { return endPosition.ToVector2(); } } - private Vector2 endExitPosition; + private Point endExitPosition; public Vector2 EndExitPosition { - get { return endExitPosition; } + get { return endExitPosition.ToVector2(); } } public int BottomPos @@ -366,9 +366,6 @@ namespace Barotrauma { this.LevelData = levelData; borders = new Rectangle(Point.Zero, levelData.Size); - - //remove from entity dictionary - //base.Remove(); } public static Level Generate(LevelData levelData, bool mirror, SubmarineInfo startOutpost = null, SubmarineInfo endOutpost = null) @@ -462,12 +459,12 @@ namespace Barotrauma startPosition = new Point( (int)MathHelper.Lerp(minMainPathWidth, borders.Width - minMainPathWidth, GenerationParams.StartPosition.X), (int)MathHelper.Lerp(borders.Bottom - Math.Max(minMainPathWidth, ExitDistance * 1.5f), borders.Y + minMainPathWidth, GenerationParams.StartPosition.Y)); - startExitPosition = new Vector2(startPosition.X, borders.Bottom); + startExitPosition = new Point(startPosition.X, borders.Bottom); endPosition = new Point( (int)MathHelper.Lerp(minMainPathWidth, borders.Width - minMainPathWidth, GenerationParams.EndPosition.X), (int)MathHelper.Lerp(borders.Bottom - Math.Max(minMainPathWidth, ExitDistance * 1.5f), borders.Y + minMainPathWidth, GenerationParams.EndPosition.Y)); - endExitPosition = new Vector2(endPosition.X, borders.Bottom); + endExitPosition = new Point(endPosition.X, borders.Bottom); EqualityCheckValues.Add(Rand.Int(int.MaxValue, Rand.RandSync.Server)); @@ -486,25 +483,25 @@ namespace Barotrauma { startPath = new Tunnel( TunnelType.SidePath, - new List() { startExitPosition.ToPoint(), startPosition }, + new List() { startExitPosition, startPosition }, minWidth / 2, parentTunnel: mainPath); Tunnels.Add(startPath); } else { - startExitPosition = StartPosition; + startExitPosition = startPosition; } if (GenerationParams.EndPosition.Y < 0.5f && (Mirrored ? !HasStartOutpost() : !HasEndOutpost())) { endPath = new Tunnel( TunnelType.SidePath, - new List() { endPosition, endExitPosition.ToPoint() }, + new List() { endPosition, endExitPosition }, minWidth / 2, parentTunnel: mainPath); Tunnels.Add(endPath); } else { - endExitPosition = EndPosition; + endExitPosition = endPosition; } if (GenerationParams.CreateHoleNextToEnd) @@ -513,14 +510,14 @@ namespace Barotrauma { endHole = new Tunnel( TunnelType.SidePath, - new List() { startPosition, startExitPosition.ToPoint(), new Point(0, Size.Y) }, + new List() { startPosition, startExitPosition, new Point(0, Size.Y) }, minWidth / 2, parentTunnel: mainPath); } else { endHole = new Tunnel( TunnelType.SidePath, - new List() { endPosition, endExitPosition.ToPoint(), Size }, + new List() { endPosition, endExitPosition, Size }, minWidth / 2, parentTunnel: mainPath); } Tunnels.Add(endHole); @@ -799,8 +796,12 @@ namespace Barotrauma for (int i = 0; i < GenerationParams.RuinCount; i++) { Point ruinSize = new Point(5000); - ruinPositions.Add(FindPosAwayFromMainPath((Math.Max(ruinSize.X, ruinSize.Y) + mainPath.MinWidth) * 1.2f, asCloseAsPossible: true, - limits: new Rectangle(new Point(ruinSize.X / 2, ruinSize.Y / 2), Size - ruinSize))); + int limitLeft = Math.Max(startPosition.X, ruinSize.X / 2); + int limitRight = Math.Min(endPosition.X, Size.X - ruinSize.X / 2); + Rectangle limits = new Rectangle(limitLeft, ruinSize.Y, limitRight - limitLeft, Size.Y - ruinSize.Y); + Debug.Assert(limits.Width > 0); + Debug.Assert(limits.Height > 0); + ruinPositions.Add(FindPosAwayFromMainPath((Math.Max(ruinSize.X, ruinSize.Y) + mainPath.MinWidth) * 1.2f, asCloseAsPossible: true, limits: limits)); CalculateTunnelDistanceField(ruinPositions); } @@ -1004,7 +1005,7 @@ namespace Barotrauma { if (pos.PositionType != PositionType.MainPath && pos.PositionType != PositionType.SidePath) { continue; } if (pos.Position.X < 5000 || pos.Position.X > Size.X - 5000) { continue; } - if (Math.Abs(pos.Position.X - StartPosition.X) < minMainPathWidth * 2 || Math.Abs(pos.Position.X - EndPosition.X) < minMainPathWidth * 2) { continue; } + if (Math.Abs(pos.Position.X - startPosition.X) < minMainPathWidth * 2 || Math.Abs(pos.Position.X - endPosition.X) < minMainPathWidth * 2) { continue; } if (GetTooCloseCells(pos.Position.ToVector2(), minMainPathWidth * 0.7f).Count > 0) { continue; } iceChunkPositions.Add(pos.Position); } @@ -1187,19 +1188,19 @@ namespace Barotrauma startPosition = endPosition; endPosition = tempP; - Vector2 tempV = startExitPosition; + tempP = startExitPosition; startExitPosition = endExitPosition; - endExitPosition = tempV; + endExitPosition = tempP; } if (StartOutpost != null) { - startExitPosition = StartOutpost.WorldPosition; - startPosition = startExitPosition.ToPoint(); + startExitPosition = StartOutpost.WorldPosition.ToPoint(); + startPosition = startExitPosition; } if (EndOutpost != null) { - endExitPosition = EndOutpost.WorldPosition; - endPosition = endExitPosition.ToPoint(); + endExitPosition = EndOutpost.WorldPosition.ToPoint(); + endPosition = endExitPosition; } CreateWrecks(); @@ -2321,7 +2322,7 @@ namespace Barotrauma { if (l.Cell == null || l.Edge == null) { return false; } if (resourceInfo.IsIslandSpecifc && !l.Cell.Island) { return false; } - if (!resourceInfo.AllowAtStart && l.EdgeCenter.Y > StartPosition.Y && l.EdgeCenter.X < Size.X * 0.25f) { return false; } + if (!resourceInfo.AllowAtStart && l.EdgeCenter.Y > startPosition.Y && l.EdgeCenter.X < Size.X * 0.25f) { return false; } if (l.EdgeCenter.Y < AbyssArea.Bottom) { return false; } return resourceInfo.ClusterSize <= GetMaxResourcesOnEdge(itemPrefab, l, out _); @@ -2738,10 +2739,26 @@ namespace Barotrauma allValidLocations.Sort((x, y) => Vector2.DistanceSquared(poiPos, x.EdgeCenter) .CompareTo(Vector2.DistanceSquared(poiPos, y.EdgeCenter))); var maxResourceOverlap = 0.4f; - // TODO: Find multiple locations if there's too many resources to fit on a sigle edge var selectedLocation = allValidLocations.FirstOrDefault(l => Vector2.Distance(l.Edge.Point1, l.Edge.Point2) is float edgeLength && requiredAmount <= (int)Math.Floor(edgeLength / ((1.0f - maxResourceOverlap) * prefab.Size.X))); + if (selectedLocation.Edge == null) + { + //couldn't find a long enough edge, find the largest one + float longestEdge = 0.0f; + foreach (var validLocation in allValidLocations) + { + if (Vector2.Distance(validLocation.Edge.Point1, validLocation.Edge.Point2) is float edgeLength && edgeLength > longestEdge) + { + selectedLocation = validLocation; + longestEdge = edgeLength; + } + } + } + if (selectedLocation.Edge == null) + { + throw new Exception("Failed to find a suitable level wall edge to place level resources on."); + } PlaceResources(prefab, requiredAmount, selectedLocation, out placedResources); var edgeNormal = selectedLocation.Edge.GetNormal(selectedLocation.Cell); rotation = MathHelper.ToDegrees(-MathUtils.VectorToAngle(edgeNormal) + MathHelper.PiOver2); @@ -3197,12 +3214,12 @@ namespace Barotrauma public bool IsCloseToStart(Point position, float minDist) { - return MathUtils.LineSegmentToPointDistanceSquared(StartPosition.ToPoint(), StartExitPosition.ToPoint(), position) < minDist * minDist; + return MathUtils.LineSegmentToPointDistanceSquared(startPosition, startExitPosition, position) < minDist * minDist; } public bool IsCloseToEnd(Point position, float minDist) { - return MathUtils.LineSegmentToPointDistanceSquared(EndPosition.ToPoint(), EndExitPosition.ToPoint(), position) < minDist * minDist; + return MathUtils.LineSegmentToPointDistanceSquared(endPosition, endExitPosition, position) < minDist * minDist; } private Submarine SpawnSubOnPath(string subName, ContentFile contentFile, SubmarineType type) @@ -3214,6 +3231,7 @@ namespace Barotrauma var waypoints = WayPoint.WayPointList.Where(wp => wp.Submarine == null && wp.SpawnType == SpawnType.Path && + wp.WorldPosition.X < EndExitPosition.X && !IsCloseToStart(wp.WorldPosition, minDistance) && !IsCloseToEnd(wp.WorldPosition, minDistance)).ToList(); @@ -3971,7 +3989,7 @@ namespace Barotrauma var characterInfo = new CharacterInfo(CharacterPrefab.HumanSpeciesName, jobPrefab: job, randSync: Rand.RandSync.Server); var corpse = Character.Create(CharacterPrefab.HumanConfigFile, worldPos, ToolBox.RandomSeed(8), characterInfo, hasAi: true, createNetworkEvent: true); - corpse.AnimController.FindHull(worldPos, true); + corpse.AnimController.FindHull(worldPos, setSubmarine: true); corpse.TeamID = CharacterTeamType.None; corpse.EnableDespawn = false; selectedPrefab.GiveItems(corpse, wreck); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelData.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelData.cs index 2cf68b72c..eb59a650b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelData.cs @@ -143,14 +143,20 @@ namespace Barotrauma var rand = new MTRandom(ToolBox.StringToInt(Seed)); InitialDepth = (int)MathHelper.Lerp(GenerationParams.InitialDepthMin, GenerationParams.InitialDepthMax, (float)rand.NextDouble()); - - //minimum difficulty of the level before hunting grounds can appear - float huntingGroundsDifficultyThreshold = 25; - //probability of hunting grounds appearing in 100% difficulty levels - float maxHuntingGroundsProbability = 0.3f; - HasHuntingGrounds = OriginallyHadHuntingGrounds = rand.NextDouble() < MathUtils.InverseLerp(huntingGroundsDifficultyThreshold, 100.0f, Difficulty) * maxHuntingGroundsProbability; - - HasBeaconStation = !HasHuntingGrounds && rand.NextDouble() < locationConnection.Locations.Select(l => l.Type.BeaconStationChance).Max(); + if (Biome.IsEndBiome) + { + HasHuntingGrounds = false; + HasBeaconStation = false; + } + else + { + //minimum difficulty of the level before hunting grounds can appear + float huntingGroundsDifficultyThreshold = 25; + //probability of hunting grounds appearing in 100% difficulty levels + float maxHuntingGroundsProbability = 0.3f; + HasHuntingGrounds = OriginallyHadHuntingGrounds = rand.NextDouble() < MathUtils.InverseLerp(huntingGroundsDifficultyThreshold, 100.0f, Difficulty) * maxHuntingGroundsProbability; + HasBeaconStation = !HasHuntingGrounds && rand.NextDouble() < locationConnection.Locations.Select(l => l.Type.BeaconStationChance).Max(); + } IsBeaconActive = false; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerationParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerationParams.cs index be359698a..64dc5acb9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerationParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerationParams.cs @@ -35,9 +35,6 @@ namespace Barotrauma.RuinGeneration private static List paramsList; private readonly string filePath; - - public override string Name => "RuinGenerationParams"; - private RuinGenerationParams(XElement element, string filePath) : base(element, filePath) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerator.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerator.cs index 6b2fdba38..ef4e0c1cb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Ruins/RuinGenerator.cs @@ -1,7 +1,7 @@ using Barotrauma.Extensions; using Microsoft.Xna.Framework; +using System; using System.Collections.Generic; -using System.Linq; using Voronoi2; namespace Barotrauma.RuinGeneration @@ -41,6 +41,9 @@ namespace Barotrauma.RuinGeneration Submarine.Info.Name = $"Ruin ({level.Seed})"; Submarine.Info.Type = SubmarineType.Ruin; Submarine.TeamID = CharacterTeamType.None; + + //prevent the ruin from extending above the level "ceiling" + position.Y = Math.Min(level.Size.Y - (Submarine.Borders.Height / 2) - 100, position.Y); Submarine.SetPosition(position.ToVector2()); if (mirror) @@ -52,9 +55,9 @@ namespace Barotrauma.RuinGeneration worldBorders.Location += Submarine.WorldPosition.ToPoint(); Area = new Rectangle(worldBorders.X, worldBorders.Y - worldBorders.Height, worldBorders.Width, worldBorders.Height); - List subWaypoints = WayPoint.WayPointList.FindAll(wp => wp.Submarine == Submarine); + var waypoints = WayPoint.WayPointList.FindAll(wp => wp.Ruin == this || wp.Submarine == Submarine); int interestingPosCount = 0; - foreach (WayPoint wp in subWaypoints) + foreach (WayPoint wp in waypoints) { if (wp.SpawnType != SpawnType.Enemy) { continue; } level.PositionsOfInterest.Add(new Level.InterestingPosition(wp.WorldPosition.ToPoint(), Level.PositionType.Ruin, this)); @@ -63,8 +66,8 @@ namespace Barotrauma.RuinGeneration if (interestingPosCount == 0) { - //make sure there's at least on PositionsOfInterest in the ruins - level.PositionsOfInterest.Add(new Level.InterestingPosition(subWaypoints.GetRandom(Rand.RandSync.Server).WorldPosition.ToPoint(), Level.PositionType.Ruin, this)); + //make sure there's at least one PositionsOfInterest in the ruins + level.PositionsOfInterest.Add(new Level.InterestingPosition(waypoints.GetRandom(Rand.RandSync.Server).WorldPosition.ToPoint(), Level.PositionType.Ruin, this)); } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/LinkedSubmarine.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/LinkedSubmarine.cs index afc15291e..771e43965 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/LinkedSubmarine.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/LinkedSubmarine.cs @@ -175,9 +175,10 @@ namespace Barotrauma { Vector2 pos = element.GetAttributeVector2("pos", Vector2.Zero); LinkedSubmarine linkedSub; + idRemap.AssignMaxId(out ushort id); if (Screen.Selected == GameMain.SubEditorScreen) { - linkedSub = CreateDummy(submarine, element, pos, idRemap.AssignMaxId()); + linkedSub = CreateDummy(submarine, element, pos, id); linkedSub.saveElement = element; linkedSub.purchasedLostShuttles = false; } @@ -185,7 +186,7 @@ namespace Barotrauma { string levelSeed = element.GetAttributeString("location", ""); LevelData levelData = GameMain.GameSession?.Campaign?.NextLevel ?? GameMain.GameSession?.LevelData; - linkedSub = new LinkedSubmarine(submarine, idRemap.AssignMaxId()) + linkedSub = new LinkedSubmarine(submarine, id) { purchasedLostShuttles = GameMain.GameSession?.GameMode is CampaignMode campaign && campaign.PurchasedLostShuttles, saveElement = element diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs index 6c208d35b..7a8e2f397 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Xml.Linq; +using StoreBalanceStatus = Barotrauma.LocationType.StoreBalanceStatus; namespace Barotrauma { @@ -87,16 +88,12 @@ namespace Barotrauma public int TurnsInRadiation { get; set; } #region Store - - private const float StoreMaxReputationModifier = 0.1f; - private const float StoreSellPriceModifier = 0.8f; - private const float DailySpecialPriceModifier = 0.5f; - private const float RequestGoodPriceModifier = 1.5f; - public const int StoreInitialBalance = 5000; - /// - /// In percentages - /// - private const int StorePriceModifierRange = 5; + private float StoreMaxReputationModifier => Type.StoreMaxReputationModifier; + private float StoreSellPriceModifier => Type.StoreSellPriceModifier; + private float DailySpecialPriceModifier => Type.DailySpecialPriceModifier; + private float RequestGoodPriceModifier => Type.RequestGoodPriceModifier; + public int StoreInitialBalance => Type.StoreInitialBalance; + private int StorePriceModifierRange => Type.StorePriceModifierRange; /// /// In percentages. Larger values make buying more expensive and selling less profitable, and vice versa. /// @@ -104,26 +101,7 @@ namespace Barotrauma public Color BalanceColor => ActiveStoreBalanceStatus.Color; public StoreBalanceStatus ActiveStoreBalanceStatus { get; private set; } - private static StoreBalanceStatus DefaultBalanceStatus { get; } = new StoreBalanceStatus(1.0f, 1.0f, Color.White); - private static List StoreBalanceStatuses { get; } = new List - { - new StoreBalanceStatus(0.5f, 0.75f, Color.Orange), - new StoreBalanceStatus(0.25f, 0.2f, Color.Red), - }; - - public struct StoreBalanceStatus - { - public float PercentageOfInitialBalance { get; } - public float SellPriceModifier { get; } - public Color Color { get; } - - public StoreBalanceStatus(float percentage, float sellPriceModifier, Color color) - { - PercentageOfInitialBalance = percentage; - SellPriceModifier = sellPriceModifier; - Color = color; - } - } + private List StoreBalanceStatuses => Type.StoreBalanceStatuses; private int storeCurrentBalance; public int StoreCurrentBalance @@ -1111,15 +1089,16 @@ namespace Barotrauma } } - public static StoreBalanceStatus GetStoreBalanceStatus(int balance) + public StoreBalanceStatus GetStoreBalanceStatus(int balance) { - StoreBalanceStatus nextStatus = DefaultBalanceStatus; - foreach (var balanceStatus in StoreBalanceStatuses) + StoreBalanceStatus nextStatus = StoreBalanceStatuses[0]; + for (int i = 1; i < StoreBalanceStatuses.Count; i++) { - if (balanceStatus.PercentageOfInitialBalance < nextStatus.PercentageOfInitialBalance && - ((float)balance / StoreInitialBalance) < balanceStatus.PercentageOfInitialBalance) + var status = StoreBalanceStatuses[i]; + if (status.PercentageOfInitialBalance < nextStatus.PercentageOfInitialBalance && + ((float)balance / StoreInitialBalance) < status.PercentageOfInitialBalance) { - nextStatus = balanceStatus; + nextStatus = status; } } return nextStatus; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs index 88fe4d6f4..792cce9bc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs @@ -68,6 +68,37 @@ namespace Barotrauma private set; } + public float StoreMaxReputationModifier { get; } = 0.1f; + public float StoreSellPriceModifier { get; } = 0.8f; + public float DailySpecialPriceModifier { get; } = 0.5f; + public float RequestGoodPriceModifier { get; } = 1.5f; + public int StoreInitialBalance { get; } = 5000; + /// + /// In percentages + /// + public int StorePriceModifierRange { get; } = 5; + + public List StoreBalanceStatuses { get; } = new List() + { + new StoreBalanceStatus(1.0f, 1.0f, Color.White), + new StoreBalanceStatus(0.5f, 0.75f, Color.Orange), + new StoreBalanceStatus(0.25f, 0.2f, Color.Red) + }; + + public struct StoreBalanceStatus + { + public float PercentageOfInitialBalance { get; } + public float SellPriceModifier { get; } + public Color Color { get; } + + public StoreBalanceStatus(float percentage, float sellPriceModifier, Color color) + { + PercentageOfInitialBalance = percentage; + SellPriceModifier = sellPriceModifier; + Color = color; + } + } + public override string ToString() { return $"LocationType (" + Identifier + ")"; @@ -163,6 +194,26 @@ namespace Barotrauma portraits.Add(portrait); } break; + case "store": + StoreMaxReputationModifier = subElement.GetAttributeFloat("maxreputationmodifier", StoreMaxReputationModifier); + StoreSellPriceModifier = subElement.GetAttributeFloat("sellpricemodifier", StoreSellPriceModifier); + DailySpecialPriceModifier = subElement.GetAttributeFloat("dailyspecialpricemodifier", DailySpecialPriceModifier); + RequestGoodPriceModifier = subElement.GetAttributeFloat("requestgoodpricemodifier", RequestGoodPriceModifier); + StoreInitialBalance = subElement.GetAttributeInt("initialbalance", StoreInitialBalance); + StorePriceModifierRange = subElement.GetAttributeInt("pricemodifierrange", StorePriceModifierRange); + var balanceStatusElements = subElement.GetChildElements("balancestatus"); + if (balanceStatusElements.Any()) + { + StoreBalanceStatuses.Clear(); + foreach (var balanceStatusElement in balanceStatusElements) + { + float percentage = balanceStatusElement.GetAttributeFloat("percentage", 1.0f); + float modifier = balanceStatusElement.GetAttributeFloat("sellpricemodifier", 1.0f); + Color color = balanceStatusElement.GetAttributeColor("color", Color.White); + StoreBalanceStatuses.Add(new StoreBalanceStatus(percentage, modifier, color)); + } + } + break; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs index 53342d1aa..7609cf623 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs @@ -472,8 +472,11 @@ namespace Barotrauma foreach (LocationConnection connection in Connections) { - float difficulty = GetLevelDifficulty(connection.CenterPos.X / Width); - connection.Difficulty = MathHelper.Clamp(difficulty + Rand.Range(-10.0f, 0.0f, Rand.RandSync.Server), 1.2f, 100.0f); + //float difficulty = GetLevelDifficulty(connection.CenterPos.X / Width); + //connection.Difficulty = MathHelper.Clamp(difficulty + Rand.Range(-10.0f, 0.0f, Rand.RandSync.Server), 1.2f, 100.0f); + float difficulty = connection.CenterPos.X / Width * 100; + float random = difficulty > 10 ? 5 : 0; + connection.Difficulty = MathHelper.Clamp(difficulty + Rand.Range(-random, random, Rand.RandSync.Server), 1.0f, 100.0f); } AssignBiomes(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Radiation.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Radiation.cs index 766ef959e..9fd7a488e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Radiation.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Radiation.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; +using Barotrauma.Extensions; using Microsoft.Xna.Framework; namespace Barotrauma @@ -22,6 +23,8 @@ namespace Barotrauma public readonly Map Map; public readonly RadiationParams Params; + private Affliction radiationAffliction; + private float radiationTimer; private float increasedAmount; @@ -93,6 +96,8 @@ namespace Barotrauma increasedAmount = lastIncrease = amount; } + + public void UpdateRadiation(float deltaTime) { if (!(GameMain.GameSession?.IsCurrentLocationRadiated() ?? false)) { return; } @@ -105,6 +110,8 @@ namespace Barotrauma return; } + radiationAffliction ??= new Affliction(AfflictionPrefab.RadiationSickness, Params.RadiationDamageAmount); + radiationTimer = Params.RadiationDamageDelay; foreach (Character character in Character.CharacterList) @@ -113,7 +120,11 @@ namespace Barotrauma if (IsEntityRadiated(character)) { - health.ApplyAffliction(null, new Affliction(AfflictionPrefab.RadiationSickness, Params.RadiationDamageAmount)); + foreach (Limb limb in character.AnimController.Limbs) + { + AttackResult attackResult = limb.AddDamage(limb.SimPosition, radiationAffliction.ToEnumerable(), playSound: false); + character.CharacterHealth.ApplyDamage(limb, attackResult); + } } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerator.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerator.cs index 3b0dfa429..39b5f6bf1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerator.cs @@ -262,7 +262,7 @@ namespace Barotrauma item.GetComponent()?.InitializeLinks(); item.GetComponent()?.OnMapLoaded(); } - idOffset = moduleEntities.Max(e => e.ID); + idOffset = moduleEntities.Max(e => e.ID) + 1; var wallEntities = moduleEntities.Where(e => e is Structure).Cast(); var hullEntities = moduleEntities.Where(e => e is Hull).Cast(); @@ -1483,7 +1483,7 @@ namespace Barotrauma } characterInfo.TeamID = CharacterTeamType.FriendlyNPC; var npc = Character.Create(CharacterPrefab.HumanConfigFile, SpawnAction.OffsetSpawnPos(gotoTarget.WorldPosition, 100.0f), ToolBox.RandomSeed(8), characterInfo, hasAi: true, createNetworkEvent: true); - npc.AnimController.FindHull(gotoTarget.WorldPosition, true); + npc.AnimController.FindHull(gotoTarget.WorldPosition, setSubmarine: true); npc.TeamID = CharacterTeamType.FriendlyNPC; npc.Prefab = humanPrefab; if (!outpost.Info.OutpostNPCs.ContainsKey(humanPrefab.Identifier)) @@ -1503,7 +1503,7 @@ namespace Barotrauma foreach (Item item in npc.Inventory.FindAllItems(it => it != null, recursive: true)) { item.AllowStealing = outpost.Info.OutpostGenerationParams.AllowStealing; - item.SpawnedInOutpost = true; + item.SpawnedInCurrentOutpost = true; } npc.GiveIdCardTags(gotoTarget as WayPoint); humanPrefab.InitializeCharacter(npc, gotoTarget); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/RoundEndCinematic.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/RoundEndCinematic.cs index 0964e41bc..ae5e402d5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/RoundEndCinematic.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/RoundEndCinematic.cs @@ -44,7 +44,7 @@ namespace Barotrauma #endif } - private IEnumerable Update(List subs, Camera cam) + private IEnumerable Update(List subs, Camera cam) { if (!subs.Any()) yield return CoroutineStatus.Success; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs index 3273bb4c3..7084f3ada 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs @@ -274,14 +274,6 @@ namespace Barotrauma return "Barotrauma.Submarine (" + (Info?.Name ?? "[NULL INFO]") + ", " + IdOffset + ")"; } - public override bool Removed - { - get - { - return !loaded.Contains(this); - } - } - public int CalculateBasePrice() { int minPrice = 1000; @@ -1126,22 +1118,6 @@ namespace Barotrauma } } - /// - /// Run the power logic so the sub is already powered up at the start of the round (as long as the reactor was on) - /// - public void WarmStartPower() - { - for (int i = 0; i < 600; i++) - { - Powered.UpdatePower((float)Timing.Step); - foreach (Entity e in Item.ItemList) - { - if (!(e is Item item) || item.GetComponent() == null || e.Submarine != this) { continue; } - item.Update((float)Timing.Step, GameMain.GameScreen.Cam); - } - } - } - public void SetPrevTransform(Vector2 position) { prevPosition = position; @@ -1398,7 +1374,7 @@ namespace Barotrauma if (me.Submarine != this) { continue; } if (me is Item item) { - item.SpawnedInOutpost = info.OutpostGenerationParams != null; + item.SpawnedInCurrentOutpost = info.OutpostGenerationParams != null; item.AllowStealing = info.OutpostGenerationParams?.AllowStealing ?? true; if (item.GetComponent() != null && indestructible) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs index 49bfbf5f6..18443c725 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineBody.cs @@ -575,7 +575,7 @@ namespace Barotrauma if (newHull != null) { CoroutineManager.Invoke(() => - character.AnimController.FindHull(newHull.WorldPosition, true)); + character.AnimController.FindHull(newHull.WorldPosition, setSubmarine: true)); } return false; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/WayPoint.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/WayPoint.cs index de504a73e..e5f56fdbf 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/WayPoint.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/WayPoint.cs @@ -194,7 +194,7 @@ namespace Barotrauma float minDist = 100.0f; float heightFromFloor = 110.0f; float hullMinHeight = 100; - var removals = new List(); + var removals = new HashSet(); foreach (Hull hull in Hull.hullList) { if (isFlooded) @@ -492,17 +492,18 @@ namespace Barotrauma { outsideWaypoints.RemoveAll(w => w.Item1 == wp); } + removals.ForEach(wp => wp.Remove()); for (int i = 0; i < outsideWaypoints.Count; i++) { WayPoint current = outsideWaypoints[i].Item1; - if (current.linkedTo.Count > 1) { continue; } + if (current.linkedTo.Count(l => !removals.Contains(l)) > 1) { continue; } WayPoint next = null; int maxConnections = 2; float tooFar = outSideWaypointInterval * 5; for (int j = 0; j < maxConnections; j++) { if (current.linkedTo.Count >= maxConnections) { break; } - tooFar /= current.linkedTo.Count; + tooFar /= current.linkedTo.Count(l => !removals.Contains(l)); next = current.FindClosestOutside(outsideWaypoints, tolerance: tooFar, filter: wp => wp.Item1 != next && wp.Item1.linkedTo.None(e => current.linkedTo.Contains(e)) && wp.Item1.linkedTo.Count < 2 && wp.Item2 < i); if (next != null) { @@ -511,18 +512,19 @@ namespace Barotrauma } } } - foreach (Structure wall in Structure.WallList) + foreach (MapEntity mapEntity in mapEntityList.ToList()) { - if (wall.StairDirection == Direction.None) { continue; } + if (!(mapEntity is Structure structure)) { continue; } + if (structure.StairDirection == Direction.None) { continue; } WayPoint[] stairPoints = new WayPoint[3]; stairPoints[0] = new WayPoint( - new Vector2(wall.Rect.X - 32.0f, - wall.Rect.Y - (wall.StairDirection == Direction.Left ? 80 : wall.Rect.Height) + heightFromFloor), SpawnType.Path, submarine); + new Vector2(structure.Rect.X - 32.0f, + structure.Rect.Y - (structure.StairDirection == Direction.Left ? 80 : structure.Rect.Height) + heightFromFloor), SpawnType.Path, submarine); stairPoints[1] = new WayPoint( - new Vector2(wall.Rect.Right + 32.0f, - wall.Rect.Y - (wall.StairDirection == Direction.Left ? wall.Rect.Height : 80) + heightFromFloor), SpawnType.Path, submarine); + new Vector2(structure.Rect.Right + 32.0f, + structure.Rect.Y - (structure.StairDirection == Direction.Left ? structure.Rect.Height : 80) + heightFromFloor), SpawnType.Path, submarine); for (int i = 0; i < 2; i++) { @@ -869,10 +871,10 @@ namespace Barotrauma } } - public static WayPoint GetRandom(SpawnType spawnType = SpawnType.Human, JobPrefab assignedJob = null, Submarine sub = null, bool useSyncedRand = false, string spawnPointTag = null) + public static WayPoint GetRandom(SpawnType spawnType = SpawnType.Human, JobPrefab assignedJob = null, Submarine sub = null, bool useSyncedRand = false, string spawnPointTag = null, bool ignoreSubmarine = false) { return WayPointList.GetRandom(wp => - wp.Submarine == sub && + (ignoreSubmarine || wp.Submarine == sub) && wp.spawnType == spawnType && (string.IsNullOrEmpty(spawnPointTag) || wp.Tags.Any(t => t.Equals(spawnPointTag, StringComparison.OrdinalIgnoreCase))) && (assignedJob == null || (assignedJob != null && wp.AssignedJob == assignedJob)), diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/KarmaManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/KarmaManager.cs index 38a6c5f5e..00dea4a4b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/KarmaManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/KarmaManager.cs @@ -105,6 +105,15 @@ namespace Barotrauma [Serialize(120.0f, true)] public float AllowedRetaliationTime { get; set; } + [Serialize(5.0f, true)] + public float DangerousItemContainKarmaDecrease { get; set; } + + [Serialize(defaultValue: true, true)] + public bool IsDangerousItemContainKarmaDecreaseIncremental { get; set; } + + [Serialize(30.0f, true)] + public float MaxDangerousItemContainKarmaDecrease { get; set; } + private readonly AfflictionPrefab herpesAffliction; public Dictionary Presets = new Dictionary(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEventManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEventManager.cs index 4a5441b57..4ab3a4c33 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEventManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/NetEntityEvent/NetEntityEventManager.cs @@ -27,7 +27,6 @@ namespace Barotrauma.Networking { WriteEvent(tempEventBuffer, e, recipient); } - catch (Exception exception) { DebugConsole.ThrowError("Failed to write an event for the entity \"" + e.Entity + "\"", exception); @@ -55,7 +54,7 @@ namespace Barotrauma.Networking tempBuffer.WriteVariableUInt32((uint)tempEventBuffer.LengthBytes); tempBuffer.Write(tempEventBuffer.Buffer, 0, tempEventBuffer.LengthBytes); tempBuffer.WritePadBits(); - sentEvents.Add(e); + sentEvents.Add(e); eventCount++; } @@ -68,6 +67,32 @@ namespace Barotrauma.Networking } } + protected static bool ValidateEntity(INetSerializable entity) + { + void error(string reason) + => DebugConsole.ThrowError($"Can't create an entity event for {entity} - {reason}.\n{Environment.StackTrace.CleanupStackTrace()}"); + + if (entity is Entity { Removed: var removed, IdFreed: var idFreed }) + { + if (removed) + { + error("the entity has been removed"); + return false; + } + if (idFreed) + { + error("the ID of the entity has been freed"); + return false; + } + } + else + { + error($"input is not of type {nameof(Entity)}"); + return false; + } + return true; + } + protected abstract void WriteEvent(IWriteMessage buffer, NetEntityEvent entityEvent, Client recipient = null); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs index e4d53fc9c..8f73cfc90 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs @@ -196,7 +196,7 @@ namespace Barotrauma.Networking partial void UpdateReturningProjSpecific(float deltaTime); - private IEnumerable ForceShuttleToPos(Vector2 position, float speed) + private IEnumerable ForceShuttleToPos(Vector2 position, float speed) { if (RespawnShuttle == null) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs index d3d364a3b..8d27d37ac 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs @@ -42,6 +42,7 @@ namespace Barotrauma.Networking ServerMessage, ConsoleUsage, Karma, + Talent, Error, } @@ -56,6 +57,7 @@ namespace Barotrauma.Networking { MessageType.ServerMessage, new Color(157, 225, 160) }, { MessageType.ConsoleUsage, new Color(0, 162, 232) }, { MessageType.Karma, new Color(75, 88, 255) }, + { MessageType.Talent, new Color(125, 125, 255) }, { MessageType.Error, Color.Red }, }; @@ -70,6 +72,7 @@ namespace Barotrauma.Networking { MessageType.ServerMessage, "ServerMessage" }, { MessageType.ConsoleUsage, "ConsoleUsage" }, { MessageType.Karma, "Karma" }, + { MessageType.Talent, "Talent" }, { MessageType.Error, "Error" } }; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs index 4d335dc73..304996d66 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs @@ -10,6 +10,7 @@ using System.Security.Cryptography; using System.Text; using System.Xml; using System.Xml.Linq; +using Barotrauma.Extensions; namespace Barotrauma.Networking { @@ -48,7 +49,8 @@ namespace Barotrauma.Networking Message = 0x2, Properties = 0x4, Misc = 0x8, - LevelSeed = 0x10 + LevelSeed = 0x10, + HiddenSubs = 0x20 } public static readonly string PermissionPresetFile = "Data" + Path.DirectorySeparatorChar + "permissionpresets.xml"; @@ -284,6 +286,8 @@ namespace Barotrauma.Networking ExtraCargo = new Dictionary(); + HiddenSubs = new HashSet(); + PermissionPreset.LoadAll(PermissionPresetFile); InitProjSpecific(); @@ -369,6 +373,8 @@ namespace Barotrauma.Networking public Dictionary ExtraCargo { get; private set; } + public HashSet HiddenSubs { get; private set; } + private float selectedLevelDifficulty; private string password; @@ -506,6 +512,13 @@ namespace Barotrauma.Networking } } + [Serialize(Barotrauma.LosMode.Opaque, true)] + public LosMode LosMode + { + get; + set; + } + [Serialize(800, true)] public int LinesPerLogFile { @@ -1023,5 +1036,29 @@ namespace Barotrauma.Networking msg.Write((byte)kvp.Value); } } + + public void ReadHiddenSubs(IReadMessage msg) + { + HiddenSubs.Clear(); + uint count = msg.ReadVariableUInt32(); + for (int i = 0; i < count; i++) + { + string submarineName = msg.ReadString(); + HiddenSubs.Add(submarineName); + } + +#if SERVER + SelectNonHiddenSubmarine(); +#endif + } + + public void WriteHiddenSubs(IWriteMessage msg) + { + msg.WriteVariableUInt32((uint)HiddenSubs.Count); + foreach (string submarineName in HiddenSubs) + { + msg.Write(submarineName); + } + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/Voting.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/Voting.cs index 709866603..ecab1d04a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/Voting.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/Voting.cs @@ -1,5 +1,6 @@ using Barotrauma.Networking; using System.Collections.Generic; +using System.Linq; namespace Barotrauma { @@ -15,23 +16,22 @@ namespace Barotrauma public enum VoteState { None = 0, Started = 1, Running = 2, Passed = 3, Failed = 4 }; - private List> GetVoteList(VoteType voteType, List voters) + private IReadOnlyDictionary GetVoteCounts(VoteType voteType, List voters) { - List> voteList = new List>(); + Dictionary voteList = new Dictionary(); foreach (Client voter in voters) { - object vote = voter.GetVote(voteType); + T vote = voter.GetVote(voteType); if (vote == null) continue; - var existingVotable = voteList.Find(v => v.First == vote || v.First.Equals(vote)); - if (existingVotable == null) + if (!voteList.ContainsKey(vote)) { - voteList.Add(new Pair(vote, 1)); + voteList.Add(vote, 1); } else { - existingVotable.Second++; + voteList[vote]++; } } return voteList; @@ -42,16 +42,23 @@ namespace Barotrauma if (voteType == VoteType.Sub && !AllowSubVoting) return default(T); if (voteType == VoteType.Mode && !AllowModeVoting) return default(T); - List> voteList = GetVoteList(voteType, voters); + IReadOnlyDictionary voteList = GetVoteCounts(voteType, voters); T selected = default(T); int highestVotes = 0; - foreach (Pair votable in voteList) + foreach (KeyValuePair votable in voteList) { - if (selected == null || votable.Second > highestVotes) + if (voteType == VoteType.Sub + && votable.Key is SubmarineInfo subInfo + && GameMain.NetworkMember.ServerSettings.HiddenSubs.Contains(subInfo.Name)) { - highestVotes = votable.Second; - selected = (T)votable.First; + //This sub is hidden so it can't be voted for, skip + continue; + } + if (selected == null || votable.Value > highestVotes) + { + highestVotes = votable.Value; + selected = votable.Key; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs b/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs index 81086e854..4707fa46e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs @@ -226,7 +226,14 @@ namespace Barotrauma public bool PhysEnabled { get { return FarseerBody.Enabled; } - set { isPhysEnabled = value; if (Enabled) FarseerBody.Enabled = value; } + set + { + isPhysEnabled = value; + if (Enabled) + { + FarseerBody.Enabled = value; + } + } } public Vector2 SimPosition diff --git a/Barotrauma/BarotraumaShared/SharedSource/Prefabs/PrefabCollection.cs b/Barotrauma/BarotraumaShared/SharedSource/Prefabs/PrefabCollection.cs index 059e082f4..a238947bb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Prefabs/PrefabCollection.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Prefabs/PrefabCollection.cs @@ -72,6 +72,23 @@ namespace Barotrauma return prefabs.ContainsKey(identifier); } + /// + /// Returns true if a prefab with the identifier exists, false otherwise. + /// + /// Prefab identifier + /// The matching prefab (if one is found) + /// Whether a prefab with the identifier exists or not + public bool TryGetValue(string identifier, out T prefab) + { + if (!ContainsKey(identifier)) + { + prefab = default; + return false; + } + prefab = this[identifier]; + return true; + } + /// /// Add a prefab to the collection. /// If not marked as an override, fail if a prefab with the same diff --git a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/DelayedEffect.cs b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/DelayedEffect.cs index 0d74a8e66..7bd12a932 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/DelayedEffect.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/DelayedEffect.cs @@ -68,13 +68,13 @@ namespace Barotrauma Projectile projectile = (entity as Item)?.GetComponent(); if (projectile == null) { - DebugConsole.NewMessage("Non-projectile using a delaytype of reachcursor", Color.Red, false, true); + DebugConsole.ShowError("Non-projectile using a delaytype of reachcursor"); return; } if (projectile.User == null) { - DebugConsole.NewMessage("Projectile: '" + projectile.Name + "' missing user to determine distance", Color.Red, false, true); + DebugConsole.ShowError("Projectile: '" + projectile.Name + "' missing user to determine distance"); return; } @@ -108,7 +108,7 @@ namespace Barotrauma if (projectile == null) { #if DEBUG - DebugConsole.NewMessage("Non-projectile using a delaytype of reachcursor", Color.Red, false, true); + DebugConsole.ShowError("Non-projectile using a delaytype of reachcursor"); #endif return; } @@ -116,7 +116,7 @@ namespace Barotrauma if (projectile.User == null) { #if DEBUG - DebugConsole.NewMessage("Projectile " + projectile.Name + "missing user", Color.Red, false, true); + DebugConsole.ShowError("Projectile " + projectile.Name + "missing user"); #endif return; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs index 6bb5586c1..a165e9c50 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs @@ -138,6 +138,10 @@ namespace Barotrauma public readonly ItemPrefab ItemPrefab; public readonly SpawnPositionType SpawnPosition; public readonly bool SpawnIfInventoryFull; + /// + /// Should the item spawn even if the container can't contain items of this type + /// + public readonly bool SpawnIfCantBeContained; public readonly float Speed; public readonly float Rotation; public readonly int Count; @@ -176,6 +180,7 @@ namespace Barotrauma } SpawnIfInventoryFull = element.GetAttributeBool("spawnifinventoryfull", false); + SpawnIfCantBeContained = element.GetAttributeBool("spawnifcantbecontained", true); Speed = element.GetAttributeFloat("speed", 0.0f); Rotation = element.GetAttributeFloat("rotation", 0.0f); @@ -332,7 +337,7 @@ namespace Barotrauma private set; } - private readonly bool modifyAfflictionsByMaxVitality; + private readonly bool multiplyAfflictionsByMaxVitality; public IEnumerable SpawnCharacters { @@ -396,7 +401,7 @@ namespace Barotrauma ReduceAffliction = new List<(string affliction, float amount)>(); giveExperiences = new List(); giveSkills = new List<(string, float)>(); - modifyAfflictionsByMaxVitality = element.GetAttributeBool("multiplyafflictionsbymaxvitality", false); + multiplyAfflictionsByMaxVitality = element.GetAttributeBool("multiplyafflictionsbymaxvitality", false); tags = new HashSet(element.GetAttributeString("tags", "").Split(',')); OnlyInside = element.GetAttributeBool("onlyinside", false); @@ -891,20 +896,26 @@ namespace Barotrauma { owner = ownerItem.ParentInventory?.Owner; } - if (owner is Item container && !HasRequiredConditions(container.AllPropertyObjects, pc.ToEnumerable(), targetingContainer: true)) { return false; } + if (owner is Item container) + { + if (pc.Type == PropertyConditional.ConditionType.HasTag) + { + //if we're checking for tags, just check the Item object, not the ItemComponents + if (!HasRequiredConditions((container as ISerializableEntity).ToEnumerable(), pc.ToEnumerable(), targetingContainer: true)) { return false; } + } + else + { + if (!HasRequiredConditions(container.AllPropertyObjects, pc.ToEnumerable(), targetingContainer: true)) { return false; } + } + } if (owner is Character character && !HasRequiredConditions(character.ToEnumerable(), pc.ToEnumerable(), targetingContainer: true)) { return false; } } else { - foreach (ISerializableEntity target in targets) + var validTargets = targets; + if (!string.IsNullOrEmpty(pc.TargetItemComponentName)) { - if (!string.IsNullOrEmpty(pc.TargetItemComponentName)) - { - if (!(target is ItemComponent ic) || ic.Name != pc.TargetItemComponentName) - { - continue; - } - } + validTargets = targets.Where(t => t is ItemComponent ic && ic.Name == pc.TargetItemComponentName); } if (targets.None(t => pc.Matches(t))) { return false; } } @@ -1200,7 +1211,7 @@ namespace Barotrauma if (target is Character character) { if (character.Removed) { continue; } - newAffliction = GetMultipliedAffliction(affliction, entity, character, deltaTime, modifyAfflictionsByMaxVitality); + newAffliction = GetMultipliedAffliction(affliction, entity, character, deltaTime, multiplyAfflictionsByMaxVitality); character.LastDamageSource = entity; foreach (Limb limb in character.AnimController.Limbs) { @@ -1218,7 +1229,7 @@ namespace Barotrauma { if (limb.IsSevered) { continue; } if (limb.character.Removed || limb.Removed) { continue; } - newAffliction = GetMultipliedAffliction(affliction, entity, limb.character, deltaTime, modifyAfflictionsByMaxVitality); + newAffliction = GetMultipliedAffliction(affliction, entity, limb.character, deltaTime, multiplyAfflictionsByMaxVitality); AttackResult result = limb.character.DamageLimb(position, limb, newAffliction.ToEnumerable(), stun: 0.0f, playSound: false, attackImpulse: 0.0f, attacker: affliction.Source, allowStacking: !setValue); limb.character.TrySeverLimbJoints(limb, SeverLimbsProbability, disableDeltaTime ? result.Damage : result.Damage / deltaTime, allowBeheading: true); RegisterTreatmentResults(entity, limb, affliction, result); @@ -1489,7 +1500,12 @@ namespace Barotrauma } else if (entity is Item item) { - inventory = item?.GetComponent()?.Inventory; + var itemContainer = item.GetComponent(); + inventory = itemContainer?.Inventory; + if (!chosenItemSpawnInfo.SpawnIfCantBeContained && !itemContainer.CanBeContained(chosenItemSpawnInfo.ItemPrefab)) + { + return; + } } if (inventory != null && (inventory.CanBePut(chosenItemSpawnInfo.ItemPrefab) || chosenItemSpawnInfo.SpawnIfInventoryFull)) { @@ -1518,7 +1534,12 @@ namespace Barotrauma } else if (entity is Item item) { - thisInventory = item?.GetComponent()?.Inventory; + var itemContainer = item.GetComponent(); + thisInventory = itemContainer?.Inventory; + if (!chosenItemSpawnInfo.SpawnIfCantBeContained && !itemContainer.CanBeContained(chosenItemSpawnInfo.ItemPrefab)) + { + return; + } } if (thisInventory != null) { @@ -1629,14 +1650,14 @@ namespace Barotrauma if (target is Character character) { if (character.Removed) { continue; } - newAffliction = element.Parent.GetMultipliedAffliction(affliction, element.Entity, character, deltaTime, element.Parent.modifyAfflictionsByMaxVitality); + newAffliction = element.Parent.GetMultipliedAffliction(affliction, element.Entity, character, deltaTime, element.Parent.multiplyAfflictionsByMaxVitality); var result = character.AddDamage(character.WorldPosition, newAffliction.ToEnumerable(), stun: 0.0f, playSound: false, attacker: element.User); element.Parent.RegisterTreatmentResults(element.Entity, result.HitLimb, affliction, result); } else if (target is Limb limb) { if (limb.character.Removed || limb.Removed) { continue; } - newAffliction = element.Parent.GetMultipliedAffliction(affliction, element.Entity, limb.character, deltaTime, element.Parent.modifyAfflictionsByMaxVitality); + newAffliction = element.Parent.GetMultipliedAffliction(affliction, element.Entity, limb.character, deltaTime, element.Parent.multiplyAfflictionsByMaxVitality); var result = limb.character.DamageLimb(limb.WorldPosition, limb, newAffliction.ToEnumerable(), stun: 0.0f, playSound: false, attackImpulse: 0.0f, attacker: element.User); element.Parent.RegisterTreatmentResults(element.Entity, limb, affliction, result); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs index 2a62d2b4e..1562443c7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs @@ -181,7 +181,6 @@ namespace Barotrauma var targetProperties = new Dictionary(); string nameIdentifier = element.GetAttributeString("nameidentifier", ""); - if (!string.IsNullOrWhiteSpace(nameIdentifier)) { Name = TextManager.Get($"UpgradeName.{nameIdentifier}", returnNull: true) ?? string.Empty; @@ -191,7 +190,12 @@ namespace Barotrauma Name = TextManager.Get($"UpgradeName.{Identifier}", returnNull: true) ?? string.Empty; } - if (string.IsNullOrWhiteSpace(Description)) + string descriptionIdentifier = element.GetAttributeString("descriptionidentifier", ""); + if (!string.IsNullOrWhiteSpace(descriptionIdentifier)) + { + Description = TextManager.Get($"UpgradeDescription.{descriptionIdentifier}", returnNull: true) ?? string.Empty; + } + else if (string.IsNullOrWhiteSpace(Description)) { Description = TextManager.Get($"UpgradeDescription.{Identifier}", returnNull: true) ?? string.Empty; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/IdRemap.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/IdRemap.cs index 6e086afb8..038c69e55 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Utils/IdRemap.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/IdRemap.cs @@ -1,4 +1,5 @@ -using Microsoft.Xna.Framework; +#nullable enable +using Barotrauma.Extensions; using System; using System.Collections.Generic; using System.Linq; @@ -12,13 +13,13 @@ namespace Barotrauma private int maxId; - private readonly List> srcRanges; + private readonly List>? srcRanges; private readonly int destOffset; - public IdRemap(XElement parentElement, int offset) + public IdRemap(XElement? parentElement, int offset) { destOffset = offset; - if (parentElement != null && parentElement.HasElements) + if (parentElement is { HasElements: true }) { srcRanges = new List>(); foreach (XElement subElement in parentElement.Elements()) @@ -26,56 +27,60 @@ namespace Barotrauma int id = subElement.GetAttributeInt("ID", -1); if (id > 0) { InsertId(id); } } - maxId = GetOffsetId(srcRanges.Last().End) + 1; + maxId = GetOffsetId(srcRanges.Last().End); } else { - maxId = offset + 1; + maxId = offset; } } - public ushort AssignMaxId() + public void AssignMaxId(out ushort result) { maxId++; - return (ushort)maxId; + result = (ushort)maxId; } private void InsertId(int id) { - for (int i = 0; i < srcRanges.Count; i++) + if (srcRanges is null) { throw new NullReferenceException("Called InsertId when srcRanges is null"); } + + void tryMergeRangeWithNext(int indexA) { - if (srcRanges[i].Start > id) + int indexB = indexA + 1; + + if (indexA < 0 /* Index A out of bounds */ + || indexB >= srcRanges.Count /* Index B out of bounds */) { - if (srcRanges[i].Start == (id + 1)) - { - srcRanges[i] = new Range(id, srcRanges[i].End); - if (i > 0 && srcRanges[i].Start == srcRanges[i - 1].End) - { - srcRanges[i - 1] = new Range(srcRanges[i - 1].Start, srcRanges[i].End); - srcRanges.RemoveAt(i); - } - } - else - { - srcRanges.Insert(i, new Range(id, id)); - } return; } - else if (srcRanges[i].End < id) + + Range rangeA = srcRanges[indexA]; + Range rangeB = srcRanges[indexB]; + + if ((rangeA.End+1) >= rangeB.Start) //The end of range A is right before the start of range B, this should be one range { - if (srcRanges[i].End == (id - 1)) - { - srcRanges[i] = new Range(srcRanges[i].Start, id); - if (i < (srcRanges.Count - 1) && srcRanges[i].End == srcRanges[i + 1].Start) - { - srcRanges[i] = new Range(srcRanges[i].Start, srcRanges[i + 1].End); - srcRanges.RemoveAt(i + 1); - } - return; - } + srcRanges[indexA] = new Range(rangeA.Start, rangeB.End); + srcRanges.RemoveAt(indexB); } } - srcRanges.Add(new Range(id, id)); + + int insertIndex = srcRanges.Count; + for (int i = 0; i < srcRanges.Count; i++) + { + if (srcRanges[i].Contains(id)) //We already have a range that contains this ID, duplicates are invalid input! + { + throw new InvalidOperationException($"Duplicate ID: {id}"); + } + if (srcRanges[i].Start > id) //ID is between srcRanges[i-1] and srcRanges[i], insert at i + { + insertIndex = i; + break; + } + } + srcRanges.Insert(insertIndex, new Range(id, id)); //Insert new range consisting of solely the new ID + tryMergeRangeWithNext(insertIndex); //Try merging new range with the one that comes after it + tryMergeRangeWithNext(insertIndex - 1); //Try merging new range with the one that comes before it } public ushort GetOffsetId(XElement element) @@ -85,31 +90,47 @@ namespace Barotrauma public ushort GetOffsetId(int id) { - if (id <= 0) { return 0; } - if (destOffset < 0) { return 0; } - if (srcRanges == null) { return (ushort)(id + destOffset); } + if (id <= 0) //Input cannot be remapped because it's negative + { + return 0; + } + if (destOffset < 0) //Remapper has been defined to discard all input + { + return 0; + } + if (srcRanges is null) //Remapper defines no source ranges so it just adds an offset + { + return (ushort)(id + destOffset); + } + + int rangeSize(in Range r) + => r.End - r.Start + 1; int currOffset = destOffset; for (int i = 0; i < srcRanges.Count; i++) { - if (id >= srcRanges[i].Start && id <= srcRanges[i].End) + if (srcRanges[i].Contains(id)) { - return (ushort)(id - srcRanges[i].Start + 1 + currOffset); + //The source range for this ID has been found! + //The return value is such that all IDs that + //are returned by this remapper are contiguous, + //even if they weren't originally + return (ushort)(id - srcRanges[i].Start + currOffset); } - currOffset += srcRanges[i].End - srcRanges[i].Start + 1; + currOffset += rangeSize(srcRanges[i]); } return 0; } public static ushort DetermineNewOffset() { - ushort idOffset = 0; + int largestEntityId = 0; foreach (Entity e in Entity.GetEntities()) { if (e.ID > Entity.ReservedIDStart || e is Submarine) { continue; } - idOffset = Math.Max(idOffset, e.ID); + largestEntityId = Math.Max(largestEntityId, e.ID); } - return idOffset; + return (ushort)(largestEntityId+1); } } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/Range.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/Range.cs index 5d380e221..eaf89a4f1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Utils/Range.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/Range.cs @@ -1,8 +1,12 @@ +#nullable enable using System; namespace Barotrauma { - public struct Range where T : IComparable + /// + /// An inclusive range, i.e. [Start, End] where Start <= End + /// + public struct Range where T : notnull, IComparable { private T start; private T end; public T Start @@ -25,6 +29,9 @@ namespace Barotrauma } } + public bool Contains(in T v) + => start.CompareTo(v) <= 0 && end.CompareTo(v) >= 0; + private void VerifyStartLessThanEnd() { if (start.CompareTo(end) > 0) { throw new InvalidOperationException($"Range<{typeof(T).Name}>.Start set to a value greater than End ({start} > {end})"); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs index de832af9f..94cfaac4f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs @@ -425,7 +425,7 @@ namespace Barotrauma return buffer; } - public static T SelectWeightedRandom(IList objects, IList weights, Rand.RandSync randSync) + public static T SelectWeightedRandom(IList objects, IList weights, Rand.RandSync randSync = Rand.RandSync.Unsynced) { return SelectWeightedRandom(objects, weights, Rand.GetRNG(randSync)); } diff --git a/Barotrauma/BarotraumaShared/Submarines/Kastrull.sub b/Barotrauma/BarotraumaShared/Submarines/Kastrull.sub index c7ca33522606e6fbf05f3e0bcf4c990c53fbd028..f4f87a18d7cd0529f75185361d32828a40341c78 100644 GIT binary patch delta 205834 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�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
    $=yh0s9dBgQlWsH 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 delta 204386 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 )ewmNcgL&$xeA+)i{M>usntDCVKxuQ@}L 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

    {XcszS+wfg`j)lU-lH~U|)CN3!^p7yxs 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%0Ao)MQ|z$v7SJO_miJm2a>-Uq zPw@_Q2e|^OYi2+P@u+FMRR3Yu3po0mR81=!ISwbkWTQ-DotJFi?-Vk;;|WPE_LJp| z$;wS}I3_d&;$c#PU32B$g0xTIs`skv;9^+v#C`#j?RA^^_ueb*!baIJK{78*;jl-9 zmF|Y+cCdaY-N^2X6M;J@U%?*CTz5;nG*RW&*JZa zpW0vC+x2~2{&2S;?4=1Tt7S!{t~TL z?uf`b59D^#v{hW7$ ziu!i0@zN*@s*=@G?MrxNO3h9DSLIdOj0iFdeT#N=(71Mozwyv2)LVt~W0~CpQ!C6t zJN{5e5jTgkRc#7MrUCe;dp^liO(HAFnhxVVwD4^2fWN2U;hNNI@)Khx!8pOobaBOBG_3w2a4eu#|T)S}P9&TPW|X&HRt zY9PmJIu-X7{jRFVATgDc!w~*Xbd>ubcP=rN9E)mdB{Ngp8i{(|0o1^Z*1r=(KuD9P z^TH#5h$-JH^#hTEfcRkEvi2}{Kmq}_eQp8t%OMH^CdI7OSQq=XgvVyqre0<8fZ#Rg z=ez3jO0VxcR;+2O`^#>5bdy~AAy}g4*kdbDNPI?lJcsEFD}3=$i^5GggtBul6U5r& zJD8u4%8;k<4(>(xmsNIkMxp`YEc%gXTjsr8Kd63?+xC1Os(^j`7`z5ey;;uH~EVQ`8y`8WI$~ zbV5QExJpVYaSTj9UTUP-+~cqN2{Q2lw#V$%{++gCNKU1XX{DcaI7T)&96thrnG@YmKxdI48YqI=_WeB5%KNa8_ptw=< zhuwfZU7X;Lab?h7fio}b*tU`tm?#+jl?VT03>lx@%RTvv7k%Zh>Qe;SI+!UD!!WuS z!RCR)o*TjpBY2cKuqi`K@euYo`V0#&_UCp3D4H&@43S5z%HAE}EKo9&@;03r81W<2 z6nQgo@du!JC}ZTpwkQ{yg%=kr2CRA=2;u?ilNon{KZp_>tXeO>6}+>XE{Y56Tz6x> zXn=iGAkFFWBB+t(oIXMmW^zsk;~%{Mdx&m%@&la&sfTeR^6(mHB;AwH*z=Aib|j;8 z?o$*bgjsjUJiQflZN|()id-Rw6CIYu$nD!Zy}|E5tu~BzQ*by5>(bNP)JOC7m=&qj zqdOky0^SZx5+gI;sw`2}kk$!{Sw$k`KFhm9J$Ble-eE+-E?X+cG*iBzuL2&0WaYg_ z6b9(iy)Y>rgQ(2x{}}`pD5miu)L#pTwD&R5`Yg;l{qSau|MFy92xtcmBf@MRqI2-PL$^+3LabHjzN81Q|paXni^KEL>ES#>rC2b$?g6A@oDlU`J@6-xNwWlsv~}a zJ>^1eO?D0b+K_BWqFJAaehE)zsY}0maM^}_xC$#jWUiQ~4Ma?zvD|+utz^+y4Xl{1 zt{J81uE0;u(w`w<*-C23^OkXzO&w4Ly4!okpVRF_XKll~rtS@uEe$6!O*e1o)1{~t zboHv2A!+`6mV;nx8=_fih0V%p8RWT!!yq zLzY31MR+3#^M!bJOW+AHZB8aew1m(~f{6HI>P;@f^Anx2+*)Dj^!6$qq7qh4nI!U+ zFjzJYor=VYJ>|O!K?{cOKh89o!4HS~=flqbn!9D-+UtCudb8VMV2G1%
      2=bY^p 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 delta 196003 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≷C?tK&Q%?AQaL+^;ms||F)hp+hs^J_omv1&d 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ΞLeDLl$ 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

      gwnr#y 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 diff --git a/Barotrauma/BarotraumaShared/TintTest.png b/Barotrauma/BarotraumaShared/TintTest.png deleted file mode 100644 index 77afc5ae9fb6bff9e517e2023347c9a5ec513924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91346 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 LNkvXXu0mjfS26k` diff --git a/Barotrauma/BarotraumaShared/changelog.txt b/Barotrauma/BarotraumaShared/changelog.txt index 997719739..493fde24f 100644 --- a/Barotrauma/BarotraumaShared/changelog.txt +++ b/Barotrauma/BarotraumaShared/changelog.txt @@ -1,3 +1,142 @@ +--------------------------------------------------------------------------------------------------------- +v0.15.15.0 +--------------------------------------------------------------------------------------------------------- + +- Fixed crashing when bots switch to the combat state. +- Removed stun tools from riot officer loadout, replaced with riot shotgun. +- Burns slowly heal by themselves, adjusted radiation poisoning accordingly. +- Fixed bots being unable to clean up items stolen from an outpost after leaving the outpost. +- Fixed incorrect base skill being used in skill reduction calculation. + +--------------------------------------------------------------------------------------------------------- +v0.15.14.0 +--------------------------------------------------------------------------------------------------------- + +Changes: +- Adjusted gardening: the plants now require less continuous attention, making gardening a more viable "downtime activity" that you can focus on when there's nothing else to do, and ignore when you're busy without killing the plants. +- Added "Pump In" option to the contextual "Pump Water" order. +- Added "fuel_percentage_left" output to reactors. Outputs the sum of the fuel rods' condition percentage, as opposed to the total "heating power" of the rods like the "fuel_out" output. +- Powered down reactors don't zap the user when repairing. +- Improved weapon indicators on the status monitor (they now indicate the rotation of the turrets). +- Damaging outpost NPCs when there's a monster or an instigator nearby doesn't turn the outpost NPCs hostile (i.e. accidentally damaging one of the NPCs when you're fighting a hostile NPC doesn't trigger the guards). +- Damaging outpost NPCs when there's a monster or an instigator nearby doesn't lower outpost reputation. +- Adjustments to job gear and diving suit sprites and inventory icons. +- New depth charge tube sprite. +- Added a verification prompt when saving and quitting a campaign round (mp or sp). +- Added options to adjust karma penalty for containing dangerous items in the server settings. +- Made it a bit more viable to take out enemy humans stealthily: if an attack immediately kills/incapacitates the character, others won't be alerted unless they witness the attack. +- Option to end outpost rounds without saving. +- Made sonar transducer consume less power when the sonar is running in passive mode (or when the transducer isn't connected to anything). +- Treatment suggestions in the health interface take items in subinventories into account as well. +- Added tooltips to treatment suggestions to make it more clear the treatments can be applied by clicking on the suggestions. +- Added "condition_out" pin to fabricators, deconstructors and blank loader. +- Added "set_delay" input to delay component. +- Tagged boarding axe and assault rifle as medium items to allow storing them in cabinets. +- Removed "weapon" and "gun" tags from the bike horn and the syringe gun. +- Added a menu to hide submarines in the server lobby, allowing hosts to remove vanilla submarines from the list without replacing the content package. +- Added LOS effect to the server settings. +- Added line break support to the server message. + +Multiplayer fixes: +- Fixed campaign character resetting if the client, disconnects, rejoins and respawns on the same round after their character has gotten killed. +- Fixed skill penalties not getting applied when respawning during the same round. +- Fixed several issues (namely mission/submarine mismatches and desyncs) when clients take too long to receive an up-to-date campaign save at the start of a new round. +- Fixed "received data without a transfer initiation message" errors when a client disconnects and reconnects while a file transfer is in progress. +- Fixed respawn not triggering during multiplayer rounds if a client disconnects and rejoins after dying. Happened because the server was expecting the client to answer the "respawn with penalty?" prompt, which wouldn't be shown when the client rejoins mid-round. +- Fixed server making Client A switch their character to Client B's when Client B disconnects if the clients have the same connection endpoint (Steam ID or IP, for example when the players are using the same wifi connection), and Client B's character was created after Client A's. +- Fixed items sometimes teleporting from monster to another or dropping when trying to pick them up by double-clicking. Happened when the monster had selected (= grabbed, started to eat) another monster when they were still alive. +- Fixed crashing if you start the round as a spectator, take control of someone with console commands and try to access the tab menu's character tab. +- Fixed empty exploding coilgun ammo boxes exploding client-side when deconstructed. +- Fixed disabling friendly fire preventing buffs from being applied to crewmates, while allowing harmful afflictions to be applied (= the setting basically worked the wrong way around). + +Talent fixes: +- Fixed unlocking "all seeing eye" preventing you from unlocking further talents until you've gained enough EXP to compensate for the 3 "free" talents. +- "Scrap savant" and "scrounger" only spawn the scrap in items with the tag "container" and only if the container can hold scrap. Fixes ability to generate free scrap by placing containers like detonators and portable pumps in the wrecks. +- Fixed "canned heat" not increasing the quality of fabricated oxygenite tanks. +- Fixed "pyromaniac" applying the buff to the enemy you're damaging instead of your character. +- Fixed server ending the round if the last player alive is an assistant with the "still kicking" talent and said assistant falls unconscious. +- Electrochemist talent doesn't stun the attacker if the attack doesn't apply any harmful afflictions (e.g. if it only applies buffs or gives experience). +- Fixed high-quality items with whose max condition is above 100% not being accepted as fabrication ingredients. +- Fixed autofill not working on the new talent items. +- Added PreferredContainers to the new talent items to allow the bots to clean them up. +- Fixed "crew layabout" applying stat boosts to enemies as well. + +AI: +- New order: Find Weapon +- New order: Prepare for Expedition +- Added an option to pump in water. Only applicable to pumps that are not automatically controlled. +- Orders that cannot be completed should now be dismissed automatically instead of keeping active but doing nothing. +- The bots should now tell you when they can't follow an order, instead of always replying positively. +- Fixed bots getting stuck with invalid paths for too long. +- Fixed AIObjectiveGetItem not working properly when we try to ignore the items that already are in the inventory. In practice, only affects the find better weapons behavior in the combat objective (Fight Intruders). +- Bots don't automatically unequip PUCS when they don't need diving gear. +- Don't allow bots to heal pets (because they are likely to just kill them). +- Fixed bots trying to equip diving gear when they have spliced genes that give pressure immunity and/or remove the need for oxygen. + +Misc fixes: +- Exploding the abandoned outpost reactor doesn't damage the player sub in missions that require destroying it. +- Hopefully occasional fixed fires/meltdowns at the start of a round. Was caused by the "warm start" logic that simulates 10 seconds of power grid updates at the start of a round: if the reactor wasn't running on auto or was controlled by some custom circuit, it wouldn't adapt to the changes in the grid load during those simulated 10 seconds, which could lead to overloads. +- Fixed blips not disappearing from the sonar when it's been repaired above 100% condition by using talents. +- Fixed Security Officer Uniform's and Gunner Uniform's icons being swapped. +- Fixed RegExFindComponent handling some inputs incorrectly. +- Fixed sprite bleed in the harmonica inventory icon. +- Fixed crashing when equipping a handheld status monitor that spawned outside subs. +- Fixed ruins sometimes extending above the top of the level. +- Fixed submarine editor failing to generate waypoints on stairs. +- Fixed submarine editor failing to connect some of the waypoints around the sub. +- Fixed non-localized list formatting in the "I need [treatment1], [treatment2] or [treatment3]" bot dialog. +- Fixed crashing if a mineral mission fails to find a long enough edge to spawn the resources on. +- Fixed one of the hulls not covering the whole room in the "Alien_MaintenanceTunnels1" module. +- Widen a gap in the "Alien_Entrance2" module to cover the full width of the hole in the wall. +- Removed non-interactable black wire from inside one of the terminals in Alien_Chasm2. +- Fixed pirate subs sometimes not withstanding the pressure in the level in the deeper biomes. +- Fixed diving gear not affecting the depth at which huskified humans' get crushed by pressure. +- Fixed characters with husk genes + husk infection becoming huskified when they die. +- Fixed the ragdolls breaking when characters with a harpoon/guardian spear (or any other projectile) attached to their body exits a submarine/ruin. +- Fixed harpoon rope pulling with excessive forces when the target is on a platform. +- Always snap the rope between the harpoon and the harpoon gun when the harpoon is detached from the target. Possibly fixes cases where physics forces from the rope are still applied when the projectile has dropped. Also applies to fractal guardians. +- Fixed physics glitches with guardian's tail when it switches subs or goes outside. +- Fixed characters sometimes getting teleported to an invalid position when they are exiting/entering the sub and have more than one swarm feeder latched on them. +- Fixed Kastrull and Typhon 2 using different id card tags than the rest of the vanilla sub ("idjob" instead of "id_job"). +- Fixed artifact transport cases not reliably suppressing thermal artifact fires. +- Fixed ability to stack batteries in wrecked charging docks. +- Fixed certain signal components (boolean operators, artihmetic, equals, trigonometric, string) triggering at the start of a round when they're set to a timeframe larger than 0.1 s. +- Fabricator drops the items inside the fabrication materials instead of consuming them (e.g. fabricating a combat suit from a normal one with a tank inside doesn't make the tank disappear). +- Fixed deconstructor destroying items contained in the deconstructed item if they can't fit in the output slots. +- Fixed lights becoming full-brightness for one frame when their color is set using the "set_color" input. +- Fixed turret lights' rotation being wrong for one frame when the light is toggled on +- Fixed shuttles docked to a shuttle docked to the main sub appearing on sonar in PvP. +- Fixed detonator's contained item position. +- Fixed Jovian Radiation bypassing all damage modifiers, including wearable items that protect from radiation. +- Fixed outpost reactors not accepting volatile fulgurium rods as fuel. +- Fixed some ugly first frames when populating certain listboxes (e.g. server list). +- Fixed spineling spikes given by spineling genes launching in an incorrect direction when the character is mirrored (= facing left) in multiplayer. +- Characters don't consume hull oxygen when their need for oxygen has been removed with thresher genes or pressure stabilizer. +- Fixed cigar and captain's pipe giving practically no psychosis resistance. +- Fixed being able to sell items from inventories of characters who are on the player's sub. +- Fixed occasional "Attempted to set the anchor B of a limb's pull joint to an invalid value" errors when dragging someone underwater. +- Fixed oxygenite tanks not being affected by gas vents in caves. +- Fixed items disappearing when trying to combine stacks of partially consumed items. +- Fixed upgrading devices' max condition causing issues with repairing: the repair thresholds were being treated as condition values instead of percentages, meaning that the devices would need to deteriorate more before they become repairable. +- Fixed ability to combine genetic materials in normal deconstructors. +- Fixed harpoon guns spawning with only 5 harpoons and stun guns with 1 dart. +- Fixed "bombscare" outpost event giving the characters xp for a non-existent "engineering" skill. +- Restrict downwards movement when a character has reached the bottom of a ladder to fix phasing through the floor. +- Fixed characters' feet dangling in the air when moving from a ladder to another (e.g. when climbing from the sub to the outpost). +- Adjusted flamethrower and prototype steam cannon particles to get them to match the range of the weapons more closely. + +Modding: +- Fixed inability to override talent trees. +- Item variants try to load sprites from the base item's directory if the path isn't specified. +- Fixed crashing when trying to fire a projectile with no Attack configured with a turret. +- Made memory component's "writeable" field editable in the sub editor. +- Fixed all ruin generation params displaying "RuinGenerationParams" as their name in the level editor. +- Fixed PropertyConditionals with comparison type "And" that check a parent container's tags being very unintuitive to use because they checked the components of the item as well, not just the item object. +- Made several outpost store parameters editable separately for each location type (see locationTypes.xml). +- Fixed crashing when trying to create a non-humanoid that can walk in the character editor. +- Added a randomize button for level editor seed. +- Fixed fabricators without a repairable component crashing the game when activated. + --------------------------------------------------------------------------------------------------------- v0.15.13.0 --------------------------------------------------------------------------------------------------------- diff --git a/Barotrauma/BarotraumaShared/steam_api64.dll b/Barotrauma/BarotraumaShared/steam_api64.dll deleted file mode 100644 index ad13f2b6c443b9dad58200f28af45995852dc750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262944 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