Пример #1
0
    /// <summary>
    /// Based of current increment of mana, cast spells
    /// </summary>
    void CastSpellsAI()
    {
        int[] totalManaIncrease = { 0, 0, 0, 0, 0 };

        // Count mana increase per owner
        foreach (VertexController vertex in _gameplayController.VertexList)
        {
            if (vertex.Type == VertexType.Shrine)
            {
                totalManaIncrease[(int)vertex.Owner] += vertex.Level;
            }
        }

        foreach (VertexController vertex in _gameplayController.VertexList)
        {
            // For each enemy player
            if (vertex.Owner != OwnerType.Player && vertex.Owner != OwnerType.Wild)
            {
                // Decide if cast spells
                if (_gameplayController.Mana[(int)vertex.Owner] >= 100 && totalManaIncrease[(int)vertex.Owner] <= 2)
                {
                    foreach (VertexController tempVertex in _gameplayController.VertexList)
                    {
                        if (tempVertex.Owner != vertex.Owner && tempVertex.Owner != OwnerType.Wild)
                        {
                            _gameplayController.Mana[(int)vertex.Owner] -= 100;
                            _gameplayController.CastOffensiveSpell(tempVertex);
                            break;
                        }
                    }
                }
                else if (_gameplayController.Mana[(int)vertex.Owner] >= 300 && totalManaIncrease[(int)vertex.Owner] >= 3 && totalManaIncrease[(int)vertex.Owner] <= 4)
                {
                    foreach (VertexController tempVertex in _gameplayController.VertexList)
                    {
                        if (tempVertex.Owner != vertex.Owner && tempVertex.Owner != OwnerType.Wild)
                        {
                            _gameplayController.Mana[(int)vertex.Owner] -= 300;
                            _gameplayController.CastEarthquakeSpell(tempVertex);
                            break;
                        }
                    }
                }
                else if (_gameplayController.Mana[(int)vertex.Owner] >= 500 && totalManaIncrease[(int)vertex.Owner] >= 4)
                {
                    // Search for vertex with highest armypower to takeover
                    int vertexIdWithHighestArmy = -1;
                    int vertexArmyPower         = int.MinValue;
                    foreach (VertexController tempVertex in _gameplayController.VertexList)
                    {
                        if (tempVertex.Owner != vertex.Owner && tempVertex.Owner != OwnerType.Wild)
                        {
                            if (vertexArmyPower < tempVertex.ArmyPower)
                            {
                                vertexIdWithHighestArmy = tempVertex.Id;
                            }
                        }
                    }

                    if (vertexIdWithHighestArmy != -1)
                    {
                        _gameplayController.Mana[(int)vertex.Owner] -= 500;
                        _gameplayController.CastTakeoverCast(GameObject.Find($"vertex{vertexIdWithHighestArmy}").GetComponent <VertexController>(), vertex.Owner);
                        break;
                    }
                }
            }
        }
    }