public void AddChunkRenderComponent(Entity chunkRenderEntity, Entity chunkEntity, ref Chunk chunk, int materialID, int skeletonID)// byte buildState = 0) { ChunkRenderer chunkRender = new ChunkRenderer { }; chunkRender.chunk = chunkEntity; chunkRender.materialID = (byte)materialID; chunkRender.SetMetaData(voxelSpawnSystem.meta, voxelSpawnSystem.voxelIDs); //, ChunkSpawnSystem.maxCacheVerts, ChunkSpawnSystem.maxCacheTriangles); chunkRender.Value = chunk.Value; /*if (skeletonID != 0) * { * chunkRender.hasWeights = 1; * chunkRender.InitializeBoneWeights(ChunkSpawnSystem.maxCacheVerts, * worldSpawnSystem.skeletonsMeta[chunk.worldID].data.datas); * }*/ if (World.EntityManager.HasComponent <ChunkRenderer>(chunkRenderEntity)) { World.EntityManager.SetComponentData(chunkRenderEntity, chunkRender); } else { World.EntityManager.AddComponentData(chunkRenderEntity, chunkRender); } ChunkSides sides = new ChunkSides(); sides.Init(chunk.Value.voxelDimensions); World.EntityManager.SetComponentData(chunkRenderEntity, sides); ChunkMesh chunkMesh = new ChunkMesh(); chunkMesh.Init(chunk.Value.voxelDimensions); World.EntityManager.SetComponentData(chunkRenderEntity, chunkMesh); }
// add noise to render, using original verts and making new one public void UpdateRender(Entity entity, ref ChunkRenderer chunkRenderer, ref ChunkMesh chunkMesh, ref ChunkMeshAnimation chunkMeshAnimation) { if (UnityEngine.Time.time - chunkMesh.timePassed >= animationSpeed) { chunkMesh.timePassed = UnityEngine.Time.time; var chunk = World.EntityManager.GetComponentData <Chunk>(chunkRenderer.chunk); if (World.EntityManager.Exists(chunk.world) == false || !World.EntityManager.HasComponent <World>(chunk.world)) { return; } var worldComponent = World.EntityManager.GetComponentData <World>(chunk.world); var renderer = World.EntityManager.GetSharedComponentData <RenderMesh>(entity); var mesh = renderer.mesh; // apply animation if (World.EntityManager.HasComponent <Skeleton>(chunk.world)) { var skeleton = World.EntityManager.GetComponentData <Skeleton>(chunk.world); if (skeleton.bones.Length > 0) { var vertsCount = chunkMesh.buildPointer.vertIndex; float3[] bonePositions = new float3[skeleton.bones.Length]; quaternion[] boneRotations = new quaternion[skeleton.bones.Length]; for (int i = 0; i < skeleton.bones.Length; i++) { var boneEntity = skeleton.bones[i]; //originalBonePositions[i] = World.EntityManager.GetComponentData<Bone>(boneEntity).position; //bonePositions[i] = World.EntityManager.GetComponentData<Translation>(boneEntity).Value; boneRotations[i] = World.EntityManager.GetComponentData <Rotation>(boneEntity).Value; bonePositions[i] = World.EntityManager.GetComponentData <Translation>(boneEntity).Value - World.EntityManager.GetComponentData <Bone>(boneEntity).position; //Debug.LogError(i + " - Bone Position: " + bonePositions[i]); } chunkMeshAnimation.SetBones(bonePositions, boneRotations); var layout = new[] { new VertexAttributeDescriptor(UnityEngine.Rendering.VertexAttribute.Position, VertexAttributeFormat.Float32, 3), new VertexAttributeDescriptor(UnityEngine.Rendering.VertexAttribute.Color, VertexAttributeFormat.Float32, 3), new VertexAttributeDescriptor(UnityEngine.Rendering.VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2), }; mesh.SetVertexBufferParams(vertsCount, layout); //mesh.SetVertexBufferData(cache.vertices, 0, 0, vertsCount); mesh.SetVertexBufferData(chunkMeshAnimation.GetTempArray(), 0, 0, vertsCount); mesh.UploadMeshData(false); //mesh.RecalculateBounds(); //mesh.RecalculateNormals(); } else { return; //newVerts = ApplyRandomNoise(caches[zoxID.id].verts); } } else { return; } } }