Fixed mice behavior of eating everything (#23322)
* Added precondition for EatTask * Added Thirsty precondition for htn drink task * Added start state for hungry and thirsty components * Update nutrition.yml * Fixed pascalcase's
This commit is contained in:
26
Content.Server/NPC/HTN/Preconditions/HungryPrecondition.cs
Normal file
26
Content.Server/NPC/HTN/Preconditions/HungryPrecondition.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using Content.Shared.Hands.Components;
|
||||||
|
using Content.Shared.Nutrition.Components;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Server.NPC.HTN.Preconditions;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if the active hand entity has the specified components.
|
||||||
|
/// </summary>
|
||||||
|
public sealed partial class HungryPrecondition : HTNPrecondition
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IEntityManager _entManager = default!;
|
||||||
|
|
||||||
|
[DataField(required: true)]
|
||||||
|
public HungerThreshold MinHungerState = HungerThreshold.Starving;
|
||||||
|
|
||||||
|
public override bool IsMet(NPCBlackboard blackboard)
|
||||||
|
{
|
||||||
|
if (!blackboard.TryGetValue<EntityUid>(NPCBlackboard.Owner, out var owner, _entManager))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _entManager.TryGetComponent<HungerComponent>(owner, out var hunger) ? hunger.CurrentThreshold <= MinHungerState : false;
|
||||||
|
}
|
||||||
|
}
|
||||||
26
Content.Server/NPC/HTN/Preconditions/ThirstyPrecondition.cs
Normal file
26
Content.Server/NPC/HTN/Preconditions/ThirstyPrecondition.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using Content.Shared.Hands.Components;
|
||||||
|
using Content.Shared.Nutrition.Components;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Server.NPC.HTN.Preconditions;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if the active hand entity has the specified components.
|
||||||
|
/// </summary>
|
||||||
|
public sealed partial class ThirstyPrecondition : HTNPrecondition
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IEntityManager _entManager = default!;
|
||||||
|
|
||||||
|
[DataField(required: true)]
|
||||||
|
public ThirstThreshold MinThirstState = ThirstThreshold.Parched;
|
||||||
|
|
||||||
|
public override bool IsMet(NPCBlackboard blackboard)
|
||||||
|
{
|
||||||
|
if (!blackboard.TryGetValue<EntityUid>(NPCBlackboard.Owner, out var owner, _entManager))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _entManager.TryGetComponent<ThirstComponent>(owner, out var thirst) ? thirst.CurrentThirstThreshold <= MinThirstState : false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1305,7 +1305,17 @@
|
|||||||
Dead:
|
Dead:
|
||||||
Base: splat-0
|
Base: splat-0
|
||||||
- type: Food
|
- type: Food
|
||||||
|
- type: Thirst
|
||||||
|
startingThirst: 25 # spawn with Okay thirst state
|
||||||
|
thresholds:
|
||||||
|
OverHydrated: 35
|
||||||
|
Okay: 25
|
||||||
|
Thirsty: 15
|
||||||
|
Parched: 10
|
||||||
|
Dead: 0
|
||||||
|
baseDecayRate: 0.04
|
||||||
- type: Hunger
|
- type: Hunger
|
||||||
|
currentHunger: 25 # spawn with Okay hunger state
|
||||||
thresholds:
|
thresholds:
|
||||||
Overfed: 35
|
Overfed: 35
|
||||||
Okay: 25
|
Okay: 25
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
# Picks a nearby food, moves into range, then eats it and waits the idle time.
|
# Picks a nearby food, moves into range, then eats it and waits the idle time.
|
||||||
- tasks:
|
- tasks:
|
||||||
- !type:HTNPrimitiveTask
|
- !type:HTNPrimitiveTask
|
||||||
|
preconditions:
|
||||||
|
- !type:HungryPrecondition
|
||||||
|
minHungerState: Starving # See HungerThreshold enum
|
||||||
operator: !type:UtilityOperator
|
operator: !type:UtilityOperator
|
||||||
proto: NearbyFood
|
proto: NearbyFood
|
||||||
|
|
||||||
@@ -31,6 +34,9 @@
|
|||||||
# Picks nearby drink then consumes it and waits idle time
|
# Picks nearby drink then consumes it and waits idle time
|
||||||
- tasks:
|
- tasks:
|
||||||
- !type:HTNPrimitiveTask
|
- !type:HTNPrimitiveTask
|
||||||
|
preconditions:
|
||||||
|
- !type:ThirstyPrecondition
|
||||||
|
minThirstState: Parched # See ThirstThreshold enum
|
||||||
operator: !type:UtilityOperator
|
operator: !type:UtilityOperator
|
||||||
proto: NearbyDrink
|
proto: NearbyDrink
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user