private void InternalCheckCellsInMemory() { for (int y = -c_CellsInMemory; y <= c_CellsInMemory; y++) { int cellY = (CenterPosition.Y / 8) + y; if (cellY < 0) { cellY += Height / 8; } for (int x = -c_CellsInMemory; x <= c_CellsInMemory; x++) { int cellX = (CenterPosition.X / 8) + x; if (cellX < 0) { cellX += Width / 8; } int cellIndex = (cellY % c_CellsInMemorySpan) * c_CellsInMemorySpan + cellX % c_CellsInMemorySpan; if (m_Blocks[cellIndex] == null || m_Blocks[cellIndex].X != cellX || m_Blocks[cellIndex].Y != cellY) { if (m_Blocks[cellIndex] != null) { m_Blocks[cellIndex].Unload(); } m_Blocks[cellIndex] = new MapBlock(cellX, cellY); m_Blocks[cellIndex].Load(m_MapData, this); Multi.AnnounceMapBlockLoaded(m_Blocks[cellIndex]); } } } }