// 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); }
// 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; }
/// <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); }