public void Initialize(int currentWave, EnemyMetadata config, GameObject targetGameObject) { targetGameOjbects = new List <GameObject>(); targetGameOjbects.Add(targetGameObject); maxHitPoint = config.hp; AttackDamage = config.attack; AttackRange = config.attackRange; //type = config.enemyType; AttackCoolDownSeconds = 1.0f / config.attackFrequency; MoveSpeed = config.moveSpeed; SearchRange = config.searchRange; lootIds = config.lootIds; enemyState = EEnemyState.IDLE; enemyAttackState = EEnemyAttackState.IDLE; currentHitPoint = maxHitPoint; attackCoolDownStartTime = 0.0f; hpBarBehaviour = GetComponentInChildren <HpBarBehaviour>(); if (hpBarBehaviour == null) { Debug.LogError("Enemy missing HP bar component"); } animator = GetComponent <Animator>(); SetStateToIdle(); // ANIMATION_IS_DEAD should only be set to false at the beginning animator.SetBool(ANIMATION_IS_DEAD, false); }
private void SpawnEnemyForWaveWithType(EnemyTypeEnum type) { WaveEnemyConfigMetadata waveConfig = waveConfigDictionary[currentWave]; int enemyQuantity = 0; needLevelUp = false; switch (type) { case EnemyTypeEnum.AVERAGE: enemyQuantity = waveConfig.averageEnemyQuantity; break; case EnemyTypeEnum.ATTACK: enemyQuantity = waveConfig.attackEnemyQuantity; break; case EnemyTypeEnum.DEFEND: enemyQuantity = waveConfig.defendEnemyQuantity; break; case EnemyTypeEnum.SMALL_BOSS: enemyQuantity = waveConfig.smallBossQuantity; if (enemyQuantity > 0) { needLevelUp = true; } break; case EnemyTypeEnum.BIG_BOSS: enemyQuantity = waveConfig.bigBossQuantity; if (enemyQuantity > 0) { needLevelUp = true; } break; } if (enemyQuantity == 0) { return; } aliveEnemyQuantity += enemyQuantity * enemySpawnLocations.Length; string key = GetKeyForEnemyConfig(currentWave, type); if (!enemyConfigDictionary.ContainsKey(key)) { Debug.LogError("Can't find " + key + " config in enemyConfigDictionary"); } EnemyMetadata config = enemyConfigDictionary[key]; for (int i = 0; i < enemySpawnLocations.Length; i++) { SpawnEnemyWithConfig(enemySpawnLocations[i], enemyQuantity, config); } }
private void SpawnEnemyWithConfig(GameObject spawnLocation, int quantity, EnemyMetadata config) { GameObject enemyPrefab = levelConfig.enemyPrefabs[Random.Range(0, levelConfig.enemyPrefabs.Length)]; for (int i = 0; i < quantity; i++) { float xOffset = Random.Range(1.0f, 3.0f); float zOffset = Random.Range(1.0f, 3.0f); Vector3 spawnPos = new Vector3(spawnLocation.transform.position.x + xOffset, spawnLocation.transform.position.y, spawnLocation.transform.position.z + zOffset); StartCoroutine(SpawnEnemyAtPosition(enemyPrefab, spawnPos, config, (i + 1) * AppConstant.Instance.enemySpawnInterval)); } }
private IEnumerator SpawnEnemyAtPosition(GameObject enemyPrefab, Vector3 pos, EnemyMetadata config, float delay) { yield return(new WaitForSeconds(delay)); GameObject enemyObject = GameObject.Instantiate(enemyPrefab, pos, Quaternion.identity); EnemyBase enemy = enemyObject.GetComponent <EnemyBase>(); if (enemy == null) { Debug.Log("ERROR: No EnemyBase Component"); DestroyImmediate(enemyObject); yield return(null); } allEnemies.Add(enemy); enemy.Initialize(currentWave, config, targetGameObject); }
public List <EnemyMetadata> GetEnemyMetadata() { if (enemyList != null) { return(enemyList); } enemyList = new List <EnemyMetadata>(); SqliteCommand cmd = sqlHelper.CreateTextCommand("SELECT * FROM enemy_config"); SqliteDataReader reader = sqlHelper.ExecuteCommand(cmd); while (reader.Read()) { EnemyMetadata row = new EnemyMetadata(reader); enemyList.Add(row); } sqlHelper.CloseResultReader(reader); return(enemyList); }