107 lines
2.6 KiB
C#
107 lines
2.6 KiB
C#
using Animation;
|
|
using UnityEngine;
|
|
|
|
public class PlayerController : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private float _speed = 5.0f;
|
|
|
|
|
|
private PlayerState _state = PlayerState.Idle;
|
|
private AnimatorManager<AnimatorParam> _mAnimator;
|
|
|
|
private Vector3 _destPos;
|
|
|
|
enum AnimatorParam
|
|
{
|
|
speed,
|
|
// atk_speed,
|
|
// attack,
|
|
run,
|
|
}
|
|
|
|
enum PlayerState
|
|
{
|
|
Idle,
|
|
Move,
|
|
Attack,
|
|
Die
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
_mAnimator = new AnimatorManager<AnimatorParam>(GetComponent<Animator>());
|
|
Manager.Input.MouseAction -= OnMouseClicked;
|
|
Manager.Input.MouseAction += OnMouseClicked;
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
switch (_state)
|
|
{
|
|
case PlayerState.Idle:
|
|
UpdateIdle();
|
|
break;
|
|
case PlayerState.Move:
|
|
UpdateMove();
|
|
break;
|
|
case PlayerState.Attack:
|
|
break;
|
|
case PlayerState.Die:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void OnMouseClicked(Define.MouseEvent evt)
|
|
{
|
|
if (_state == PlayerState.Die) return;
|
|
|
|
switch (evt)
|
|
{
|
|
case Define.MouseEvent.Down:
|
|
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
|
Debug.DrawRay(Camera.main.transform.position, ray.direction*100.0f, Color.red, 1.0f);
|
|
|
|
RaycastHit hit;
|
|
if (Physics.Raycast(ray, out hit, 100.0f, LayerMask.GetMask("Ground")))
|
|
{
|
|
_destPos = hit.point;
|
|
_state = PlayerState.Move;
|
|
}
|
|
break;
|
|
case Define.MouseEvent.Up:
|
|
break;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void UpdateIdle()
|
|
{
|
|
_mAnimator.SetValue(AnimatorParam.speed, 0);
|
|
}
|
|
void UpdateMove()
|
|
{
|
|
Vector3 dir = _destPos - transform.position;
|
|
if (dir.magnitude < 0.001f) _state = PlayerState.Idle;
|
|
else
|
|
{
|
|
float moveDist = Mathf.Clamp(_speed * Time.deltaTime, 0, dir.magnitude);
|
|
transform.position += dir.normalized * moveDist;
|
|
|
|
Vector3 targetDir = new Vector3(dir.x, 0, dir.z).normalized;
|
|
if(targetDir != Vector3.zero)
|
|
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(targetDir), 0.15f);
|
|
|
|
}
|
|
|
|
_mAnimator.SetValue(AnimatorParam.speed, _speed);
|
|
|
|
|
|
}
|
|
void UpdateAttack()
|
|
{
|
|
|
|
}
|
|
}
|