private void CreateSector(TilePosition posSector, bool inmediate) { TilePosition sectorOffset = new TilePosition(posSector.x << SECTOR_SIZE_BITS, posSector.y << SECTOR_SIZE_BITS, posSector.z << SECTOR_SIZE_BITS); Sector sector = new Sector(world, posSector, sectorOffset); sectors[posSector.x | (posSector.y << xSectorsBits) | (posSector.z << xySectorsBits)] = sector; if (inmediate == false) pendingSectorsUpdate.Add(sector); else sector.UpdateMesh(); }
public override void Update() { TilePosition playerTilePosition = Graphics.Vector3ToTilePosition(player.position); Sector playerSector = sectorManager.GetSectorTile(playerTilePosition); if (playerSector != currentPlayerSector) { currentPlayerSector = playerSector; List<Sector> newVisibleVectors = FindSectorsNearPlayer(); //Disable sectors far away for (int i = visibleSectors.Count - 1; i >= 0; i--) { Sector sector = visibleSectors[i]; int pos = newVisibleVectors.IndexOf(sector); if (pos < 0) { sectorManagerUnity.ReturnSectorUnityToCache((SectorUnity) sector.GetSectorGraphics()); visibleSectors.RemoveAt(i); } else { newVisibleVectors.RemoveAt(pos); } } //Enable sectors near for (int i = newVisibleVectors.Count - 1; i >= 0; i--) { Sector sector = newVisibleVectors[i]; visibleSectors.Add(sector); sectorManagerUnity.GetSectorUnityFromCache(sector); } } }
static private int CompareSectorsByDistanceToPlayer(Sector sector1, Sector sector2) { int dist1 = (currentPlayerPositionForSort - sector1.tileOffset).GetDistanceSquared(); int dist2 = (currentPlayerPositionForSort - sector2.tileOffset).GetDistanceSquared(); return dist2.CompareTo(dist1); }
public override void Clear() { visibleSectors.Clear(); currentPlayerSector = null; }