public void snap(bool onlyTiles) { _selection = Selection.transforms; try { for (int i = 0; i < Selection.transforms.Length; i++) { TileToolTile TTT = (TileToolTile)_selection[i].GetComponent(typeof(TileToolTile)); if (onlyTiles && (TTT != null) || !onlyTiles) { if (!onlyTiles) { Undo.RecordObjects(_selection, "TileTool: Snapping"); } Vector3 t = Selection.transforms[i].transform.position; t.x = round(t.x); t.y = round(t.y); t.z = round(t.z); Selection.transforms[i].transform.position = t; } } prevPosition = Selection.transforms[0].position; } catch (System.Exception e) { Debug.LogError("Nothing to move. " + e); } }
public void AutoRemoveSidesInit(GameObject gameObj) { TileToolTile TTT = gameObj.GetComponent <TileToolTile>(); if (TTT != null) { TTT.Init(); } }
public void ResetTilePositionBuffers() { rTile = null; lTile = null; fTile = null; bTile = null; uTile = null; dTile = null; }
public void ManualRemoveSide(Transform t, string side) { TileToolTile TTT = (TileToolTile)t.GetComponent(typeof(TileToolTile)); if (TTT != null) { Undo.RegisterCompleteObjectUndo(t.gameObject, "TileTool: Manual Remove Side " + side); TTT.RemoveSide((MeshFilter)t.Find("Model").GetComponent(typeof(MeshFilter)), side, t.gameObject); } }
public void AutoRemoveSides(GameObject gameObj) { TileToolTile TTT = gameObj.GetComponent <TileToolTile>(); if (TTT != null) { Undo.RegisterCompleteObjectUndo(gameObj, "TileTool: Auto Remove Side"); TTT.DetectTiles(); } }
public void Move(Vector3 dir, bool dupe) { if (Selection.transforms.Length > 0) { TileToolGroup TTG = (TileToolGroup)Selection.activeTransform.GetComponent(typeof(TileToolGroup)); if (TTG != null) { Transform[] glist = null; glist = new Transform[Selection.activeTransform.childCount]; Transform o = Selection.activeTransform; for (int k = 0; k < Selection.activeTransform.childCount; k++) { glist[k] = o.GetChild(k); } _selection = glist; } else { _selection = Selection.transforms; } GameObject[] newSelection = new GameObject[_selection.Length]; for (int i = 0; i < _selection.Length; i++) { TileToolTile TTT = (TileToolTile)_selection[i].GetComponent(typeof(TileToolTile)); if (TTT != null) { if (dupe) { UnityEngine.Object dupePrefab = PrefabUtility.GetPrefabParent(_selection[i].gameObject); GameObject dupeTarget = (GameObject)PrefabUtility.InstantiatePrefab(dupePrefab as GameObject) as GameObject; dupeTarget.transform.position = _selection[i].transform.position + dir; dupeTarget.transform.rotation = _selection[i].transform.rotation; dupeTarget.transform.parent = _selection[i].transform.parent; newSelection[i] = dupeTarget.gameObject; Undo.RegisterCreatedObjectUndo(dupeTarget.gameObject, "TileTool: Move & Duplicate"); } else { Undo.RegisterCompleteObjectUndo(_selection[i].gameObject, "TileTool: Move & Duplicate"); _selection[i].transform.position += dir; } } } if (dupe) { Selection.objects = newSelection; } } }
public void CycleGameObjects(bool next) { if (_style != null) { _selection = Selection.transforms; if (next) { this._tileCycleCounter++; } else { this._tileCycleCounter--; } if (_tileCycleCounter >= _style._tiles.Length) { _tileCycleCounter = 0; } else if (_tileCycleCounter < 0) { _tileCycleCounter = _style._tiles.Length - 1; } GameObject[] s = null; s = new GameObject[_selection.Length]; for (int i = 0; i < _selection.Length; i++) { TileToolTile TTT = (TileToolTile)_selection[i].GetComponent(typeof(TileToolTile)); if (TTT != null) { GameObject newObject = (GameObject)PrefabUtility.InstantiatePrefab(_style._tiles[_tileCycleCounter]); Transform newT = newObject.transform; newT.position = _selection[i].position; newT.rotation = _selection[i].rotation; newT.localScale = _selection[i].localScale; newT.parent = _selection[i].transform.parent; Undo.RegisterCreatedObjectUndo(newObject, "TileTool: Cycle Tiles"); Undo.DestroyObjectImmediate(_selection[i].gameObject); s[i] = newObject; } } Selection.objects = s; } else { Debug.Log("No Style"); } }
public void OnEnable() { tex = Resources.Load("TT_SideHelp") as Texture; TileToolTile target_cs = (TileToolTile)target; target_cs.FindAndSetTileValues(); TileToolStyle TTS = target_cs.gameObject.GetComponent <TileToolStyle>(); if (!TTS) { target_cs.gameObject.AddComponent <TileToolStyle>(); } if (GUI.changed) { EditorUtility.SetDirty(target_cs); } }
public void ResetToPrefab() { if (Selection.activeTransform.GetComponent(typeof(TileToolGroup)) != null) { Transform[] glist = null; glist = new Transform[Selection.activeTransform.childCount]; Transform o = Selection.activeTransform; for (int k = 0; k < Selection.activeTransform.childCount; k++) { glist[k] = o.GetChild(k); } _selection = glist; } else { _selection = Selection.transforms; //Add selection to array } Undo.RecordObjects(_selection, "TileTool: Reset To Prefab"); int sl = _selection.Length; if (_selection.Length > 0) { for (int i = 0; i < _selection.Length; i++) { float p = (float)i; EditorUtility.DisplayProgressBar("TileTool: Tile Reset", "", p / sl); TileToolTile TTT = (TileToolTile)_selection[i].GetComponent(typeof(TileToolTile)); if (TTT != null) { Undo.RegisterCompleteObjectUndo(_selection[i].gameObject, "TileTool: Prefab Reset"); Vector3 scale = _selection[i].localScale; PrefabUtility.RevertPrefabInstance(_selection[i].gameObject); _selection[i].localScale = scale; } } } }
public void DetectTiles() { ResetTilePositionBuffers(); WorldRotationSides(); Collider[] hitColliders = Physics.OverlapSphere(transform.position, 1.0f, TileLayer); for (int i = 0; i < hitColliders.Length; i++) { TileToolTile currentTR = hitColliders[i].transform.parent.GetComponent <TileToolTile>(); if (currentTR != null) { if ((rTile == null) && currentTR.transform.position.x < transform.position.x && currentTR.transform.position.z == transform.position.z && (currentTR.transform.position.y == transform.position.y || currentTR.transform.position.y == transform.position.y - .5f && !liquid || currentTR.transform.position.y == transform.position.y + .5f && !liquid)) { rTile = currentTR; currentTR.lTile = this; currentTR.WorldRotationSides(); if (CompareSides(rSideWorld, rTile.lSideWorld, currentTR.transform.position.y == transform.position.y)) { RemoveSide(transform.Find("Model").GetComponent <MeshFilter>(), "right", gameObject); } } else if ((lTile == null) && currentTR.transform.position.x > transform.position.x && currentTR.transform.position.z == transform.position.z && (currentTR.transform.position.y == transform.position.y || currentTR.transform.position.y == transform.position.y - .5f && !liquid || currentTR.transform.position.y == transform.position.y + .5f && !liquid)) { lTile = currentTR; currentTR.WorldRotationSides(); if (CompareSides(lSideWorld, lTile.rSideWorld, currentTR.transform.position.y == transform.position.y)) { RemoveSide(transform.Find("Model").GetComponent <MeshFilter>(), "left", gameObject); } } else if ((uTile == null) && currentTR.transform.position.y > transform.position.y && currentTR.transform.position.x == transform.position.x && currentTR.transform.position.z == transform.position.z) { uTile = currentTR; currentTR.WorldRotationSides(); if (CompareSides(uSideWorld, uTile.dSideWorld, true)) { RemoveSide(transform.Find("Model").GetComponent <MeshFilter>(), "up", gameObject); } } else if ((dTile == null) && currentTR.transform.position.y < transform.position.y && currentTR.transform.position.x == transform.position.x && currentTR.transform.position.z == transform.position.z) { dTile = currentTR; currentTR.WorldRotationSides(); if (CompareSides(dSideWorld, dTile.uSideWorld, true)) { RemoveSide(transform.Find("Model").GetComponent <MeshFilter>(), "down", gameObject); } } else if ((fTile == null) && currentTR.transform.position.z > transform.position.z && currentTR.transform.position.x == transform.position.x && (currentTR.transform.position.y == transform.position.y || currentTR.transform.position.y == transform.position.y - .5f && !liquid || currentTR.transform.position.y == transform.position.y + .5f && !liquid)) { fTile = currentTR; currentTR.WorldRotationSides(); if (CompareSides(fSideWorld, fTile.bSideWorld, currentTR.transform.position.y == transform.position.y)) { RemoveSide(transform.Find("Model").GetComponent <MeshFilter>(), "front", gameObject); } } else if ((bTile == null) && currentTR.transform.position.z < transform.position.z && currentTR.transform.position.x == transform.position.x && (currentTR.transform.position.y == transform.position.y || currentTR.transform.position.y == transform.position.y - .5f && !liquid || currentTR.transform.position.y == transform.position.y + .5f && !liquid)) { bTile = currentTR; currentTR.WorldRotationSides(); if (CompareSides(bSideWorld, bTile.fSideWorld, currentTR.transform.position.y == transform.position.y)) { RemoveSide(transform.Find("Model").GetComponent <MeshFilter>(), "back", gameObject); } } } } }