static void SurfaceFragmentToBytes(out byte surf, Tile t) { if (!t || (!t.SurfaceFrag && !t.Foundation)) { surf = 0; return; } byte param = 0; byte frag = 0; if (t.Foundation) { frag = (byte)GenerateLevel.SurfaceFragmentTypes.FOUNDATIONTILE; } else if (t.SurfaceFrag.GetComponent <TreeFragment>()) { frag = (byte)GenerateLevel.SurfaceFragmentTypes.TREE; param = (byte)t.SurfaceFrag.GetComponent <TreeFragment>().Growth; } else if (t.SurfaceFrag.GetComponent <SurfaceFragment>()) { frag = (byte)GenerateLevel.SurfaceFragmentTypes.SURFFRAG; param = (byte)FragmentManager.FragToInt(t.SurfaceFrag.GetComponent <UnearthedFragment>().currFrag.GetType().ToString()); } frag = (byte)(frag & SURFFRAG_MASK); param = (byte)(param << 3); param = (byte)(param & FRAGMENT_MASK); surf = (byte)(frag | param); }
//resets the unearthed fragment to a new tile, item, and turns it on public void reset() { currFrag = FragmentManager.CreateFragment(FragmentManager.FM.GetRandomFrag(true)); Tile[] t = (Tile[])Component.FindObjectsOfType(typeof(Tile)); //TODO: Change this so it only goes through one plane int r = t.Length / 3; r = Random.Range(0, r); //cycle through all tiles on the lowest plane and choose a tile to attach to, or none if one is not chosen in the given cycle for (int i = 0; i < t.Length; i++) { if (!t[i].Resident && !t[i].SurfaceFrag && !t[i].Foundation && t[i].transform.parent.tag == "LowPlane") { if (i <= r) { if (t[i] == AttachedTile || t[i] == null) { return; } this.SetTile(t[i]); } } } //get mesh of the chosen frag Mesh newMesh = currFrag.getModel(); ((MeshFilter)GetComponent("MeshFilter")).mesh = newMesh; //activate it if (AttachedTile && AttachedTile.SurfaceFrag == this) { Active = true; ((MeshRenderer)GetComponent("MeshRenderer")).enabled = true; particleSystem.enableEmission = true; transform.localScale = new Vector3(0, 0, 0); } print(FragmentManager.FragToInt(currFrag.GetType().ToString())); }