Ejemplo n.º 1
0
    public TerrainChunk(OmniTerrain parent,int x, int y,int size)
    {
        OmniTerrain.loadedChunks.Add(this);
        OmniTerrain.chunks[x + y * size] = this;
        if (OmniTerrain.biomes.ContainsKey(x + y * size))
            biome = OmniTerrain.biomes[x + y * size];

        objects = new List<OmniObject>();
        pendingSlantUpdates = new List<int>();
        atlas = TPackManager.getAtlas ("World");
        pos = new Vector3 ((int)(x*size), (int)(y*size), 0);
        mesh = new Mesh[] { new Mesh(), new Mesh() };
        chunksize = size;
        slant = new byte[chunksize * chunksize];
        for (int i = 0; i < slant.Length; i++)
        {
            slant[i] = 0;
        }
        this.parent = parent;

        if (Network.isClient)
        {
            RChunkEvent e = new RChunkEvent(OmniWorld.tick);
            e.x = (int)x;
            e.y = (int)y;
            e.player = Network.player;
            OmniEvents.AddEvent(e);
        }
        else
        {

            loaded = true;
            GenDamageMap(size);
            GenBiomes(size);
            GenSlant();
            GenMesh(1);

        }
    }
Ejemplo n.º 2
0
    public void OmniUpdate(float delta)
    {
        for (int i = 0; i < OmniTerrain.activeChunks.Count; i++)
        {
            if (OmniTerrain.activeChunks[i].rebuildMesh)
            {
                OmniTerrain.activeChunks[i].GenMesh(1);
                OmniTerrain.activeChunks[i].rebuildMesh = false;
            }
        }

        if (terrainUpdates.Count > 0)
        {

            BlockEvent e = new BlockEvent(OmniWorld.tick, terrainUpdates.ToArray());
            OmniEvents.AddEvent(e);

            if (OmniWorld.isDebugging)
                Debug.Log("tUpdates: " + terrainUpdates.Count + " : " + e.updates[0].x + "," + e.updates[0].y);

            terrainUpdates.Clear();
        }

        bool flag = false;
        for (int i = 0; i < toValidate.Count; i++)
        {
            toValidate[i].counter++;
            if (toValidate[i].counter > OmniWorld.localDelay * 2)
            {
                flag = true;
                break;
            }
        }
        if (flag)
        {
            toValidate.Clear();
            for (int i = 0; i < OmniTerrain.activeChunks.Count; i++)
            {
                RChunkEvent e = new RChunkEvent(OmniWorld.tick);
                e.x = (int)OmniTerrain.activeChunks[i].pos.x / OmniTerrain.chunkSize;
                e.y = (int)OmniTerrain.activeChunks[i].pos.y / OmniTerrain.chunkSize;
                e.player = Network.player;
                OmniEvents.AddEvent(e);
            }

        }
    }