private AssetNode GetAssetNodeSync(string assetPath)
        {
            if (assetNodeDic.TryGetValue(assetPath, out var assetNode))
            {
                if (assetNode.IsLoaded())
                {
                    return(assetNode);
                }
                else
                {
                    if (operationLDic.TryGetValue(assetPath, out var operation))
                    {
                        throw new Exception();
                    }
                    else
                    {
                        assetNode.SetAsset(RequestAssetSync(assetPath));
                        return(assetNode);
                    }
                }
            }
            assetNode = assetNodePool.Get();
            assetNode.DoInitialize(assetPath);
            assetNode.SetAsset(RequestAssetSync(assetPath));

            OnCreateAssetNodeSync(assetNode);

            assetNodeDic.Add(assetPath, assetNode);
            return(assetNode);
        }
        private BundleNode GetBundleNode(string bundlePath)
        {
            if (bundleNodeDic.TryGetValue(bundlePath, out var bundleNode))
            {
                if (bundleNode.IsDone)
                {
                    return(bundleNode);
                }
                else
                {
                    throw new Exception("");
                }
            }

            BundleNode mainBundleNode = bundleNodePool.Get();

            string[] dependBundlePaths = bundleDetailConfig.GetDependencies(bundlePath);
            for (int i = 0; i < dependBundlePaths.Length; i++)
            {
                BundleNode dependBundleNode = GetBundleNode(dependBundlePaths[i]);
                mainBundleNode.BindDepend(dependBundleNode);
            }

            AssetBundle bundle = LoadBundleFromFile(bundlePath);

            mainBundleNode.Bundle = bundle;

            bundleNodeDic.Add(bundlePath, mainBundleNode);

            return(mainBundleNode);
        }
        protected override void OnAsyncRequestUpdate(AsyncRequest request)
        {
            var result = request.result;

            string[] assetPaths = request.paths;
            for (int i = 0; i < assetPaths.Length; i++)
            {
                if (result.IsDoneAt(i))
                {
                    continue;
                }

                string    assetPath = assetPaths[i];
                AssetNode assetNode = assetNodeDic[assetPath];
                if (assetNode.IsLoaded())
                {
                    if (request.isInstance)
                    {
                        request.SetUObject(i, assetNode.CreateInstance());
                    }
                    else
                    {
                        request.SetUObject(i, assetNode.GetAsset());
                    }
                    assetNode.ReleaseRef();
                    continue;
                }
                else
                {
                    string     bundlePath = assetDetailConfig.GetBundleByPath(assetPath);
                    BundleNode bundleNode = bundleNodeDic[bundlePath];
                    if (bundleNode.IsDone && !assetOperationDic.ContainsKey(assetPath))
                    {
                        BundleAssetAsyncOperation assetOperation = assetOperationPool.Get();
                        assetOperation.DoInitilize(assetPath);
                        assetOperation.OnOperationComplete = OnAssetFromBundleCreated;

                        assetOperationDic.Add(assetPath, assetOperation);
                        operationLDic.Add(assetPath, assetOperation);
                    }
                    request.SetProgress(i, GetAsyncAssetProgress(assetPath));
                }
            }
            if (result.IsDone())
            {
                if (request.isInstance)
                {
                    request.state = RequestState.InstanceFinished;
                }
                else
                {
                    request.state = RequestState.LoadFinished;
                }
            }
        }
Exemple #4
0
 public void OnMessageReceived(byte[] dataBytes)
 {
     lock (receviedMessageList)
     {
         if (messageDecoder.Decode(dataBytes, out int messageId, out byte[] body))
         {
             ClientReceviedMessage receviedMessage = receviedMessagePool.Get();
             receviedMessage.Id   = messageId;
             receviedMessage.Body = body;
             receviedMessageList.Add(receviedMessage);
         }
        protected override void OnAsyncRequestUpdate(AsyncRequest request)
        {
            var result = request.result;

            string[] assetPaths = request.paths;
            for (int i = 0; i < assetPaths.Length; i++)
            {
                if (result.IsDoneAt(i))
                {
                    continue;
                }

                string    assetPath = assetPaths[i];
                AssetNode assetNode = assetNodeDic[assetPath];
                if (assetNode.IsLoaded())
                {
                    if (request.isInstance)
                    {
                        request.SetUObject(i, assetNode.CreateInstance());
                    }
                    else
                    {
                        request.SetUObject(i, assetNode.GetAsset());
                    }
                    assetNode.ReleaseRef();
                    continue;
                }
                else
                {
                    if (!operationLDic.TryGetValue(assetPath, out var assetOperation))
                    {
                        assetOperation = assetOperationPool.Get();
                        assetOperation.DoInitilize(assetPath);
                        assetOperation.OnOperationComplete = OnAssetLoadCompleted;

                        operationLDic.Add(assetPath, assetOperation);
                    }

                    request.SetProgress(i, assetOperation.Progress);
                }
            }
            if (result.IsDone())
            {
                if (request.isInstance)
                {
                    request.state = RequestState.InstanceFinished;
                }
                else
                {
                    request.state = RequestState.LoadFinished;
                }
            }
        }
 public void OnMessageReceived(Guid guid, byte[] dataBytes)
 {
     if (messageDecoder.Decode(dataBytes, out int messageId, out byte[] messageBody))
     {
         lock (receviedMessageList)
         {
             ServerReceivedMessage receviedMessage = receviedMessagePool.Get();
             receviedMessage.SessionId   = guid;
             receviedMessage.MessageId   = messageId;
             receviedMessage.MessageBody = messageBody;
             receviedMessageList.Add(receviedMessage);
         }
     }
Exemple #7
0
 public void DropPowerUp()
 {
     if (ItemPool && UnityEngine.Random.Range(0f, 1f) > 0.1f && !powerUpDroped)
     {
         powerUpDroped = true;
         var powerUp = ItemPool.Get();
         if (powerUp == null)
         {
             return;
         }
         powerUp.Spawn(transform.position);
         ItemPool.AddItem(powerUp);
     }
 }
        //结点达到分裂的限定,进行结点的分裂
        private void SplitNode(QuadNode node)
        {
            AABB2D bounds = node.Bounds;

            Vector2 childNodeExtents = bounds.HalfExtents;

            QuadNode childNode = m_NodePool.Get();

            childNode.SetData(node.Depth + 1, QuadNodeDirection.LB, new AABB2D(bounds.Center - childNodeExtents, childNodeExtents));
            node[QuadNodeDirection.LB] = childNode;

            childNode = m_NodePool.Get();
            childNode.SetData(node.Depth + 1, QuadNodeDirection.RB, new AABB2D(bounds.Center + new Vector2(childNodeExtents.x, -childNodeExtents.y), childNodeExtents));
            node[QuadNodeDirection.RB] = childNode;

            childNode = m_NodePool.Get();
            childNode.SetData(node.Depth + 1, QuadNodeDirection.LT, new AABB2D(bounds.Center + new Vector2(-childNodeExtents.x, childNodeExtents.y), childNodeExtents));
            node[QuadNodeDirection.LT] = childNode;

            childNode = m_NodePool.Get();
            childNode.SetData(node.Depth + 1, QuadNodeDirection.RT, new AABB2D(bounds.Center + childNodeExtents, childNodeExtents));
            node[QuadNodeDirection.RT] = childNode;
        }
        private BundleNode CreateAsyncBundleNode(string bundlePath)
        {
            var bundleNode = bundleNodePool.Get();

            bundleNode.State = NodeState.Loading;

            BundleAsyncOperation bundleOperation = bundleOperationPool.Get();

            bundleOperation.DoInitilize(bundlePath, bundleRootDir);
            bundleOperation.OnOperationComplete = OnBundleCreated;

            bundleOperationDic.Add(bundlePath, bundleOperation);
            operationLDic.Add(bundlePath, bundleOperation);

            bundleNodeDic.Add(bundlePath, bundleNode);
            return(bundleNode);
        }
        private int RequestAssetsAsync(
            string[] addresses,
            string[] paths,
            bool isInstance,
            OnAssetProgress progressCallback,
            OnAssetComplete completeCallback,
            OnAssetsProgress progressesCallback,
            OnAssetsComplete completesCallback,
            AsyncPriority priority,
            SystemObject userdata)
        {
            int          id      = uniqueIDCreator.GetNextID();
            AsyncRequest request = requestPool.Get();

            request.id                 = id;
            request.addresses          = addresses;
            request.paths              = paths;
            request.isInstance         = isInstance;
            request.progressCallback   = progressCallback;
            request.completeCallback   = completeCallback;
            request.progressesCallback = progressesCallback;
            request.completesCallback  = completesCallback;
            request.priority           = priority;
            request.userdata           = userdata;
            request.state              = RequestState.WaitingForStart;

            AsyncResult result = resultPool.Get();

            result.DoInitialize(id, addresses);
            resultDic.Add(id, result);

            request.result = result;

            requestDic.Add(id, request);
            waitingRequestQueue.Enqueue(request, request.priority);

            return(id);
        }