33using System . Linq ;
44using System . Text ;
55using System . Threading . Tasks ;
6+ using MineCase . Server . World . Generation ;
67using Orleans ;
78
89namespace MineCase . Server . World
@@ -13,53 +14,85 @@ internal class ChunkColumnGrain : Grain, IChunkColumn
1314 private int _chunkX ;
1415 private int _chunkZ ;
1516
16- public Task < ChunkColumn > GetState ( )
17+ private ChunkColumnStorage _state ;
18+
19+ public Task < ChunkColumnStorage > GetState ( ) => Task . FromResult ( _state ) ;
20+ /*
21+ var generator = GrainFactory.GetGrain<IChunkGeneratorOverworld>(1);
22+ GeneratorSettings settings = new GeneratorSettings
23+ {
24+ Seed = 1,
25+ };
26+ ChunkColumn chunkColumn = await generator.Generate(_chunkX, _chunkZ, settings);
27+ return chunkColumn;
28+ */
29+
30+ /*
31+ var blocks = new Block[16 * 16 * 16];
32+ var index = 0;
33+ for (int y = 0; y < 16; y++)
1734 {
18- var blocks = new Block [ 16 * 16 * 16 ] ;
19- var index = 0 ;
20- for ( int y = 0 ; y < 16 ; y ++ )
35+ for (int x = 0; x < 16; x++)
2136 {
22- for ( int x = 0 ; x < 16 ; x ++ )
37+ for (int z = 0; z < 16; z ++)
2338 {
24- for ( int z = 0 ; z < 16 ; z ++ )
25- {
26- if ( y == 0 )
27- blocks [ index ] = new Block { Id = 1 , SkyLight = 0xF } ;
28- else
29- blocks [ index ] = new Block { Id = 0 , SkyLight = 0xF } ;
30- index ++ ;
31- }
39+ if (y == 0)
40+ blocks[index] = new Block { Id = 1, SkyLight = 0xF };
41+ else
42+ blocks[index] = new Block { Id = 0, SkyLight = 0xF };
43+ index++;
3244 }
3345 }
46+ }
3447
35- return Task . FromResult ( new ChunkColumn
48+ return Task.FromResult(new ChunkColumn
49+ {
50+ Biomes = Enumerable.Repeat<byte>(0, 256).ToArray(),
51+ SectionBitMask = 0b1111_1111_1111_1111,
52+ Sections = new[]
3653 {
37- Biomes = Enumerable . Repeat < byte > ( 0 , 256 ) . ToArray ( ) ,
38- SectionBitMask = 0b1111_1111_1111_1111 ,
39- Sections = new [ ]
54+ new ChunkSection
4055 {
41- new ChunkSection
42- {
43- BitsPerBlock = 13 ,
44- Blocks = blocks
45- }
46- } . Concat ( Enumerable . Repeat (
47- new ChunkSection
48- {
49- BitsPerBlock = 13 ,
50- Blocks = Enumerable . Repeat ( new Block { Id = 0 , SkyLight = 0xF } , 16 * 16 * 16 ) . ToArray ( )
51- } , 15 ) ) . ToArray ( )
52- } ) ;
53- }
56+ BitsPerBlock = 13,
57+ Blocks = blocks
58+ }
59+ }.Concat(Enumerable.Repeat(
60+ new ChunkSection
61+ {
62+ BitsPerBlock = 13,
63+ Blocks = Enumerable.Repeat(new Block { Id = 0, SkyLight = 0xF }, 16 * 16 * 16).ToArray()
64+ }, 15)).ToArray()
65+ });
66+ */
5467
55- public override Task OnActivateAsync ( )
68+ public override async Task OnActivateAsync ( )
5669 {
5770 var key = this . GetWorldAndChunkPosition ( ) ;
5871 _world = GrainFactory . GetGrain < IWorld > ( key . worldKey ) ;
5972 _chunkX = key . x ;
6073 _chunkZ = key . z ;
6174
62- return base . OnActivateAsync ( ) ;
75+ await EnsureChunkGenerated ( ) ;
76+ }
77+
78+ private async Task EnsureChunkGenerated ( )
79+ {
80+ /*
81+ var generator = GrainFactory.GetGrain<IChunkGeneratorFlat>(1);
82+ GeneratorSettings settings = new GeneratorSettings
83+ {
84+ FlatGeneratorInfo = new FlatGeneratorInfo
85+ {
86+ FlatBlockId = new BlockState?[] { BlockStates.Stone(), BlockStates.Dirt(), BlockStates.Grass() }
87+ }
88+ };
89+ _state = await generator.Generate(_chunkX, _chunkZ, settings);
90+ */
91+ var generator = GrainFactory . GetGrain < IChunkGeneratorOverworld > ( 1 ) ;
92+ GeneratorSettings settings = new GeneratorSettings
93+ {
94+ } ;
95+ _state = await generator . Generate ( _chunkX , _chunkZ , settings ) ;
6396 }
6497 }
6598}
0 commit comments