Esempio n. 1
0
        public GameObject Instantiate(EiInstantiateData data)
        {
#if EITRUM_POOLING
            return(poolData.Dequeue(data));
#else
            var go = MonoBehaviour.Instantiate(GameObject, data.position, data.rotation, data.parent);
            if (data.scale.HasValue)
            {
                var goScale = go.transform.localScale;
                goScale.Scale(data.scale.Value);
                go.transform.localScale = goScale;
            }
            return(go);
#endif
        }
Esempio n. 2
0
        public GameObject Dequeue(EiInstantiateData data)
        {
            if (pooledObjects.Count == 0)
            {
                Edit.LoadPrefab();
                return(Dequeue(data));
            }

            var go = pooledObjects.Dequeue();

            var t = go.transform;

            t.SetParent(data.parent, false);
            t.localPosition = data.position;
            t.localRotation = data.rotation;
            if (data.scale.HasValue)
            {
                t.localScale = data.scale.Value;
            }

            if (poolableCallbacks)
            {
                if (optimizedCallbacks)
                {
                    var list = go.GetComponent <EiEntity>().Poolables;
                    for (int i = 0, length = list.Length; i < length; i++)
                    {
                        list[i].OnInstantiate();
                    }
                }
                else
                {
                    var list = go.GetComponentsInChildren <IPoolable>();
                    for (int i = 0, length = list.Length; i < length; i++)
                    {
                        list[i].OnInstantiate();
                    }
                }
            }

            return(go);
        }