Enemy.cs

 avatar
unknown
csharp
a month ago
4.0 kB
6
Indexable
using GameManager;
using MoreMountains.Feedbacks;
using UnityEngine;

namespace Enemies
{
    public class Enemy : MonoBehaviour
    {
        public int health = 3;
        public int shield = 0;
        private EnemySpawner eSpawner;
        public int earthshipDamage = 1;
        public int oil = 10;
        ResourceManager resourceManager;
        SpriteRenderer spriteRenderer;
        public Sprite shieldSprite;
        public Sprite normalSprite;
        public bool shieldDisabled;
        [Header("Audio")]
        [SerializeField] AudioClip deathSound;
        [Header("Type")]
        public string enemyType;

        private MMF_Player _mmfPlayer;
        private MMF_FloatingText floatingText;
        private void Awake()
        {
            eSpawner = FindObjectOfType<EnemySpawner>();
            resourceManager = FindObjectOfType<ResourceManager>();
            spriteRenderer = GetComponent<SpriteRenderer>();
            _mmfPlayer = FindObjectOfType<MMF_Player>();
            floatingText = _mmfPlayer.GetFeedbackOfType<MMF_FloatingText>();
            if (shield == 0) shieldDisabled = true;
        }

        private void Start()
        {
            CheckForShield();
        }

        bool CheckForShield()
        {
            if (shieldDisabled) return false;
            switch (shield)
            {
                case > 0:
                    spriteRenderer.sprite = shieldSprite;
                    return true;
                default:
                    spriteRenderer.sprite = normalSprite;
                    return false;
            }
        }

        int CalculateDamageAmount(int amount, int towerType)
        {
            int newAmount = amount;
            // Nerf/Buff Template:  if (towerType == NUM && enemyType == "type") newAmount *= 2/newAmount /= 2;

            switch (towerType)
            {
                // Buffs
                case 0 when enemyType == "brown":
                case 5 when enemyType == "black":
                case 2 when enemyType == "green":
                    newAmount *= 2;
                    break;
                
                // Nerfs
                case 5 when enemyType == "brown":
                case 2 when enemyType == "black":
                case 0 when enemyType == "green":
                    newAmount /= 2;
                    break;
            }


            // The Fire Cucumber
            if (towerType == 2 && enemyType == "green") newAmount *= 2;
            else if (towerType == 2 && enemyType == "black") newAmount /= 2;
            
            Debug.Log("Damage output for  " + gameObject.name + ": " + newAmount);
            return newAmount;
        }
        
        // TowerType Explanations
        // 0 = The Cucumber/The Mint Cucumber
        // 1 = The Cloud
        // 2 = The Trill Cyan
        // 3 = The Airship
        // 4 = The Venus
        // 5 = The Eel
        // 6 = The Cactus
        // 7 = The Fire Cucumber
        
        // EnemyType Explanations
        // green
        // black
        // brown
        public void RemoveHealth(int amount, int armorDamageMultiplier, int towerType)
        {
            int damageAmount = CalculateDamageAmount(amount, towerType);
            if (CheckForShield())
            {
                shield -= damageAmount * armorDamageMultiplier;
            }
            else
            {
                health -= damageAmount;
            }
            Debug.Log("Damage output for  " + gameObject.name + ": " + damageAmount);
            Debug.Log("Enemy health for " + gameObject.name + ": " + health);
            floatingText.Value = damageAmount.ToString();
            _mmfPlayer.PlayFeedbacks(transform.position, damageAmount);
            if (health > 0) return;
            RemoveEnemy();
        }
        public void RemoveEnemy()
        {
            AudioSource.PlayClipAtPoint(deathSound, transform.position);
            eSpawner.spawnedEnemies.Remove(gameObject);
            Destroy(gameObject);
        }
    }
}
Editor is loading...
Leave a Comment