예제 #1
0
    void RegisterCompletedDelivery(DeliveryInfo deliveryInfo)
    {
        float deliveryTime = Time.time - deliveryInfo.timestamp;

        if (deliveryTime < 0)
        {
            Debug.LogError("DELIVERY TIME < 0 - BIG ERROR");
            return;
        }

        ++completedDeliveries;
        avgDeliveryTime += deliveryTime;

        revenue += TimeValueFunctions.DeliveryValue(deliveryTime, deliveryInfo.packageInfo, deliveryInfo.timeValueFunction);
    }
    public void EnqueueDeliveryRequest(Improbable.Entity.Component.ResponseHandle <DeliveryHandler.Commands.RequestDelivery, DeliveryRequest, DeliveryResponse> handle)
    {
        MetricsWriter.Send(new ControllerMetrics.Update().SetIncomingDeliveryRequests(++incomingRequests));

        float expectedDuration = Vector3.Distance(gameObject.transform.position, handle.Request.destination.ToUnityVector()) / SimulationSettings.MaxDroneSpeed;

        if (deliveryRequestQueue.Count >= SimulationSettings.MaxDeliveryRequestQueueSize)
        {
            handle.Respond(new DeliveryResponse(false));
            float value = TimeValueFunctions.DeliveryValue(expectedDuration, handle.Request.packageInfo, handle.Request.timeValueFunction);
            potential  += value;
            rejecValue += value;
            ++rejections;
        }
        else
        {
            deliveryRequestQueue.Enqueue(new QueueEntry(Time.time, handle.Request, 0, expectedDuration));
            handle.Respond(new DeliveryResponse(true));
        }
    }