Exemplo n.º 1
0
    protected float GetRatioOfAlliesAroundTargetPosition(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float result = 0f;

        if (potentialTarget.Neighbours == null)
        {
            return(result);
        }
        int count = potentialTarget.Neighbours.Count;
        int num   = 0;

        if (count > 0)
        {
            for (int i = 0; i < count; i++)
            {
                BattleSimulationUnit unit2 = potentialTarget.Neighbours[i].Unit;
                if (unit2 != null && unit2.Contender.Group == unit.Contender.Group)
                {
                    num++;
                }
            }
            result = (float)num / (float)count;
        }
        return(result);
    }
Exemplo n.º 2
0
 protected bool IsGroundUnit(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     if (potentialTarget.Unit == null)
     {
         return(false);
     }
     return(potentialTarget.Unit.SimulationObject.DescriptorHolders.Exists((SimulationDescriptorHolder match) => match.Descriptor.Name == PathfindingContext.MovementCapacityWalkDescriptor));
 }
Exemplo n.º 3
0
 protected float GetIsTargetTransportShipUnit(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     if (potentialTarget.Unit != null && potentialTarget.Unit.SimulationObject.Tags.Contains(DownloadableContent16.TransportShipUnit))
     {
         return(1f);
     }
     return(0f);
 }
Exemplo n.º 4
0
 protected float GetDoesTargetPlaysBeforeMe(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     if (potentialTarget.Unit != null && (potentialTarget.Unit.HasUnitActions || potentialTarget.Unit.UnitRoundRank < unit.UnitRoundRank))
     {
         return(1f);
     }
     return(0f);
 }
Exemplo n.º 5
0
    protected bool IAmInDarkForm(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        if (unit.Unit == null)
        {
            return(false);
        }
        SimulationProperty property = unit.Unit.SimulationObject.GetProperty(SimulationProperties.ShiftingForm);

        return(property != null && property.Value == 1f);
    }
Exemplo n.º 6
0
    protected float GetIsTargetLower(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float propertyValue = unit.GetPropertyValue(SimulationProperties.Altitude);
        float num           = (float)unit.ElevationMap.GetValue(potentialTarget.StaticPosition);

        if (propertyValue > num)
        {
            return(1f);
        }
        return(0f);
    }
Exemplo n.º 7
0
    protected float GetNumberOfTurnToReachTargetByAir(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float result        = 0f;
        float propertyValue = unit.GetPropertyValue(SimulationProperties.BattleMaximumMovement);

        if (propertyValue != 0f)
        {
            result = (float)this.worldPositionningService.GetDistance(unit.Position, potentialTarget.StaticPosition) / propertyValue;
        }
        return(result);
    }
Exemplo n.º 8
0
    protected float GetRatioOfTargetAltitudeToMyAltitude(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float result        = 0f;
        float propertyValue = unit.GetPropertyValue(SimulationProperties.Altitude);

        if (propertyValue != 0f)
        {
            float num = (float)unit.ElevationMap.GetValue(potentialTarget.StaticPosition);
            result = num / propertyValue;
        }
        return(result);
    }
Exemplo n.º 9
0
    protected float GetRatioOfTargetSpeedToBattleArea(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float result = 0f;

        if (potentialTarget.Unit != null)
        {
            float propertyValue = potentialTarget.Unit.GetPropertyValue(SimulationProperties.BattleMaximumMovement);
            int   num           = potentialTarget.Unit.Contender.Deployment.DeploymentArea.MaxColumn - potentialTarget.Unit.Contender.Deployment.DeploymentArea.MinColumn + 1;
            result = propertyValue / (float)num;
        }
        return(result);
    }
Exemplo n.º 10
0
    protected float GetRatioDistanceToAttackAndMoveRange(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float result           = 0f;
        float distanceByGround = unit.GetDistanceByGround(potentialTarget.StaticPosition);

        if (distanceByGround > 0f)
        {
            float propertyValue  = unit.GetPropertyValue(SimulationProperties.BattleMaximumMovement);
            float propertyValue2 = unit.GetPropertyValue(SimulationProperties.BattleRange);
            result = distanceByGround / (propertyValue + propertyValue2);
        }
        return(result);
    }
Exemplo n.º 11
0
    protected float GetRatioMyDefenseToTargetAttack(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float result = 2f;
        BattleSimulationUnit unit2 = potentialTarget.Unit;

        if (unit2 != null)
        {
            float propertyValue = unit2.GetPropertyValue(SimulationProperties.Attack);
            if (propertyValue != 0f)
            {
                result = Mathf.Clamp(unit.GetPropertyValue(SimulationProperties.Defense) / propertyValue, 0.5f, 2f);
            }
        }
        return(result);
    }
Exemplo n.º 12
0
    protected float GetTargetHPRatio(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float result = 0f;

        if (potentialTarget.Unit != null)
        {
            float propertyValue  = potentialTarget.Unit.GetPropertyValue(SimulationProperties.Health);
            float propertyValue2 = potentialTarget.Unit.GetPropertyValue(SimulationProperties.MaximumHealth);
            if (propertyValue2 != 0f)
            {
                result = propertyValue / propertyValue2;
            }
        }
        return(result);
    }
Exemplo n.º 13
0
    protected float GetTargetDefensiveMilitaryPowerRatio(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float result = 0f;

        if (potentialTarget.Unit != null)
        {
            float propertyValue = potentialTarget.Unit.GetPropertyValue(SimulationProperties.DefensiveMilitaryPower);
            float unitsSimulationAverageData = this.battleSimulation.GetUnitsSimulationAverageData(potentialTarget.Unit.Contender.Group, SimulationProperties.DefensiveMilitaryPower);
            if (unitsSimulationAverageData != 0f)
            {
                result = propertyValue / unitsSimulationAverageData;
            }
        }
        return(result);
    }
Exemplo n.º 14
0
    public ActivePeriod[] GetTargetActivePeriods(BattleSimulationTarget target)
    {
        List <ActivePeriod> list = new List <ActivePeriod>();

        Diagnostics.Assert(this.activeBattleActions != null);
        for (int i = 0; i < this.activeBattleActions.Count; i++)
        {
            BattleActionContext battleActionContext = this.activeBattleActions[i];
            Diagnostics.Assert(battleActionContext != null && battleActionContext.Targets != null);
            if (battleActionContext.Targets.Contains(target))
            {
                Diagnostics.Assert(battleActionContext.ActivePeriods != null);
                list.AddRange(battleActionContext.ActivePeriods);
            }
        }
        return(list.ToArray());
    }
Exemplo n.º 15
0
 public bool ExecuteBattleAction(BattleAction battleAction, BattleEffects[] battleEffectsList, BattleSimulationUnit referenceUnit, WorldPosition targetPosition, bool immediate)
 {
     if (battleAction == null)
     {
         throw new ArgumentNullException("battleAction");
     }
     if (battleEffectsList == null)
     {
         throw new ArgumentNullException("battleEffectsList");
     }
     if (referenceUnit == null)
     {
         throw new ArgumentNullException("initiators");
     }
     BattleSimulationTarget[] currentTargets = new BattleSimulationTarget[]
     {
         new BattleSimulationTarget(targetPosition)
     };
     return(this.ExecuteBattleAction(battleAction, battleEffectsList, referenceUnit, currentTargets, immediate, null));
 }
Exemplo n.º 16
0
    protected float GetTargetedByAlliesWithMyBodyCount(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float result = 0f;
        List <BattleSimulationUnit> targeters = potentialTarget.Targeters;

        if (potentialTarget.Unit != null)
        {
            targeters = potentialTarget.Unit.Targeters;
        }
        if (targeters != null)
        {
            int num = 0;
            for (int i = 0; i < targeters.Count; i++)
            {
                if (targeters[i].Contender.Group == unit.Contender.Group && targeters[i].UnitGUID != unit.UnitGUID && targeters[i].Unit.UnitDesign.UnitBodyDefinition == unit.Unit.UnitDesign.UnitBodyDefinition)
                {
                    num++;
                }
            }
            result = (float)num;
        }
        return(result);
    }
Exemplo n.º 17
0
 protected float IsMyBattleEffectAppliedOnTarget(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     if (potentialTarget.Unit != null)
     {
         IEnumerable <BattleUnitActionController.UnitAction> availableActions;
         if (potentialTarget.Unit.Contender.Group == unit.Contender.Group)
         {
             availableActions = this.battleSimulation.BattleUnitActionController.GetAvailableActions(unit, BattleActionUnit.ActionType.Support);
         }
         else
         {
             availableActions = this.battleSimulation.BattleUnitActionController.GetAvailableActions(unit, BattleActionUnit.ActionType.Attack);
         }
         if (availableActions != null)
         {
             foreach (BattleUnitActionController.UnitAction unitAction in availableActions)
             {
                 for (int i = 0; i < unitAction.BattleAction.BattleEffects.Length; i++)
                 {
                     BattleEffects battleEffects = unitAction.BattleAction.BattleEffects[i];
                     if (battleEffects != null && battleEffects.BattleEffectList != null)
                     {
                         for (int j = 0; j < battleEffects.BattleEffectList.Length; j++)
                         {
                             BattleEffectContext contextFromBattleEffect = unit.GetContextFromBattleEffect(battleEffects.BattleEffectList[j]);
                             if (contextFromBattleEffect != null && contextFromBattleEffect.Target.Unit == potentialTarget.Unit)
                             {
                                 return(1f);
                             }
                         }
                     }
                 }
             }
         }
     }
     return(0f);
 }
Exemplo n.º 18
0
 protected bool IsNotMe(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(potentialTarget.Unit == null || unit.UnitGUID != potentialTarget.Unit.UnitGUID);
 }
Exemplo n.º 19
0
    private void ExecuteAOEBattleAction(float battleActionContextRandomNumber, BattleAction battleAction, BattleEffectsArea battleEffectsArea, BattleSimulationUnit initiator, BattleSimulationUnit activator, BattleSimulationTarget[] aoeCenterTargets, bool immediate)
    {
        if (battleAction == null)
        {
            throw new ArgumentNullException("battleAction");
        }
        if (battleEffectsArea == null)
        {
            throw new ArgumentNullException("battleEffectsArea");
        }
        if (aoeCenterTargets == null || aoeCenterTargets.Length == 0)
        {
            return;
        }
        List <BattleSimulationTarget> list = new List <BattleSimulationTarget>();

        foreach (BattleSimulationTarget battleSimulationTarget3 in aoeCenterTargets)
        {
            WorldOrientation worldOrientation = (battleSimulationTarget3.Unit == null) ? WorldOrientation.Undefined : battleSimulationTarget3.Unit.Orientation;
            if (battleEffectsArea.InitiatorAsCenter || worldOrientation == WorldOrientation.Undefined)
            {
                worldOrientation = ((initiator == null) ? worldOrientation : initiator.Orientation);
            }
            List <WorldPosition> list2 = null;
            if (battleEffectsArea.Type == BattleEffectsArea.AreaType.Chain)
            {
                Diagnostics.Assert(this.Simulation != null);
                BattleSimulationTarget[] array = null;
                if (battleSimulationTarget3.Unit != null)
                {
                    array = this.Simulation.FilterTargets(BattleEffects.TargetFlags.SameGroup, battleSimulationTarget3.Unit, null);
                }
                if (array != null && array.Length != 0)
                {
                    list2 = new List <WorldPosition>(array.Length);
                    list2.AddRange(from battleSimulationTarget in array
                                   select battleSimulationTarget.DynamicPosition);
                }
            }
            SimulationObject context = null;
            if (initiator != null)
            {
                context = initiator.SimulationObject;
            }
            Diagnostics.Assert(this.Simulation != null);
            WorldPosition dynamicPosition = battleSimulationTarget3.DynamicPosition;
            if (battleEffectsArea.InitiatorAsCenter)
            {
                dynamicPosition = new BattleSimulationTarget(initiator).DynamicPosition;
            }
            IPathfindingArea area = battleEffectsArea.GetArea(dynamicPosition, worldOrientation, list2, this.Simulation.WorldParameters, this.Simulation.BattleZone, context);
            if (area == null)
            {
                Diagnostics.LogError("Unknown area of effect {0}, the effect will be applied on the filtered unit.", new object[]
                {
                    battleEffectsArea.Type
                });
            }
            else
            {
                WorldPosition[] worldPositions = area.GetWorldPositions(this.Simulation.WorldParameters);
                if (worldPositions == null)
                {
                    Diagnostics.LogError("Can't get area of effect positions.");
                }
                else
                {
                    list.Clear();
                    for (int j = 0; j < worldPositions.Length; j++)
                    {
                        BattleSimulationUnit unitFromPosition = this.Simulation.GetUnitFromPosition(worldPositions[j], false);
                        if (unitFromPosition != null)
                        {
                            BattleSimulationTarget battleSimulationTarget2 = new BattleSimulationTarget(unitFromPosition);
                            if (battleEffectsArea.AvoidCastingUnit)
                            {
                                bool flag = false;
                                for (int k = 0; k < aoeCenterTargets.Length; k++)
                                {
                                    if (aoeCenterTargets[k].DynamicPosition == battleSimulationTarget2.DynamicPosition)
                                    {
                                        if (battleEffectsArea.Type != BattleEffectsArea.AreaType.Chain)
                                        {
                                            flag = true;
                                            break;
                                        }
                                        battleSimulationTarget2.Ignore = true;
                                    }
                                }
                                if (flag)
                                {
                                    goto IL_225;
                                }
                            }
                            list.Add(battleSimulationTarget2);
                        }
                        IL_225 :;
                    }
                    BattleActionAOEInstruction battleActionAOEInstruction = new BattleActionAOEInstruction(initiator.UnitGUID, battleEffectsArea.RealizationVisualEffectName);
                    battleActionAOEInstruction.RealizationApplicationMethod = battleEffectsArea.RealizationApplicationMethod;
                    battleActionAOEInstruction.RealizationApplicationData   = battleEffectsArea.RealizationApplicationData;
                    this.ReportInstruction(battleActionAOEInstruction);
                    List <IUnitReportInstruction> list3 = this.reportCopy;
                    this.reportCopy = battleActionAOEInstruction.ReportInstructions;
                    Diagnostics.Assert(battleEffectsArea.BattleEffects != null);
                    for (int l = 0; l < battleEffectsArea.BattleEffects.Length; l++)
                    {
                        BattleEffects battleEffects = battleEffectsArea.BattleEffects[l];
                        this.ExecuteBattleAction(battleActionContextRandomNumber, battleAction, battleEffects, initiator, activator, list.ToArray(), immediate);
                    }
                    this.reportCopy = list3;
                }
            }
        }
    }
Exemplo n.º 20
0
    public void ExecuteBattleEffect(BattleSimulationUnit initiator, BattleSimulationUnit activator, BattleSimulationTarget target, BattleEffect battleEffect, BattleActionContext actionContext)
    {
        Diagnostics.Assert(this.battleEffectsContexts != null, "this.battleEffectsContexts != null");
        BattleEffectController battleEffectController;

        if (this.battleEffectsContexts.ContainsKey(target))
        {
            battleEffectController = this.battleEffectsContexts[target];
        }
        else
        {
            battleEffectController = new BattleEffectController(target, this.Simulation);
            this.battleEffectsContexts.Add(target, battleEffectController);
        }
        Diagnostics.Assert(battleEffectController != null);
        battleEffectController.Execute(battleEffect, initiator, activator, this, actionContext);
    }
Exemplo n.º 21
0
 protected bool IsUnit(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(!this.IsFreePosition(unit, potentialTarget));
 }
Exemplo n.º 22
0
 protected bool CanTargetBeDebuffed(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(potentialTarget.Unit != null && potentialTarget.Unit.SimulationObject.GetPropertyValue("CantBeDebuffed") <= 0f);
 }
Exemplo n.º 23
0
 protected bool IsTargetNotMindControlled(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(potentialTarget.Unit != null && potentialTarget.Unit.SimulationObject.GetPropertyValue(SimulationProperties.MindControlCounter) <= 0f);
 }
Exemplo n.º 24
0
 protected bool AlliesArePresent(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(this.battleSimulation.GetUnitAliveAlliesCount(unit) > 1);
 }
Exemplo n.º 25
0
    protected bool IsTargetWithinMovementRange(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
    {
        float distanceByGround = unit.GetDistanceByGround(potentialTarget.StaticPosition);

        return(distanceByGround <= unit.GetPropertyValue(SimulationProperties.BattleMovement));
    }
Exemplo n.º 26
0
 protected bool IAmNotTransportShip(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(!this.IAmTransportShip(unit, potentialTarget));
 }
Exemplo n.º 27
0
 protected bool IAmTransportShip(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(unit.Unit != null && unit.Unit.SimulationObject.Tags.Contains(DownloadableContent16.TransportShipUnit));
 }
Exemplo n.º 28
0
 protected bool IsEnemy(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(potentialTarget.Unit != null && unit.BattleSimulationArmy.Group != potentialTarget.Unit.BattleSimulationArmy.Group);
 }
Exemplo n.º 29
0
 protected bool IAmCombatUnit(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(unit.Unit != null && !this.IsUnitClass(unit, "UnitClassSupport") && !this.IsUnitClass(unit, "UnitClassRanged"));
 }
Exemplo n.º 30
0
 protected bool IsFreePosition(BattleSimulationUnit unit, BattleSimulationTarget potentialTarget)
 {
     return(potentialTarget.Unit == null || potentialTarget.Unit.UnitGUID == unit.UnitGUID);
 }