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)
|
|
|
|
{
|
2023-11-30 00:23:23 +08:00
|
|
|
x.AddEuler(euler);
|
|
|
|
x.AddPosition(position);
|
2023-11-02 20:58:55 +08:00
|
|
|
}
|
2023-10-20 19:31:12 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|