/
UpdateNeeds.cs
35 lines (32 loc) · 1.23 KB
/
UpdateNeeds.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#if PLANNER_DOMAIN_GENERATED
using System;
using AI.Planner.Domains;
using Unity.AI.Planner.DomainLanguage.TraitBased;
using Unity.Entities;
namespace AI.Planner.Actions.WorkaholicAgent
{
public struct UpdateNeeds : ICustomActionEffect<StateData>
{
static ComponentType[] needFilter = { typeof(Need) };
public void ApplyCustomActionEffectsToState(StateData originalState, ActionKey action, StateData newState)
{
// Should only be one time object
var previousTime = originalState.TimeBuffer[0];
var newStateTime = newState.TimeBuffer[0];
var deltaTime = newStateTime.Value - previousTime.Value;
var needBuffer = newState.NeedBuffer;
var objectBuffer = newState.DomainObjects;
for (var obj = 0; obj < objectBuffer.Length; obj++)
{
var domainObject = objectBuffer[obj];
if (domainObject.MatchesTraitFilter(needFilter))
{
var need = needBuffer[domainObject.NeedIndex];
need.Urgency += need.ChangePerSecond * deltaTime;
needBuffer[domainObject.NeedIndex] = need;
}
}
}
}
}
#endif