diff options
Diffstat (limited to 'Assets/Scripts/Actors/Enemy.cs')
-rw-r--r-- | Assets/Scripts/Actors/Enemy.cs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Assets/Scripts/Actors/Enemy.cs b/Assets/Scripts/Actors/Enemy.cs new file mode 100644 index 0000000..d7d699e --- /dev/null +++ b/Assets/Scripts/Actors/Enemy.cs @@ -0,0 +1,72 @@ +using UnityEngine; +using System.Collections; + +namespace MontanaJohns.Actors +{ + [RequireComponent(typeof(Rigidbody2D))] + public class Enemy : Actor + { + protected GameObject player; + protected float attackRate = 0.5f; + protected float nextAttackTime = 0f; + + bool playerSeen; + + protected override void Awake() + { + base.Awake(); + player = GameObject.FindGameObjectWithTag("Player"); + } + + // Update is called once per frame + void Update() + { + if(!playerSeen) + { + if (Mathf.Abs(player.transform.position.x - transform.position.x) <= 50 && Mathf.Abs(player.transform.position.y - transform.position.y) <= 15) + playerSeen = true; + } + else + { + MoveTowardsPlayer(); + Attack(); + } + CheckHealth(); + } + + protected override void FixedUpdate() + { + // Temp override while missing falling logic/animations + } + + void MoveTowardsPlayer() + { + if (player.transform.position.x < transform.position.x) Move(-stats.speedMultiplier * 0.5f); + else Move(stats.speedMultiplier * 0.5f); + } + + void CheckHealth() + { + if (health <= 0) Destroy(gameObject); + } + + void Attack() + { + if (Mathf.Abs(player.transform.position.x - transform.position.x) <= 5 && Mathf.Abs(player.transform.position.y - transform.position.y) <= 2 && Time.time >= nextAttackTime) { + _animator.SetTrigger("attack"); + player.GetComponent<Actor>().TakeDamage(1); + nextAttackTime = Time.time + 1f / attackRate; + } + } + + private void OnCollisionEnter2D(Collision2D other) + { + if (other.gameObject.tag == "Projectile") + { + // TODO update once projectile is made an Active Item + TakeDamage(1); + Destroy(other.gameObject); + } + } + } +} |