riversong code showcase
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
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()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user