46 lines
1.3 KiB
C#
46 lines
1.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace Components
|
|
{
|
|
public class MovementComponent : MonoBehaviour
|
|
{
|
|
private bool _isMoving = false;
|
|
private Vector3 _direction = Vector3.forward;
|
|
private float _speed = 0;
|
|
private float _speedMultiplier = 1f;
|
|
private Transform _cachedTransform;
|
|
|
|
public void OnInit(float speed, Transform transform)
|
|
{
|
|
_speed = speed;
|
|
_speedMultiplier = 1f;
|
|
_cachedTransform = transform;
|
|
}
|
|
|
|
public void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
|
{
|
|
if (_isMoving && _cachedTransform != null)
|
|
{
|
|
Move(elapseSeconds);
|
|
}
|
|
}
|
|
|
|
public void OnReset()
|
|
{
|
|
_speed = 0;
|
|
_speedMultiplier = 1f;
|
|
_cachedTransform = null;
|
|
_isMoving = false;
|
|
}
|
|
|
|
private void Move(float deltaTime = 0)
|
|
{
|
|
_cachedTransform.Translate(_direction * (_speed * _speedMultiplier) * deltaTime);
|
|
}
|
|
|
|
public void SetMove(bool isMoving) => _isMoving = isMoving;
|
|
public void SetDirection(Vector3 direction) => _direction = direction;
|
|
public void SetSpeedMultiplier(float speedMultiplier) => _speedMultiplier = Mathf.Max(0f, speedMultiplier);
|
|
}
|
|
}
|