using System.Collections; using System.Collections.Generic; using BITKit.FPS; using UnityEngine; namespace BITKit.Entities.Player.Feel { public sealed class PlayerHitMotion : EntityBehavior { [SerializeField] private Spring3 spring; [SerializeField] private LocationAdditive[] locationAdditives; [SerializeField] private AnimationCurve damageBasedMotion; [SerializeField] private Vector3 eulerWeight=Vector3.one; [SerializeField] private Vector3 positionWeight=Vector3.one; public override void OnStart() { UnityEntity.AddListener(OnDamaged); } private void OnDamaged(DamageMessage obj) { if (obj.Target != UnityEntity) return; var damage = damageBasedMotion.Evaluate(obj.Damage); spring.value = new Vector3(damage.Random(), damage.Random(), damage.Random()); } public override void OnUpdate(float deltaTime) { spring.Update(deltaTime,default); var euler = MathV.Multiply(spring.value, eulerWeight); var position = MathV.Multiply(spring.value, positionWeight); foreach (var x in locationAdditives) { x.AddEuler(euler); x.AddPosition(position); } } } }