//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 }
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); }
// 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(); }
// 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; }
// 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(); }