예제 #1
0
        private MegaBookPageObject CreatePageObject(int side, GameObject gameObject, bool bookmark)
        {
            var pageObject = new MegaBookPageObject();

            pageObject.isBookMark = bookmark;
            if (bookmark)
            {
                pageObject.visilow  = -100;
                pageObject.visihigh = 100;
            }
            if (side == 0)
            {
                pageObject.pos           = new Vector3(50, 0, 50);
                pageObject.rot           = new Vector3(-90, -90, 0);
                pageObject.offset        = -ObjectOffset;
                pageObject.obj           = gameObject;
                pageObject.attachforward = new Vector3(0.005f, 0.0f, 0.0f);
            }
            else
            {
                pageObject.pos           = new Vector3(50, 0, 50);
                pageObject.rot           = new Vector3(90, 90, 0);
                pageObject.offset        = ObjectOffset;
                pageObject.obj           = gameObject;
                pageObject.attachforward = new Vector3(0.005f, 0.0f, 0.0f);
            }

            return(pageObject);
        }
예제 #2
0
    void OnSceneGUI()
    {
        MegaBookBuilder mod = (MegaBookBuilder)target;
        MegaBookPage    pg  = mod.pages[mod.editpage];

        switch (Tools.current)
        {
        case Tool.Move:
            for (int i = 0; i < pg.objects.Count; i++)
            {
#if UNITY_3_5
                if (pg.objects[i].obj && pg.objects[i].obj.active)
#else
                if (pg.objects[i].obj && pg.objects[i].obj.activeInHierarchy)
#endif
                {
                    Transform trans = pg.objects[i].obj.transform;
                    Vector3   pos   = Handles.PositionHandle(trans.position, trans.rotation);                           //Quaternion.identity);
                    if (pos != trans.position)
                    {
                        Vector3 delta = trans.position - pos;

                        //float off = delta.y;
                        delta.y = 0.0f;
                        MegaBookPageParams parms = mod.pageparams[mod.editpage];                                        //.objects[i]];

                        MegaBookPageObject pobj = parms.objects[i];

                        pobj.pos -= delta;

                        pobj.pos.x = Mathf.Clamp(pobj.pos.x, 0.0f, 99.99f);
                        pobj.pos.z = Mathf.Clamp(pobj.pos.z, 0.0f, 99.99f);

                        //if ( Mathf.Abs(delta.x) < 0.01f && Mathf.Abs(delta.z) < 0.01f )
                        //pobj.offset += off;

                        mod.UpdateAttached();
                        EditorUtility.SetDirty(target);
                    }
                }
            }
            break;
        }
    }
예제 #3
0
    bool DisplayPage(MegaBookPageParams page, int i)
    {
        MegaBookBuilder mod    = (MegaBookBuilder)target;
        bool            retval = false;

        Mesh mesh = (Mesh)EditorGUILayout.ObjectField("Page Mesh", page.pagemesh, typeof(Mesh), false);

        if (mesh != page.pagemesh)
        {
            page.pagemesh = mesh;
            retval        = true;
        }

        mesh = (Mesh)EditorGUILayout.ObjectField("Hole Mesh", page.holemesh, typeof(Mesh), false);
        if (mesh != page.holemesh)
        {
            page.holemesh = mesh;
            retval        = true;
        }

        GameObject obj = (GameObject)EditorGUILayout.ObjectField("Page Object", page.pageobj, typeof(GameObject), false);

        if (obj != page.pageobj)
        {
            page.pageobj = obj;
            retval       = true;
        }

        obj = (GameObject)EditorGUILayout.ObjectField("Hole Object", page.holeobj, typeof(GameObject), false);
        if (obj != page.holeobj)
        {
            page.holeobj = obj;
            retval       = true;
        }

        int mi = EditorGUILayout.IntField("Front Mat Index", page.frontmatindex);

        if (mi != page.frontmatindex)
        {
            page.frontmatindex = mi;
            retval             = true;
        }

        mi = EditorGUILayout.IntField("Back Mat Index", page.backmatindex);
        if (mi != page.backmatindex)
        {
            page.backmatindex = mi;
            retval            = true;
        }

        Vector3 rotate = EditorGUILayout.Vector3Field("Rotate", page.rotate);

        if (rotate != page.rotate)
        {
            page.rotate = rotate;
            retval      = true;
        }

        Material mat = (Material)EditorGUILayout.ObjectField("Front Material", page.frontmat, typeof(Material), false);

        if (mat != page.frontmat)
        {
            page.frontmat = mat;
            retval        = true;
        }

        mat = (Material)EditorGUILayout.ObjectField("Back Material", page.backmat, typeof(Material), false);
        if (mat != page.backmat)
        {
            page.backmat = mat;
            retval       = true;
        }

        EditorGUILayout.BeginHorizontal("box");
        EditorGUILayout.LabelField("Front " + i, GUILayout.Width(80));
        Texture2D ptex = (Texture2D)EditorGUILayout.ObjectField("", page.front, typeof(Texture2D), false, GUILayout.Width(64));

        if (ptex != page.front)
        {
            page.front = ptex;
            retval     = true;
        }

        ptex = (Texture2D)EditorGUILayout.ObjectField("", page.background, typeof(Texture2D), false, GUILayout.Width(64));

        if (ptex != page.background && CheckTextureReadable(ptex))
        {
            if (ptex == null)
            {
                mod.ClearMadeTextures();
            }
            page.background = ptex;
        }

        EditorGUILayout.EndHorizontal();
        bool alpha = EditorGUILayout.Toggle("Use Alpha as Mask", page.alphatexturefront);

        if (alpha != page.alphatexturefront)
        {
            page.alphatexturefront = alpha;
            retval = true;
        }

        EditorGUILayout.BeginHorizontal("box");
        EditorGUILayout.LabelField("Back", GUILayout.Width(80));

        ptex = (Texture2D)EditorGUILayout.ObjectField("", page.back, typeof(Texture2D), false, GUILayout.Width(64));
        if (ptex != page.back)
        {
            page.back = ptex;
            retval    = true;
        }

        ptex = (Texture2D)EditorGUILayout.ObjectField("", page.background1, typeof(Texture2D), false, GUILayout.Width(64));

        if (ptex != page.background1 && CheckTextureReadable(ptex))
        {
            if (ptex == null)
            {
                mod.ClearMadeTextures();
            }
            page.background1 = ptex;
        }

        EditorGUILayout.EndHorizontal();

        alpha = EditorGUILayout.Toggle("Use Alpha as Mask", page.alphatextureback);
        if (alpha != page.alphatextureback)
        {
            page.alphatextureback = alpha;
            retval = true;
        }

        page.swapsides = EditorGUILayout.Toggle("Swap Sides", page.swapsides);

        // Should just update the page not the whole book
        page.usebackground = EditorGUILayout.Toggle("Front Background", page.usebackground);
        page.copyarea      = EditorGUILayout.RectField("Copy Area", page.copyarea);

        page.usebackground1 = EditorGUILayout.Toggle("Back Background", page.usebackground1);
        page.copyarea1      = EditorGUILayout.RectField("Copy Area Back", page.copyarea1);

        //bool bval = EditorGUILayout.Toggle("Stiff", page.stiff);
        //if ( bval != page.stiff )
        //{
        //page.stiff = bval;
        //retval = true;
        //}

        // Attached objects
        mod.showobjects = EditorGUILayout.Foldout(mod.showobjects, "Page Objects");

        if (mod.showobjects)
        {
            page.visobjlow  = EditorGUILayout.FloatField("Visible Low", page.visobjlow);
            page.visobjhigh = EditorGUILayout.FloatField("Visible High", page.visobjhigh);

            if (GUILayout.Button("Add Object"))
            {
                MegaBookPageObject pobj = new MegaBookPageObject();
                if (page.objects.Count > 0)
                {
                    MegaBookPageObject prevobj = page.objects[page.objects.Count - 1];
                    pobj.pos    = prevobj.pos;
                    pobj.rot    = prevobj.rot;
                    pobj.offset = prevobj.offset;
                }
                page.objects.Add(pobj);
                retval      = true;
                mod.rebuild = true;
                GUI.changed = false;
                EditorUtility.SetDirty(target);
            }

            for (int j = 0; j < page.objects.Count; j++)
            {
                MegaBookPageObject pobj   = page.objects[j];
                GameObject         newobj = (GameObject)EditorGUILayout.ObjectField("Object", pobj.obj, typeof(GameObject), true);

                if (newobj != pobj.obj)
                {
                    if (pobj.obj == null)
                    {
                        pobj.pos = mod.CalcPos(newobj, page, pobj.pos);
                    }

                    pobj.obj    = newobj;
                    retval      = true;
                    GUI.changed = false;
                }
                pobj.pos    = EditorGUILayout.Vector3Field("Pos", pobj.pos);
                pobj.rot    = EditorGUILayout.Vector3Field("Rot", pobj.rot);
                pobj.offset = EditorGUILayout.FloatField("Offset", pobj.offset);

                pobj.attachforward = EditorGUILayout.Vector3Field("Fwd", pobj.attachforward);

                pobj.overridevisi = EditorGUILayout.BeginToggleGroup("Use Obj Visi", pobj.overridevisi);

                pobj.visilow  = EditorGUILayout.FloatField("Visibility Low", pobj.visilow);
                pobj.visihigh = EditorGUILayout.FloatField("Visibility High", pobj.visihigh);

                EditorGUILayout.EndToggleGroup();

                pobj.message = EditorGUILayout.Toggle("Message", pobj.message);

                if (GUILayout.Button("Delete Page Object"))
                {
                    page.objects.RemoveAt(j);
                    retval      = true;
                    mod.rebuild = true;
                    GUI.changed = false;
                    EditorUtility.SetDirty(target);
                }
            }

            if (GUI.changed)
            {
                mod.UpdateAttached();

                EditorUtility.SetDirty(target);
            }
        }

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Insert"))
        {
            mod.pageparams.Insert(i, NewPage(i));
            retval = true;
        }

        if (GUILayout.Button("Delete"))
        {
            mod.pageparams.RemoveAt(i);
            retval = true;
        }

        if (GUILayout.Button("Up"))
        {
            if (i > 0)
            {
                SwapPages(mod, i, i - 1);
            }
            retval = true;
        }

        if (GUILayout.Button("Down"))
        {
            if (i < mod.pagetextures.Count - 1)
            {
                SwapPages(mod, i, i + 1);
            }
            retval = true;
        }

        EditorGUILayout.EndHorizontal();

        return(retval);
    }
예제 #4
0
    void UpdateAttached(MegaBookPageObject pobj, float flip)
    {
        GameObject target = pobj.obj;

        if (target)
        {
            bool show = showobjects;

            if (pobj.overridevisi)
            {
                if (flip <= (pobj.visilow * 14.0f) || flip >= (pobj.visihigh * 14.0f))
                {
                    show = false;
                }
                else
                {
                    show = true;
                }
            }

#if UNITY_3_5
            if (show)                   //objects )
            {
                if (!target.active)
                {
                    target.SetActiveRecursively(true);
                }
            }
            else
            {
                if (target.active)
                {
                    target.SetActiveRecursively(false);
                }
                return;
            }
#else
            if (show)                   //objects )
            {
                if (!target.activeInHierarchy)
                {
                    target.SetActive(true);
                }
            }
            else
            {
                if (target.activeInHierarchy)
                {
                    target.SetActive(false);
                }
                return;
            }
#endif
            Vector3 v0 = sverts[pobj.BaryVerts[0]];
            Vector3 v1 = sverts[pobj.BaryVerts[1]];
            Vector3 v2 = sverts[pobj.BaryVerts[2]];

            Vector3 pos = obj.transform.localToWorldMatrix.MultiplyPoint(GetCoordMine(v0, v1, v2, pobj.BaryCoord));

            // Rotation
            Vector3 va = v1 - v0;
            Vector3 vb = v2 - v1;

            Vector3 norm = obj.transform.TransformDirection(Vector3.Cross(va, vb).normalized);

            v0 = sverts[pobj.BaryVerts1[0]];
            v1 = sverts[pobj.BaryVerts1[1]];
            v2 = sverts[pobj.BaryVerts1[2]];

            Vector3 fwd = obj.transform.localToWorldMatrix.MultiplyPoint(GetCoordMine(v0, v1, v2, pobj.BaryCoord1)) - pos;
            //Debug.DrawRay(pos, fwd.normalized);

            //norm = obj.transform.TransformDirection(norm);
            Quaternion erot = Quaternion.Euler(pobj.rot);
            Quaternion rot  = Quaternion.LookRotation(fwd, norm) * erot;
            //Quaternion rot = Quaternion.FromToRotation(obj.transform.up, norm) * erot;

            target.transform.position = pos + (pobj.offset * norm);             //.normalized);
            target.transform.rotation = rot;
        }
    }