Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using Task.Tank;
- using UnityEngine;
- using UnityEngine.AI;
- namespace Task.Enemy
- {
- public enum EnemyType { MummyEnemy = 0, OrcEnemy = 1, SkeletonEnemy = 2 }
- public enum EnemyState { Seek = 0, Attack = 1, Dead = 3, Idle = 4}
- public abstract class Enemy : MonoBehaviour
- {
- [Header("Enemy Settings")]
- [SerializeField] private NavMeshAgent _navMeshAgent;
- [SerializeField] private Animation _enemyAnimation;
- [SerializeField] private EnemyType _type;
- [SerializeField] private EnemySettings _settings;
- [SerializeField] private Health _health;
- private TankController _target;
- EnemyState _currentState;
- float _currentReloadingTime;
- private void Start()
- {
- _health.AnounceDeath += Die;
- _navMeshAgent.speed = _settings.MoveSpeed;
- _enemyAnimation.Play("mummy_idle1");
- }
- public virtual void Attack()
- {
- if(_currentReloadingTime <= 0 && !IsAnimationPlaying(_settings.AttackAnimationName)
- {
- _enemyAnimation.Play(_settings.AttackAnimationName);
- }
- }
- private void StartReloading()
- {
- _currentReloadingTime = _settings.ReloadingTime;
- }
- public virtual void MoveToPlayer()
- {
- _navMeshAgent.SetDestination(_target.transform.position);
- }
- public virtual void Die()
- {
- _enemyAnimation.Play(_settings.DeathAnimationName);
- }
- public void SetState(EnemyState state)
- {
- _currentState = state;
- }
- private void Update()
- {
- if(_currentReloadingTime > 0)
- {
- _currentReloadingTime -= Time.deltaTime;
- }
- ResolveState();
- }
- private void PlayIdleAnimation()
- {
- if (!IsAnimationPlaying(_settings.IdleAnimationName))
- {
- PlayAnimation(_settings.IdleAnimationName);
- }
- }
- private void SeekPlayer()
- {
- _navMeshAgent.SetDestination(_target.transform.position);
- if (!IsAnimationPlaying(_settings.MoveAnimationName))
- {
- PlayAnimation(_settings.MoveAnimationName);
- }
- }
- private bool IsAnimationPlaying(string animationName)
- {
- return _enemyAnimation.IsPlaying(animationName);
- }
- private void PlayAnimation(string animationName)
- {
- _enemyAnimation.Play(animationName);
- }
- public void ResolveState()
- {
- switch (_currentState)
- {
- case EnemyState.Seek:
- SeekPlayer();
- break;
- case EnemyState.Idle:
- PlayIdleAnimation();
- break;
- case EnemyState.Attack:
- Attack();
- break;
- case EnemyState.Dead:
- Die();
- break;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement