示例#1
0
        public bool Despawn(GameObject gameObject, DespawnType despawnType)
        {
            if (gameObject == null)
            {
                return(false);
            }

            Release();

            if (despawnType == DespawnType.Destroy)
            {
                if (Application.isPlaying)
                {
                    GameObject.Destroy(gameObject);
                }
                else
                {
                    GameObject.DestroyImmediate(gameObject);
                }

                return(false);
            }

            m_objectList.AddLast(gameObject);
            return(true);
        }
示例#2
0
        public void Despawn(GameObject gameObject, DespawnType despawnType)
        {
            if (gameObject == null)
            {
                return;
            }

            int spawnID = gameObject.GetInstanceID();

            ulong pathHash = 0;

            if (!m_spawnID2PathHash.TryGetValue(spawnID, out pathHash))
            {
                if (Application.isPlaying)
                {
                    GameObject.Destroy(gameObject);
                }
                else
                {
                    GameObject.DestroyImmediate(gameObject);
                }

                Log.ErrorFormat("[ResourcePoolManager]Failed to despawn unkown gameObject({0})", gameObject.name);
                return;
            }

            m_spawnID2PathHash.Remove(spawnID);

            ResourcePool resourcePool = _GetResourcePool(pathHash);

            if (resourcePool == null)
            {
                if (Application.isPlaying)
                {
                    GameObject.Destroy(gameObject);
                }
                else
                {
                    GameObject.DestroyImmediate(gameObject);
                }
                Log.ErrorFormat("[ResourcePoolManager]Failed to find resource pool for gameObject({0})", gameObject.name);

                return;
            }

            _OnCacheFull();

            if (despawnType != DespawnType.Destroy)
            {
                Transform parent = despawnType == DespawnType.Invisible ? m_invisibleParent : m_inactiveParent;
                gameObject.transform.SetParent(parent, false);
            }

            if (resourcePool.Despawn(gameObject, despawnType))
            {
                ++m_deSpawnCount;
                _AddCacheValue(resourcePool);
            }
        }
 public static void DespawnNPC(ulong target, DespawnType type)
 {
     BossGageWindowViewModel.Instance.RemoveBoss(target, type);
     if (BossGageWindowViewModel.Instance.VisibleBossesCount == 0)
     {
         SessionManager.Encounter = false;
         GroupWindowViewModel.Instance.SetAggro(0);
     }
 }
 public static void Despawn(GameObject gameObject, DespawnType despawnType = DespawnType.Destroy)
 {
     if (!Application.isPlaying)
     {
         Object.DestroyImmediate(gameObject);
     }
     else
     {
         ResourcePoolManager.Instance.Despawn(gameObject, despawnType);
     }
 }
示例#5
0
        public static void DespawnNPC(ulong target, DespawnType type)
        {
            NearbyNPC.Remove(target);

            WindowManager.BossWindow.VM.RemoveBoss(target, type);
            if (WindowManager.BossWindow.VM.VisibleBossesCount == 0)
            {
                SessionManager.Encounter = false;
                WindowManager.GroupWindow.VM.SetAggro(0);
            }
            ClassAbnormalityTracker.CheckMarkingOnDespawn(target);
            FlyingGuardianDataProvider.InvokeProgressChanged();
        }
        public static void DespawnNPC(ulong target, DespawnType type)
        {
            if (NearbyNPC.ContainsKey(target))
            {
                NearbyNPC.Remove(target);
            }

            BossGageWindowViewModel.Instance.RemoveBoss(target, type);
            if (BossGageWindowViewModel.Instance.VisibleBossesCount == 0)
            {
                SessionManager.Encounter = false;
                GroupWindowViewModel.Instance.SetAggro(0);
            }
            ClassAbnormalityTracker.CheckMarkingOnDespawn(target);
            FlyingGuardianDataProvider.InvokeProgressChanged();
        }
示例#7
0
 public S_DESPAWN_NPC(TeraMessageReader reader) : base(reader)
 {
     Target = reader.ReadUInt64();
     reader.Skip(3 * 4);
     Type = (DespawnType)reader.ReadUInt32();
 }