Beispiel #1
0
    //Cycle through list of targets
    public void KeyboardSelect(bool ChooseNext, List <UnitConfig> unitList, UnitConfig selected)
    {
        //Check if unit is idle
        if (selected != null && !selected.CheckUnitState(UnitConfig.UnitState.Idle))
        {
            return;
        }
        //if list is empty, exit function
        if (unitList == null)
        {
            return;
        }
        //If selected is null, pick the first unit in the list
        if (selected == null)
        {
            selected = unitList[0];
        }
        int chosenUnitIndex = unitList.FindIndex(a => a == selected);

        DeselectUnit(selected);

        if (selected.isFriendly)
        {
            //Check if any friendly units have actions left
            //Makes sure you can't target anything at the end of your turn
            bool UnitHasActionsLeft = false;
            foreach (UnitConfig unit in unitList)
            {
                if (unit.actionPoints.CheckAvailableActions(1))
                {
                    UnitHasActionsLeft = true;
                    break;
                }
            }
            if (UnitHasActionsLeft == false)
            {
                return;
            }
        }
        //After all the checks are done, we can start choosing a target
        for (int i = 0; i < unitList.Count; i++)
        {
            //loops around the list
            //Go up the list
            if (ChooseNext)
            {
                chosenUnitIndex++;
            }
            //Go down the list
            else if (!ChooseNext)
            {
                chosenUnitIndex--;
            }
            //If its too high, loop around
            if (chosenUnitIndex >= unitList.Count)
            {
                chosenUnitIndex = 0;
            }
            //If its too low, loop around
            else if (chosenUnitIndex < 0)
            {
                chosenUnitIndex = unitList.Count - 1;
            }
            //Check if enemy unit is targetable
            if (!unitList[chosenUnitIndex].isFriendly && !selected.CheckUnitState(UnitConfig.UnitState.Dead))
            {
                selected       = unitList[chosenUnitIndex];
                selectedTarget = selected;
                selectedUnit.GetAccuracy(selectedTarget.tileX, selectedTarget.tileY);
                if (!selected.isFriendly && playerTurn)
                {
                    //HACK: Hard coded, fix for multiple abilities
                    generateAbilityButtons.abilityName.text        = selectedUnit.unitAbilities.abilities[0].abilityName;
                    generateAbilityButtons.abilityChanceToHit.text = "Chance to hit: " + UnitConfig.accuracy + "%";
                    generateAbilityButtons.abilityTooltip.text     = selectedUnit.unitAbilities.abilities[0].tooltip;
                    //HACK: quick calculations
                    int minDamage = selectedUnit.unitWeapon.baseDamage + selectedUnit.unitWeapon.numberOfDiceDamage;
                    int maxDamage = selectedUnit.unitWeapon.baseDamage + selectedUnit.unitWeapon.numberOfDiceDamage * selectedUnit.unitWeapon.numberOfSidesDamage;
                    generateAbilityButtons.abilityEffect.text = minDamage + " - " + maxDamage + " Damage";
                }

                break;
            }
            if (unitList[chosenUnitIndex].isFriendly && unitList[chosenUnitIndex].actionPoints.CheckAvailableActions(1))
            {
                selected     = unitList[chosenUnitIndex];
                selectedUnit = selected;
                break;
            }
        }

        //Select the next/previous unit
        SelectUnit(selected);
    }