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,71 @@
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace DanieleMarotta.RiversongCodeShowcase
{
public class TreeFallAnimation : MonoBehaviour, IDestroyRawResourceAnimation
{
[SerializeField]
private float _fallDelay;
[SerializeField]
private float _fallDuration = 1;
[SerializeField]
private AnimationCurve _fallRotationCurve = AnimationCurve.Linear(0, 0, 1, 1);
[SerializeField]
private float _sinkDelay = 0.5f;
[SerializeField]
private float _sinkDepth = 1;
[SerializeField]
private float _sinkSpeed = 1;
public async UniTask PlayAsync()
{
await FallAsync();
await SinkAsync();
}
private async UniTask FallAsync()
{
await UniTask.WaitForSeconds(_fallDelay);
var axis = Quaternion.Euler(0, Random.value * 360, 0) * Vector3.forward;
var initialRotation = transform.rotation;
var finalRotation = initialRotation * Quaternion.AngleAxis(90, axis);
var t = 0f;
while (t < 1)
{
t += Time.deltaTime / _fallDuration;
transform.rotation = Quaternion.Lerp(initialRotation, finalRotation, _fallRotationCurve.Evaluate(t));
await UniTask.NextFrame();
}
transform.rotation = finalRotation;
}
private async UniTask SinkAsync()
{
await UniTask.WaitForSeconds(_sinkDelay);
var initialY = transform.position.y;
var finalY = initialY - _sinkDepth;
while (transform.position.y > finalY)
{
transform.position += Vector3.down * _sinkSpeed * Time.deltaTime;
await UniTask.NextFrame();
}
transform.position = new Vector3(transform.position.x, finalY, transform.position.z);
}
}
}