Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }