示例#1
0
    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);
        }
    }
示例#2
0
    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);
    }
示例#4
0
    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");
    }
示例#6
0
    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()));
    }