Beispiel #1
0
    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()));
    }