Beispiel #1
0
 public bool TestUpdateResources(ResourceRequire resourceRequire)  //只判断不更新
 {
     if (!resources.ContainsKey(resourceRequire.resource))
     {
         resources[resourceRequire.resource] = 0;
     }
     return(resources[resourceRequire.resource] + resourceRequire.updateVal >= 0);
 }
Beispiel #2
0
 IEnumerator SendResourcesOneByOne(ResourceRequire require)
 {
     for (int i = 0; i < -require.updateVal; i++)  //一次发一个
     {
         Resource.GetInstance().SendResource(fromPos, toPos, player, toMan.GetResourcesManager(), require.resource);
         yield return(new WaitForSeconds(0.2f));
     }
 }
Beispiel #3
0
 private void RequestForward(ResourceRequire resourceRequire, int forwardNum)
 {
     if (denyForward)
     {
         return;
     }
     foreach (Pipe pipe in pipesFrom)  //如果不可以提供,向上游所有资源供给站发出请求
     {
         pipe.ForwardRequests(resourceRequire, forwardNum + 1);
     }
 }
Beispiel #4
0
    public void SendResource(Vector3 initPos, Vector3 toPos, Player player, ResourcesManager toMan, ResourcesEnum resourcesEnum)  //仅发送一个资源
    {
        GameObject obj    = Instantiate(resourceObj[resourcesEnum], initPos, Quaternion.identity);
        Emission   entity = obj.GetComponent <Emission>();

        entity.SetToWhere(toPos);
        entity.SetPlayer(player);
        entity.SetSpeed(0.1f);//
        entity.OnArrive += (object sender, System.EventArgs e) => {
            ResourceRequire _require = new ResourceRequire();
            _require.resource  = resourcesEnum;
            _require.updateVal = 1;
            toMan.UpdateResources(_require);
        };
    }
Beispiel #5
0
 public void SendResources(ResourceRequire resourceRequire, Pipe toPipe, int forwardNum)  //传递请求(当前无法满足请求)或发送资源(当前满足请求)
 {
     if (forwardNum > maxForwardNum)
     {
         return;                            //传播距离过远(避免循环)
     }
     if (!resourcesManager.TestUpdateResources(resourceRequire))
     {
         RequestForward(resourceRequire, forwardNum + 1);
     }
     else
     {
         resourcesManager.UpdateResources(resourceRequire);
         toPipe.SendResources(resourceRequire);
     }
 }
Beispiel #6
0
    public bool UpdateResources(ResourceRequire resourceRequire)
    {
        ResourcesEnum resource  = resourceRequire.resource;
        int           updateVal = resourceRequire.updateVal;

        if (!resources.ContainsKey(resource))
        {
            resources[resource] = 0;
        }
        if (resources[resource] + updateVal < 0 && OnResourcesLack != null)
        {
            OnResourcesLack.Invoke(this, resourceRequire);//当缺少资源
            return(false);
        }
        else
        {
            resources[resource] += updateVal;
            if (OnUpdateSuccess != null)
            {
                OnUpdateSuccess.Invoke(this, EventArgs.Empty);//当更新成功资源
            }
            return(true);
        }
    }
Beispiel #7
0
 public void SendResources(ResourceRequire resourceRequire)
 {
     StartCoroutine("SendResourcesOneByOne", resourceRequire);
 }
Beispiel #8
0
 public void ForwardRequests(ResourceRequire resourceRequire, int forwardNum)
 {
     fromMan.SendResources(resourceRequire, this, forwardNum);
     Debug.DrawLine(toPos, fromPos, Color.red);
 }