Ejemplo n.º 1
0
    void Reset()
    {
        MegaModifyObject modobj = (MegaModifyObject)gameObject.GetComponent <MegaModifyObject>();

        if (modobj != null)
        {
            modobj.ModReset(this);
        }

        if (GetComponent <Renderer>() != null)
        {
            Mesh ms = MegaUtils.GetSharedMesh(gameObject);

            if (ms != null)
            {
                Bounds b = ms.bounds;
                Offset   = -b.center;
                bbox.min = b.center - b.extents;
                bbox.max = b.center + b.extents;
            }
        }

        bsize   = bbox.Size();
        bcenter = bbox.center;
        Init();
    }
    void Reset()
    {
#if false
        MegaModifyObject modobj = (MegaModifyObject)gameObject.GetComponent <MegaModifyObject>();

        if (modobj != null)
        {
            modobj.ModReset(this);
        }

        Renderer rend = GetComponent <Renderer>();

        if (rend != null)
        {
            Mesh ms = MegaUtils.GetSharedMesh(gameObject);

            if (ms != null)
            {
                Bounds b = ms.bounds;
                Offset   = -b.center;
                bbox.min = b.center - b.extents;
                bbox.max = b.center + b.extents;
            }
        }

        if (modobj.selection != null)
        {
            Bounds bb = new Bounds();
            for (int i = 0; i < modobj.verts.Length; i++)
            {
                if (modobj.selection[i] > 0.001f)
                {
                    bb.Encapsulate(modobj.verts[i]);
                }
            }

            Offset   = -bb.center;
            bbox.min = bb.center - bb.extents;
            bbox.max = bb.center + bb.extents;
        }

        bsize   = bbox.Size();
        bcenter = bbox.center;
        Init();
#endif
    }
Ejemplo n.º 3
0
    void Reset()
    {
        if (this.GetComponent <Renderer>() != null)
        {
            Mesh ms = MegaUtils.GetSharedMesh(gameObject);

            if (ms != null)
            {
                CalcNormals(ms);

                Bounds b = ms.bounds;
                Offset   = -b.center;
                bbox.min = b.center - b.extents;
                bbox.max = b.center + b.extents;
            }
        }
    }
Ejemplo n.º 4
0
    public void FitFFDToMesh()
    {
        if (GetComponent <Renderer>() != null)
        {
            Mesh ms = MegaUtils.GetSharedMesh(gameObject);

            if (ms != null)
            {
                Bounds b = ms.bounds;
                Offset   = -b.center;
                bbox.min = b.center - b.extents;
                bbox.max = b.center + b.extents;
            }
        }

        bsize   = bbox.Size();
        bcenter = bbox.center;
        Init();
    }
Ejemplo n.º 5
0
    public void Rebuild(MegaRope rope)
    {
        if (source)
        {
            Mesh smesh = MegaUtils.GetSharedMesh(source);

            if (smesh)
            {
                bounds = smesh.bounds;
                sverts = smesh.vertices;
                overts = new Vector3[smesh.vertexCount];

                rope.mesh.Clear();
                rope.mesh.vertices = smesh.vertices;
                rope.mesh.normals  = smesh.normals;
                rope.mesh.uv       = smesh.uv;
                //rope.mesh.uv1 = smesh.uv1;
                rope.mesh.subMeshCount = smesh.subMeshCount;

                for (int i = 0; i < smesh.subMeshCount; i++)
                {
                    rope.mesh.SetTriangles(smesh.GetTriangles(i), i);
                }

                MeshRenderer mr = source.GetComponent <MeshRenderer>();

                MeshRenderer mr1 = rope.GetComponent <MeshRenderer>();
                if (mr1 != null && mr != null)
                {
                    mr1.sharedMaterials = mr.sharedMaterials;
                }
                // Calc the alphas

                BuildNormalMapping(smesh, true);

                BuildMesh(rope);
            }
        }
    }
Ejemplo n.º 6
0
    static void AllNewCreateSimplePrefab()
    {
        if (Selection.activeGameObject != null)
        {
            if (!Directory.Exists("Assets/MegaPrefabs"))
            {
                AssetDatabase.CreateFolder("Assets", "MegaPrefabs");
            }

            GameObject obj = Selection.activeGameObject;

            // Make a copy?
            GameObject newobj = MegaCopyObject.DoCopyObjects(obj);
            newobj.name = obj.name;

            // Get all modifyObjects in children
            MegaModifyObject[] mods = newobj.GetComponentsInChildren <MegaModifyObject>();

            for (int i = 0; i < mods.Length; i++)
            {
                // Need method to get the base mesh
                GameObject pobj = mods[i].gameObject;

                // Get the mesh and make an asset for it
                Mesh mesh = MegaUtils.GetSharedMesh(pobj);

                if (mesh)
                {
                    string mname = mesh.name;
                    int    ix    = mname.IndexOf("Instance");
                    if (ix != -1)
                    {
                        mname = mname.Remove(ix);
                    }

                    string meshpath = "Assets/MegaPrefabs/" + mname + ".prefab";
                    AssetDatabase.CreateAsset(mesh, meshpath);
                    AssetDatabase.SaveAssets();
                    AssetDatabase.Refresh();
                }
            }

            MegaWrap[] wraps = newobj.GetComponentsInChildren <MegaWrap>();

            for (int i = 0; i < wraps.Length; i++)
            {
                // Need method to get the base mesh
                GameObject pobj = wraps[i].gameObject;

                // Get the mesh and make an asset for it
                Mesh mesh = MegaUtils.GetSharedMesh(pobj);

                if (mesh)
                {
                    string mname = mesh.name;

                    int ix = mname.IndexOf("Instance");
                    if (ix != -1)
                    {
                        mname = mname.Remove(ix);
                    }

                    string meshpath = "Assets/MegaPrefabs/" + mname + ".prefab";
                    AssetDatabase.CreateAsset(mesh, meshpath);
                    AssetDatabase.SaveAssets();
                    AssetDatabase.Refresh();
                }
            }

            Object prefab = PrefabUtility.CreateEmptyPrefab("Assets/MegaPrefabs/" + newobj.name + "_Prefab.prefab");
            //EditorUtility.ReplacePrefab(newobj, prefab, ReplacePrefabOptions.ConnectToPrefab);
            PrefabUtility.ReplacePrefab(newobj, prefab, ReplacePrefabOptions.ConnectToPrefab);
            DestroyImmediate(newobj);
        }
    }
Ejemplo n.º 7
0
    void InitLinkObjects(MegaRope rope)
    {
        rebuild = false;

        float len = rope.RopeLength;

        // Assume z axis for now
        float linklen = (linkOff1.y - linkOff.y) * linkScale.x * LinkSize;              //Length - linkOff.y

        linkcount = (int)(len / linklen);

        for (int i = linkcount; i < rope.gameObject.transform.childCount; i++)
        {
            GameObject go = rope.gameObject.transform.GetChild(i).gameObject;

            if (Application.isEditor && !Application.isPlaying)
            {
                GameObject.DestroyImmediate(go);
            }
            else
            {
                GameObject.Destroy(go);
            }
#if UNITY_4_0 || UNITY_4_1 || UNITY_4_3 || UNITY_4_7 || UNITY_4_6 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5
            //go.SetActive(false);
#else
            //go.SetActiveRecursively(false);
#endif
        }

        if (LinkObj1 == null || LinkObj1.Count == 0)
        {
            return;
        }

        linkobjs = new Transform[linkcount];

        int oi = 0;
        if (linkcount > rope.gameObject.transform.childCount)
        {
            for (int i = 0; i < rope.gameObject.transform.childCount; i++)
            {
                GameObject go = rope.gameObject.transform.GetChild(i).gameObject;
#if UNITY_4_0 || UNITY_4_1 || UNITY_4_3 || UNITY_4_7 || UNITY_4_6 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5
                //go.SetActive(true);
#else
                //go.SetActiveRecursively(true);
#endif
                linkobjs[i] = go.transform;
            }

            int index = rope.gameObject.transform.childCount;

            for (int i = index; i < linkcount; i++)
            {
                if (RandomOrder)
                {
                    oi = (int)(Random.value * (float)LinkObj1.Count);
                }
                else
                {
                    oi = (oi + 1) % LinkObj1.Count;
                }

                GameObject obj = LinkObj1[oi];

                if (obj)
                {
                    GameObject go = new GameObject();                           //(GameObject)Instantiate(LinkObj);	//linkMesh);	//, Vectp, Quaternion.identity);
                    go.name = "Link";


                    MeshRenderer mr = (MeshRenderer)obj.GetComponent <MeshRenderer>();
                    Mesh         ms = MegaUtils.GetSharedMesh(obj);

                    //go.transform.localPosition = p;
                    MeshRenderer mr1 = (MeshRenderer)go.AddComponent <MeshRenderer>();
                    MeshFilter   mf1 = (MeshFilter)go.AddComponent <MeshFilter>();

                    mf1.sharedMesh = ms;

                    mr1.sharedMaterial = mr.sharedMaterial;

                    go.transform.parent = rope.gameObject.transform;
                    linkobjs[i]         = go.transform;
                }
            }
        }
        else
        {
            for (int i = 0; i < linkcount; i++)
            {
                GameObject go = rope.gameObject.transform.GetChild(i).gameObject;
#if UNITY_3_5
                go.SetActiveRecursively(true);
#else
                go.SetActive(true);
#endif
                linkobjs[i] = go.transform;
            }
        }

#if UNITY_5_4 || UNITY_5_5 || UNITY_5_6 || UNITY_2017 || UNITY_2018 || UNITY_2019
        Random.InitState(seed);
#else
        Random.seed = seed;
#endif
        oi = 0;
        for (int i = 0; i < linkcount; i++)
        {
            if (RandomOrder)
            {
                oi = (int)(Random.value * (float)LinkObj1.Count);
            }
            else
            {
                oi = (oi + 1) % LinkObj1.Count;
            }

            GameObject obj = LinkObj1[oi];
            if (obj)
            {
                GameObject go = rope.gameObject.transform.GetChild(i).gameObject;

                MeshRenderer mr = (MeshRenderer)obj.GetComponent <MeshRenderer>();
                Mesh         ms = MegaUtils.GetSharedMesh(obj);

                //go.transform.localPosition = p;
                MeshRenderer mr1 = (MeshRenderer)go.GetComponent <MeshRenderer>();
                MeshFilter   mf1 = (MeshFilter)go.GetComponent <MeshFilter>();

                mf1.sharedMesh     = ms;
                mr1.sharedMaterial = mr.sharedMaterial;
            }
        }
    }
    // Taken from chain mesher
    void InitLinkObjects(MegaShape path)
    {
        if (LinkObj == null)
        {
            return;
        }

        float len = path.splines[curve].length;

        // Assume z axis for now
        float linklen = (linkOff1.y - linkOff.y) * linkScale.x * LinkSize;

        linkcount = (int)(len / linklen);

        for (int i = linkcount; i < gameObject.transform.childCount; i++)
        {
            GameObject go = gameObject.transform.GetChild(i).gameObject;
            if (Application.isEditor)
            {
                DestroyImmediate(go);
            }
            else
            {
                Destroy(go);
            }
        }

        linkobjs = new Transform[linkcount];

        if (linkcount > gameObject.transform.childCount)
        {
            for (int i = 0; i < gameObject.transform.childCount; i++)
            {
                GameObject go = gameObject.transform.GetChild(i).gameObject;
#if UNITY_3_5
                go.SetActiveRecursively(true);
#else
                go.SetActive(true);
#endif
                linkobjs[i] = go.transform;
            }

            int index = gameObject.transform.childCount;

            for (int i = index; i < linkcount; i++)
            {
                GameObject go = new GameObject();
                go.name = "Link";

                GameObject obj = LinkObj;

                if (obj)
                {
                    MeshRenderer mr = (MeshRenderer)obj.GetComponent <MeshRenderer>();
                    Mesh         ms = MegaUtils.GetSharedMesh(obj);

                    MeshRenderer mr1 = (MeshRenderer)go.AddComponent <MeshRenderer>();
                    MeshFilter   mf1 = (MeshFilter)go.AddComponent <MeshFilter>();

                    mf1.sharedMesh = ms;

                    mr1.sharedMaterial = mr.sharedMaterial;

                    go.transform.parent = gameObject.transform;
                    linkobjs[i]         = go.transform;
                }
            }
        }
        else
        {
            for (int i = 0; i < linkcount; i++)
            {
                GameObject go = gameObject.transform.GetChild(i).gameObject;
#if UNITY_3_5
                go.SetActiveRecursively(true);
#else
                go.SetActive(true);
#endif
                linkobjs[i] = go.transform;
            }
        }

#if UNITY_5_4 || UNITY_5_5 || UNITY_5_6 || UNITY_2017
        Random.InitState(0);
#else
        Random.seed = 0;
#endif
        for (int i = 0; i < linkcount; i++)
        {
            GameObject obj = LinkObj;                   //1[oi];
            GameObject go  = gameObject.transform.GetChild(i).gameObject;

            MeshRenderer mr = (MeshRenderer)obj.GetComponent <MeshRenderer>();
            Mesh         ms = MegaUtils.GetSharedMesh(obj);

            MeshRenderer mr1 = (MeshRenderer)go.GetComponent <MeshRenderer>();
            MeshFilter   mf1 = (MeshFilter)go.GetComponent <MeshFilter>();

            mf1.sharedMesh      = ms;
            mr1.sharedMaterials = mr.sharedMaterials;
        }
    }
Ejemplo n.º 9
0
    public float Init(float tw)
    {
        Mesh ms = null;

        if (obj != null)
        {
            ms = MegaUtils.GetSharedMesh(obj);
        }

        if (ms != null)
        {
            Matrix4x4 tm = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(prerot), Vector3.one);

            verts = ms.vertices;

            miny = float.MaxValue;
            maxy = float.MinValue;

            for (int i = 0; i < verts.Length; i++)
            {
                verts[i] = tm.MultiplyPoint3x4(verts[i]);
                if (verts[i].y < miny)
                {
                    miny = verts[i].y;
                }
                if (verts[i].y > maxy)
                {
                    maxy = verts[i].y;
                }
            }
            uvs     = ms.uv;
            normals = ms.normals;
            colors  = ms.colors;

            for (int i = 0; i < normals.Length; i++)
            {
                normals[i] = tm.MultiplyVector(normals[i]);
            }

            tris = new MegaTriList[ms.subMeshCount];

            for (int i = 0; i < ms.subMeshCount; i++)
            {
                tris[i].tris = ms.GetTriangles(i);
            }

            tw      += weight;
            tweight  = tw;
            subcount = ms.subMeshCount;

            area = ms.bounds.size.x * scale * ms.bounds.size.z * scale;

            places.Clear();
        }

        // Proxy
        if (proxymesh)
        {
            Matrix4x4 tm = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(prerot), Vector3.one);

            proxyverts = proxymesh.vertices;

            //miny = float.MaxValue;
            //maxy = float.MinValue;

            for (int i = 0; i < proxyverts.Length; i++)
            {
                proxyverts[i] = tm.MultiplyPoint3x4(proxyverts[i]);
                //if ( verts[i].y < miny )
                //	miny = verts[i].y;
                //if ( verts[i].y > maxy )
                //	maxy = verts[i].y;
            }
            //uvs = ms.uv;
            proxynorms = proxymesh.normals;
            //colors = ms.colors;

            for (int i = 0; i < proxynorms.Length; i++)
            {
                proxynorms[i] = tm.MultiplyVector(proxynorms[i]);
            }

            proxytris = proxymesh.triangles;

            //for ( int i = 0; i < ms.subMeshCount; i++ )
            //	tris[i].tris = ms.GetTriangles(i);

            //tw += weight;
            //tweight = tw;
            //subcount = ms.subMeshCount;

            //area = ms.bounds.size.x * scale * ms.bounds.size.z * scale;

            //places.Clear();
        }

        return(tw);
    }