RandomOperator.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.Threading;
  2. using System.Threading.Tasks;
  3. using Robust.Shared.Random;
  4. namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators;
  5. public sealed partial class RandomOperator : HTNOperator
  6. {
  7. [Dependency] private readonly IEntityManager _entManager = default!;
  8. [Dependency] private readonly IRobustRandom _random = default!;
  9. /// <summary>
  10. /// Target blackboard key to set the value to. Doesn't need to exist beforehand.
  11. /// </summary>
  12. [DataField("targetKey", required: true)] public string TargetKey = string.Empty;
  13. /// <summary>
  14. /// Minimum idle time.
  15. /// </summary>
  16. [DataField("minKey", required: true)] public string MinKey = string.Empty;
  17. /// <summary>
  18. /// Maximum idle time.
  19. /// </summary>
  20. [DataField("maxKey", required: true)] public string MaxKey = string.Empty;
  21. public override async Task<(bool Valid, Dictionary<string, object>? Effects)> Plan(NPCBlackboard blackboard,
  22. CancellationToken cancelToken)
  23. {
  24. return (true, new Dictionary<string, object>()
  25. {
  26. {
  27. TargetKey,
  28. _random.NextFloat(blackboard.GetValueOrDefault<float>(MinKey, _entManager),
  29. blackboard.GetValueOrDefault<float>(MaxKey, _entManager))
  30. }
  31. });
  32. }
  33. }