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); } }
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(); }
public override void Activate(BT_AgentMemory am) { if (am.Character.DestinationTile != GetDestinationTile(am)) { am.Character.SetNewDestination(am.Character.CurrentTile, true, null, this); } }
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)); }
public override void WhileRunning(BT_AgentMemory am) { if (am.Service.ReserveService(am.Character) == false) { am.Character.ServiceEnded(); } // am.Character.WorkFinished(); }
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); }
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); }
public override BT_Result Tick(BT_AgentMemory am) { if (am.Character.Reservation == null) { return(BT_Result.FAILURE); } else { return(BT_Result.SUCCESS); } }
public override BT_Result Tick(BT_AgentMemory am) { if (am.Character.HasResource) { return(BT_Result.SUCCESS); } else { return(BT_Result.FAILURE); } }
public override BT_Result Tick(BT_AgentMemory am) { if (am.Workplace == null) { return(BT_Result.FAILURE); } else { return(BT_Result.SUCCESS); } }
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); } }
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); } }
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); } }
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); } }
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); }
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); } } }
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); }
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); } }
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); } } }
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(); } } }