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