Esempio n. 1
0
        public void Update(T item, Vector2r previous, Vector2r current)
        {
            // update the stored item
            for (int i = 0; i < _items.Length; ++i)
            {
                if (ReferenceEquals(_items[i].Item, item))
                {
                    _items[i].Position = current;
                    break;
                }
            }

            // update the monitors
            for (int i = 0; i < _monitors.Length; ++i)
            {
                StoredMonitor monitor = _monitors[i];

                bool containedPrevious = monitor.Region.Contains(previous);
                bool containedCurrent  = monitor.Region.Contains(current);

                // the monitor was previously interested but no longer is
                if (containedPrevious && containedCurrent == false)
                {
                    monitor.Monitor.OnExit(item);
                }

                // the monitor was not previous interested but now is
                else if (containedPrevious == false && containedCurrent)
                {
                    monitor.Monitor.OnEnter(item);
                }
            }
        }
Esempio n. 2
0
        public void Add(T item, Vector2r position)
        {
            _items.Add(new StoredItem(item, position));

            // call OnEnter for all monitors that are interested in the item
            for (int i = 0; i < _monitors.Length; ++i)
            {
                StoredMonitor monitor = _monitors[i];
                if (monitor.Region.Contains(position))
                {
                    monitor.Monitor.OnEnter(item);
                }
            }
        }
Esempio n. 3
0
        public void Remove(T item, Vector2r position)
        {
            // remove the stored item
            for (int i = 0; i < _items.Length; ++i)
            {
                if (ReferenceEquals(_items[i].Item, item))
                {
                    _items.Remove(i);
                    break;
                }
            }

            // call OnExit for all monitors that were previously interested in the item
            for (int i = 0; i < _monitors.Length; ++i)
            {
                StoredMonitor monitor = _monitors[i];
                if (monitor.Region.Contains(position))
                {
                    monitor.Monitor.OnExit(item);
                }
            }
        }