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);
}