101 lines
2.6 KiB
C#
101 lines
2.6 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
public class NPC : MonoBehaviour
|
|
{
|
|
public bool ismoving;
|
|
|
|
public PlayerManager PlayerManager;
|
|
|
|
public float velocityX;
|
|
|
|
public float velocityY;
|
|
|
|
public Collider2D[] CollidersToDisableOnWalk;
|
|
|
|
public bool AnimateAutomatically;
|
|
|
|
public bool FinishedMoveTo;
|
|
|
|
private Vector2 pos;
|
|
|
|
public Animator NPCAnimator;
|
|
|
|
public Coroutine CurrentWalkRoutine;
|
|
|
|
[Header("Range : -1 to 1")]
|
|
public float DefaultStandDirectionX;
|
|
|
|
public float DefaultStandDirectionY;
|
|
|
|
private void Start()
|
|
{
|
|
NPCAnimator.SetFloat("MOVEMENTX", DefaultStandDirectionX);
|
|
NPCAnimator.SetFloat("MOVEMENTY", DefaultStandDirectionY);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
Animate();
|
|
}
|
|
|
|
public void WalkToPosition(Vector3 TargetPosition, float Speed)
|
|
{
|
|
if (CurrentWalkRoutine != null)
|
|
{
|
|
StopCoroutine(CurrentWalkRoutine);
|
|
}
|
|
CurrentWalkRoutine = StartCoroutine(WalkTo(TargetPosition, Speed));
|
|
}
|
|
|
|
public void RotateNPC(Vector2 Dir)
|
|
{
|
|
NPCAnimator.SetFloat("MOVEMENTX", Dir.x);
|
|
NPCAnimator.SetFloat("MOVEMENTY", Dir.y);
|
|
}
|
|
|
|
private IEnumerator WalkTo(Vector3 TargetPosition, float Speed)
|
|
{
|
|
ismoving = true;
|
|
while ((TargetPosition - base.transform.position).sqrMagnitude > Mathf.Epsilon)
|
|
{
|
|
base.transform.position = Vector3.MoveTowards(base.transform.position, TargetPosition, Speed * Time.deltaTime);
|
|
yield return null;
|
|
CalculateVelocity();
|
|
}
|
|
FinishedMoveTo = true;
|
|
ismoving = false;
|
|
CurrentWalkRoutine = null;
|
|
}
|
|
|
|
private void CalculateVelocity()
|
|
{
|
|
velocityX = (base.transform.position.x - pos.x) / Time.deltaTime;
|
|
velocityY = (base.transform.position.y - pos.y) / Time.deltaTime;
|
|
pos = base.transform.position;
|
|
}
|
|
|
|
private void Animate()
|
|
{
|
|
if (AnimateAutomatically)
|
|
{
|
|
NPCAnimator.SetBool("MOVING", ismoving);
|
|
}
|
|
if (ismoving && AnimateAutomatically)
|
|
{
|
|
NPCAnimator.SetFloat("MOVEMENTX", velocityX);
|
|
NPCAnimator.SetFloat("MOVEMENTY", velocityY);
|
|
}
|
|
Collider2D[] collidersToDisableOnWalk = CollidersToDisableOnWalk;
|
|
for (int i = 0; i < collidersToDisableOnWalk.Length; i++)
|
|
{
|
|
collidersToDisableOnWalk[i].enabled = !ismoving;
|
|
}
|
|
}
|
|
|
|
public void PlayAnimation(string AnimationName)
|
|
{
|
|
NPCAnimator.Play(AnimationName);
|
|
}
|
|
}
|