예제 #1
0
        public T SpawnDefinition <T>(PoolDefinition poolDefinition, Vector3 position, Quaternion rotation, Transform parent = null, bool subSpawn = false, Action <GameObject> OnSpawn = null)
            where T : Component
        {
            GameObject clone = SpawnDefinition(poolDefinition, position, rotation, OnSpawn, parent, subSpawn);

            return((clone != null) ? clone.GetComponent <T>() : null);
        }
예제 #2
0
        public GameObject SpawnDefinition(PoolDefinition poolDefinition, Vector3 position, Quaternion rotation, Action <GameObject> OnSpawn, Transform parent = null, bool subSpawn = false)
        {
            if (!IsGameObjectPrefab(poolDefinition.PooledObject))
            {
                DevTools.Logger.LogError(PoolServiceLog, "Instanced GameObject {} can not be pooled.", () => new object[] { poolDefinition.name });
                return(null);
            }

            Pool prefabPool = GetPrefabsPool(poolDefinition.PooledObject);

            GameObject spawnedPrefab = prefabPool.SpawnPrefab(poolDefinition, position, rotation, parent, subSpawn, (x) => OnPrefabSpawned(x), OnSpawn);

            activePooledGameObjects[spawnedPrefab] = prefabPool;
            return(spawnedPrefab);
        }
예제 #3
0
        public GameObject SpawnPrefab(PoolDefinition poolDefinition, Vector3 position, Quaternion rotation, Transform parent,
                                      bool callOnSpawn, Action <GameObject> OnSpawn, Action <GameObject> CustomOnSpawn)
        {
            // Get GameObject
            GameObject clone = null;

            while (cache.Count > 0)
            {
                clone = cache.Pop();

                if (clone == null)
                {
                    continue;
                }

                clone.SetActive(true);
                break;
            }

            if (clone == null)
            {
                clone = InstantiateGameObject();
            }

            // Setup Transform
            Transform tr = clone.transform;

            if (parent != null)
            {
                tr.SetParent(parent, false);
            }
            else
            {
                tr.localPosition = position;
                tr.localRotation = rotation;
                tr.SetParent(null, false);
            }

            // PoolDefinitions
            poolDefinition.OverrideGameObjectComponents(clone);
            IPool[] pItems = clone.GetComponentsInChildren <IPool>();
            for (int i = 0; i < pItems.Length; i++)
            {
                pItems[i].PoolDefinition = poolDefinition;
            }

            // Spawn Events
            // Used by other systems to do any changes before OnSpawn is called.
            OnSpawn(clone);
            if (CustomOnSpawn != null)
            {
                CustomOnSpawn(clone);
            }

            if (!callOnSpawn)
            {
                pItems = clone.GetComponentsInChildren <IPool>();
                for (int i = 0; i < pItems.Length; i++)
                {
                    pItems[i].OnSpawn();
                }
            }

            return(clone);
        }
예제 #4
0
 public GameObject SpawnDefinition(PoolDefinition prefab, Vector3 position, Quaternion rotation, Transform parent = null, bool subSpawn = false)
 {
     return(null);
 }
예제 #5
0
 public T SpawnDefinition <T>(PoolDefinition prefab, Vector3 position, Quaternion rotation, Transform parent = null, bool subSpawn = false, Action <GameObject> OnSpawn = null) where T : Component
 {
     return(default(T));
 }
예제 #6
0
 public GameObject SpawnDefinition(PoolDefinition prefab, Transform parent = null, bool subSpawn = false)
 {
     return(null);
 }
예제 #7
0
 public GameObject SpawnDefinition(PoolDefinition poolDefinition, Vector3 position, Quaternion rotation, Transform parent = null, bool subSpawn = false)
 {
     return(SpawnDefinition(poolDefinition, position, rotation, null, parent, subSpawn));
 }
예제 #8
0
 public GameObject SpawnDefinition(PoolDefinition poolDefinition, Transform parent = null, bool subSpawn = false)
 {
     return(SpawnDefinition(poolDefinition, Vector3.zero, Quaternion.identity, parent, subSpawn));
 }