53 lines
2.0 KiB
C#
53 lines
2.0 KiB
C#
using System;
|
|
using Cysharp.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
namespace DanieleMarotta.RiversongCodeShowcase
|
|
{
|
|
public class PlayAnimationIntentExecutionLogic : IntentExecutionLogic
|
|
{
|
|
private static readonly int ChopTree = Animator.StringToHash("ChopTree");
|
|
|
|
private static readonly int Farming = Animator.StringToHash("Farming");
|
|
|
|
private static readonly int FireProjectile = Animator.StringToHash("FireProjectile");
|
|
|
|
private IAgentVisualizationCollection _agentVisualizationCollection;
|
|
|
|
public override UniTask InitializeAsync(IServiceLocator serviceLocator)
|
|
{
|
|
_agentVisualizationCollection = serviceLocator.GetService<IAgentVisualizationCollection>();
|
|
|
|
return UniTask.CompletedTask;
|
|
}
|
|
|
|
public override IntentExecutionResult OnStartingIntent(Agent agent, in AgentIntent intent)
|
|
{
|
|
if (!_agentVisualizationCollection.TryGetVisualization(agent.Id, out var visualization)) return IntentExecutionResult.Failure;
|
|
|
|
var triggerID = GetAnimatorTriggerID((AgentAnimation)intent.TargetId);
|
|
visualization.SetAnimatorTrigger(triggerID);
|
|
|
|
return IntentExecutionResult.Success;
|
|
}
|
|
|
|
public override IntentExecutionResult Execute(Agent agent, in AgentIntent intent)
|
|
{
|
|
if (!_agentVisualizationCollection.TryGetVisualization(agent.Id, out var visualization)) return IntentExecutionResult.Failure;
|
|
|
|
return !visualization.WaitAnimationCompleted() ? IntentExecutionResult.InProgress : IntentExecutionResult.Success;
|
|
}
|
|
|
|
private int GetAnimatorTriggerID(AgentAnimation animation)
|
|
{
|
|
return animation switch
|
|
{
|
|
AgentAnimation.ChopTree => ChopTree,
|
|
AgentAnimation.Farming => Farming,
|
|
AgentAnimation.FireProjectile => FireProjectile,
|
|
_ => throw new ArgumentOutOfRangeException()
|
|
};
|
|
}
|
|
}
|
|
}
|