public void Promote(IEnemyEnhancement enhancement) { maxHealth = enhancement.EnhanceMaxHealth(maxHealth); defense = enhancement.EnhanceDefense(defense); minDamage = enhancement.EnhanceDamage(minDamage); maxDamage = enhancement.EnhanceDamage(maxDamage); }
GameObject Instantiate(Coord location, GameObject prefab, string name, IEnemyEnhancement enhancement = null) { GameObject enemyGO = Instantiate(prefab); enemyGO.name = name; enemyGO.transform.position = (Vector2)location; enemyGO.transform.parent = transform; var ai = enemyGO.GetComponent <EnemyAI>(); var body = enemyGO.GetComponent <EnemyBody>(); var enemyStats = enemyGO.GetComponent <EnemyStats>(); var itemsOnDeath = enemyGO.GetComponent <OnDeathDropItems>(); var experienceOnDeath = enemyGO.GetComponent <OnDeathExperience>(); var playerStats = player.GetComponent <PlayerStats>(); ai.Initialize(Map, player, enemyStats, pathFinder); body.Initialize(enemyStats); itemsOnDeath.Initialize(itemFactory, ground); experienceOnDeath.Initialize(playerStats); if (enhancement != null) { experienceOnDeath.Experience = enhancement.EnhanceExperience(experienceOnDeath.Experience); enemyStats.Promote(enhancement); } return(enemyGO); }