/// <summary>
        /// Removes an object from the selected objects.
        /// </summary>
        /// <param name="obj">The object to remove.</param>
        public void Remove(T obj)
        {
            if (obj == null)
            {
                return;
            }

            if (!_selectedObjs.Remove(obj))
            {
                return;
            }

            OnObjectRemoved(obj);
            if (ObjectRemoved != null)
            {
                ObjectRemoved.Raise(this, EventArgsHelper.Create(obj));
            }

            UpdateSelection();
        }
        /// <summary>
        /// Clears all selected objects.
        /// </summary>
        public void Clear()
        {
            if (_selectedObjs.Count == 0)
            {
                return;
            }

            while (_selectedObjs.Count > 0)
            {
                var obj = _selectedObjs[_selectedObjs.Count - 1];
                _selectedObjs.RemoveAt(_selectedObjs.Count - 1);

                OnObjectRemoved(obj);
                if (ObjectRemoved != null)
                {
                    ObjectRemoved.Raise(this, EventArgsHelper.Create(obj));
                }
            }

            Debug.Assert(_selectedObjs.Count == 0);

            UpdateSelection();
        }
示例#3
0
        public void Remove(ISimpleGameObject obj)
        {
            if (!obj.InWorld)
            {
                return;
            }

            var lockedRegions = LockMultitileRegions(obj.PrimaryPosition.X, obj.PrimaryPosition.Y, obj.Size);

            if (RemoveFromPrimaryRegionAndAllTiles(obj, obj.PrimaryPosition.X, obj.PrimaryPosition.Y))
            {
                obj.InWorld = false;

                DeregisterObjectEventListeners(obj);

                IMiniMapRegionObject miniMapRegionObject = obj as IMiniMapRegionObject;
                if (miniMapRegionObject != null)
                {
                    MiniMapRegions.Remove(miniMapRegionObject);
                }

                ushort regionId = regionLocator.GetRegionIndex(obj);
                channel.Post("/WORLD/" + regionId, () =>
                {
                    var packet = new Packet(Command.ObjectRemove);
                    packet.AddUInt16(regionId);
                    packet.AddUInt32(obj.GroupId);
                    packet.AddUInt32(obj.ObjectId);
                    return(packet);
                });
            }

            UnlockRegions(lockedRegions);

            // Raise event
            ObjectRemoved.Raise(this, new ObjectEvent(obj));
        }