BloodAndGore/Assets/Scripts/Utils/AcceleratedMovement.cs

54 lines
1.7 KiB
C#
Raw Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Saltosion.OneWeapon.Effects;
namespace Saltosion.OneWeapon.Utils {
2019-08-18 19:51:03 +02:00
[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;
2019-08-14 21:31:58 +02:00
public float DecelerationSpeed = 70;
2019-08-22 20:36:22 +02:00
[HideInInspector]
public float AnimationSpeedModifier;
[HideInInspector]
public float AnimationSpeed;
public Vector2 CurrentVelocity { private set; get; }
public float SpeedPercentage { private set; get; }
2019-08-22 20:36:22 +02:00
[HideInInspector]
private float CurrentSpeed = 0;
2019-08-18 19:51:03 +02:00
private Rigidbody2D Body;
void Start() {
Body = GetComponent<Rigidbody2D>();
}
void Update() {
if (Direction.magnitude > 0) {
CurrentSpeed += AccelerationSpeed * Time.deltaTime;
} else {
2019-08-14 21:31:58 +02:00
CurrentSpeed -= DecelerationSpeed * Time.deltaTime;
}
CurrentSpeed *= 1 - (Vector2.Angle(Direction, LastDirection) / 180);
CurrentSpeed = Mathf.Clamp(CurrentSpeed, 0, MaxSpeed);
SpeedPercentage = CurrentSpeed / MaxSpeed;
2019-08-22 20:36:22 +02:00
AnimationSpeed = SpeedPercentage * AnimationSpeedModifier;
CurrentVelocity = Direction.normalized * CurrentSpeed;
LastDirection = Direction;
Body.velocity = CurrentVelocity;
2019-08-18 19:51:03 +02:00
if (Bobbing != null) {
Bobbing.BobbingMultiplier = SpeedPercentage;
}
}
}
2019-08-14 16:17:48 +02:00
}