public void Write(AssetWriter writer) { Renderers.Write(writer); if (IsAlign(writer.Version)) { writer.AlignStream(); } Systems.Write(writer); if (IsAlign(writer.Version)) { writer.AlignStream(); } if (HasProbesets(writer.Version)) { Probesets.Write(writer); writer.AlignStream(); } SystemAtlases.Write(writer); if (IsAlign(writer.Version)) { writer.AlignStream(); } if (HasTerrainChunks(writer.Version)) { TerrainChunks.Write(writer); if (IsAlign(writer.Version)) { writer.AlignStream(); } } }
public YAMLNode ExportYAML(IExportContainer container) { YAMLMappingNode node = new YAMLMappingNode(); node.Add("m_Renderers", Renderers.ExportYAML(container)); node.Add("m_Systems", Systems.ExportYAML(container)); node.Add("m_Probesets", Probesets.ExportYAML(container)); node.Add("m_SystemAtlases", SystemAtlases.ExportYAML(container)); node.Add("m_TerrainChunks", TerrainChunks.ExportYAML(container)); return(node); }
public YAMLNode ExportYAML(IExportContainer container) { YAMLMappingNode node = new YAMLMappingNode(); node.Add(RenderersName, Renderers.ExportYAML(container)); node.Add(SystemsName, Systems.ExportYAML(container)); node.Add(ProbesetsName, Probesets.ExportYAML(container)); node.Add(SystemAtlasesName, SystemAtlases.ExportYAML(container)); node.Add(TerrainChunksName, TerrainChunks.ExportYAML(container)); return(node); }
public void Update(Vector3 cameraPosition) { // Dispose of chunks which are out of range for (int i = TerrainChunks.Count - 1; i >= 0; i--) { TerrainChunk terrainChunk = TerrainChunks.ElementAt(i); if (new Vector2(cameraPosition.X - terrainChunk.GridCoordinates.X * TerrainChunk.EdgeLength, cameraPosition.Z - terrainChunk.GridCoordinates.Y * TerrainChunk.EdgeLength).Length() > ChunkRenderDistance) { TerrainChunks.RemoveAt(i); terrainChunk.Dispose(); } } // Absorb and create new chunks if background thread isn't busy if (_chunkCreationThread == null || !_chunkCreationThread.IsAlive) { TerrainChunks.AddRange(_newTerrainChunks); List <Vector2> newTerrainChunkGridCoordinates = new List <Vector2>(); for (int gridCoordinateZ = (int)Math.Ceiling((cameraPosition.Z - ChunkRenderDistance) / TerrainChunk.EdgeLength); gridCoordinateZ <= (int)Math.Floor((cameraPosition.Z + ChunkRenderDistance) / TerrainChunk.EdgeLength); gridCoordinateZ++) { for (int gridCoordinateX = (int)Math.Ceiling((cameraPosition.X - ChunkRenderDistance) / TerrainChunk.EdgeLength); gridCoordinateX <= (int)Math.Floor((cameraPosition.X + ChunkRenderDistance) / TerrainChunk.EdgeLength); gridCoordinateX++) { Vector2 gridCoordinates = new Vector2(gridCoordinateX, gridCoordinateZ); if (new Vector2(cameraPosition.X - gridCoordinates.X * TerrainChunk.EdgeLength, cameraPosition.Z - gridCoordinates.Y * TerrainChunk.EdgeLength).Length() <= ChunkRenderDistance && !TerrainChunks.Any(c => c.GridCoordinates == gridCoordinates)) { newTerrainChunkGridCoordinates.Add(gridCoordinates); } } } _chunkCreationThread = new Thread(CreateNewTerrainChunks); _chunkCreationThread.Start(newTerrainChunkGridCoordinates); } }