private IEnumerator SortAvailableKeepAsideOrderManagersByDistance(Cell <PriorityQueue <float, KeepAsideOrderManager> > rslt) { StockManager stockManager = GameManager.instance.cityBuilderData.stockManager; PriorityQueue <float, KeepAsideOrderManager> rsltQueue = new PriorityQueue <float, KeepAsideOrderManager>(); IEnumerator <KeepAsideOrderManager> keepAsideEnumerator = stockManager.AllKeepAsideOrderManagers(); while (keepAsideEnumerator.MoveNext()) { KeepAsideOrderManager keepAsideManager = keepAsideEnumerator.Current; if (keepAsideManager != null)//On vérifie s'il n'a pas été détruit { float distance = Vector2.Distance(transform.position, keepAsideManager.transform.position); if (distance <= keepAsideManager.availabilityRange)//Pour éviter les calculs inutiles ; si ce n'est pas le cas, il est de toute façon trop loin { FreightAreaIn inArea = keepAsideManager.freightAreaData.freightAreaIn; FreightAreaOut outHome = freightAreaData.freightAreaOut; float roadDistance = RoadsPathfinding.RealDistanceBetween(inArea.road, outHome.road); if (roadDistance > 0.0f && roadDistance <= keepAsideManager.availabilityRange) { rsltQueue.Push(roadDistance, keepAsideManager); } } } yield return(null); } rslt.value = rsltQueue; }
public void DeliverKeptAsideOrderTo(ResourceCarrier recipient) { ResourceShipment orderedShipment = null; IEnumerator <AgoraMerchant> merchantsEnumerator = _agora.MerchantsEnumerator(); while (merchantsEnumerator.MoveNext()) { AgoraMerchant merchant = merchantsEnumerator.Current; KeepAsideOrderManager merchantOrderManager = merchant.GetComponent <KeepAsideOrderManager>(); if (merchantOrderManager != null) { if (orderedShipment != null) { orderedShipment.AddShipment(merchantOrderManager.DeliverKeptAside(recipient)); } else { orderedShipment = merchantOrderManager.DeliverKeptAside(recipient); } } } recipient.shipment = orderedShipment; }
private IEnumerator DeliveryCoroutine(ResourceCarrier carrier) { KeepAsideOrderManager keepAsideOrderManager = freightAreaData.parentStock.GetComponent <KeepAsideOrderManager>(); yield return(new WaitForSeconds(waterDeliveryTime)); ResourceShipment order = keepAsideOrderManager.DeliverKeptAside(carrier); carrier.shipment = order; carrier.destination = carrier.origin; carrier.GetComponent <RoadRouteManager>().MoveTo(carrier.destination.freightAreaData.freightAreaIn.road); }
protected override void OnFreightAreaEntered(Collider2D other) { ResourceCarrier carrier = other.GetComponent <ResourceCarrier>(); if (carrier != null && carrier.collectingResources && carrier.destination == freightAreaData.parentStock) { KeepAsideOrderManager keepAsideOrderManager = freightAreaData.parentStock.GetComponent <KeepAsideOrderManager>(); carrier.shipment = keepAsideOrderManager.DeliverKeptAside(carrier); freightAreaData.SendBack(carrier); } }
public override void CancelKeptAside(ResourceCarrier carrier) { IEnumerator <AgoraMerchant> merchantsEnumerator = _agora.MerchantsEnumerator(); while (merchantsEnumerator.MoveNext()) { AgoraMerchant merchant = merchantsEnumerator.Current; KeepAsideOrderManager merchantKeepAside = merchant.GetComponent <KeepAsideOrderManager>(); if (merchantKeepAside != null) { merchantKeepAside.CancelKeptAside(carrier); } } }
public override bool CanMakeKeepAsideOrder(string resourceName) { IEnumerator <AgoraMerchant> merchantsEnumerator = _agora.MerchantsEnumerator(); while (merchantsEnumerator.MoveNext()) { AgoraMerchant merchant = merchantsEnumerator.Current; KeepAsideOrderManager merchantKeepAside = merchant.GetComponent <KeepAsideOrderManager>(); if (merchantKeepAside != null && merchantKeepAside.CanMakeKeepAsideOrder(resourceName)) { return(true); } } return(false); }
public override int MakeKeepAsideOrder(string resourceName, int orderedAmount, ResourceCarrier recipient) { int leftToOrder = orderedAmount; IEnumerator <AgoraMerchant> merchantsEnumerator = _agora.MerchantsEnumerator(); while (merchantsEnumerator.MoveNext()) { AgoraMerchant merchant = merchantsEnumerator.Current; KeepAsideOrderManager merchantKeepAside = merchant.GetComponent <KeepAsideOrderManager>(); if (merchantKeepAside != null) { leftToOrder -= merchantKeepAside.MakeKeepAsideOrder(resourceName, leftToOrder, recipient); } if (leftToOrder == 0) { return(orderedAmount); } } return(orderedAmount - leftToOrder); }
public void AddToKeepAsideOrderManagers(KeepAsideOrderManager toAdd) { _keepAsideOrderManagers.Add(toAdd); }