示例#1
0
        // Token: 0x06000CD9 RID: 3289 RVA: 0x0005E890 File Offset: 0x0005CC90
        protected FoliageInstanceList getOrAddList(Dictionary <AssetReference <FoliageInstancedMeshInfoAsset>, FoliageInstanceList> source, AssetReference <FoliageInstancedMeshInfoAsset> assetReference)
        {
            FoliageInstanceList foliageInstanceList;

            if (!source.TryGetValue(assetReference, out foliageInstanceList))
            {
                object typeFromHandle = typeof(PoolablePool <FoliageInstanceList>);
                lock (typeFromHandle)
                {
                    foliageInstanceList = PoolablePool <FoliageInstanceList> .claim();
                }
                foliageInstanceList.assetReference = assetReference;
                source.Add(assetReference, foliageInstanceList);
            }
            return(foliageInstanceList);
        }
示例#2
0
 // Token: 0x06000CDC RID: 3292 RVA: 0x0005E950 File Offset: 0x0005CD50
 public void clearInstances()
 {
     this.hasInstances = false;
     if (this.instances.Count > 0)
     {
         object typeFromHandle = typeof(PoolablePool <FoliageInstanceList>);
         lock (typeFromHandle)
         {
             foreach (KeyValuePair <AssetReference <FoliageInstancedMeshInfoAsset>, FoliageInstanceList> keyValuePair in this.instances)
             {
                 FoliageInstanceList value = keyValuePair.Value;
                 PoolablePool <FoliageInstanceList> .release(value);
             }
         }
     }
     this.instances          = null;
     this.isReadingInstances = false;
 }
示例#3
0
        /// <summary>
        /// Pop an unused container from the queue, or generate new containers if required
        /// </summary>
        /// <returns></returns>
        private CachedMeshHolder PopMeshContainer()
        {
            PoolablePool meshPool = PoolManager.Current.CustomPool(PlanetFacePoolTag, 3, 3);

            while (meshPool.Count < 3)
            {
                GameObject g = new GameObject("Chunk");
                g.transform.SetParent(go.transform);
                g.transform.localPosition = Vector3.zero;
                g.transform.localScale    = Vector3.one;

                MeshFilter meshFilter = g.AddComponent <MeshFilter>();
                Mesh       m          = new Mesh();
                m.name = "Cached Chunk Mesh";
                meshFilter.sharedMesh = m;

                MeshRenderer meshRenderer = g.AddComponent <MeshRenderer>();
                meshRenderer.sharedMaterial = null;
                g.SetActive(false);

                MeshCollider collider = g.AddComponent <MeshCollider>();
                //collider.enabled = false;

                CachedMeshHolder holder = new CachedMeshHolder();
                holder.gameObject = g;
                holder.filter     = meshFilter;
                holder.collider   = collider;
                holder.renderer   = meshRenderer;

                meshPool.Push(holder);
            }

            CachedMeshHolder container = (CachedMeshHolder)meshPool.Pop();

            if (container.gameObject.transform.parent != go.transform)
            {
                container.gameObject.transform.SetParent(go.transform);
                container.gameObject.transform.localPosition = Vector3.zero;
                container.gameObject.transform.localScale    = Vector3.one;
            }
            return(container);
        }