(935f68e00) Fix characters waiting when they shouldn't after being left uncontrolled by the player.
This commit is contained in:
@@ -152,6 +152,32 @@ namespace Barotrauma
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (character.MemLocalState.Count > 120) character.MemLocalState.RemoveRange(0, character.MemLocalState.Count - 120);
|
||||||
|
character.MemState.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
partial void ImpactProjSpecific(float impact, Body body)
|
||||||
|
{
|
||||||
|
float volume = MathHelper.Clamp(impact - 3.0f, 0.5f, 1.0f);
|
||||||
|
|
||||||
|
if (body.UserData is Limb limb && character.Stun <= 0f)
|
||||||
|
{
|
||||||
|
if (impact > 3.0f) { PlayImpactSound(limb); }
|
||||||
|
}
|
||||||
|
else if (body.UserData is Limb || body == Collider.FarseerBody)
|
||||||
|
{
|
||||||
|
if (!character.IsRemotePlayer && impact > ImpactTolerance)
|
||||||
|
{
|
||||||
|
SoundPlayer.PlayDamageSound("LimbBlunt", strongestImpact, Collider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Character.Controlled == character)
|
||||||
|
{
|
||||||
|
GameMain.GameScreen.Cam.Shake = Math.Min(Math.Max(strongestImpact, GameMain.GameScreen.Cam.Shake), 3.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (character.MemState.Count < 1) return;
|
if (character.MemState.Count < 1) return;
|
||||||
|
|
||||||
overrideTargetMovement = Vector2.Zero;
|
overrideTargetMovement = Vector2.Zero;
|
||||||
|
|||||||
@@ -744,6 +744,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private GUILayoutGroup subPreviewContainer;
|
private GUILayoutGroup subPreviewContainer;
|
||||||
|
|
||||||
|
private GUILayoutGroup subPreviewContainer;
|
||||||
|
|
||||||
private GUIButton loadGameButton;
|
private GUIButton loadGameButton;
|
||||||
|
|
||||||
public Action<Submarine, string, string> StartNewGame;
|
public Action<Submarine, string, string> StartNewGame;
|
||||||
|
|||||||
@@ -101,630 +101,6 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
|
||||||
abandon = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
|
||||||
// TODO: use the collider size/reach?
|
|
||||||
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
|
||||||
{
|
|
||||||
HumanAIController.AnimController.Crouching = true;
|
|
||||||
}
|
|
||||||
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
|
||||||
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
|
||||||
if (canOperate)
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
|
||||||
}
|
|
||||||
if (subObjectives.Any()) { return; }
|
|
||||||
var repairTool = weldingTool.GetComponent<RepairTool>();
|
|
||||||
if (repairTool == null)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
|
||||||
#endif
|
#endif
|
||||||
abandon = true;
|
abandon = true;
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -74,36 +74,6 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update(float deltaTime)
|
|
||||||
{
|
|
||||||
if (objectiveManager.CurrentObjective == this)
|
|
||||||
{
|
|
||||||
if (randomTimer > 0)
|
|
||||||
{
|
|
||||||
randomTimer -= deltaTime;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetRandom();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Update(float deltaTime)
|
|
||||||
{
|
|
||||||
if (objectiveManager.CurrentObjective == this)
|
|
||||||
{
|
|
||||||
if (randomTimer > 0)
|
|
||||||
{
|
|
||||||
randomTimer -= deltaTime;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetRandom();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsCompleted() => false;
|
public override bool IsCompleted() => false;
|
||||||
public override bool CanBeCompleted => true;
|
public override bool CanBeCompleted => true;
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public List<AIObjective> Objectives { get; private set; } = new List<AIObjective>();
|
public List<AIObjective> Objectives { get; private set; } = new List<AIObjective>();
|
||||||
|
|
||||||
private Character character;
|
private readonly Character character;
|
||||||
|
|
||||||
|
|
||||||
private float _waitTimer;
|
private float _waitTimer;
|
||||||
@@ -28,14 +28,7 @@ namespace Barotrauma
|
|||||||
get { return _waitTimer; }
|
get { return _waitTimer; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (CurrentObjective is AIObjectiveCombat || CurrentObjective is AIObjectiveFindSafety)
|
_waitTimer = IsAllowedToWait() ? value : 0;
|
||||||
{
|
|
||||||
_waitTimer = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_waitTimer = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,31 +198,6 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
CurrentObjective?.TryComplete(deltaTime);
|
CurrentObjective?.TryComplete(deltaTime);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if (CurrentOrder != null)
|
|
||||||
{
|
|
||||||
CurrentOrder.TryComplete(deltaTime);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Wait, if not swimming, climbing, or staying in a forbidden/unsafe hull.
|
|
||||||
if (character.AIController is HumanAIController humanAI && humanAI.SteeringManager != null)
|
|
||||||
{
|
|
||||||
if (!character.AnimController.InWater &&
|
|
||||||
!character.IsClimbing &&
|
|
||||||
!humanAI.UnsafeHulls.Contains(character.CurrentHull) &&
|
|
||||||
!AIObjectiveIdle.IsForbidden(character.CurrentHull))
|
|
||||||
{
|
|
||||||
humanAI.SteeringManager.Reset();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CurrentObjective?.TryComplete(deltaTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetOrder(AIObjective objective)
|
public void SetOrder(AIObjective objective)
|
||||||
@@ -306,5 +274,19 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
return newObjective;
|
return newObjective;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsAllowedToWait()
|
||||||
|
{
|
||||||
|
if (CurrentOrder != null) { return false; }
|
||||||
|
if (CurrentObjective is AIObjectiveCombat || CurrentObjective is AIObjectiveFindSafety) { return false; }
|
||||||
|
if (character.AnimController.InWater) { return false; }
|
||||||
|
if (character.IsClimbing) { return false; }
|
||||||
|
if (character.AIController is HumanAIController humanAI)
|
||||||
|
{
|
||||||
|
if (humanAI.UnsafeHulls.Contains(character.CurrentHull)) { return false; }
|
||||||
|
}
|
||||||
|
if (AIObjectiveIdle.IsForbidden(character.CurrentHull)) { return false; }
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -889,6 +889,10 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
isCompleted = true;
|
isCompleted = true;
|
||||||
}
|
}
|
||||||
|
if (component.AIOperate(deltaTime, character, this))
|
||||||
|
{
|
||||||
|
isCompleted = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1145,6 +1145,15 @@ namespace Barotrauma
|
|||||||
SmoothedCursorPosition = cursorPosition - smoothedCursorDiff;
|
SmoothedCursorPosition = cursorPosition - smoothedCursorDiff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(this is AICharacter) || Controlled == this || IsRemotePlayer)
|
||||||
|
{
|
||||||
|
//apply some smoothing to the cursor positions of remote players when playing as a client
|
||||||
|
//to make aiming look a little less choppy
|
||||||
|
Vector2 smoothedCursorDiff = cursorPosition - SmoothedCursorPosition;
|
||||||
|
smoothedCursorDiff = NetConfig.InterpolateCursorPositionError(smoothedCursorDiff);
|
||||||
|
SmoothedCursorPosition = cursorPosition - smoothedCursorDiff;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(this is AICharacter) || Controlled == this || IsRemotePlayer)
|
if (!(this is AICharacter) || Controlled == this || IsRemotePlayer)
|
||||||
{
|
{
|
||||||
if (speedMultipliers.Count == 0) return 1f;
|
if (speedMultipliers.Count == 0) return 1f;
|
||||||
|
|||||||
@@ -601,6 +601,25 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (targetItem.Prefab.DeconstructItems.Any())
|
||||||
|
{
|
||||||
|
inputContainer.Inventory.RemoveItem(targetItem);
|
||||||
|
Entity.Spawner.AddToRemoveQueue(targetItem);
|
||||||
|
MoveInputQueue();
|
||||||
|
PutItemsToLinkedContainer();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (outputContainer.Inventory.Items.All(i => i != null))
|
||||||
|
{
|
||||||
|
targetItem.Drop(dropper: null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outputContainer.Inventory.TryPutItem(targetItem, user: null, createNetworkEvent: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (targetItem.Prefab.DeconstructItems.Any())
|
if (targetItem.Prefab.DeconstructItems.Any())
|
||||||
{
|
{
|
||||||
inputContainer.Inventory.RemoveItem(targetItem);
|
inputContainer.Inventory.RemoveItem(targetItem);
|
||||||
|
|||||||
@@ -144,6 +144,17 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Vector2 SteeringInput
|
||||||
|
{
|
||||||
|
get { return steeringInput; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (!MathUtils.IsValid(value)) return;
|
||||||
|
steeringInput.X = MathHelper.Clamp(value.X, -100.0f, 100.0f);
|
||||||
|
steeringInput.Y = MathHelper.Clamp(value.Y, -100.0f, 100.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public SteeringPath SteeringPath
|
public SteeringPath SteeringPath
|
||||||
{
|
{
|
||||||
if (!CanBeSelected) return false;
|
if (!CanBeSelected) return false;
|
||||||
@@ -164,12 +175,6 @@ namespace Barotrauma.Items.Components
|
|||||||
set { posToMaintain = value; }
|
set { posToMaintain = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector2? PosToMaintain
|
|
||||||
{
|
|
||||||
get { return posToMaintain; }
|
|
||||||
set { posToMaintain = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ObstacleDebugInfo
|
struct ObstacleDebugInfo
|
||||||
{
|
{
|
||||||
public Vector2 Point1;
|
public Vector2 Point1;
|
||||||
|
|||||||
@@ -1139,6 +1139,38 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UpdateTransform()
|
||||||
|
{
|
||||||
|
Submarine prevSub = Submarine;
|
||||||
|
|
||||||
|
FindHull();
|
||||||
|
|
||||||
|
if (Submarine == null && prevSub != null)
|
||||||
|
{
|
||||||
|
body.SetTransform(body.SimPosition + prevSub.SimPosition, body.Rotation);
|
||||||
|
}
|
||||||
|
else if (Submarine != null && prevSub == null)
|
||||||
|
{
|
||||||
|
body.SetTransform(body.SimPosition - Submarine.SimPosition, body.Rotation);
|
||||||
|
}
|
||||||
|
else if (Submarine != null && prevSub != null && Submarine != prevSub)
|
||||||
|
{
|
||||||
|
body.SetTransform(body.SimPosition + prevSub.SimPosition - Submarine.SimPosition, body.Rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 displayPos = ConvertUnits.ToDisplayUnits(body.SimPosition);
|
||||||
|
rect.X = (int)(displayPos.X - rect.Width / 2.0f);
|
||||||
|
rect.Y = (int)(displayPos.Y + rect.Height / 2.0f);
|
||||||
|
|
||||||
|
if (Math.Abs(body.LinearVelocity.X) > NetConfig.MaxPhysicsBodyVelocity ||
|
||||||
|
Math.Abs(body.LinearVelocity.Y) > NetConfig.MaxPhysicsBodyVelocity)
|
||||||
|
{
|
||||||
|
body.LinearVelocity = new Vector2(
|
||||||
|
MathHelper.Clamp(body.LinearVelocity.X, -NetConfig.MaxPhysicsBodyVelocity, NetConfig.MaxPhysicsBodyVelocity),
|
||||||
|
MathHelper.Clamp(body.LinearVelocity.Y, -NetConfig.MaxPhysicsBodyVelocity, NetConfig.MaxPhysicsBodyVelocity));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateTransform()
|
public void UpdateTransform()
|
||||||
{
|
{
|
||||||
Submarine prevSub = Submarine;
|
Submarine prevSub = Submarine;
|
||||||
|
|||||||
@@ -83,7 +83,24 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public readonly List<Gap> ConnectedGaps = new List<Gap>();
|
public readonly List<Gap> ConnectedGaps = new List<Gap>();
|
||||||
|
|
||||||
public readonly List<Gap> ConnectedGaps = new List<Gap>();
|
private string roomName;
|
||||||
|
[Editable, Serialize("", true, translationTextTag: "RoomName.")]
|
||||||
|
public string RoomName
|
||||||
|
{
|
||||||
|
get { return roomName; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (roomName == value) { return; }
|
||||||
|
roomName = value;
|
||||||
|
DisplayName = TextManager.Get(roomName, returnNull: true) ?? roomName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string DisplayName
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
private string roomName;
|
private string roomName;
|
||||||
[Editable, Serialize("", true, translationTextTag: "RoomName.")]
|
[Editable, Serialize("", true, translationTextTag: "RoomName.")]
|
||||||
|
|||||||
Reference in New Issue
Block a user