Пример #1
0
        public override IAccessible GetPotentialDestination(BT_AgentMemory am, bool secondAccessTile)
        {
            BT_FindTransportJobNodeData data = am.GetObject(ParentID) as BT_FindTransportJobNodeData;

            if (am.Character.AreBothAccessTilesMarkedAsInaccessbile(data.PotentialReservation.TargetStorage))
            {
                return(null);
            }
            return(data.PotentialReservation.TargetStorage);
        }
Пример #2
0
    public override void Deactivate(BT_AgentMemory am)
    {
        BT_FindTransportJobNodeData data = am.GetObject(ID) as BT_FindTransportJobNodeData;

        if (data == null)
        {
            return;
        }

        // Jeśli oba magazyny nie zostały sprawdzone, odwołanie rezerwacji
        if (data.TargetStorageChecked == false || data.SourceStorageChecked == false)
        {
            if (data.PotentialReservation != null)
            {
                data.PotentialReservation.SourceStorage.RemoveResourceReservation(am.Character);
                data.PotentialReservation.TargetStorage.RemoveFreeSpaceReservation(am.Character);
            }
        }

        am.SetObject(ID, null);
    }
Пример #3
0
    public override BT_Result Tick(BT_AgentMemory am)
    {
        BT_FindTransportJobNodeData data = am.GetObject(ID) as BT_FindTransportJobNodeData;

        if (data == null)
        {
            return(BT_Result.FAILURE);
        }

        World world = GameManager.Instance.World;

        if (data.PotentialReservation == null)
        {
            ResourceReservation newReservation = null;

            newReservation = world.GetReservationForFillingInput(am.Character);

            if (newReservation == null)
            {
                newReservation = world.GetReservationForEmptying(am.Character);
            }

            if (newReservation != null)
            {
                data.PotentialReservation = newReservation;
                data.TargetStorageChecked = false;
                data.SourceStorageChecked = false;
            }
            else
            {
                am.SetTimer(ID, timeoutAfterFailure);
                return(BT_Result.FAILURE);
            }

            return(BT_Result.RUNNING);
        }

        if (data.TargetStorageChecked == false)
        {
            BT_Result result = TickChild(findTargetStorageNode, am);

            if (result == BT_Result.SUCCESS)
            {
                data.TargetStorageChecked = true;
                return(BT_Result.RUNNING);
            }
            else if (result == BT_Result.RUNNING)
            {
                return(BT_Result.RUNNING);
            }
            else
            {
                am.SetTimer(ID, timeoutAfterFailure);
                return(BT_Result.FAILURE);
            }
        }
        else
        {
            BT_Result result = TickChild(findSourceStorageNode, am);

            if (result == BT_Result.SUCCESS)
            {
                data.SourceStorageChecked = true;

                if (am.Character.SetNewReservation(data.PotentialReservation))
                {
                    am.SetObject(ID, null);
                    return(BT_Result.SUCCESS);
                }
                else
                {
                    data.PotentialReservation.SourceStorage.RemoveResourceReservation(am.Character);
                    data.PotentialReservation.TargetStorage.RemoveFreeSpaceReservation(am.Character);

                    am.SetTimer(ID, timeoutAfterFailure);
                    return(BT_Result.FAILURE);
                }
            }
            else if (result == BT_Result.RUNNING)
            {
                return(BT_Result.RUNNING);
            }
            else
            {
                am.SetTimer(ID, timeoutAfterFailure);
                return(BT_Result.FAILURE);
            }
        }
    }
Пример #4
0
        public override void Found(BT_AgentMemory am, IAccessible matchingCandidate, bool secondAccessTileUsed)
        {
            BT_FindTransportJobNodeData data = am.GetObject(ParentID) as BT_FindTransportJobNodeData;

            data.PotentialReservation.UseTargetStorageSecondAccessTile = secondAccessTileUsed;
        }