Esempio n. 1
0
            public void AddObjectToPool(T go)
            {
                Count++;
                var record = new PoolRecord(go);

                _poolRecordList.Add(record);
            }
Esempio n. 2
0
 public void CreateClonePool(List <T> golist)
 {
     foreach (T t in golist)
     {
         Count++;
         var record =
             new PoolRecord((t))
         {
             Instance = { Name = t.Name + "Clone" }
         };
         _poolRecordList.Add(record);
     }
 }
Esempio n. 3
0
        public static void Prepare( Transform prefab, int amount )
        {
            LinkedList<PrefabPoolItem> pool;
            PoolRecord poolRecord;

            if ( !poolCollection.TryGetValue( prefab, out pool ) )
            {
                pool = poolCollection[ prefab ] = new LinkedList< PrefabPoolItem >();
                poolRecord = poolableDict[ prefab ] = new PoolRecord();

                for ( var i = 0; i < amount; i++ )
                {
                    var poolObject = SpawnNewPoolItem( prefab, null, null );
                    poolObject.gameObject.SetActive( false );
                    poolObject.PrefabReference = prefab;
                    poolObject.IsInPool = true;
                    poolRecord.CurrentAmount++;
                    poolObject.gameObject.name = prefab.name + "_" + poolRecord.CurrentAmount;
                    pool.AddLast( poolObject );
                }
            }
        }
Esempio n. 4
0
        public static PrefabPoolItem Spawn( Transform prefab, Vector3? pos = null, Quaternion? rot = null )
        {
            LinkedList< PrefabPoolItem > pool;

            if ( !poolCollection.TryGetValue( prefab, out pool ) )
            {
                pool = poolCollection[ prefab ] = new LinkedList< PrefabPoolItem >();
                poolableDict[ prefab ] = new PoolRecord();
            }

            var poolItem = pool.Last;
            PrefabPoolItem poolObject;
            if ( poolItem != null )
            {
                poolObject = poolItem.Value;
                pool.RemoveLast ();
            } 
            else 
            {
                var poolableRecord = poolableDict[ prefab ];
                if ( poolableRecord.CurrentAmount >= poolableRecord.MaxAmount )
                   return null;

                poolObject = SpawnNewPoolItem( prefab, pos, rot );
                poolObject.gameObject.SetActive( true );
                poolObject.PrefabReference = prefab;
                poolableRecord.CurrentAmount++;
                poolObject.gameObject.name = prefab.name + "_" + poolableRecord.CurrentAmount;
            }

            if ( pos != null )
             poolObject.gameObject.transform.position = pos.Value;

            if (rot != null )
             poolObject.gameObject.transform.rotation = rot.Value;

            poolObject.IsInPool = false;
            poolObject.gameObject.SetActive( true );

            spawnedObjects.AddLast(poolObject);

            return poolObject;
        }