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 PositionMonitorEntry(int x, int y, PositionMonitorLayer layer, GameObject obj, PositionMonitor monitor) { m_x = x; m_y = y; m_layer = layer; m_object = obj; m_monitor = monitor; Singleton <CellChangeMonitor> .Instance.RegisterCellChangedHandler(m_object.transform, new System.Action(this.UpdatePosition), "AggroCritter.SetMaster"); }
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 PositionMonitorLayer AddLayer(HashedString layerName) { if (m_layers.Count >= 64) { PUtil.LogDebug("Maximum number of layers reached. Returning the default layer"); return(m_layers[0]); } foreach (PositionMonitorLayer l in m_layers) { if (l.m_name == layerName) { return(l); } } PositionMonitorLayer layer = new PositionMonitorLayer(layerName, m_layers.Count); m_layers.Add(layer); return(layer); }