diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Character.cs b/Barotrauma/BarotraumaClient/Source/Characters/Character.cs index 996a07b55..79abaed11 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/Character.cs @@ -200,13 +200,9 @@ namespace Barotrauma { cam.OffsetAmount = 0.0f; } - else if (SelectedConstruction != null && ViewTarget == null && - SelectedConstruction.Components.Any(ic => ic?.GuiFrame != null && ic.ShouldDrawHUD(this))) + else if (SelectedConstruction != null && SelectedConstruction.Components.Any(ic => (ic.GuiFrame != null && GUI.IsMouseOn(ic.GuiFrame)))) { cam.OffsetAmount = 0.0f; - cursorPosition = - SelectedConstruction.Position + - new Vector2(cursorPosition.X % 10.0f, cursorPosition.Y % 10.0f); //apply a little bit of movement to the cursor pos to prevent AFK kicking } else if (Lights.LightManager.ViewTarget == this && Vector2.DistanceSquared(AnimController.Limbs[0].SimPosition, mouseSimPos) > 1.0f) { @@ -214,7 +210,7 @@ namespace Barotrauma { if (deltaTime > 0.0f) cam.OffsetAmount = 0.0f; } - else + else if (Lights.LightManager.ViewTarget == this && Vector2.DistanceSquared(AnimController.Limbs[0].SimPosition, mouseSimPos) > 1.0f) { Body body = Submarine.CheckVisibility(AnimController.Limbs[0].SimPosition, mouseSimPos); Structure structure = body == null ? null : body.UserData as Structure; diff --git a/Barotrauma/BarotraumaClient/Source/Items/ItemInventory.cs b/Barotrauma/BarotraumaClient/Source/Items/ItemInventory.cs index 6ef97a119..8f2aa6359 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/ItemInventory.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/ItemInventory.cs @@ -11,16 +11,19 @@ namespace Barotrauma protected override void ControlInput(Camera cam) { base.ControlInput(cam); - cam.OffsetAmount = 0; - //if this is used, we need to implement syncing this inventory with the server - /*Character.DisableControls = true; - if (Character.Controlled != null) + if (BackgroundFrame.Contains(PlayerInput.MousePosition)) { - if (PlayerInput.KeyHit(InputType.Select)) + cam.OffsetAmount = 0; + //if this is used, we need to implement syncing this inventory with the server + /*Character.DisableControls = true; + if (Character.Controlled != null) { - Character.Controlled.SelectedConstruction = null; - } - }*/ + if (PlayerInput.KeyHit(InputType.Select)) + { + Character.Controlled.SelectedConstruction = null; + } + }*/ + } } protected override void CalculateBackgroundFrame() diff --git a/Barotrauma/BarotraumaClient/Source/Map/Lights/ConvexHull.cs b/Barotrauma/BarotraumaClient/Source/Map/Lights/ConvexHull.cs index 1cbf20833..3d7202476 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Lights/ConvexHull.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Lights/ConvexHull.cs @@ -407,7 +407,7 @@ namespace Barotrauma.Lights /// /// Returns the segments that are facing towards viewPosition /// - public void GetVisibleSegments(Vector2 viewPosition, List visibleSegments, bool ignoreEdges) + public void GetVisibleSegments(Vector2 viewPosition, List visibleSegments) { for (int i = 0; i < 4; i++) { diff --git a/Barotrauma/BarotraumaClient/Source/Map/Lights/LightSource.cs b/Barotrauma/BarotraumaClient/Source/Map/Lights/LightSource.cs index 9ff808757..cbc9ac0e1 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Lights/LightSource.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Lights/LightSource.cs @@ -453,7 +453,7 @@ namespace Barotrauma.Lights foreach (ConvexHull hull in hulls) { hull.RefreshWorldPositions(); - hull.GetVisibleSegments(drawPos, visibleSegments, ignoreEdges: false); + hull.GetVisibleSegments(drawPos, visibleSegments); } //Generate new points at the intersections between segments diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs index 3c6c35ce4..d07b4019d 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveExtinguishFire.cs @@ -84,12 +84,9 @@ namespace Barotrauma useExtinquisherTimer += deltaTime; if (useExtinquisherTimer > 2.0f) useExtinquisherTimer = 0.0f; + character.AIController.SteeringManager.Reset(); character.CursorPosition = fs.Position; character.SetInput(InputType.Aim, false, true); - if (!character.IsClimbing) - { - character.AIController.SteeringManager.Reset(); - } extinguisher.Use(deltaTime, character); if (!targetHull.FireSources.Contains(fs)) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRepairItem.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRepairItem.cs index 99a856cd5..8d65800fd 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRepairItem.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveRepairItem.cs @@ -168,8 +168,11 @@ namespace Barotrauma // Too close -> steer away character.AIController.SteeringManager.SteeringManual(deltaTime, Vector2.Normalize(character.SimPosition - Item.SimPosition) / 2); } - if (character.IsClimbing || - VectorExtensions.Angle(VectorExtensions.Forward(repairTool.Item.body.TransformedRotation), fromToolToTarget) < MathHelper.PiOver4) + else + { + character.AIController.SteeringManager.Reset(); + } + if (VectorExtensions.Angle(VectorExtensions.Forward(repairTool.Item.body.TransformedRotation), fromToolToTarget) < MathHelper.PiOver4) { repairTool.Use(deltaTime, character); } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs b/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs index 445aade77..b599c7727 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs @@ -1122,18 +1122,22 @@ namespace Barotrauma //prevent the hands from going above the top of the ladders handPos.Y = Math.Min(-0.5f, handPos.Y); - MoveLimb(leftHand, - new Vector2(handPos.X, - (slide ? handPos.Y : MathUtils.Round(handPos.Y - stepHeight, stepHeight * 2.0f) + stepHeight) + ladderSimPos.Y), - 5.2f); + // TODO: lock only one hand when aiming? + if (!PlayerInput.KeyDown(InputType.Aim) || Math.Abs(movement.Y) > 0.01f) + { + MoveLimb(leftHand, + new Vector2(handPos.X, + (slide ? handPos.Y : MathUtils.Round(handPos.Y - stepHeight, stepHeight * 2.0f) + stepHeight) + ladderSimPos.Y), + 5.2f); - MoveLimb(rightHand, - new Vector2(handPos.X, - (slide ? handPos.Y : MathUtils.Round(handPos.Y, stepHeight * 2.0f)) + ladderSimPos.Y), - 5.2f); + MoveLimb(rightHand, + new Vector2(handPos.X, + (slide ? handPos.Y : MathUtils.Round(handPos.Y, stepHeight * 2.0f)) + ladderSimPos.Y), + 5.2f); - leftHand.body.ApplyTorque(Dir * 2.0f); - rightHand.body.ApplyTorque(Dir * 2.0f); + leftHand.body.ApplyTorque(Dir * 2.0f); + rightHand.body.ApplyTorque(Dir * 2.0f); + } Vector2 footPos = new Vector2( handPos.X - Dir * 0.05f, @@ -1647,12 +1651,13 @@ namespace Barotrauma Vector2 itemPos = aim ? aimPos : holdPos; bool usingController = character.SelectedConstruction != null && character.SelectedConstruction.GetComponent() != null; + bool isClimbing = character.IsClimbing && Math.Abs(character.AnimController.TargetMovement.Y) > 0.01f; float itemAngle; Holdable holdable = item.GetComponent(); - if (!character.IsClimbing && !usingController && character.Stun <= 0.0f && aim && itemPos != Vector2.Zero) + if (!isClimbing && !usingController && character.Stun <= 0.0f && aim && itemPos != Vector2.Zero) { Vector2 mousePos = ConvertUnits.ToSimUnits(character.SmoothedCursorPosition); @@ -1682,7 +1687,7 @@ namespace Barotrauma } Vector2 transformedHoldPos = shoulder.WorldAnchorA; - if (itemPos == Vector2.Zero || character.IsClimbing || usingController) + if (itemPos == Vector2.Zero || isClimbing || usingController) { if (character.SelectedItems[0] == item) { @@ -1771,16 +1776,17 @@ namespace Barotrauma item.SetTransform(currItemPos, itemAngle + itemAngleRelativeToHoldAngle * Dir); - if (character.IsClimbing) return; - - for (int i = 0; i < 2; i++) + if (!isClimbing) { - if (character.SelectedItems[i] != item) continue; - if (itemPos == Vector2.Zero) continue; + for (int i = 0; i < 2; i++) + { + if (character.SelectedItems[i] != item) continue; + if (itemPos == Vector2.Zero) continue; - Limb hand = (i == 0) ? rightHand : leftHand; + Limb hand = (i == 0) ? rightHand : leftHand; - HandIK(hand, transformedHoldPos + transformedHandlePos[i]); + HandIK(hand, transformedHoldPos + transformedHandlePos[i]); + } } } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index 612801496..19c905b3f 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -1147,7 +1147,7 @@ namespace Barotrauma { //Limb head = AnimController.GetLimb(LimbType.Head); // Values lower than this seem to cause constantious flipping when the mouse is near the player and the player is running, because the root collider moves after flipping. - float followMargin = 40; + float followMargin = 30; if (dontFollowCursor) { AnimController.TargetDir = Direction.Right; diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs index 153e694ef..6251f88b1 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/RepairTool.cs @@ -303,10 +303,8 @@ namespace Barotrauma.Items.Components // Too close -> steer away character.AIController.SteeringManager.SteeringManual(deltaTime, Vector2.Normalize(character.SimPosition - leak.SimPosition) / 2); } - else if (!character.IsClimbing) + else { - // Close enough -> stop if not in ladders. - // In ladders, we most likely want to move back and forth, because we cannot aim -> if the leak is on the side, it should get fixed. character.AIController.SteeringManager.Reset(); } } @@ -317,7 +315,7 @@ namespace Barotrauma.Items.Components // Press the trigger only when the tool is approximately facing the target. // If the character is climbing, ignore the check, because we cannot aim while climbing. - if (character.IsClimbing || VectorExtensions.Angle(VectorExtensions.Forward(item.body.TransformedRotation), fromItemToLeak) < MathHelper.PiOver4) + if (VectorExtensions.Angle(VectorExtensions.Forward(item.body.TransformedRotation), fromItemToLeak) < MathHelper.PiOver4) { Use(deltaTime, character); }