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); } } }
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); } } }
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); } } }