public static void doSyncTick() { try { Scheduler.onAsycTick(); Scheduler.onSyncTick(); deltaTime += Time.deltaTime; deltaTime2 += Time.deltaTime; ChunkMeshCreator.onImmediateDisplayChunksTick(); if (GameManager.deltaTime >= 0.1f) { ChunkMeshCreator.onDisplayChunkTick(); PlayerTrackingHandler.onUnloadFarChunks(); BlockLogicHandler.onTick(); GameManager.deltaTime = 0; foreach (Entity e in GameManager.getEntitiesByType(ReuseableGameObject.ITEM_ENTITY).ToArray()) { if (e.isRemoved() == false && e.isInitiated()) { e.onTick(); } } } if (deltaTime >= 1 && Chunk.changed > 3) { //StaticBatchingUtility.Combine(Chunk.childList.ToArray(), GameManager.getGameManager().mapHolder); //Chunk.changed = 0; deltaTime = 0; } } catch (Exception e) { Debug.LogException(e); } }
public static void pushMeshData(Chunk chunk) { ChunkMeshCreator rh = new ChunkMeshCreator(chunk); rh.prepareMesh(); chunk.materialVertices = rh.materialVertices; chunk.materialUVs = rh.materialUVs; chunk.materialTriangles = rh.materialTriangles; chunk.colliderVerices = rh.colliderVertices.ToArray(); chunk.colliderTriangles = rh.colliderTriangles.ToArray(); }
public static GameObject getGameObject(MyMaterial m) { Block block = new Block(null, new Vector(0, 0, 0), m); BlockFace[] blockfaces = new BlockFace[4]; ChunkMeshCreator cmc = new ChunkMeshCreator(null); for (int _d = 0; _d < 6; _d++) { Direction direction = (Direction)_d; blockfaces[0] = block.getBlockFace(direction); blockfaces[1] = block.getBlockFace(direction); blockfaces[2] = block.getBlockFace(direction); blockfaces[3] = block.getBlockFace(direction); cmc.creatFace(m.getMaterial(direction), blockfaces, 0, 0, scale: 0.4f); } GameObject rootObject = new GameObject("CubeItemEntity"); foreach (Material material in cmc.materialVertices.Keys) { Mesh mesh = new Mesh(); mesh.vertices = cmc.materialVertices[material].ToArray(); mesh.triangles = cmc.materialTriangles[material].ToArray(); mesh.uv = cmc.materialUVs[material].ToArray(); mesh.RecalculateBounds(); mesh.RecalculateNormals(); mesh.MarkDynamic(); mesh.Optimize(); GameObject o = new GameObject(material + ""); MeshFilter meshFilter = o.AddComponent <MeshFilter>(); MeshRenderer meshRenderer = o.AddComponent <MeshRenderer>(); meshFilter.sharedMesh = mesh; meshRenderer.sharedMaterial = material; o.transform.SetParent(rootObject.transform); } MeshCollider meshCollider = rootObject.AddComponent <MeshCollider>(); meshCollider.convex = true; Mesh colliderMesh = new Mesh(); colliderMesh.vertices = cmc.colliderVertices.ToArray(); colliderMesh.triangles = cmc.colliderTriangles.ToArray(); colliderMesh.RecalculateBounds(); colliderMesh.RecalculateNormals(); colliderMesh.MarkDynamic(); colliderMesh.Optimize(); meshCollider.sharedMesh = colliderMesh; rootObject.tag = "Item"; return(rootObject); }
public static void doAsycTick() { while (isPlaying) { //0.5s timer; //if (GameManager.deltaTime >= 0.5f) { ChunkMeshCreator.onImmediateConstractMeshTick(); PlayerTrackingHandler.onGenerateNearbyChunks(); ChunkMeshCreator.onConstractMeshTick(); // GameManager.deltaTime = 0; //} Thread.Sleep(200); } Debug.Log("Asyc Thread ended!"); }
public void initiateMap() { Timer.start("initiate map"); GameManager.spawnPoint = GameManager.getHeighest(new Location(GameManager.chunkSize / 2, 0, GameManager.chunkSize / 2)).getLocation().add(0, 50, 0); Vector v = new Vector(0, 0, 0); if (GameManager.getLocalPlayer() != null) { v = GameManager.getLocalPlayer().getLocation().getChunkVector(); for (int x = -initialMapDistance; x <= initialMapDistance; x++) { for (int y = 0; y <= GameManager.getGameManager().viewDistance; y++) { for (int z = -initialMapDistance; z <= initialMapDistance; z++) { Vector cv = new Vector(x, y, z).add(v); if (cv.getY() >= 0) { Chunk chunk = GameManager.getChunk(cv); ChunkMeshCreator.pushMeshData(chunk); chunk.display(); } } } } } else { for (int x = -initialMapDistance; x <= initialMapDistance; x++) { for (int y = 0; y <= GameManager.getGameManager().viewDistance; y++) { for (int z = -initialMapDistance; z <= initialMapDistance; z++) { Chunk chunk = GameManager.getChunk(new Vector(x, y, z).add(v)); ChunkMeshCreator.pushMeshData(chunk); chunk.display(); } } } } Timer.endAndPrint("initiate map"); }
public void setType(MyMaterial MyMaterial, bool updateNow = true) { material = MyMaterial; Stack <Chunk> chunksToUpdate = new Stack <Chunk>(); Vector chunkVector = getChunkVector(); Vector vectorInChunk = getVectorInChunk(); if (vectorInChunk.getX() >= GameManager.chunkSize - 1) { Chunk chunk = GameManager.getChunk(chunkVector.add(new Vector(1, 0, 0))); chunksToUpdate.Push(chunk); } else if (vectorInChunk.getX() <= 0) { Chunk chunk = GameManager.getChunk(chunkVector.add(new Vector(-1, 0, 0))); chunksToUpdate.Push(chunk); } if (vectorInChunk.getY() >= GameManager.chunkSize - 1) { Chunk chunk = GameManager.getChunk(chunkVector.add(new Vector(0, 1, 0))); chunksToUpdate.Push(chunk); } else if (vectorInChunk.getY() <= 0) { Chunk chunk = GameManager.getChunk(chunkVector.add(new Vector(0, -1, 0))); chunksToUpdate.Push(chunk); } if (vectorInChunk.getZ() >= GameManager.chunkSize - 1) { Chunk chunk = GameManager.getChunk(chunkVector.add(new Vector(0, 0, 1))); chunksToUpdate.Push(chunk); } else if (vectorInChunk.getZ() <= 0) { Chunk chunk = GameManager.getChunk(chunkVector.add(new Vector(0, 0, -1))); chunksToUpdate.Push(chunk); } Chunk thisChunk = getChunk(); if (MyMaterial != MyMaterial.AIR) { thisChunk.hasBlock = true; } chunksToUpdate.Push(thisChunk); // Debug.Log(chunkVector + " " + vectorInChunk + " " + chunksToUpdate.Count); while (chunksToUpdate.Count > 0) { Chunk chunk = chunksToUpdate.Pop(); if (updateNow) { Scheduler.runTaskAsynchronously(() => { ChunkMeshCreator.pushMeshData(chunk); Scheduler.runTaskSynchronously(() => { chunk.display(); }); }); } else { ChunkMeshCreator.immediateRenderChunks.Enqueue(chunk); } } thisChunk.needSave = true; //Remove all block damage damagedValue = 0; thisChunk.damagedBlocksIndexs.Remove(Chunk.getIndex(getVectorInChunk())); }