/// <summary> /// Adds an area to the region and updates area-zone cache /// </summary> /// <param name="area"></param> /// <returns></returns> public virtual IArea AddArea(IArea area) { lock (m_lockAreas) { ushort nextAreaID = 0; foreach (ushort areaID in m_Areas.Keys) { if (areaID >= nextAreaID) { nextAreaID = (ushort)(areaID + 1); } } area.ID = nextAreaID; m_Areas.Add(area.ID, area); int zonePos = 0; foreach (Zone zone in Zones) { if (area.IsIntersectingZone(zone)) m_ZoneAreas[zonePos][m_ZoneAreasCount[zonePos]++] = area.ID; zonePos++; } return area; } }
/// <summary> /// Adds an area to the region and updates area-zone cache /// </summary> /// <param name="area"></param> /// <returns></returns> public virtual IArea AddArea(IArea area) { lock (m_Areas.SyncRoot) { m_Areas.Add(area); area.ID = (ushort)(m_Areas.Count - 1); for (int i = 0; i < Zones.Count; i++) { Zone zone = (Zone)Zones[i]; if (!area.IsIntersectingZone(zone)) continue; m_ZoneAreas[i][m_ZoneAreasCount[i]++] = area.ID; } return area; } }