示例#1
0
    const float fps60 = 0.0166f;       // length of frame at 60fps

    void Awake()
    {
        if (main == null)
        {
            main = this;
        }
    }
示例#2
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);
 }
    private bool ExecuteBattleAction(float battleActionContextRandomNumber, BattleAction battleAction, BattleEffects battleEffects, BattleSimulationUnit initiator, BattleSimulationUnit activator, BattleSimulationTarget[] currentTargets, bool immediate)
    {
        if (battleAction == null)
        {
            throw new ArgumentNullException("battleAction");
        }
        if (battleEffects == null)
        {
            throw new ArgumentNullException("battleEffects");
        }
        if (!battleAction.CanBeAppliedByDeadUnit && activator.GetPropertyValue(SimulationProperties.Health) <= 0f)
        {
            return(false);
        }
        Diagnostics.Assert(this.Simulation != null && this.Simulation.BattleSimulationRandom != null);
        double num  = this.Simulation.BattleSimulationRandom.NextDouble();
        double num2 = (double)battleEffects.GetProbability(initiator);

        if (num >= num2)
        {
            return(false);
        }
        BattleSimulationTarget[] array             = this.Simulation.FilterTargets(battleEffects.TargetsFilter, initiator, currentTargets);
        BattleEffectsArea        battleEffectsArea = battleEffects as BattleEffectsArea;

        if (battleEffectsArea == null)
        {
            BattleActionContext battleActionContext = new BattleActionContext(this, battleAction, battleEffects, initiator, activator, array, battleActionContextRandomNumber);
            this.ExecuteBattleAction(battleActionContext, immediate);
        }
        else
        {
            this.ExecuteAOEBattleAction(battleActionContextRandomNumber, battleAction, battleEffectsArea, initiator, activator, array, immediate);
        }
        return(true);
    }
    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;
                }
            }
        }
    }
    public void ExecuteWaitingActions(BattleSimulation battleSimulation, RoundReport roundReport)
    {
        BattleSimulationUnit battleSimulationUnit = this.Units.FirstOrDefault((BattleSimulationUnit match) => match.Position.IsValid);

        if (battleSimulationUnit == null)
        {
            return;
        }
        List <IUnitReportInstruction> list = new List <IUnitReportInstruction>();

        for (int i = 0; i < this.WaitingArmyActions.Count; i++)
        {
            int num = BattleSimulation.UnitStateNextID++;
            BattleArmyAction           battleArmyAction           = this.WaitingArmyActions[i];
            ContenderActionInstruction contenderActionInstruction = battleArmyAction.BuildContenderActionInstruction(this.ContenderGUID, num, battleSimulationUnit.UnitGUID);
            WorldOrientation           orientation = this.Contender.WorldOrientation;
            if (contenderActionInstruction is ContenderActionSpellInstruction)
            {
                orientation = this.Contender.Deployment.DeploymentArea.Forward;
            }
            if (contenderActionInstruction != null)
            {
                contenderActionInstruction.AddEffectPosition(battleArmyAction.TargetPosition);
                BattleSimulationTarget[] currentTargets = new BattleSimulationTarget[]
                {
                    new BattleSimulationTarget(battleArmyAction.TargetPosition)
                };
                for (int j = 0; j < battleArmyAction.BattleActions.Count; j++)
                {
                    BattleAction battleAction = battleArmyAction.BattleActions[j];
                    for (int k = 0; k < battleAction.BattleEffects.Length; k++)
                    {
                        BattleEffects battleEffects = battleAction.BattleEffects[k];
                        if (battleEffects is BattleEffectsArea)
                        {
                            IPathfindingArea area = (battleEffects as BattleEffectsArea).GetArea(battleArmyAction.TargetPosition, orientation, null, battleSimulation.WorldParameters, battleSimulation.BattleZone, battleSimulationUnit);
                            if (area != null)
                            {
                                WorldPosition[] worldPositions = area.GetWorldPositions(battleSimulation.WorldParameters);
                                if (worldPositions != null)
                                {
                                    contenderActionInstruction.AddEffectArea(worldPositions);
                                }
                            }
                        }
                    }
                    WorldOrientation orientation2 = battleSimulationUnit.Orientation;
                    battleSimulationUnit.Orientation = orientation;
                    battleSimulation.BattleActionController.ExecuteBattleAction(battleAction, battleAction.BattleEffects, battleSimulationUnit, currentTargets, true, list);
                    battleSimulationUnit.Orientation = orientation2;
                    battleSimulation.CheckUnitsDeath(num);
                }
                for (int l = 0; l < list.Count; l++)
                {
                    contenderActionInstruction.AddReportInstruction(list[l]);
                }
                roundReport.ReportInstruction(this.ContenderGUID, contenderActionInstruction);
            }
        }
        this.ClearWaitingActions();
    }