public virtual void addEntity(motion.Entity entity)
        {
            if (entity == null)
            {
                return;
            }
            var thisIndex = highestIndex + 1;
            var count     = 0;

            if (entities != null)
            {
                count = entities.Length;
            }
            if (thisIndex >= count)
            {
                grow();
            }
            entity.setScene((motion.EntityScene) this);
            entities[thisIndex] = entity;
            entity.index        = thisIndex;
            highestIndex        = thisIndex;
            if (entity is cave.PointerListener)
            {
                pointerListeners.Add((cave.PointerListener)entity);
            }
            if (entity is cave.KeyListener)
            {
                keyListeners.Add((cave.KeyListener)entity);
            }
            entity.initialize();
        }
        public virtual void removeEntity(motion.Entity entity)
        {
            if (entity == null)
            {
                return;
            }
            var eidx = entity.index;

            if (eidx < 0)
            {
                return;
            }
            if (entity is cave.PointerListener)
            {
                cape.Vector.removeValue(pointerListeners, (cave.PointerListener)entity);
            }
            if (entity is cave.KeyListener)
            {
                cape.Vector.removeValue(keyListeners, (cave.KeyListener)entity);
            }
            entity.cleanup();
            entity.setScene(null);
            entity.index = -1;
            if (highestIndex == eidx)
            {
                entities[eidx] = null;
            }
            else
            {
                var n = entities[highestIndex];
                entities[eidx] = n;
                if (n != null)
                {
                    n.index = eidx;
                }
                entities[highestIndex] = null;
            }
            highestIndex--;
        }
        public void grow()
        {
            var nsz = 0;

            if (entities == null)
            {
                nsz = 1024;
            }
            else
            {
                nsz = entities.Length * 2;
            }
            var v = new motion.Entity[nsz];

            if (entities != null)
            {
                var osz = entities.Length;
                for (var n = 0; n < osz; n++)
                {
                    v[n] = entities[n];
                }
            }
            entities = v;
        }