Esempio n. 1
0
 //Awake is called before start - Used for initialization
 private void Awake()
 {
     Application.targetFrameRate = -1;
     chunk_Manager = new GameObject();
     block_Manager = new Block_Manager();
     ChunkManagerSetUp();
 }
 public void SetChunkManager(int a_worldseed, int a_chunksize, byte a_chunkmaxdepth, int a_chunkdistance, Block_Manager a_blockmanager)
 {
     blockManager  = a_blockmanager;
     chunkPool     = new Queue <GameObject>();
     loadOrder     = new Queue <KeyValuePair <Vector3Int, GameObject> >();
     defaultChunk  = (GameObject)Instantiate(Resources.Load("Prefabs/defaultChunk"));
     chunkSize     = a_chunksize;
     chunkMaxDepth = a_chunkmaxdepth;
     Debug.Log("Chunk Distance: " + a_chunkdistance);
     chunkNumLimit = (int)Math.Pow((a_chunkdistance), 3);
     Debug.Log("Chunk Count Limit: " + chunkNumLimit);
     defaultChunk.GetComponent <Octree_Controller>().octreeSize     = chunkSize;
     defaultChunk.GetComponent <Octree_Controller>().chunkMaxDepth  = chunkMaxDepth;
     defaultChunk.GetComponent <Octree_Controller>().chunk_Renderer = chunk_Renderer;
     //Set Procedural Seed
     worldSeed = a_worldseed;
     //Load Chunks inot Pool
     for (int i = 0; i < chunkNumLimit; i++)
     {
         GameObject chunk = Instantiate(defaultChunk);
         chunk.name             = "Chunk" + Octree_Controller.count.ToString();
         chunk.transform.parent = this.transform;
         chunk.SetActive(false);
         chunkPool.Enqueue(chunk);
     }
     //Set Block Manager
 }
Esempio n. 3
0
 private void Awake()
 {
     count += 1;
     this.block_Manager  = new Block_Manager();
     this.olc            = new OT_LocCode();
     this.octreepos      = this.gameObject.transform.position;
     this.octreelimitpos = octreepos + new Vector3(octreeSize, octreeSize, octreeSize);
 }
Esempio n. 4
0
    // Use this for initialization
    void Start()
    {
        this.block_Manager = new Block_Manager();
        this.olc           = new OT_LocCode();

        this.octreepos      = this.transform.position;
        this.octreelimitpos = octreepos + new Vector3(octreesize, octreesize, octreesize);


        //Test 1
        //this.octree.Add(0, 0);
        this.octree.Add(8, 0);
        this.octree.Add(9, 0);
        this.octree.Add(10, 0);
        this.octree.Add(11, 0);
        this.octree.Add(12, 0);
        this.octree.Add(13, 0);
        this.octree.Add(14, 0);
        this.octree.Add(15, 0);
        this.octree.Add(64, 3);
        this.octree.Add(65, 3);
        this.octree.Add(66, 1);
        this.octree.Add(67, 2);
        this.octree.Add(536, 1);
        this.octree.Add(537, 1);
        this.octree.Add(538, 2);
        this.octree.Add(539, 2);
        this.octree.Add(540, 1);
        this.octree.Add(541, 1);
        this.octree.Add(542, 2);
        this.octree.Add(543, 2);
        this.octree.Add(68, 3);
        this.octree.Add(69, 3);
        this.octree.Add(70, 1);
        this.octree.Add(71, 1);

        //Test 2

        PreRender();
    }
Esempio n. 5
0
    // Use this for initialization
    void Start()
    {
        this.block_Manager = new Block_Manager();

        this.octreepos      = this.transform.position;
        this.octreelimitpos = octreepos + new Vector3(octreesize, octreesize, octreesize);


        //Test 1
        this.octree.Add("", new Octree_Node(this, "", 0));
        this.octree.Add("000", new Octree_Node(this, "000", 0));
        this.octree.Add("001", new Octree_Node(this, "001", 0));
        this.octree.Add("010", new Octree_Node(this, "010", 0));
        this.octree.Add("011", new Octree_Node(this, "011", 0));
        this.octree.Add("100", new Octree_Node(this, "100", 0));
        this.octree.Add("101", new Octree_Node(this, "101", 0));
        this.octree.Add("110", new Octree_Node(this, "110", 0));
        this.octree.Add("111", new Octree_Node(this, "111", 0));
        this.octree.Add("000000", new Octree_Node(this, "000000", 3));
        this.octree.Add("000001", new Octree_Node(this, "000001", 3));
        this.octree.Add("000010", new Octree_Node(this, "000010", 1));
        this.octree.Add("000011", new Octree_Node(this, "000011", 2));
        this.octree.Add("000011000", new Octree_Node(this, "000011000", 1));
        this.octree.Add("000011001", new Octree_Node(this, "000011001", 1));
        this.octree.Add("000011010", new Octree_Node(this, "000011010", 2));
        this.octree.Add("000011011", new Octree_Node(this, "000011011", 2));
        this.octree.Add("000011100", new Octree_Node(this, "000011100", 1));
        this.octree.Add("000011101", new Octree_Node(this, "000011101", 1));
        this.octree.Add("000011110", new Octree_Node(this, "000011110", 2));
        this.octree.Add("000011111", new Octree_Node(this, "000011111", 2));
        this.octree.Add("000100", new Octree_Node(this, "000100", 3));
        this.octree.Add("000101", new Octree_Node(this, "000101", 3));
        this.octree.Add("000110", new Octree_Node(this, "000110", 1));
        this.octree.Add("000111", new Octree_Node(this, "000111", 1));

        //Test 2

        PreRender();
    }
    public void DrawChunk(GameObject chunk)

    {
        block_Manager = new Block_Manager();
        Mesh octree_mesh = chunk.GetComponent <MeshFilter>().mesh;
        //Dictionary<ushort, int> materialdic = chunk.GetComponent<Octree_Controller>().materialdic;
        MeshRenderer octree_MeshRender = chunk.GetComponent <MeshRenderer>();

        Dictionary <ushort, int> octree = chunk.GetComponent <Octree_Controller>().octree;
        float octreeSize = chunk.GetComponent <Octree_Controller>().octreeSize;

        //Set up Mesh
        octree_mesh.Clear();
        byte lengthverts = 18;

        Vector3[]  meshverts     = new Vector3[octree.Count * lengthverts];
        List <int> facetriangles = new List <int>();
        int        count         = 0;

        foreach (ushort code in octree.Keys)
        {
            bool[] sidestorender = { DetermineSideRender(octree, code, olc.CalculateAdjacent(code, axisZ, -1)), DetermineSideRender(octree, code, olc.CalculateAdjacent(code, axisY, 1)),    // -z, +y
                                     DetermineSideRender(octree, code, olc.CalculateAdjacent(code, axisX,  1)), DetermineSideRender(octree, code, olc.CalculateAdjacent(code, axisX, -1)),   // +x, -x
                                     DetermineSideRender(octree, code, olc.CalculateAdjacent(code, axisZ,  1)), DetermineSideRender(octree, code, olc.CalculateAdjacent(code, axisY, -1)) }; // +z, -y

            if (sidestorender.Any(x => x))                                                                                                                                                   //If at least one side can be rendered
            {
                float   tier_size = octreeSize * (1 / (float)Math.Pow(2, olc.CalculateDepth(code)));
                Vector3 test      = olc.LocToVec3(code);
                Vector3 locpos    = test * tier_size;

                //MultiSide
                meshverts[(count * lengthverts) + 0] = locpos + new Vector3(0, 0, 0);
                meshverts[(count * lengthverts) + 1] = locpos + new Vector3(0, tier_size, 0);
                meshverts[(count * lengthverts) + 2] = locpos + new Vector3(0, tier_size, tier_size);
                meshverts[(count * lengthverts) + 3] = locpos + new Vector3(0, 0, tier_size);
                //Side Z-
                meshverts[(count * lengthverts) + 4] = locpos + new Vector3(tier_size * GreedyAdjacent(octree, code, axisX, axisZ, -1), 0, 0);
                meshverts[(count * lengthverts) + 5] = locpos + new Vector3(tier_size * GreedyAdjacent(octree, code, axisX, axisZ, -1), tier_size, 0);
                //Side Y+
                meshverts[(count * lengthverts) + 6] = locpos + new Vector3(tier_size * GreedyAdjacent(octree, code, axisX, axisY, 1), tier_size, 0);
                meshverts[(count * lengthverts) + 7] = locpos + new Vector3(tier_size * GreedyAdjacent(octree, code, axisX, axisY, 1), tier_size, tier_size);
                //Side X+
                meshverts[(count * lengthverts) + 8]  = locpos + new Vector3(tier_size, 0, 0);
                meshverts[(count * lengthverts) + 9]  = locpos + new Vector3(tier_size, tier_size, 0);
                meshverts[(count * lengthverts) + 10] = locpos + new Vector3(tier_size, tier_size, tier_size * GreedyAdjacent(octree, code, axisZ, axisX, 1));
                meshverts[(count * lengthverts) + 11] = locpos + new Vector3(tier_size, 0, tier_size * GreedyAdjacent(octree, code, axisZ, axisX, 1));
                //Side X-
                meshverts[(count * lengthverts) + 12] = locpos + new Vector3(0, tier_size, tier_size * GreedyAdjacent(octree, code, axisZ, axisX, -1));
                meshverts[(count * lengthverts) + 13] = locpos + new Vector3(0, 0, tier_size * GreedyAdjacent(octree, code, axisZ, axisX, -1));
                //Side Z+
                meshverts[(count * lengthverts) + 14] = locpos + new Vector3(tier_size * GreedyAdjacent(octree, code, axisX, axisZ, 1), tier_size, tier_size);
                meshverts[(count * lengthverts) + 15] = locpos + new Vector3(tier_size * GreedyAdjacent(octree, code, axisX, axisZ, 1), 0, tier_size);
                //Side Y-
                meshverts[(count * lengthverts) + 16] = locpos + new Vector3(tier_size * GreedyAdjacent(octree, code, axisX, axisY, -1), 0, 0);
                meshverts[(count * lengthverts) + 17] = locpos + new Vector3(tier_size * GreedyAdjacent(octree, code, axisX, axisY, -1), 0, tier_size);


                //face front: -z
                if (sidestorender[0] && !GreedySubAdjacent(octree, code, axisX, axisZ, -1))     //Should this side show? Plus Greedmesh Check
                {
                    facetriangles.Add((count * lengthverts) + 0);
                    facetriangles.Add((count * lengthverts) + 5);
                    facetriangles.Add((count * lengthverts) + 4);     //f-z t1
                    facetriangles.Add((count * lengthverts) + 0);
                    facetriangles.Add((count * lengthverts) + 1);
                    facetriangles.Add((count * lengthverts) + 5);     //f-z t2
                }

                //face top: +y
                if (sidestorender[1] && !GreedySubAdjacent(octree, code, axisX, axisY, 1))     //Should this side show? Plus Greedmesh Check
                {
                    facetriangles.Add((count * lengthverts) + 6);
                    facetriangles.Add((count * lengthverts) + 1);
                    facetriangles.Add((count * lengthverts) + 2);     //t+y t1
                    facetriangles.Add((count * lengthverts) + 6);
                    facetriangles.Add((count * lengthverts) + 2);
                    facetriangles.Add((count * lengthverts) + 7);     //t+y t2
                }

                //face right: +x
                if (sidestorender[2] && !GreedySubAdjacent(octree, code, axisZ, axisX, 1))     //Should this side show? Plus Greedmesh Check
                {
                    facetriangles.Add((count * lengthverts) + 8);
                    facetriangles.Add((count * lengthverts) + 9);
                    facetriangles.Add((count * lengthverts) + 10);     //r+x t1
                    facetriangles.Add((count * lengthverts) + 8);
                    facetriangles.Add((count * lengthverts) + 10);
                    facetriangles.Add((count * lengthverts) + 11);     //r+x t2
                }

                //face left: -x
                if (sidestorender[3] && !GreedySubAdjacent(octree, code, axisZ, axisX, -1))     //Should this side show? Plus Greedmesh Check
                {
                    facetriangles.Add((count * lengthverts) + 0);
                    facetriangles.Add((count * lengthverts) + 13);
                    facetriangles.Add((count * lengthverts) + 12);     //l-x t1
                    facetriangles.Add((count * lengthverts) + 0);
                    facetriangles.Add((count * lengthverts) + 12);
                    facetriangles.Add((count * lengthverts) + 1);     //l-x t2
                }

                //face back: +z
                if (sidestorender[4] && !GreedySubAdjacent(octree, code, axisX, axisZ, 1))     //Checking side - Plus Greedmesh Check
                {
                    facetriangles.Add((count * lengthverts) + 14);
                    facetriangles.Add((count * lengthverts) + 2);
                    facetriangles.Add((count * lengthverts) + 3);     //l-z t1
                    facetriangles.Add((count * lengthverts) + 14);
                    facetriangles.Add((count * lengthverts) + 3);
                    facetriangles.Add((count * lengthverts) + 15);     //l-z t2
                }

                //face bottom: -y
                if (sidestorender[5] && !GreedySubAdjacent(octree, code, axisX, axisY, -1))     //Checking Side -  Plus Greedmesh Check
                {
                    facetriangles.Add((count * lengthverts) + 0);
                    facetriangles.Add((count * lengthverts) + 17);
                    facetriangles.Add((count * lengthverts) + 3);     //b-y t1
                    facetriangles.Add((count * lengthverts) + 0);
                    facetriangles.Add((count * lengthverts) + 16);
                    facetriangles.Add((count * lengthverts) + 17);     //b-y t2
                }
                count++;
            }
            else
            {
                continue;
            }
        }
        octree_mesh.vertices       = meshverts;
        octree_mesh.triangles      = facetriangles.ToArray();
        octree_MeshRender.material = (Material)Resources.Load("Default", typeof(Material));
        octree_mesh.RecalculateNormals();
        octree_mesh.RecalculateBounds();
        chunk.GetComponent <MeshCollider>().sharedMesh = octree_mesh;
    }
Esempio n. 7
0
    // Use this for initialization
    void Start()
    {
        this.octreepos      = this.transform.position;
        this.octreesize     = 16;
        this.octreelimitpos = octreepos + new Vector3(octreesize, octreesize, octreesize);

        this.block_Manager = new Block_Manager();
        this.olc           = new OT_LocCode();

        //AddNodeLocID(8, 0);
        //AddNodeLocID(9, 0);
        //AddNodeLocID(10, 0);
        //AddNodeLocID(11, 0);
        //AddNodeLocID(12, 0);
        //AddNodeLocID(13, 0);
        //AddNodeLocID(14, 0);
        //AddNodeLocID(15, 0);
        //AddNodeLocID(64, 3);
        //AddNodeLocID(65, 3);
        //AddNodeLocID(66, 1);
        //AddNodeLocID(67, 2);
        //AddNodeLocID(536, 1);
        //AddNodeLocID(537, 1);
        //AddNodeLocID(538, 2);
        //AddNodeLocID(539, 2);
        //AddNodeLocID(540, 1);
        //AddNodeLocID(541, 1);
        //AddNodeLocID(542, 2);
        //AddNodeLocID(543, 1);
        //AddNodeLocID(68, 3);
        //AddNodeLocID(69, 3);
        //AddNodeLocID(70, 1);
        //AddNodeLocID(71, 1);

        AddNodeRelPos(new Vector3(0, 0, 0), 1, 2);
        AddNodeRelPos(new Vector3(1, 7.3f, 9), 1, 0);
        AddNodeRelPos(new Vector3(0, 8, 0), 1, 0);
        AddNodeRelPos(new Vector3(0, 8, 8), 1, 0);
        AddNodeRelPos(new Vector3(8, 0, 0), 1, 0);
        AddNodeRelPos(new Vector3(8, 0, 8), 1, 0);
        AddNodeRelPos(new Vector3(8, 8, 0), 1, 0);
        AddNodeRelPos(new Vector3(8, 8, 8), 1, 0);
        AddNodeRelPos(new Vector3(1, 1, 1), 2, 3);
        AddNodeRelPos(new Vector3(0, 2.4f, 5.3f), 2, 3);
        AddNodeRelPos(new Vector3(3.6f, 6, 1.2f), 2, 1);
        AddNodeRelPos(new Vector3(1, 7.7f, 4), 2, 2);
        //AddNodeRelPos(67, 2);
        //AddNodeRelPos(536, 1);
        //AddNodeRelPos(537, 1);
        //AddNodeRelPos(538, 2);
        //AddNodeRelPos(539, 2);
        //AddNodeRelPos(540, 1);
        //AddNodeRelPos(541, 1);
        //AddNodeRelPos(542, 2);
        //AddNodeRelPos(543, 1);
        //AddNodeRelPos(68, 3);
        //AddNodeRelPos(69, 3);
        //AddNodeRelPos(70, 1);
        //AddNodeRelPos(71, 1);

        //Test 2

        PreRender();
    }