Пример #1
0
    public void GetTargets(CombatResolver resolver, CombatUnit user, List <CombatUnit> targets)
    {
        CombatPartyType targetedParty = TargetAlly ? user.CombatParty : user.OpponentParty;
        CombatUnit      targetedUnit  = resolver.GetCombatUnit(targetedParty, Position);

        if (targetedUnit != null)
        {
            targets.Add(targetedUnit);
        }
    }
Пример #2
0
 internal CombatUnit GetCombatUnit(CombatPartyType partyType, PartyPosition position)
 {
     if (partyType == CombatPartyType.Offense)
     {
         return(_OffenseCombatUnits[(int)position]);
     }
     else if (partyType == CombatPartyType.Defense)
     {
         return(_DefenseCombatUnits[(int)position]);
     }
     return(null);
 }
Пример #3
0
 internal Party GetPartyReference(CombatPartyType partyType)
 {
     if (partyType == CombatPartyType.Offense)
     {
         return(OffenseParty);
     }
     else if (partyType == CombatPartyType.Defense)
     {
         return(DefenseParty);
     }
     return(null);
 }
Пример #4
0
    public void GetTargets(CombatResolver resolver, CombatUnit user, List <CombatUnit> targets)
    {
        CombatPartyType opponentParty = user.OpponentParty;

        foreach (PartyPosition position in SkillTargetOrder)
        {
            CombatUnit targetUnit = resolver.GetCombatUnit(opponentParty, position);
            if (targetUnit != null && !targetUnit.Unit.IsDead)
            {
                targets.Add(targetUnit);
                break;
            }
        }
    }
Пример #5
0
    public void GetTargets(CombatResolver resolver, CombatUnit user, List <CombatUnit> targets)
    {
        CombatPartyType targetParty = TargetAllyParty ? user.CombatParty : user.OpponentParty;

        CombatUnit targetUnit = null;

        if (ByPercentage)
        {
            float percentage = 0.0f;
            // Go through each position in standard targeting order, such that if multiple units have the same percentage,
            // it prioritize the unit with standard targeting order.
            foreach (PartyPosition position in StandardSingleTargeting.SkillTargetOrder)
            {
                CombatUnit member = resolver.GetCombatUnit(targetParty, position);
                if (member != null && !member.Unit.IsDead)
                {
                    float percentageLife = (float)member.Unit.Status.Life / (float)member.Unit.Status.MaxLife;
                    if (targetUnit == null || percentageLife < percentage)
                    {
                        targetUnit = member;
                        percentage = percentageLife;
                    }
                }
            }
        }
        else
        {
            int life = 0;
            // Same prioritization as the percentage case.
            foreach (PartyPosition position in StandardSingleTargeting.SkillTargetOrder)
            {
                CombatUnit member = resolver.GetCombatUnit(targetParty, position);
                if (member != null && !member.Unit.IsDead)
                {
                    if (targetUnit == null || member.Unit.Status.Life < life)
                    {
                        targetUnit = member;
                        life       = member.Unit.Status.Life;
                    }
                }
            }
        }

        if (targetUnit != null)
        {
            targets.Add(targetUnit);
        }
    }
Пример #6
0
    public CombatUnit(CombatResolver resolver, CombatPartyType partyType, PartyPosition position)
    {
        Resolver = resolver;

        CombatParty = partyType;
        Position    = position;

        Party partyRef = Resolver.GetPartyReference(partyType);

        Unit  = partyRef.GetAssignedUnit(position);
        Skill = partyRef.GetAssignedSkill(position);

        CombatStatus = new CombatUnitStatus();
        CombatStatus.Reset();

        CurrentSkillExecuter = null;
    }