예제 #1
0
        void DoCheck()
        {
            bool isReleased;

#if POOLMANAGER
            isReleased = !PoolManager.Pools[group.Value].IsSpawned(gameObject.Value.transform);
#else
            PoolDataController pdc = gameObject.Value.GetComponent <PoolDataController>();
            isReleased = pdc != null ? pdc.claimed : false;
#endif

            if (!storeResult.IsNone)
            {
                storeResult.Value = isReleased;
            }

            if (isReleased)
            {
                Fsm.Event(isTrue);
            }
            else
            {
                Fsm.Event(isFalse);
            }
        }
예제 #2
0
    void Update()
    {
        switch (mCurState)
        {
        case State.Inactive:
            break;

        case State.Spawn:
            Transform t = EntityManager.instance.Spawn(type, null, null, null, useSpawnFX);
            mPoolController = t.GetComponentInChildren <PoolDataController>();

            Vector3 pos = transform.position;

            t.position = new Vector3(pos.x, pos.y, t.position.z);

            PlanetAttachStatic pa = t.GetComponentInChildren <PlanetAttachStatic>();
            if (pa != null)
            {
                pa.RefreshPos();
            }

            ChangeState(State.SpawnWait);
            break;

        case State.SpawnWait:
            if (mPoolController != null)
            {
                if (mPoolController.claimed)
                {
                    if (mCurTime >= delayRespawn)
                    {
                        ChangeState(State.Spawn);
                    }
                    else
                    {
                        mCurTime += Time.deltaTime;
                    }
                }
            }
            else
            {
                ChangeState(State.Spawn);
            }
            break;
        }
    }
예제 #3
0
    public void Release(Transform t)
    {
        PoolDataController pdc = t.GetComponent <PoolDataController>();

        if (pdc != null)
        {
            FactoryData dat;
            if (mFactory.TryGetValue(pdc.factoryKey, out dat))
            {
                pdc.claimed = true;
                dat.Release(t);
            }
        }
        else           //not in the pool, just kill it
        {
            Object.Destroy(t.gameObject);
        }
    }
예제 #4
0
    void ChangeState(State state)
    {
        mCurState = state;
        mCurTime = 0.0f;

        switch(state) {
        case State.Inactive:
            if(mPoolController != null) {
                //hm...
                mPoolController = null;
            }
            break;
        case State.Spawn:
            break;
        case State.SpawnWait:
            break;
        }
    }
예제 #5
0
        public void Expand(int num)
        {
            for (int i = 0; i < num; i++)
            {
                //PoolDataController
                Transform t = (Transform)Object.Instantiate(template);
                t.parent = poolHolder;

                PoolDataController pdc = t.GetComponent <PoolDataController>();
                if (pdc == null)
                {
                    pdc = t.gameObject.AddComponent <PoolDataController>();
                }

                pdc.factoryKey = template.name;

                t.gameObject.SetActiveRecursively(false);

                available.Add(t);
            }
        }
예제 #6
0
    void ChangeState(State state)
    {
        mCurState = state;
        mCurTime  = 0.0f;

        switch (state)
        {
        case State.Inactive:
            if (mPoolController != null)
            {
                //hm...
                mPoolController = null;
            }
            break;

        case State.Spawn:
            break;

        case State.SpawnWait:
            break;
        }
    }
예제 #7
0
 void OnDestroy()
 {
     mPoolController = null;
 }
예제 #8
0
    void Update()
    {
        switch(mCurState) {
        case State.Inactive:
            break;
        case State.Spawn:
            Transform t = EntityManager.instance.Spawn(type, null, null, null, useSpawnFX);
            mPoolController = t.GetComponentInChildren<PoolDataController>();

            Vector3 pos = transform.position;

            t.position = new Vector3(pos.x, pos.y, t.position.z);

            PlanetAttachStatic pa = t.GetComponentInChildren<PlanetAttachStatic>();
            if(pa != null) {
                pa.RefreshPos();
            }

            ChangeState(State.SpawnWait);
            break;
        case State.SpawnWait:
            if(mPoolController != null) {
                if(mPoolController.claimed) {
                    if(mCurTime >= delayRespawn) {
                        ChangeState(State.Spawn);
                    }
                    else {
                        mCurTime += Time.deltaTime;
                    }
                }
            }
            else {
                ChangeState(State.Spawn);
            }
            break;
        }
    }
예제 #9
0
 void OnDestroy()
 {
     mPoolController = null;
 }