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_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) { 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); } } }
public override void Found(BT_AgentMemory am, IAccessible matchingCandidate, bool secondAccessTileUsed) { BT_FindTransportJobNodeData data = am.GetObject(ParentID) as BT_FindTransportJobNodeData; data.PotentialReservation.UseTargetStorageSecondAccessTile = secondAccessTileUsed; }