Handheld sonars only consume batteries when they're on, endworms aren't "flipped" when they turn around, every limb is checked in SubmarineBody.DisplaceCharacters (instead of just reflimb)
This commit is contained in:
@@ -17,7 +17,7 @@ namespace Barotrauma
|
||||
|
||||
private bool rotateTowardsMovement;
|
||||
|
||||
private bool flip;
|
||||
private bool mirror, flip;
|
||||
|
||||
private float flipTimer;
|
||||
|
||||
@@ -29,7 +29,8 @@ namespace Barotrauma
|
||||
waveAmplitude = ConvertUnits.ToSimUnits(ToolBox.GetAttributeFloat(element, "waveamplitude", 0.0f));
|
||||
waveLength = ConvertUnits.ToSimUnits(ToolBox.GetAttributeFloat(element, "wavelength", 0.0f));
|
||||
|
||||
flip = ToolBox.GetAttributeBool(element, "flip", false);
|
||||
flip = ToolBox.GetAttributeBool(element, "flip", true);
|
||||
mirror = ToolBox.GetAttributeBool(element, "mirror", false);
|
||||
|
||||
float footRot = ToolBox.GetAttributeFloat(element,"footrotation", float.NaN);
|
||||
if (float.IsNaN(footRot))
|
||||
@@ -82,7 +83,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
if (flip)
|
||||
if (mirror)
|
||||
{
|
||||
if (!character.IsNetworkPlayer)
|
||||
{
|
||||
@@ -117,6 +118,8 @@ namespace Barotrauma
|
||||
}
|
||||
|
||||
//if (stunTimer > gameTime.TotalGameTime.TotalMilliseconds) return;
|
||||
if (!flip) return;
|
||||
|
||||
flipTimer += deltaTime;
|
||||
|
||||
if (TargetDir != dir)
|
||||
@@ -124,7 +127,7 @@ namespace Barotrauma
|
||||
if (flipTimer>1.0f || character.IsNetworkPlayer)
|
||||
{
|
||||
Flip();
|
||||
if (flip) Mirror();
|
||||
if (mirror) Mirror();
|
||||
flipTimer = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,8 +112,8 @@ namespace Barotrauma
|
||||
set
|
||||
{
|
||||
if (!MathUtils.IsValid(value)) return;
|
||||
targetMovement.X = MathHelper.Clamp(value.X, -3.0f, 3.0f);
|
||||
targetMovement.Y = MathHelper.Clamp(value.Y, -3.0f, 3.0f);
|
||||
targetMovement.X = MathHelper.Clamp(value.X, -5.0f, 5.0f);
|
||||
targetMovement.Y = MathHelper.Clamp(value.Y, -5.0f, 5.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,6 +152,8 @@ namespace Barotrauma
|
||||
get { return headInWater; }
|
||||
}
|
||||
|
||||
public readonly bool CanEnterSubmarine;
|
||||
|
||||
public Hull CurrentHull
|
||||
{
|
||||
get { return currentHull; }
|
||||
@@ -213,6 +215,8 @@ namespace Barotrauma
|
||||
torsoPosition = ToolBox.GetAttributeFloat(element, "torsoposition", 50.0f);
|
||||
torsoPosition = ConvertUnits.ToSimUnits(torsoPosition);
|
||||
torsoAngle = MathHelper.ToRadians(ToolBox.GetAttributeFloat(element, "torsoangle", 0.0f));
|
||||
|
||||
CanEnterSubmarine = ToolBox.GetAttributeBool(element, "canentersubmarine", true);
|
||||
|
||||
foreach (XElement subElement in element.Elements())
|
||||
{
|
||||
@@ -272,6 +276,8 @@ namespace Barotrauma
|
||||
if (refLimb == null) refLimb = GetLimb(LimbType.Head);
|
||||
if (refLimb == null) DebugConsole.ThrowError("Character ''" + character + "'' doesn't have a head or torso!");
|
||||
|
||||
UpdateCollisionCategories();
|
||||
|
||||
foreach (var joint in limbJoints)
|
||||
{
|
||||
|
||||
@@ -550,6 +556,11 @@ namespace Barotrauma
|
||||
|
||||
public void FindHull(Vector2? worldPosition = null, bool setSubmarine = true)
|
||||
{
|
||||
if (!CanEnterSubmarine)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Vector2 findPos = worldPosition==null ? refLimb.WorldPosition : (Vector2)worldPosition;
|
||||
|
||||
Hull newHull = Hull.FindHull(findPos, currentHull);
|
||||
@@ -747,7 +758,7 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
if (lerp)
|
||||
if (lerp)
|
||||
{
|
||||
limb.body.TargetPosition = movePos;
|
||||
limb.body.MoveToTargetPosition(Vector2.Distance(limb.SimPosition, movePos) < 10.0f);
|
||||
|
||||
@@ -296,20 +296,26 @@ namespace Barotrauma
|
||||
foreach (Character c in Character.CharacterList)
|
||||
{
|
||||
if (c.AnimController.CurrentHull != null) continue;
|
||||
|
||||
//if the character isn't inside the bounding box, continue
|
||||
if (!Submarine.RectContains(worldBorders, c.WorldPosition)) continue;
|
||||
|
||||
//cast a line from the position of the character to the same direction as the translation of the sub
|
||||
//and see where it intersects with the bounding box
|
||||
Vector2? intersection = MathUtils.GetLineRectangleIntersection(c.WorldPosition,
|
||||
c.WorldPosition + translateDir*100000.0f, worldBorders);
|
||||
|
||||
//should never be null when casting a line out from inside the bounding box
|
||||
Debug.Assert(intersection != null);
|
||||
foreach (Limb limb in c.AnimController.Limbs)
|
||||
{
|
||||
//if the character isn't inside the bounding box, continue
|
||||
if (!Submarine.RectContains(worldBorders, limb.WorldPosition)) continue;
|
||||
|
||||
c.AnimController.SetPosition(ConvertUnits.ToSimUnits((Vector2)intersection) + translateDir);
|
||||
//''+ translatedir'' in order to move the character slightly away from the wall
|
||||
//cast a line from the position of the character to the same direction as the translation of the sub
|
||||
//and see where it intersects with the bounding box
|
||||
Vector2? intersection = MathUtils.GetLineRectangleIntersection(limb.WorldPosition,
|
||||
limb.WorldPosition + translateDir*100000.0f, worldBorders);
|
||||
|
||||
//should never be null when casting a line out from inside the bounding box
|
||||
Debug.Assert(intersection != null);
|
||||
|
||||
//''+ translatedir'' in order to move the character slightly away from the wall
|
||||
c.AnimController.SetPosition(c.WorldPosition + ConvertUnits.ToSimUnits((Vector2)intersection - limb.WorldPosition) + translateDir);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -313,7 +313,7 @@ namespace Barotrauma
|
||||
prevPosition = targetPosition;
|
||||
}
|
||||
|
||||
body.SetTransform(targetPosition, targetRotation);
|
||||
body.SetTransform(targetPosition, targetRotation == 0.0f ? body.Rotation : targetRotation);
|
||||
body.LinearVelocity = targetVelocity;
|
||||
body.AngularVelocity = targetAngularVelocity;
|
||||
targetPosition = Vector2.Zero;
|
||||
|
||||
Reference in New Issue
Block a user