(808e7257d) Attempt to fix the issue where bots are not avoiding walls properly while wandering around.

This commit is contained in:
Joonas Rikkonen
2019-03-28 18:09:05 +02:00
parent 0c15748429
commit 44a8bfce08
4 changed files with 96 additions and 10 deletions
@@ -175,6 +175,63 @@ namespace Barotrauma.Items.Components
} }
} }
} }
public void ApplyTo(RectTransform target)
{
if (RelativeOffset.HasValue)
{
target.RelativeOffset = RelativeOffset.Value;
}
else if (AbsoluteOffset.HasValue)
{
target.AbsoluteOffset = AbsoluteOffset.Value;
}
if (RelativeSize.HasValue)
{
target.RelativeSize = RelativeSize.Value;
}
else if (AbsoluteSize.HasValue)
{
target.NonScaledSize = AbsoluteSize.Value;
}
if (Anchor.HasValue)
{
target.Anchor = Anchor.Value;
}
if (Pivot.HasValue)
{
target.Pivot = Pivot.Value;
}
else
{
target.Pivot = RectTransform.MatchPivotToAnchor(target.Anchor);
}
target.RecalculateChildren(true, true);
}
}
public GUIFrame GuiFrame { get; protected set; }
[Serialize(false, false)]
public bool AllowUIOverlap
{
get;
set;
}
private ItemComponent linkToUIComponent;
[Serialize("", false)]
public string LinkUIToComponent
{
get;
set;
}
[Serialize(0, false)]
public int HudPriority
{
get;
private set;
} }
private bool shouldMuffleLooping; private bool shouldMuffleLooping;
@@ -496,11 +553,7 @@ namespace Barotrauma.Items.Components
{ {
msg = msg.Replace("[" + inputType.ToString().ToLowerInvariant() + "]", GameMain.Config.KeyBind(inputType).ToString()); msg = msg.Replace("[" + inputType.ToString().ToLowerInvariant() + "]", GameMain.Config.KeyBind(inputType).ToString());
} }
DisplayMsg = msg; Msg = msg;
}
else
{
DisplayMsg = Msg;
} }
} }
} }
@@ -133,16 +133,25 @@ namespace Barotrauma
} }
else if (leftDist < WallAvoidDistance) else if (leftDist < WallAvoidDistance)
{ {
PathSteering.SteeringManual(deltaTime, Vector2.UnitX * (WallAvoidDistance - leftDist) / WallAvoidDistance); //PathSteering.SteeringManual(deltaTime, Vector2.UnitX * (WallAvoidDistance - leftDist) / WallAvoidDistance);
PathSteering.SteeringManual(deltaTime, Vector2.UnitX);
PathSteering.WanderAngle = 0.0f; PathSteering.WanderAngle = 0.0f;
} }
else if (rightDist < WallAvoidDistance) else if (rightDist < WallAvoidDistance)
{ {
PathSteering.SteeringManual(deltaTime, -Vector2.UnitX * (WallAvoidDistance - rightDist) / WallAvoidDistance); //PathSteering.SteeringManual(deltaTime, -Vector2.UnitX * (WallAvoidDistance - rightDist) / WallAvoidDistance);
PathSteering.SteeringManual(deltaTime, -Vector2.UnitX);
PathSteering.WanderAngle = MathHelper.Pi; PathSteering.WanderAngle = MathHelper.Pi;
} }
else
{
SteeringManager.SteeringWander();
}
}
else
{
SteeringManager.SteeringWander();
} }
SteeringManager.SteeringWander();
if (!character.IsClimbing && !character.AnimController.InWater) if (!character.IsClimbing && !character.AnimController.InWater)
{ {
//reset vertical steering to prevent dropping down from platforms etc //reset vertical steering to prevent dropping down from platforms etc
@@ -189,7 +189,8 @@ namespace Barotrauma.Items.Components
{ {
get { return name; } get { return name; }
} }
//TODO: this shouldn't be saved as-is, causes tags ("ItemMsgPressSelect" etc) to be converted into actual texts when saving the subs
[Editable, Serialize("", true)] [Editable, Serialize("", true)]
public string Msg public string Msg
{ {
@@ -203,6 +204,12 @@ namespace Barotrauma.Items.Components
set; set;
} }
public AITarget AITarget
{
get;
private set;
}
public AITarget AITarget public AITarget AITarget
{ {
get; get;
@@ -247,7 +254,7 @@ namespace Barotrauma.Items.Components
{ {
DebugConsole.ThrowError("Invalid pick key in " + element + "!", e); DebugConsole.ThrowError("Invalid pick key in " + element + "!", e);
} }
SerializableProperties = SerializableProperty.DeserializeProperties(this, element); SerializableProperties = SerializableProperty.DeserializeProperties(this, element);
ParseMsg(); ParseMsg();
@@ -503,6 +503,23 @@ namespace Barotrauma
break; break;
} }
} }
if (!category.HasFlag(MapEntityCategory.Legacy) && string.IsNullOrEmpty(identifier))
{
DebugConsole.ThrowError(
"Item prefab \"" + name + "\" has no identifier. All item prefabs have a unique identifier string that's used to differentiate between items during saving and loading.");
}
if (!string.IsNullOrEmpty(identifier))
{
MapEntityPrefab existingPrefab = List.Find(e => e.Identifier == identifier);
if (existingPrefab != null)
{
DebugConsole.ThrowError(
"Map entity prefabs \"" + name + "\" and \"" + existingPrefab.Name + "\" have the same identifier!");
}
}
AllowedLinks = element.GetAttributeStringArray("allowedlinks", new string[0], convertToLowerInvariant: true).ToList();
if (sprite == null) if (sprite == null)
{ {