Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    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);
        }
    }
Esempio n. 3
0
    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));
        }
    }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
    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);
    }