Beispiel #1
0
        private T InternalCreateUnit <T>(T prefabComponent) where T : PUnit
        {
            if (prefabComponent == null)
            {
                Debug.LogErrorFormat("Cannot create unit of null {0}", nameof(prefabComponent));
                return(null);
            }

            var unitGO = PUnitPool.FetchCachedOrCreateUnit(prefabComponent.gameObject);

            if (unitGO == null)
            {
                Debug.LogErrorFormat("Unexpected error while creating {0}", nameof(unitGO));
                return(null);
            }

            var unitComponent = GetCacheableUnitComponent <T>(unitGO);

            if (unitComponent == null)
            {
                Debug.LogErrorFormat("Unexpected error while getting {0}", nameof(unitComponent));
                PUnitPool.DestroyUnit(unitGO);
                return(null);
            }

            unitComponent.OnInit();

            return(unitComponent);
        }
Beispiel #2
0
        private void InternalDestroyUnit <T>(T unitComponent) where T : PUnit
        {
            if (unitComponent == null)
            {
                return;
            }

            int unitID = unitComponent.GetGOInstanceID();

            unitComponent.OnDeinit();

            PUnitPool.PutCachedOrDestroyUnit(unitComponent.gameObject, out bool isCached);
            if (!isCached)
            {
                RemoveCacheableUnitComponent(unitID);
            }
        }
Beispiel #3
0
        private void InternalDestroyUnit(GameObject unitGO)
        {
            if (unitGO == null)
            {
                return;
            }

            int unitID = unitGO.GetGOInstanceID();
            var unit   = GetCacheableUnitComponent <PUnit>(unitGO);

            if (unit != null)
            {
                unit.OnDeinit();
            }

            PUnitPool.PutCachedOrDestroyUnit(unitGO, out bool isCached);
            if (!isCached)
            {
                RemoveCacheableUnitComponent(unitID);
            }
        }
Beispiel #4
0
        private GameObject InternalCreateUnit(GameObject prefabGO)
        {
            if (prefabGO == null)
            {
                Debug.LogErrorFormat("Cannot create unit of null {0}", nameof(prefabGO));
                return(null);
            }

            var unitGO = PUnitPool.FetchCachedOrCreateUnit(prefabGO);

            if (unitGO == null)
            {
                return(null);
            }

            var unit = GetCacheableUnitComponent <PUnit>(unitGO);

            if (unit != null)
            {
                unit.OnInit();
            }

            return(unitGO);
        }
Beispiel #5
0
 protected void Awake()
 {
     PUnitPool.ForceInit();
     PUnitManager.ForceInit();
 }