void CreateChunk(ChunkIdentity chunkIdentity) { var world = GameManager.Universe[chunkIdentity.WorldId]; var chunkPos = chunkIdentity.ChunkId; if (world.ContainsKey(chunkPos)) { Debug.Log($"Chunk {chunkPos} already exists!"); return; } var eventity = world.EntityManager.CreateEntity(ComponentType.ReadOnly <CreateChunkEventity>()); world.EntityManager.SetComponentData(eventity, new CreateChunkEventity() { ChunkPosition = chunkIdentity }); _setup.Enqueue(chunkIdentity); }
NativeArray <Entity> GetResizedCache(ChunkIdentity identity, int desiredLength) { ResizeCache(identity, desiredLength); return(_entityCache[identity]); }
bool SetupChunk(ChunkIdentity chunkIdentity) { var world = GameManager.Universe[chunkIdentity.WorldId]; var entityWorld = world.EntityWorld.GetOrCreateSystem <InitializationSystemGroup>(); var chunkPos = chunkIdentity.ChunkId; if (!world.ContainsKey(chunkPos)) { return(false); } var blockReg = GameManager.Registry.Blocks; if (!blockReg.TryGetIdentity(BaseGameMod.GrassBlock, out var grass)) { throw new AssetNotFoundException(BaseGameMod.GrassBlock.ToString()); } if (!blockReg.TryGetIdentity(BaseGameMod.DirtBlock, out var dirt)) { throw new AssetNotFoundException(BaseGameMod.DirtBlock.ToString()); } if (!blockReg.TryGetIdentity(BaseGameMod.StoneBlock, out var stone)) { throw new AssetNotFoundException(BaseGameMod.StoneBlock.ToString()); } if (!blockReg.TryGetIdentity(BaseGameMod.SandBlock, out var sand)) { throw new AssetNotFoundException(BaseGameMod.SandBlock.ToString()); } var em = world.EntityManager; var entityArchetype = world.EntityManager.CreateArchetype( typeof(ChunkIdComponent), typeof(BlockActiveComponent), typeof(BlockIdentityComponent), typeof(BlockShapeComponent), typeof(BlockMaterialIdentityComponent), typeof(BlockSubMaterialIdentityComponent), typeof(BlockCulledFacesComponent) ); var entity = world.GetOrCreate(chunkPos, entityArchetype); var activeArray = em.GetBuffer <BlockActiveComponent>(entity); var blockIdentities = em.GetBuffer <BlockIdentityComponent>(entity); em.DirtyComponent <BlockActiveComponent.Version>(entity); em.DirtyComponent <BlockIdentityComponent.Version>(entity); for (var i = 0; i < UnivoxDefine.CubeSize; i++) { var pos = UnivoxUtil.GetPosition3(i); var xTop = (pos.x == UnivoxDefine.AxisSize - 1); var yTop = (pos.y == UnivoxDefine.AxisSize - 1); var zTop = (pos.z == UnivoxDefine.AxisSize - 1); activeArray[i] = true; if (!yTop) { if (xTop && !zTop) { blockIdentities[i] = stone; } else if (!xTop && zTop) { blockIdentities[i] = sand; } else { blockIdentities[i] = dirt; } } else { blockIdentities[i] = grass; } } return(true); }