コード例 #1
0
        private void OnDestroyEntity(IEntity entity)
        {
            var tEntity = (TEntity)entity;
            var removed = _entities.Remove(tEntity);

            if (!removed)
            {
                throw new ContextDoesNotContainEntityException(
                          "'" + this + "' cannot destroy " + tEntity + "!",
                          "This cannot happen!?!");
            }

            _entitiesCache = null;

            OnEntityWillBeDestroyed?.Invoke(this, tEntity);

            tEntity.InternalDestroy();

            OnEntityDestroyed?.Invoke(this, tEntity);

            if (tEntity.RetainCount == 1)
            {
                // Can be released immediately without
                // adding to _retainedEntities
                tEntity.OnEntityReleased -= _cachedEntityReleased;
                _reusableEntities.Push(tEntity);
                tEntity.Release(this);
                tEntity.RemoveAllOnEntityReleasedHandlers();
            }
            else
            {
                _retainedEntities.Add(tEntity);
                tEntity.Release(this);
            }
        }
コード例 #2
0
ファイル: Pool.cs プロジェクト: dzen-intelligence/Rentitas
        /// Destroys the entity, removes all its components and pushs it back to the internal ObjectPool for entities.
        public virtual void DestroyEntity(Entity <T> entity)
        {
            var removed = _entities.Remove(entity);

            if (!removed)
            {
                throw new PoolDoesNotContainEntityException <T>("'" + this + "' cannot destroy " + entity + "!",
                                                                "Did you call pool.DestroyEntity() on a wrong pool?");
            }
            _entitiesCache = null;

            OnEntityWillBeDestroyed?.Invoke(this, entity);
            entity.Destroy();
            OnEntityDestroyed?.Invoke(this, entity);

            if (entity.owners.Count == 1)
            {
                // Can be released immediately without going to _retainedEntities
                entity.OnEntityReleased -= _cachedOnEntityReleased;
                _reusableEntities.Push(entity);
                entity.Release(this);
                entity.RemoveAllOnEntityReleasedHandlers();
            }
            else
            {
                _retainedEntities.Add(entity);
                entity.Release(this);
            }
        }