コード例 #1
0
    public override void Execute(Army army, global::PlayerController playerController, out Ticket ticket, EventHandler <TicketRaisedEventArgs> ticketRaisedEventHandler, params object[] parameters)
    {
        ticket = null;
        if (army == null || playerController == null)
        {
            return;
        }
        TerraformDevice terraformDevice = null;

        if (parameters != null && parameters.Length > 0 && parameters[0] is TerraformDevice)
        {
            terraformDevice = (parameters[0] as TerraformDevice);
        }
        List <StaticString> list = new List <StaticString>();

        if (terraformDevice == null || !this.CanToggleOverDevice(army, terraformDevice, ref list))
        {
            return;
        }
        if (terraformDevice.DismantlingArmy == null)
        {
            if (army.IsDismantlingDevice)
            {
                OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, army.DismantlingDeviceTarget, false);
                playerController.PostOrder(order, out ticket, ticketRaisedEventHandler);
            }
            OrderToggleDismantleDevice order2 = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, true);
            playerController.PostOrder(order2, out ticket, ticketRaisedEventHandler);
        }
        else if (terraformDevice.DismantlingArmy == army)
        {
            OrderToggleDismantleDevice order3 = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, false);
            playerController.PostOrder(order3, out ticket, ticketRaisedEventHandler);
        }
    }
コード例 #2
0
    protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters)
    {
        IGameService service = Services.GetService <IGameService>();

        Diagnostics.Assert(service != null);
        IGameEntityRepositoryService service2 = service.Game.Services.GetService <IGameEntityRepositoryService>();

        if (this.orderTicket != null)
        {
            if (!this.orderTicket.Raised)
            {
                return(State.Running);
            }
            if (this.orderTicket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed)
            {
                this.orderTicket         = null;
                aiBehaviorTree.ErrorCode = 1;
                return(State.Failure);
            }
            this.orderTicket = null;
            return(State.Success);
        }
        else
        {
            Army army;
            if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None)
            {
                return(State.Failure);
            }
            if (army.IsDismantlingDevice)
            {
                aiBehaviorTree.ErrorCode = 37;
                return(State.Failure);
            }
            if (!aiBehaviorTree.Variables.ContainsKey(this.TargetVarName))
            {
                aiBehaviorTree.LogError("${0} not set", new object[]
                {
                    this.TargetVarName
                });
                return(State.Failure);
            }
            IGameEntity gameEntity = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity;
            if (!(gameEntity is IWorldPositionable) || !(gameEntity is TerraformDevice))
            {
                aiBehaviorTree.ErrorCode = 10;
                return(State.Failure);
            }
            if (!service2.Contains(gameEntity.GUID))
            {
                return(State.Success);
            }
            if ((gameEntity as TerraformDevice).TurnsToActivate() < 1999)
            {
                return(State.Success);
            }
            if ((gameEntity as TerraformDevice).DismantlingArmy != null)
            {
                aiBehaviorTree.ErrorCode = 37;
                return(State.Failure);
            }
            Diagnostics.Assert(AIScheduler.Services != null);
            if (service.Game.Services.GetService <IWorldPositionningService>().GetDistance(army.WorldPosition, (gameEntity as IWorldPositionable).WorldPosition) != 1)
            {
                aiBehaviorTree.ErrorCode = 12;
                return(State.Failure);
            }
            IEncounterRepositoryService service3 = service.Game.Services.GetService <IEncounterRepositoryService>();
            if (service3 != null)
            {
                IEnumerable <Encounter> enumerable = service3;
                if (enumerable != null && enumerable.Any((Encounter encounter) => encounter.IsGarrisonInEncounter(army.GUID, false)))
                {
                    return(State.Running);
                }
            }
            OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, gameEntity.GUID, true);
            aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order, out this.orderTicket, null);
            return(State.Running);
        }
    }
コード例 #3
0
 protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters)
 {
     if (this.ticket != null)
     {
         if (!this.orderExecuted)
         {
             return(Amplitude.Unity.AI.BehaviourTree.State.Running);
         }
         if (this.ticket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed)
         {
             this.orderExecuted       = false;
             this.ticket              = null;
             aiBehaviorTree.ErrorCode = 1;
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         this.orderExecuted = false;
         this.ticket        = null;
         return(Amplitude.Unity.AI.BehaviourTree.State.Success);
     }
     else
     {
         Army army;
         if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None)
         {
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         if (!aiBehaviorTree.Variables.ContainsKey(this.TargetVarName))
         {
             aiBehaviorTree.LogError("${0} not set", new object[]
             {
                 this.TargetVarName
             });
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         IGameEntity gameEntity = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity;
         if (!(gameEntity is TerraformDevice))
         {
             aiBehaviorTree.LogError("${0} is not a device", new object[]
             {
                 this.TargetVarName
             });
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         TerraformDevice terraformDevice = gameEntity as TerraformDevice;
         IGameService    service         = Services.GetService <IGameService>();
         Diagnostics.Assert(service != null);
         service.Game.Services.GetService <IGameEntityRepositoryService>();
         AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType state = this.State;
         if (state != AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Start)
         {
             if (state == AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Stop && (!terraformDevice.DismantlingArmyGUID.IsValid || army.GUID != terraformDevice.DismantlingArmyGUID))
             {
                 return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
             }
         }
         else if (terraformDevice.DismantlingArmyGUID.IsValid)
         {
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         this.orderExecuted = false;
         OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, this.State == AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Start);
         aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order, out this.ticket, new EventHandler <TicketRaisedEventArgs>(this.Order_TicketRaised));
         return(Amplitude.Unity.AI.BehaviourTree.State.Running);
     }
 }