public void UpdatePosition(int x, int y, PositionMonitorEntry entry) { this.Remove(entry); entry.m_x = x; entry.m_y = y; this.Insert(entry); }
public int CountEntries(Extents area, PositionMonitorLayer layer) { int xIndexFrom = Math.Max(area.x, 0); int xIndexTo = Math.Min(area.x + area.width, Grid.WidthInCells); int yIndexFrom = Math.Max(area.y, 0); int yIndexTo = Math.Min(area.y + area.height, Grid.HeightInCells); int countEntries = 0; for (int iX = xIndexFrom; iX < xIndexTo; ++iX) { for (int iY = yIndexFrom; iY < yIndexTo; ++iY) { int nbrEntries = m_nodes[layer.m_layer, iX, iY].m_entries.Count; for (int index = 0; index < nbrEntries; ++index) { PositionMonitorEntry entry = m_nodes[layer.m_layer, iX, iY].m_entries[index]; if (entry != null) { if (entry.m_object == null) { m_nodes[layer.m_layer, iX, iY].m_entries[index] = (PositionMonitorEntry)null; m_nodes[layer.m_layer, iX, iY].isDirty = true; } else { countEntries++; } } } } } return(countEntries); }
public void Insert(PositionMonitorEntry entry) { if (!m_nodes[entry.m_layer.m_layer, entry.m_x, entry.m_y].isDirty) { m_nodes[entry.m_layer.m_layer, entry.m_x, entry.m_y].isDirty = true; m_dirtyNodes.Add(new DirtyNode() { m_layer = entry.m_layer.m_layer, m_x = entry.m_x, m_y = entry.m_y }); } m_nodes[entry.m_layer.m_layer, entry.m_x, entry.m_y].m_entries.Add(entry); }
public PositionMonitorEntry Add(GameObject obj, int x, int y, PositionMonitorLayer layer) { PositionMonitorEntry entry = new PositionMonitorEntry(x, y, layer, obj, this); if (!m_nodes[layer.m_layer, x, y].isDirty) { m_nodes[layer.m_layer, x, y].isDirty = true; m_dirtyNodes.Add(new DirtyNode() { m_layer = layer.m_layer, m_x = x, m_y = y }); } m_nodes[layer.m_layer, x, y].m_entries.Add(entry); return(entry); }
public void Remove(PositionMonitorEntry entry) { int count = m_nodes[entry.m_layer.m_layer, entry.m_x, entry.m_y].m_entries.Count; for (int index = 0; index < count; ++index) { if (m_nodes[entry.m_layer.m_layer, entry.m_x, entry.m_y].m_entries[index] == entry) { if (!m_nodes[entry.m_layer.m_layer, entry.m_x, entry.m_y].isDirty) { m_nodes[entry.m_layer.m_layer, entry.m_x, entry.m_y].isDirty = true; m_dirtyNodes.Add(new DirtyNode() { m_layer = entry.m_layer.m_layer, m_x = entry.m_x, m_y = entry.m_y }); } m_nodes[entry.m_layer.m_layer, entry.m_x, entry.m_y].m_entries[index] = (PositionMonitorEntry)null; break; } } }