BITFALL/Assets/Artists/Scripts/Feel/PlayerHitMotion.cs

44 lines
1.2 KiB
C#
Raw Normal View History

2023-10-20 19:31:12 +08:00
using System.Collections;
using System.Collections.Generic;
using BITKit.FPS;
using UnityEngine;
namespace BITKit.Entities.Player.Feel
{
2023-10-30 01:25:53 +08:00
public sealed class PlayerHitMotion : EntityBehavior
2023-10-20 19:31:12 +08:00
{
[SerializeField] private Spring3 spring;
2023-11-02 20:58:55 +08:00
[SerializeField] private LocationAdditive[] locationAdditives;
2023-10-20 19:31:12 +08:00
[SerializeField] private AnimationCurve damageBasedMotion;
2023-11-30 00:23:23 +08:00
[SerializeField] private Vector3 eulerWeight=Vector3.one;
[SerializeField] private Vector3 positionWeight=Vector3.one;
2023-10-20 19:31:12 +08:00
public override void OnStart()
{
2023-10-30 01:25:53 +08:00
UnityEntity.AddListener<DamageMessage>(OnDamaged);
2023-10-20 19:31:12 +08:00
}
private void OnDamaged(DamageMessage obj)
{
2023-10-30 01:25:53 +08:00
if (obj.Target != UnityEntity) return;
2023-10-24 23:37:59 +08:00
var damage = damageBasedMotion.Evaluate(obj.Damage);
2023-10-20 19:31:12 +08:00
spring.value = new Vector3(damage.Random(), damage.Random(), damage.Random());
}
public override void OnUpdate(float deltaTime)
{
spring.Update(deltaTime,default);
2023-11-30 00:23:23 +08:00
var euler = MathV.Multiply(spring.value, eulerWeight);
var position = MathV.Multiply(spring.value, positionWeight);
2023-11-02 20:58:55 +08:00
foreach (var x in locationAdditives)
{
2024-02-21 01:40:53 +08:00
//x.AddEuler(euler);
x.AddRotation(Quaternion.Euler(euler));
2023-11-30 00:23:23 +08:00
x.AddPosition(position);
2023-11-02 20:58:55 +08:00
}
2023-10-20 19:31:12 +08:00
}
}
}