Beispiel #1
0
    public static BT_Result TickChild(BT_Node child, BT_AgentMemory am)
    {
        if (child.CheckPrecondition(am) == false)
        {
            return(BT_Result.FAILURE);
        }

        am.FinalNodeLastCall = child.ID;

        if (child.Activates == false)
        {
            // Debug.Log(child.ID + " - " + child.GetType().ToString() + " - decider tick");
            BT_Result result = child.Tick(am);
            return(result);
        }
        else
        {
            am.ActivateNode(child.ID);
            // Debug.Log(child.ID + " - " + child.GetType().ToString() + " - action tick");
            BT_Result result = child.Tick(am);
            if (result != BT_Result.RUNNING)
            {
                am.DeactivateNode(child.ID);
            }
            return(result);
        }
    }
Beispiel #2
0
    public override BT_Result Tick(BT_AgentMemory am)
    {
        if (am.IsRunning(ID) == false)
        {
            am.SetInt(ID, "lastRunningNode", 0);
            am.StartRunning(ID);
        }

        for (int node = am.GetInt(ID, "lastRunningNode", 0); node < Children.Count; node++)
        {
            BT_Result result = TickChild(Children[node], am);

            if (result == BT_Result.FAILURE)
            {
                continue;
            }
            else if (result == BT_Result.RUNNING)
            {
                am.SetInt(ID, "lastRunningNode", node);
                return(result);
            }
            else
            {
                am.StopRunning(ID);
                return(result);
            }
        }

        am.StopRunning(ID);
        return(BT_Result.FAILURE);
    }
    public override void Found(BT_AgentMemory am, IAccessible matchingCandidate, bool secondAccessTileUsed)
    {
        am.Service = matchingCandidate as Service;
        am.UseServiceSecondAccessTile = secondAccessTileUsed;

        am.Character.WorkFinished();
    }
Beispiel #4
0
 public override void Activate(BT_AgentMemory am)
 {
     if (am.Character.DestinationTile != GetDestinationTile(am))
     {
         am.Character.SetNewDestination(am.Character.CurrentTile, true, null, this);
     }
 }
Beispiel #5
0
    public override BT_Result Tick(BT_AgentMemory am)
    {
        if (am.IsRunning(ID) == false)
        {
            am.SetInt(ID, "lastRunningNode", 0);
            am.StartRunning(ID);
        }

        for (int node = am.GetInt(ID, "lastRunningNode", 0); node < Children.Count; node++)
        {
            BT_Result result = TickChild(Children[node], am);

            if (result == BT_Result.SUCCESS)
            {
                // Sprawdzamy następny
                continue;
            }
            else if (result == BT_Result.RUNNING)
            {
                am.SetInt(ID, "lastRunningNode", node);
                return(result);
            }
            else
            {
                // Porażka lub błąd - zaczynamy od nowa
                am.StopRunning(ID);
                return(result);
            }
        }

        am.StopRunning(ID);
        return(BT_Result.SUCCESS);
    }
    public Character(string name, Tile currentTile, BT_Tree behaviourTree, bool isRobot)
    {
        Name  = name;
        world = GameManager.Instance.World;

        State = CharacterState.IdleAtDestination;

        CurrentTile = currentTile;
        IsRobot     = isRobot;

        Resource = -1;

        pathfinder         = world.Pathfinder;
        MovementPercentage = 0f;

        this.behaviourTree = behaviourTree;
        agentMemory        = new BT_AgentMemory(this);

        StaticData.LoadNeeds(this);

        CurrentRotation       = Quaternion.identity;
        targetRotation        = Quaternion.identity;
        lastTileRotation      = Quaternion.identity;
        isLastTileRotationSet = false;

        inaccessibleTilesTimers = new Dictionary <Tile, float>();

        DestinationTile = CurrentTile;
    }
 public override bool CheckPrecondition(BT_AgentMemory am)
 {
     return(am.Workplace == null &&
            am.Service == null &&
            am.Character.Reservation == null &&
            am.Character.HasResource == false &&
            am.Character.State == CharacterState.IdleAtDestination &&
            am.HasTimerElapsed(ID));
 }
Beispiel #8
0
    public override void WhileRunning(BT_AgentMemory am)
    {
        if (am.Service.ReserveService(am.Character) == false)
        {
            am.Character.ServiceEnded();
        }

        // am.Character.WorkFinished();
    }
Beispiel #9
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);
        }
    public override void Deactivate(BT_AgentMemory am)
    {
        BT_FindStorageForResourceData data = am.GetObject(ID) as BT_FindStorageForResourceData;

        if (data != null && data.PotentialReservation != null)
        {
            data.PotentialReservation.TargetStorage.RemoveFreeSpaceReservation(am.Character);
        }
        am.SetObject(ID, null);
    }
    public override BT_Result Tick(BT_AgentMemory am)
    {
        BT_Result result;

        do
        {
            result = TickChild(Child, am);
        }while (result == BT_Result.SUCCESS || result == BT_Result.RUNNING);

        return(result);
    }
Beispiel #12
0
    public BT_Result Tick(BT_AgentMemory am)
    {
        am.ResetActiveNodesList();
        am.ProcessTimers(am.DeltaTime);
        am.CurrentTree = this;

        BT_Result result = BT_Node.TickChild(Root, am);

        // Debug.Log(am.Character.Name + " - " + am.FinalNodeLastCall + " - " + GetNodeByID(am.FinalNodeLastCall).GetType());
        return(result);
    }
Beispiel #13
0
 public override BT_Result Tick(BT_AgentMemory am)
 {
     if (am.Character.Reservation == null)
     {
         return(BT_Result.FAILURE);
     }
     else
     {
         return(BT_Result.SUCCESS);
     }
 }
Beispiel #14
0
 public override BT_Result Tick(BT_AgentMemory am)
 {
     if (am.Character.HasResource)
     {
         return(BT_Result.SUCCESS);
     }
     else
     {
         return(BT_Result.FAILURE);
     }
 }
Beispiel #15
0
 public override BT_Result Tick(BT_AgentMemory am)
 {
     if (am.Workplace == null)
     {
         return(BT_Result.FAILURE);
     }
     else
     {
         return(BT_Result.SUCCESS);
     }
 }
Beispiel #16
0
 public override BT_Result Tick(BT_AgentMemory am)
 {
     if (am.Character.Needs.ContainsKey(need) &&
         am.Character.Needs[need] > threshold)
     {
         return(BT_Result.SUCCESS);
     }
     else
     {
         return(BT_Result.FAILURE);
     }
 }
Beispiel #17
0
 public override BT_Result Tick(BT_AgentMemory am)
 {
     if (am.Character.State == CharacterState.UsingService)
     {
         am.Character.DisplayObject.CharacterUsesModule(am.Service);
         return(BT_Result.SUCCESS);
     }
     else
     {
         return(BT_Result.FAILURE);
     }
 }
Beispiel #18
0
    public override BT_Result Tick(BT_AgentMemory am)
    {
        Tile goal = GetDestinationTile(am);

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

        if (am.IsRunning(ID) == false)
        {
            if (am.Character.SetNewDestination(goal, true, GetDestinationTileOwner(am), this))
            {
                am.Character.SetLastTileRotation(GetDestinationTileRotation(am));

                am.StartRunning(ID);
                return(BT_Result.RUNNING);
            }
            else
            {
                return(BT_Result.FAILURE);
            }
        }
        else
        {
            WhileRunning(am);

            if (am.Character.DestinationTile == goal)
            {
                if (am.Character.SetNewDestination(goal, true, GetDestinationTileOwner(am), this) == false)
                {
                    return(BT_Result.FAILURE);
                }
            }

            if (am.Character.CurrentTile == goal)
            {
                am.StopRunning(ID);
                return(BT_Result.SUCCESS);
            }

            if (am.Character.IsTileMarkedAsInaccessible(goal) || am.Character.DestinationTile != goal)
            {
                am.StopRunning(ID);
                return(BT_Result.FAILURE);
            }

            return(BT_Result.RUNNING);
        }
    }
Beispiel #19
0
 public override BT_Result Tick(BT_AgentMemory am)
 {
     if (am.Workplace != null &&
         am.Workplace.CanReserveJob(am.Character) == false)
     {
         am.Workplace = null;
         am.Character.SetNewDestination(am.Character.CurrentTile, false, null, this);
         return(BT_Result.SUCCESS);
     }
     else
     {
         return(BT_Result.FAILURE);
     }
 }
    public override BT_Result Tick(BT_AgentMemory am)
    {
        for (int i = 0; i < Children.Count; i++)
        {
            BT_Result result = TickChild(Children[i], am);

            if (result != BT_Result.SUCCESS)
            {
                return(result);
            }
        }

        return(BT_Result.SUCCESS);
    }
 public override BT_Result Tick(BT_AgentMemory am)
 {
     if (am.Character.Reservation != null &&
         am.Character.HasResource &&
         (am.Character.Reservation.TargetStorage.GetAccessTile(false) == am.Character.CurrentTile ||
          am.Character.Reservation.TargetStorage.GetAccessTile(true) == am.Character.CurrentTile))
     {
         if (am.Character.Reservation.TargetStorage.TransferToStorage(am.Character.Reservation.Resource, am.Character))
         {
             return(BT_Result.SUCCESS);
         }
     }
     return(BT_Result.FAILURE);
 }
    public override BT_Result Tick(BT_AgentMemory am)
    {
        if (am.Character.Reservation != null)
        {
            if (am.Character.Reservation.SourceStorage != null)
            {
                am.Character.Reservation.SourceStorage.RemoveResourceReservation(am.Character);
            }

            am.Character.Reservation.TargetStorage.RemoveFreeSpaceReservation(am.Character);

            am.Character.ReservationUsed();
        }
        return(BT_Result.SUCCESS);
    }
    public override BT_Result Tick(BT_AgentMemory am)
    {
        BT_Result result = TickChild(Child, am);

        if (result == BT_Result.FAILURE)
        {
            return(BT_Result.SUCCESS);
        }
        else if (result == BT_Result.SUCCESS)
        {
            return(BT_Result.FAILURE);
        }
        else
        {
            return(result);
        }
    }
Beispiel #24
0
    public override BT_Result Tick(BT_AgentMemory am)
    {
        for (int i = 0; i < Children.Count; i++)
        {
            BT_Result result = TickChild(Children[i], am);

            if (result == BT_Result.FAILURE)
            {
                continue;
            }
            else
            {
                return(result);
            }
        }
        return(BT_Result.FAILURE);
    }
Beispiel #25
0
 public override BT_Result Tick(BT_AgentMemory am)
 {
     if (am.Character.Reservation != null &&
         am.Character.HasResource == false &&
         am.Character.Reservation.SourceStorage != null &&
         (am.Character.Reservation.SourceStorage.GetAccessTile(false) == am.Character.CurrentTile ||
          am.Character.Reservation.SourceStorage.GetAccessTile(true) == am.Character.CurrentTile))
     {
         if (am.Character.Reservation.SourceStorage.TransferFromStorage(am.Character.Reservation.Resource, am.Character))
         {
             return(BT_Result.SUCCESS);
         }
         else
         {
             // Nie mieliśmy rezerwacji - coś jest bardzo nie tak
         }
     }
     return(BT_Result.FAILURE);
 }
 public override BT_Result Tick(BT_AgentMemory am)
 {
     if (am.Service == null || am.Service.GetAccessTile(am.UseServiceSecondAccessTile) != am.Character.CurrentTile)
     {
         return(BT_Result.ERROR);
     }
     else
     {
         bool result = am.Service.StartService(am.Character);
         if (result)
         {
             am.Character.DisplayObject.CharacterUsesModule(am.Service);
             return(BT_Result.SUCCESS);
         }
         else
         {
             return(BT_Result.FAILURE);
         }
     }
 }
Beispiel #27
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);
    }
Beispiel #28
0
    public override BT_Result Tick(BT_AgentMemory am)
    {
        ResourceReservation reservationToCheck = am.Character.Reservation;

        if (reservationToCheck == null)
        {
            return(BT_Result.SUCCESS);
        }

        if ((reservationToCheck.SourceStorage != null && am.Character.IsTileMarkedAsInaccessible(
                 reservationToCheck.SourceStorage.GetAccessTile(reservationToCheck.UseSourceStorageSecondAccessTile))) ||
            (am.Character.IsTileMarkedAsInaccessible(
                 reservationToCheck.TargetStorage.GetAccessTile(reservationToCheck.UseTargetStorageSecondAccessTile))))
        {
            return(BT_Result.FAILURE);
        }
        else
        {
            return(BT_Result.SUCCESS);
        }
    }
Beispiel #29
0
    public override BT_Result Tick(BT_AgentMemory am)
    {
        if (am.Workplace == null ||
            (am.Workplace.GetAccessTile(am.UseWorkplaceSecondAccessTile) != am.Character.CurrentTile))
        {
            return(BT_Result.ERROR);
        }
        else
        {
            bool result = am.Workplace.Work(am.DeltaTime, am.Character);

            if (result)
            {
                am.Character.DisplayObject.CharacterUsesModule(am.Workplace);
                return(BT_Result.RUNNING);
            }
            else
            {
                return(BT_Result.FAILURE);
            }
        }
    }
Beispiel #30
0
 public override void WhileRunning(BT_AgentMemory am)
 {
     if (am.Workplace.Building.Prototype.IsNaturalDeposit)
     {
         if (GameManager.Instance.World.ReserveNaturalDeposit(am.Character, am.Workplace) &&
             am.Workplace.ReserveJob(am.Character))
         {
             return;
         }
         else
         {
             am.Character.WorkFinished();
         }
     }
     else
     {
         if (am.Workplace.ReserveJob(am.Character) == false)
         {
             am.Character.WorkFinished();
         }
     }
 }