Esempio n. 1
0
    private void EnemyKilledHandler(EnemyUnitData enemyUnitData)
    {
        if (_enemiesLeftToKill.ContainsKey(enemyUnitData))
        {
            _enemiesLeftToKill[enemyUnitData]--;

            if (_enemiesLeftToKill[enemyUnitData] == 0)
            {
                _enemiesLeftToKill.Remove(enemyUnitData);
            }
        }

        if (_enemiesLeftToKill.Count == 0)
        {
            _currentWave++;

            if (_currentWave == _numberOfWaves)
            {
                OnPlayersWins?.Invoke();
                return;
            }

            GetNextWave();
            ResetTimer();
        }
    }
    public EnemyUnit CreateBonusUnit(int number)
    {
        EnemyUnitData enemyUnitData = unitFactory.CreateEnemyUnitDataForBonus(number);
        EnemyUnit     enemy         = Instantiate(bonusUnit, bonusUnitSpawnLocation).GetComponent <EnemyUnit>();

        enemy.InitializeEnemyUnitGameObject(enemyUnitData, enemyUnitData.GetMaxHealth());

        return(enemy);
    }
    public EnemyUnit CreateBounty()
    {
        EnemyUnitData enemyUnitData = unitFactory.CreateEnemyUnitDataForBounty();
        EnemyUnit     enemy         = Instantiate(bountyUnit, enemyUnitSpawnLocation).GetComponent <EnemyUnit>();

        enemy.InitializeEnemyUnitGameObject(enemyUnitData, enemyUnitData.GetMaxHealth());

        GameEngine.GetInstance().IncrementEnemyUnitCount();

        return(enemy);
    }
Esempio n. 4
0
    private void EnemyReachedBaseHandler(EnemyUnitData enemyData)
    {
        _health = Mathf.Max(_health - enemyData.Damage);

        OnPlayerHealthChanged?.Invoke(_health);

        if (_health != 0)
        {
            return;
        }

        OnPlayerDefeat?.Invoke();
    }
Esempio n. 5
0
    // Read in special enemy unit data
    private void InitializeSpecialEnemyUnitData()
    {
        specialEnemyData = new Dictionary <string, EnemyUnitData>();

        int       lineIndex = 0;
        TextAsset data      = Resources.Load <TextAsset>(SPECIAL_ENEMY_UNIT_DATA_PATH);

        string[] lines = data.text.Split('\n');
        foreach (string line in lines)
        {
            // skip file header
            if (lineIndex == 0)
            {
                lineIndex++;
                continue;
            }

            // Parse the line
            string[] lineTokens = line.Trim().Split(',');
            if (lineTokens.Length <= 1)
            {
                lineIndex++;
                continue;
            }

            EnemyUnitData enemyUnitData;
            string        displayName     = lineTokens[0];
            float         movementSpeed   = float.Parse(lineTokens[1]);
            float         maxHealth       = float.Parse(lineTokens[2]);
            float         armor           = float.Parse(lineTokens[3]);
            float         maxShields      = float.Parse(lineTokens[4]);
            float         shieldRegenRate = float.Parse(lineTokens[5]);
            if (displayName == "Bounty")
            {
                enemyUnitData = EnemyUnitData.ConstructDataForBounty(displayName, movementSpeed, maxHealth, armor);
            }
            else
            {
                enemyUnitData = EnemyUnitData.ConstructDataForBoss(displayName, movementSpeed, maxHealth, armor, maxShields, shieldRegenRate);
            }
            specialEnemyData[displayName] = enemyUnitData;

            lineIndex++;
        }

        Debug.Log("Finished reading special enemy unit data. Read: [" + (lineIndex + 1) + "] number of lines.");
    }
Esempio n. 6
0
    //---------- Methods ----------
    public void InitializeEnemyUnitGameObject(EnemyUnitData enemyUnitData, float initialHealth)
    {
        SetEnemyUnitData(enemyUnitData);
        this.currentHealth  = initialHealth;
        this.currentShields = enemyUnitData.GetMaxShields();

        UnitSpawner.SetObjectName(gameObject);
        if (enemyUnitData.GetEnemyType() == EnemyType.NORMAL)
        {
            SetNormalEnemyColor();
        }

        // Attach select unit circle to this game object
        Transform enemyUnitCircle = transform.GetChild(0);

        selectedUnitCircle = enemyUnitCircle;
    }
Esempio n. 7
0
    // Read in enemy unit data
    private void InitializeEnemyUnitData()
    {
        enemyUnitData = new Dictionary <int, EnemyUnitData>();

        int    level;
        string displayName;
        float  movementSpeed;
        float  maxHealth;
        float  armor;

        int       lineIndex = 0;
        TextAsset data      = Resources.Load <TextAsset>(ENEMY_UNIT_DATA_PATH);

        string[] lines = data.text.Split('\n');
        foreach (string line in lines)
        {
            // skip file header
            if (lineIndex == 0)
            {
                lineIndex++;
                continue;
            }

            // Parse the line
            string[] lineTokens = line.Trim().Split(',');
            if (lineTokens.Length <= 1)
            {
                lineIndex++;
                continue;
            }
            level         = int.Parse(lineTokens[0]);
            displayName   = lineTokens[1];
            movementSpeed = float.Parse(lineTokens[2]);
            maxHealth     = float.Parse(lineTokens[3]);
            armor         = float.Parse(lineTokens[4]);

            // Construct data object and store it
            EnemyUnitData enemyUnitData = EnemyUnitData.ConstructDataForNormal(displayName, movementSpeed, maxHealth, armor, level);
            this.enemyUnitData[level] = enemyUnitData;

            lineIndex++;
        }

        Debug.Log("Finished reading enemy unit data. Read: [" + (lineIndex + 1) + "] number of lines.");
    }
Esempio n. 8
0
        protected override void DrawPropertyLayout(GUIContent label)
        {
            var rect = EditorGUILayout.GetControlRect(label != null, 45);

            rect = EditorGUI.IndentedRect(rect);

            EnemyUnitData enemyUnit = ValueEntry.SmartValue;
            Texture       texture   = null;

            if (enemyUnit)
            {
                texture = GUIHelper.GetAssetThumbnail(enemyUnit.icon, typeof(TEnemyUnitData), true);
                GUI.Label(rect.AddXMin(50).AlignMiddle(16), EditorGUI.showMixedValue ? "-" : enemyUnit.Name + "  " +
                          $"[ AP:{enemyUnit.stats.Ap} HP:{enemyUnit.stats.Hp} DMG:{enemyUnit.stats.Dmg} DEF:{enemyUnit.stats.Def} ]");
            }

            ValueEntry.WeakSmartValue = SirenixEditorFields.UnityPreviewObjectField(rect.AlignLeft(45), enemyUnit, texture, ValueEntry.BaseValueType);
        }
    // Enemy Unit Creation Functions
    public EnemyUnit CreateEnemyUnit(int level)
    {
        EnemyUnitData enemyUnitData = unitFactory.CreateEnemyUnitData(level);
        EnemyUnit     enemy         = Instantiate(enemyUnit, enemyUnitSpawnLocation).GetComponent <EnemyUnit>();

        float initialHealth = enemyUnitData.GetMaxHealth();

        if (GameEngine.GetInstance().gameMode == GameMode.EASY)
        {
            initialHealth = Mathf.Floor(initialHealth * 0.6f);
        }
        else if (GameEngine.GetInstance().gameMode == GameMode.NORMAL)
        {
            initialHealth = Mathf.Floor(initialHealth * 0.8f);
        }

        enemy.InitializeEnemyUnitGameObject(enemyUnitData, initialHealth);

        GameEngine.GetInstance().IncrementEnemyUnitCount();

        return(enemy);
    }
Esempio n. 10
0
    // Read in bonus unit data
    private void InitializeBonusUnitData()
    {
        bonusUnitData = new Dictionary <int, EnemyUnitData>();

        int       lineIndex = 0;
        TextAsset data      = Resources.Load <TextAsset>(BONUS_UNIT_DATA_PATH);

        string[] lines = data.text.Split('\n');
        foreach (string line in lines)
        {
            // skip file header
            if (lineIndex == 0)
            {
                lineIndex++;
                continue;
            }

            // Parse the line
            string[] lineTokens = line.Trim().Split(',');
            if (lineTokens.Length <= 1)
            {
                lineIndex++;
                continue;
            }

            int           number          = int.Parse(lineTokens[0]);
            float         maxHealth       = float.Parse(lineTokens[1]);
            float         armor           = float.Parse(lineTokens[2]);
            float         maxShields      = float.Parse(lineTokens[3]);
            float         shieldRegenRate = float.Parse(lineTokens[4]);
            EnemyUnitData enemyUnitData   = EnemyUnitData.ConstructDataForBonus(maxHealth, armor, maxShields, shieldRegenRate);
            bonusUnitData[number] = enemyUnitData;

            lineIndex++;
        }

        Debug.Log("Finished reading bonus unit data. Read: [" + (lineIndex + 1) + "] number of lines.");
    }
Esempio n. 11
0
    private void EnemyKilledHandler(EnemyUnitData enemyUnitData)
    {
        _resources += enemyUnitData.MoneyForKill;

        OnResourcesChanged?.Invoke(_resources);
    }
Esempio n. 12
0
    public EnemyUnitData CreateEnemyUnitDataForBonus(int number)
    {
        EnemyUnitData enemyUnitData = bonusUnitData[number];

        return(enemyUnitData);
    }
Esempio n. 13
0
    public EnemyUnitData CreateEnemyUnitDataForBounty()
    {
        EnemyUnitData enemyUnitData = specialEnemyData["Bounty"];

        return(enemyUnitData);
    }
Esempio n. 14
0
    // ---------- Enemy Unit Creation ----------
    public EnemyUnitData CreateEnemyUnitData(int level)
    {
        EnemyUnitData data = enemyUnitData[level];

        return(data);
    }
Esempio n. 15
0
 public void SetEnemyUnitData(EnemyUnitData enemyUnitData)
 {
     this.enemyUnitData = enemyUnitData;
 }