public ChunkManager(ContentManager content, WorldManager world, Camera camera, GraphicsDevice graphics, ChunkGenerator chunkGen, int maxChunksX, int maxChunksY, int maxChunksZ) { WorldSize = new Point3(maxChunksX, maxChunksY, maxChunksZ); World = world; ExitThreads = false; drawDistSq = DrawDistance * DrawDistance; Content = content; var originCoord = new GlobalVoxelCoordinate( (int)(world.WorldOrigin.X * world.WorldScale), 0, (int)(world.WorldOrigin.Y * world.WorldScale)) .GetGlobalChunkCoordinate(); chunkData = new ChunkData(this, maxChunksX - 1, maxChunksZ - 1, (int)(originCoord.X - WorldSize.X / 2 + 1), (int)(originCoord.Z - WorldSize.Z / 2 + 1)); ChunkGen = chunkGen; GeneratorThread = new Thread(GenerateThread); GeneratorThread.Name = "Generate"; RebuildThread = new Thread(RebuildVoxelsThread); RebuildThread.Name = "RebuildVoxels"; WaterUpdateThread = new AutoScaleThread(this, GamePerformance.ThreadIdentifier.UpdateWater, (f) => Water.UpdateWater()); ToGenerate = new List <GlobalChunkCoordinate>(); Graphics = graphics; chunkGen.Manager = this; GameSettings.Default.ChunkGenerateTime = 0.5f; generateChunksTimer = new Timer(GameSettings.Default.ChunkGenerateTime, false, Timer.TimerMode.Real); GameSettings.Default.ChunkRebuildTime = 0.1f; Timer rebuildChunksTimer = new Timer(GameSettings.Default.ChunkRebuildTime, false, Timer.TimerMode.Real); GameSettings.Default.VisibilityUpdateTime = 0.05f; generateChunksTimer.HasTriggered = true; rebuildChunksTimer.HasTriggered = true; this.camera = camera; Water = new WaterManager(this); PauseThreads = false; Vector3 maxBounds = new Vector3( maxChunksX * VoxelConstants.ChunkSizeX / 2.0f, maxChunksY * VoxelConstants.ChunkSizeY / 2.0f, maxChunksZ * VoxelConstants.ChunkSizeZ / 2.0f); Vector3 minBounds = -maxBounds; Bounds = new BoundingBox(minBounds, maxBounds); Splasher = new Splasher(this); }
public ChunkManager(ContentManager Content, WorldManager World) { this.Content = Content; this.World = World; ExitThreads = false; InitializeChunkMap(Point3.Zero, World.WorldSizeInChunks); RebuildThread = new Thread(RebuildVoxelsThread) { IsBackground = true }; RebuildThread.Name = "RebuildVoxels"; WaterUpdateThread = new AutoScaleThread(this, (f) => Water.UpdateWater()); this.ChunkUpdateThread = new Thread(UpdateChunks) { IsBackground = true, Name = "Update Chunks" }; GameSettings.Current.VisibilityUpdateTime = 0.05f; Water = new WaterManager(this); PauseThreads = false; Vector3 maxBounds = new Vector3( World.WorldSizeInChunks.X * VoxelConstants.ChunkSizeX / 2.0f, World.WorldSizeInChunks.Y * VoxelConstants.ChunkSizeY / 2.0f, World.WorldSizeInChunks.Z * VoxelConstants.ChunkSizeZ / 2.0f); Vector3 minBounds = -maxBounds; // Todo: Can this just be 0,0,0? Bounds = new BoundingBox(minBounds, maxBounds); }
public ChunkManager(ContentManager content, WorldManager world, ChunkGenerator chunkGen, int maxChunksX, int maxChunksY, int maxChunksZ) { WorldSize = new Point3(maxChunksX, maxChunksY, maxChunksZ); World = world; ExitThreads = false; Content = content; chunkData = new ChunkData(maxChunksX, maxChunksZ, 0, 0); ChunkGen = chunkGen; RebuildThread = new Thread(RebuildVoxelsThread) { IsBackground = true }; RebuildThread.Name = "RebuildVoxels"; WaterUpdateThread = new AutoScaleThread(this, (f) => Water.UpdateWater()); this.ChunkUpdateThread = new Thread(UpdateChunks) { IsBackground = true, Name = "Update Chunks" }; chunkGen.Manager = this; GameSettings.Default.ChunkGenerateTime = 0.5f; GameSettings.Default.ChunkRebuildTime = 0.1f; Timer rebuildChunksTimer = new Timer(GameSettings.Default.ChunkRebuildTime, false, Timer.TimerMode.Real); GameSettings.Default.VisibilityUpdateTime = 0.05f; rebuildChunksTimer.HasTriggered = true; Water = new WaterManager(this); PauseThreads = false; Vector3 maxBounds = new Vector3( maxChunksX * VoxelConstants.ChunkSizeX / 2.0f, maxChunksY * VoxelConstants.ChunkSizeY / 2.0f, maxChunksZ * VoxelConstants.ChunkSizeZ / 2.0f); Vector3 minBounds = -maxBounds; Bounds = new BoundingBox(minBounds, maxBounds); }