コード例 #1
0
ファイル: Home.cs プロジェクト: Gonuhe/EternityKnights
    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;
    }
コード例 #2
0
    public void ConnectFreightTo(Agora agora)
    {
        FreightAreaData      agoraFreight          = agora.GetComponent <FreightAreaData>();
        FreightAreaIn        agoraAreaIn           = agoraFreight.freightAreaIn;
        FreightAreaOut       agoraAreaOut          = agoraFreight.freightAreaOut;
        HashSet <Collider2D> agoraTreatedColliders = agoraFreight.treatedColliders;

        FreightAreaData freightData = GetComponent <FreightAreaData>();

        freightData.freightAreaIn    = agoraAreaIn;
        freightData.freightAreaOut   = agoraAreaOut;
        freightData.treatedColliders = agoraTreatedColliders;
    }
コード例 #3
0
    protected void Awake()
    {
        /*
         * Les conditions sur l'assignation des freightArea permet de les setter à des
         * objets définis dans un autre Awake s'exécutant avant celui-ci (ce qui peut
         * être très utile pour les marchands d'agora, afin d'éviter les problèmes si,
         * comme dans le test, ils sont déjà présents dans le préfab instancié).
         */
        if (freightAreaIn == null)
        {
            freightAreaIn = GetComponentInChildren <FreightAreaIn>();
        }

        if (freightAreaOut == null)
        {
            freightAreaOut = GetComponentInChildren <FreightAreaOut>();
        }

        _availableCarriers = carriersNber;
        parentStock        = GetComponent <BuildingStock>();
    }
コード例 #4
0
    public bool SendOrderIfPossible()
    {
        FreightAreaOut freightOut = freightAreaData.freightAreaOut;

        if (freightAreaData.availableCarriers > 0 && OrdersToTreat() && freightOut.road.roadLock.IsFree(Orientation.SOUTH))//TODO orientation (opposée à celle du bâtiment)
        {
            ResourceOrder toTreat = NextOrder();

            FreightAreaIn destinationIn = toTreat.deliveryPlace.freightAreaData.freightAreaIn;
            if (RoadsPathfinding.RouteStar(destinationIn.road, freightOut.road, 10, Orientation.SOUTH) != null)//TODO orientation
            {
                MarkAsTreated(toTreat);
                freightAreaData.SendCarrier(toTreat.deliveryPlace, Orientation.SOUTH, toTreat.shipment);//TODO orientation (opposée à celle du bâtiment)

                return(true);
            }
            else //Si la destination n'est pas raccordée au réseau routier, on annule sa commande et on l'en notifie
            {
                toTreat.deliveryPlace.freightAreaData.parentStock.GetComponent <ResourceConsumer>().CancelResourceOrder(toTreat.shipment);
            }
        }

        return(false);
    }