using System.Collections; using System.Collections.Generic; using UnityEngine; using Saltosion.OneWeapon.Effects; namespace Saltosion.OneWeapon.Utils { [RequireComponent(typeof(Rigidbody2D))] public class AcceleratedMovement : MonoBehaviour { public Bobbing Bobbing; private Vector2 LastDirection = Vector2.zero; public Vector2 Direction = Vector2.zero; public float MaxSpeed = 7; public float AccelerationSpeed = 70; public float DecelerationSpeed = 70; [HideInInspector] public float AnimationSpeedModifier; [HideInInspector] public float AnimationSpeed; public Vector2 CurrentVelocity { private set; get; } public float SpeedPercentage { private set; get; } [HideInInspector] private float CurrentSpeed = 0; private Rigidbody2D Body; void Start() { Body = GetComponent(); } void Update() { if (Direction.magnitude > 0) { CurrentSpeed += AccelerationSpeed * Time.deltaTime; } else { CurrentSpeed -= DecelerationSpeed * Time.deltaTime; } CurrentSpeed *= 1 - (Vector2.Angle(Direction, LastDirection) / 180); CurrentSpeed = Mathf.Clamp(CurrentSpeed, 0, MaxSpeed); SpeedPercentage = CurrentSpeed / MaxSpeed; AnimationSpeed = SpeedPercentage * AnimationSpeedModifier; CurrentVelocity = Direction.normalized * CurrentSpeed; LastDirection = Direction; Body.velocity = CurrentVelocity; if (Bobbing != null) { Bobbing.BobbingMultiplier = SpeedPercentage; } } } }