Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 NativeArray <Entity> GetResizedCache(ChunkIdentity identity, int desiredLength)
 {
     ResizeCache(identity, desiredLength);
     return(_entityCache[identity]);
 }
Exemplo n.º 3
0
        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);
        }