using System.Collections; using System.Collections.Generic; using UnityEngine; public abstract class Animal : MonoBehaviour, IAnimal { [SerializeField]private Animator _anim; [SerializeField] private float _energy; [SerializeField] private int _walkSpeed; public float startWaitTime; public float minX, maxX, minZ, maxZ; [SerializeField] private float turnSpeed; private float _idleTime; //public Transform[] moveSpots; //private int _randomSpot; public Animator Anim{ get{return _anim;} set{_anim = value;} } public int WalkSpeed { get{return _walkSpeed;} set {_walkSpeed = value;} } // Use this for initialization void Start (){ _anim = GetComponent(); //_randomSpot = Random.Range(0, moveSpots.Length); _idleTime = startWaitTime; } // Update is called once per frame void Update () { } public void Wander(Transform randomPoint){ Quaternion rotation = Quaternion.LookRotation(randomPoint.position); transform.rotation = Quaternion.Slerp(transform.rotation, rotation, turnSpeed * Time.deltaTime); transform.position = Vector3.MoveTowards(transform.position, randomPoint.position, WalkSpeed * Time.deltaTime); if (Vector3.Distance(transform.position, randomPoint.position) < 0.2f){ Stop(); if (_idleTime <= 0){ randomPoint.position = new Vector3(Random.Range(minX, maxX), 0.1f, Random.Range(minZ, maxZ)); _idleTime = startWaitTime; } else _idleTime -= Time.deltaTime; } else{ Walk(); } } //public void WanderBetweenSetPoints(){ // Walk(); // transform.LookAt(moveSpots[_randomSpot]); // transform.position = Vector3.MoveTowards(transform.position, moveSpots[_randomSpot].position, WalkSpeed * Time.deltaTime); // if (Vector3.Distance(transform.position, moveSpots[_randomSpot].position) <= 0.2f){ // _energy = 0; // if (_waitTime <= 0){ // _randomSpot = Random.Range(0, moveSpots.Length); // _waitTime = startWaitTime; // _energy += Time.deltaTime; // } // else{ // _waitTime -= Time.deltaTime; // _energy -= Time.deltaTime; // } // } //} public void Walk(){ _anim.SetBool("IsWalking", true); } public void Stop(){ _anim.SetBool("IsWalking", false); _anim.SetBool("IsRunning", false); } public void Run(){ _anim.SetBool("IsRunning", true); } }