Exemplo n.º 1
0
    IEnumerator SelectAbility()
    {
        int potentialDamage = 0;

        AbilitySelected = null;
        AbilityTarget   = null;
        PlayerControlledBoardUnit newTarget = null;

        foreach (AbilityDescription ability in currentUnit.AbilityActivator.ListOfAbilities)           //Find the most damage we can do
        {
            if (ability.AbilityTargetType == AbilityDescription.TargetType.TargetEnemy)
            {
                int newPotentialDamage = CheckPotentialDamage(ability, ref newTarget);
                if (newPotentialDamage > potentialDamage)
                {
                    AbilityTarget   = newTarget;
                    AbilitySelected = ability;
                }
            }
        }

        if (AbilitySelected == null || AbilityTarget == null)           //No ability to use
        {
            EndTurn();
        }
        else
        {
            StartCoroutine("TargetAbility");
        }
        yield return(null);
    }
Exemplo n.º 2
0
    /// <summary>
    /// Enter state while waiting for enemy team to go
    /// </summary>
    void EnterStateEnemyTurn()
    {
        currentPhaseStateMethod = new CurrentPhaseState(StateEnemyTurn);

        CombatUIManager.instance.StartEnemyTurnPhase();
        CurrentlySelectedUnit = null;
        AIManager.StartEnemyTurn();

        CurrentPhase = PhaseState.EnemyTurn;
    }
Exemplo n.º 3
0
 public void SetAbilities(PlayerControlledBoardUnit u)
 {
     for (int i = 0; i < u.AbilityActivator.ListOfAbilities.Count; i++)
     {
         AbilityDescription a = u.AbilityActivator.ListOfAbilities [i];
         icons[i].SetIcon(a.AbilityIcon);
         icons[i].SetCooldown(a.Cooldown, a.currentCooldown);
         icons[i].gameObject.SetActive(true);
     }
 }
Exemplo n.º 4
0
 public void SetCurrentUnit(PlayerControlledBoardUnit u)
 {
     if (u == null)
     {
         abilities.StopShowing();
     }
     else
     {
         abilities.SetAbilities(u);
     }
 }
Exemplo n.º 5
0
    /// <summary>
    /// Starts the turn for a unit
    /// </summary>
    void StartTurn(PlayerControlledBoardUnit nextUnit)
    {
        CurrentlySelectedUnit = nextUnit as PlayerControlledBoardUnit;
        CombatUIManager.instance.SelectCharacter(nextUnit.transform);
        BoardManager.instance.StartTurn();
        CurrentlySelectedUnit.StartTurn();
        currentAbility = null;

        if (!CurrentlySelectedUnit.CanTakeTurn())
        {
            EnterStateEndOfTurn();
        }
        else
        {
            EnterStateMovementSelection();
        }
    }
Exemplo n.º 6
0
    /// <summary>
    /// Setup combat initialization like party, enemies, map, etc
    /// </summary>
    public void SetupCombat(int mapIndex, List <PartyUnit> currentParty, List <EnemyUnitInfo> listEnemies)
    {
        map       = BoardManager.instance.Maps [mapIndex];
        AIManager = gameObject.AddComponent <CombatAIManager> ();
        AIManager.combatManager = this;
        EnterStateWaiting();

        if (listEnemies.Count == 0)
        {
            Debug.LogError("No enemies found for combat, lots of errors incoming");
        }

        foreach (PartyUnit unit in currentParty)
        {
            GameObject go = Instantiate(unit.UnitPrefab) as GameObject;
            if (go.GetComponent <MyHeroController3rdPerson> ())
            {
                Destroy(go.GetComponent <MyHeroController3rdPerson> ());
            }
            go.AddComponent <PlayerControlledBoardUnit> ();
            go.AddComponent <AbilityActivator> ();
            PlayerControlledBoardUnit bu = go.GetComponent <PlayerControlledBoardUnit> ();
            bu.Initialize(unit);
            go.name = bu.UnitClass.ToString();
            bu.Spawn(BoardManager.instance.GetHexagonFromArray((int)map.PlayerSpawns [currentParty.IndexOf(unit)].x, (int)map.PlayerSpawns [currentParty.IndexOf(unit)].y));
            CurrentParty.Add(bu);
        }

        foreach (EnemyUnitInfo unit in listEnemies)
        {
            GameObject go = Instantiate(unit.UnitPrefab) as GameObject;
            go.AddComponent <NonPlayerControlledBoardUnit> ();
            go.AddComponent <AbilityActivator> ();
            NonPlayerControlledBoardUnit bu = go.GetComponent <NonPlayerControlledBoardUnit> ();
            bu.Initialize(unit);
            bu.Spawn(BoardManager.instance.GetHexagonFromArray((int)map.EnemySpawns [listEnemies.IndexOf(unit)].x, (int)map.EnemySpawns [listEnemies.IndexOf(unit)].y));
            CurrentEnemies.Add(bu);
        }

        StartTurn(CurrentParty [0]);          //should be started from a list of characters
    }
Exemplo n.º 7
0
    /// <summary>
    /// Check how much damage an ability can do
    /// </summary>
    public int CheckPotentialDamage(AbilityDescription ability, ref PlayerControlledBoardUnit a)
    {
        List <PlayerControlledBoardUnit> units = BoardManager.instance.GetEnemiesInRange(currentUnit.CurrentlyOccupiedHexagon,
                                                                                         ability.castRange, ability.AbilityTargetType);

        if (units.Count == 0)
        {
            return(0);
        }

        PlayerControlledBoardUnit target = units[0];

        if (units.Count > 1)
        {
            target = FindBestTarget(ability, units);
        }
        a = target;


        return(1);
    }
Exemplo n.º 8
0
    /// <summary>
    /// Finds the best target for an ability given a number of targets
    /// </summary>
    public PlayerControlledBoardUnit FindBestTarget(AbilityDescription ability, List <PlayerControlledBoardUnit> targets)
    {
        PlayerControlledBoardUnit currTarget = targets[0];

        float potentialDamage = 0;

        foreach (DebuffEffect debuff in ability.debuffs)
        {
            if (debuff.DebuffType == DebuffEffect.Debuff.Damage)
            {
                potentialDamage += debuff.Damage;
            }
        }

        foreach (PlayerControlledBoardUnit target in targets)
        {
            if (target.CurrentHealth < potentialDamage)             //If we have lethal damage, its a no brainer
            {
                return(target);
            }

            if (target.CurrentHealth / target.MaxHealth           //If we find someone with lower health go for them
                < currTarget.CurrentHealth / currTarget.MaxHealth)
            {
                currTarget = target;
            }

            if (currTarget.UnitClass == PlayerControlledBoardUnit.PlayerClass.Warrior)
            {
                if (target.UnitClass == PlayerControlledBoardUnit.PlayerClass.Wizard ||
                    target.UnitClass == PlayerControlledBoardUnit.PlayerClass.Support)
                {
                    currTarget = target;
                }
            }
        }
        return(currTarget);
    }