Clean up new HTNs tasks (#28469)

* Clean up new HTNs tasks

* Added docs to math operations
This commit is contained in:
Tornado Tech
2024-06-02 03:46:35 +10:00
committed by GitHub
parent 81a328c543
commit a29b6a6894
12 changed files with 58 additions and 25 deletions

View File

@@ -1,8 +1,13 @@
namespace Content.Server.NPC.HTN.Preconditions; namespace Content.Server.NPC.HTN.Preconditions;
/// <summary>
/// Checks for the presence of the value by the specified <see cref="KeyExistsPrecondition.Key"/> in the <see cref="NPCBlackboard"/>.
/// Returns true if there is a value.
/// </summary>
public sealed partial class KeyExistsPrecondition : HTNPrecondition public sealed partial class KeyExistsPrecondition : HTNPrecondition
{ {
[DataField("key", required: true)] public string Key = string.Empty; [DataField(required: true), ViewVariables]
public string Key = string.Empty;
public override bool IsMet(NPCBlackboard blackboard) public override bool IsMet(NPCBlackboard blackboard)
{ {

View File

@@ -1,8 +1,12 @@
namespace Content.Server.NPC.HTN.Preconditions; namespace Content.Server.NPC.HTN.Preconditions;
/// <summary>
/// Checks if there is no value at the specified <see cref="KeyNotExistsPrecondition.Key"/> in the <see cref="NPCBlackboard"/>.
/// Returns true if there is no value.
/// </summary>
public sealed partial class KeyNotExistsPrecondition : HTNPrecondition public sealed partial class KeyNotExistsPrecondition : HTNPrecondition
{ {
[DataField(required: true)] [DataField(required: true), ViewVariables]
public string Key = string.Empty; public string Key = string.Empty;
public override bool IsMet(NPCBlackboard blackboard) public override bool IsMet(NPCBlackboard blackboard)

View File

@@ -1,16 +1,17 @@
namespace Content.Server.NPC.HTN.Preconditions.Math; namespace Content.Server.NPC.HTN.Preconditions.Math;
/// <summary> /// <summary>
/// Checks for the presence of data in the blackboard and makes a comparison with the specified boolean /// Checks if there is a bool value for the specified <see cref="KeyBoolEqualsPrecondition.Key"/>
/// in the <see cref="NPCBlackboard"/> and the specified value is equal to the <see cref="KeyBoolEqualsPrecondition.Value"/>.
/// </summary> /// </summary>
public sealed partial class KeyBoolEqualsPrecondition : HTNPrecondition public sealed partial class KeyBoolEqualsPrecondition : HTNPrecondition
{ {
[Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IEntityManager _entManager = default!;
[DataField(required: true)] [DataField(required: true), ViewVariables]
public string Key = string.Empty; public string Key = string.Empty;
[DataField(required: true)] [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
public bool Value; public bool Value;
public override bool IsMet(NPCBlackboard blackboard) public override bool IsMet(NPCBlackboard blackboard)

View File

@@ -1,13 +1,17 @@
namespace Content.Server.NPC.HTN.Preconditions.Math; namespace Content.Server.NPC.HTN.Preconditions.Math;
/// <summary>
/// Checks if there is a float value for the specified <see cref="KeyFloatEqualsPrecondition.Key"/>
/// in the <see cref="NPCBlackboard"/> and the specified value is equal to the <see cref="KeyFloatEqualsPrecondition.Value"/>.
/// </summary>
public sealed partial class KeyFloatEqualsPrecondition : HTNPrecondition public sealed partial class KeyFloatEqualsPrecondition : HTNPrecondition
{ {
[Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IEntityManager _entManager = default!;
[DataField(required: true)] [DataField(required: true), ViewVariables]
public string Key = string.Empty; public string Key = string.Empty;
[DataField(required: true)] [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
public float Value; public float Value;
public override bool IsMet(NPCBlackboard blackboard) public override bool IsMet(NPCBlackboard blackboard)

View File

@@ -1,13 +1,17 @@
namespace Content.Server.NPC.HTN.Preconditions.Math; namespace Content.Server.NPC.HTN.Preconditions.Math;
/// <summary>
/// Checks if there is a float value for the specified <see cref="KeyFloatGreaterPrecondition.Key"/>
/// in the <see cref="NPCBlackboard"/> and the specified value is greater then <see cref="KeyFloatGreaterPrecondition.Value"/>.
/// </summary>
public sealed partial class KeyFloatGreaterPrecondition : HTNPrecondition public sealed partial class KeyFloatGreaterPrecondition : HTNPrecondition
{ {
[Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IEntityManager _entManager = default!;
[DataField(required: true)] [DataField(required: true), ViewVariables]
public string Key = string.Empty; public string Key = string.Empty;
[DataField(required: true)] [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
public float Value; public float Value;
public override bool IsMet(NPCBlackboard blackboard) public override bool IsMet(NPCBlackboard blackboard)

View File

@@ -1,13 +1,17 @@
namespace Content.Server.NPC.HTN.Preconditions.Math; namespace Content.Server.NPC.HTN.Preconditions.Math;
/// <summary>
/// Checks if there is a float value for the specified <see cref="KeyFloatGreaterPrecondition.Key"/>
/// in the <see cref="NPCBlackboard"/> and the specified value is less then <see cref="KeyFloatGreaterPrecondition.Value"/>.
/// </summary>
public sealed partial class KeyFloatLessPrecondition : HTNPrecondition public sealed partial class KeyFloatLessPrecondition : HTNPrecondition
{ {
[Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IEntityManager _entManager = default!;
[DataField(required: true)] [DataField(required: true), ViewVariables]
public string Key = string.Empty; public string Key = string.Empty;
[DataField(required: true)] [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
public float Value; public float Value;
public override bool IsMet(NPCBlackboard blackboard) public override bool IsMet(NPCBlackboard blackboard)

View File

@@ -4,13 +4,14 @@ using System.Threading.Tasks;
namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math; namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math;
/// <summary> /// <summary>
/// Gets the key, and adds the value to that float /// Added <see cref="AddFloatOperator.Amount"/> to float value for the
/// specified <see cref="AddFloatOperator.TargetKey"/> in the <see cref="NPCBlackboard"/>.
/// </summary> /// </summary>
public sealed partial class AddFloatOperator : HTNOperator public sealed partial class AddFloatOperator : HTNOperator
{ {
[Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IEntityManager _entManager = default!;
[DataField(required: true)] [DataField(required: true), ViewVariables]
public string TargetKey = string.Empty; public string TargetKey = string.Empty;
[DataField, ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]

View File

@@ -4,11 +4,12 @@ using System.Threading.Tasks;
namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math; namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math;
/// <summary> /// <summary>
/// Just sets a blackboard key to a bool /// Set <see cref="SetBoolOperator.Value"/> to bool value for the
/// specified <see cref="SetFloatOperator.TargetKey"/> in the <see cref="NPCBlackboard"/>.
/// </summary> /// </summary>
public sealed partial class SetBoolOperator : HTNOperator public sealed partial class SetBoolOperator : HTNOperator
{ {
[DataField(required: true)] [DataField(required: true), ViewVariables]
public string TargetKey = string.Empty; public string TargetKey = string.Empty;
[DataField, ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]

View File

@@ -4,11 +4,12 @@ using System.Threading.Tasks;
namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math; namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math;
/// <summary> /// <summary>
/// Just sets a blackboard key to a float /// Set <see cref="SetFloatOperator.Amount"/> to float value for the
/// specified <see cref="SetFloatOperator.TargetKey"/> in the <see cref="NPCBlackboard"/>.
/// </summary> /// </summary>
public sealed partial class SetFloatOperator : HTNOperator public sealed partial class SetFloatOperator : HTNOperator
{ {
[DataField(required: true)] [DataField(required: true), ViewVariables]
public string TargetKey = string.Empty; public string TargetKey = string.Empty;
[DataField, ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]

View File

@@ -5,20 +5,22 @@ using Robust.Shared.Random;
namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math; namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Math;
/// <summary> /// <summary>
/// Sets a random float from MinAmount to MaxAmount to blackboard /// Set random float value between <see cref="SetRandomFloatOperator.MinAmount"/> and
/// <see cref="SetRandomFloatOperator.MaxAmount"/> specified <see cref="SetRandomFloatOperator.TargetKey"/>
/// in the <see cref="NPCBlackboard"/>.
/// </summary> /// </summary>
public sealed partial class SetRandomFloatOperator : HTNOperator public sealed partial class SetRandomFloatOperator : HTNOperator
{ {
[Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IRobustRandom _random = default!;
[DataField(required: true)] [DataField(required: true), ViewVariables]
public string TargetKey = string.Empty; public string TargetKey = string.Empty;
[DataField, ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public float MaxAmount = 1f; public float MaxAmount = 1f;
[DataField, ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public float MinAmount = 0f; public float MinAmount;
public override async Task<(bool Valid, Dictionary<string, object>? Effects)> Plan(NPCBlackboard blackboard, public override async Task<(bool Valid, Dictionary<string, object>? Effects)> Plan(NPCBlackboard blackboard,
CancellationToken cancelToken) CancellationToken cancelToken)

View File

@@ -20,7 +20,8 @@ public sealed partial class SayKeyOperator : HTNOperator
public override void Initialize(IEntitySystemManager sysManager) public override void Initialize(IEntitySystemManager sysManager)
{ {
base.Initialize(sysManager); base.Initialize(sysManager);
_chat = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<ChatSystem>();
_chat = sysManager.GetEntitySystem<ChatSystem>();
} }
public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
@@ -28,8 +29,12 @@ public sealed partial class SayKeyOperator : HTNOperator
if (!blackboard.TryGetValue<object>(Key, out var value, _entManager)) if (!blackboard.TryGetValue<object>(Key, out var value, _entManager))
return HTNOperatorStatus.Failed; return HTNOperatorStatus.Failed;
var @string = value.ToString();
if (@string is not { })
return HTNOperatorStatus.Failed;
var speaker = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner); var speaker = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner);
_chat.TrySendInGameICMessage(speaker, value.ToString() ?? "Oh no...", InGameICChatType.Speak, hideChat: Hidden, hideLog: Hidden); _chat.TrySendInGameICMessage(speaker, @string, InGameICChatType.Speak, hideChat: Hidden, hideLog: Hidden);
return base.Update(blackboard, frameTime); return base.Update(blackboard, frameTime);
} }

View File

@@ -6,7 +6,7 @@ public sealed partial class SpeakOperator : HTNOperator
{ {
private ChatSystem _chat = default!; private ChatSystem _chat = default!;
[DataField("speech", required: true)] [DataField(required: true)]
public string Speech = string.Empty; public string Speech = string.Empty;
/// <summary> /// <summary>
@@ -18,14 +18,15 @@ public sealed partial class SpeakOperator : HTNOperator
public override void Initialize(IEntitySystemManager sysManager) public override void Initialize(IEntitySystemManager sysManager)
{ {
base.Initialize(sysManager); base.Initialize(sysManager);
_chat = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<ChatSystem>();
_chat = sysManager.GetEntitySystem<ChatSystem>();
} }
public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
{ {
var speaker = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner); var speaker = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner);
_chat.TrySendInGameICMessage(speaker, Loc.GetString(Speech), InGameICChatType.Speak, hideChat: Hidden, hideLog: Hidden); _chat.TrySendInGameICMessage(speaker, Loc.GetString(Speech), InGameICChatType.Speak, hideChat: Hidden, hideLog: Hidden);
return base.Update(blackboard, frameTime); return base.Update(blackboard, frameTime);
} }
} }