riversong code showcase

This commit is contained in:
Daniele Marotta
2026-05-21 15:52:18 +02:00
commit 4c9eea1c02
462 changed files with 23406 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
using Unity.Mathematics;
using UnityEngine;
namespace DanieleMarotta.RiversongCodeShowcase
{
[GameSystemGroup(typeof(DefaultAgentsSystemGroup))]
[UpdateAfter(typeof(IntentExecutionSystem))]
public class AgentAnimationSystem : GameSystem, IUpdatable
{
[InjectService]
private IEntityCollection _entityCollection;
[InjectService]
private IAgentVisualizationCollection _agentVisualizationCollection;
[InjectService]
private IProductCatalog _productCatalog;
public AgentAnimationSystem(IServiceLocator serviceLocator) : base(serviceLocator)
{
}
public void Update()
{
foreach (Agent agent in _entityCollection.GetInternalEntityList(typeof(Agent)))
{
if (!_agentVisualizationCollection.TryGetVisualization(agent.Id, out var visualization)) continue;
const float minVelocitySq = 0.01f;
visualization.UpdateAnimationState(math.lengthsq(agent.Velocity) > minVelocitySq);
UpdateCarriedProduct(agent, visualization);
}
}
private void UpdateCarriedProduct(Agent agent, AgentVisualization visualization)
{
var carriedProduct = visualization.CarriedProductVisualization;
if (!carriedProduct) return;
var isCarryingProduct = agent.CarriedProductHandle != IProductCatalog.InvalidHandle;
var targetWeight = isCarryingProduct ? 1 : 0;
var weight = Mathf.MoveTowards(carriedProduct.GetAnimatorLayerWeight(), targetWeight, 10 * Time.deltaTime);
carriedProduct.SetAnimatorLayerWeight(weight);
if (isCarryingProduct)
SetProductVisualization(carriedProduct, agent.CarriedProductHandle);
else
ClearProductVisualization(carriedProduct);
}
private void SetProductVisualization(AgentCarriedProductVisualization carriedProduct, int productHandle)
{
if (carriedProduct.IsShowingCarriedProduct()) return;
var product = _productCatalog.GetProduct(productHandle);
var productVisualization = (GameObject)Object.Instantiate(product.CarriedVisualization.Asset);
carriedProduct.SetProductVisualization(productVisualization);
}
private void ClearProductVisualization(AgentCarriedProductVisualization carriedProduct)
{
if (!carriedProduct.ClearProductVisualization(out var productVisualization)) return;
Object.Destroy(productVisualization);
}
}
}