public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { if (position == prev_position) { return; } prev_position = position; if (brushTarget) { prev_brushTarget = brushTarget; } // Do not allow editing palettes if (brushTarget.layer == 31) { return; } int index = m_selectedPrefabIndex; GameObject prefab = m_Prefabs[index]; GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); } }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { // Do not allow editing palettes if (brushTarget.layer == 31) { return; } Transform erased = GetObjectInCell(grid, brushTarget.transform, new Vector3Int(position.x, position.y, m_Z)); if (erased != null) { Undo.DestroyObjectImmediate(erased.gameObject); } int index = Mathf.Clamp(Mathf.FloorToInt(GetPerlinValue(position, m_PerlinScale, k_PerlinOffset) * m_Prefabs.Length), 0, m_Prefabs.Length - 1); GameObject prefab = m_Prefabs[index]; GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); } }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { // workaround for bug! if (brushTarget == null) { brushTarget = brushTargetTmp; } else { brushTargetTmp = brushTarget; } // Do not allow editing palettes if (brushTarget.layer == 31) { return; } int index = Mathf.Clamp(Mathf.FloorToInt(GetPerlinValue(position, m_PerlinScale, k_PerlinOffset) * m_Prefabs.Length), 0, m_Prefabs.Length - 1); GameObject prefab = m_Prefabs[index]; GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); instance.transform.rotation = new Quaternion(instance.transform.rotation.x, instance.transform.rotation.y, z_rotation, instance.transform.rotation.w); if (upsideDown) { instance.transform.localScale = new Vector3(instance.transform.localScale.x, -instance.transform.localScale.y, instance.transform.localScale.z); } } }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { if (brushTarget == null) { if (tilemap == null) { tilemap = GameObject.Find(tilemapName); } brushTarget = tilemap; } // Do not allow editing palettes if (brushTarget.layer == 31) { return; } int index = Mathf.Clamp(Mathf.FloorToInt(GetPerlinValue(position, m_PerlinScale, k_PerlinOffset) * m_Prefabs.Length), 0, m_Prefabs.Length - 1); GameObject prefab = m_Prefabs[index]; GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); instance.gameObject.name = "(" + position.x + "," + position.y + ")"; instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); instance.transform.localScale = new Vector3(grid.cellSize.x, grid.cellSize.y, grid.cellSize.z); } }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { if (position == prev_position) { return; } prev_position = position; if (brushTarget) { prev_brushTarget = brushTarget; } brushTarget = prev_brushTarget; // Do not allow editing palettes if (brushTarget.layer == 31) { return; } //Old perlin stuff //int perlinValue = Mathf.FloorToInt(GetPerlinValue(position, m_PerlinScale, 0) * m_Prefabs.Length); //int index = Mathf.Clamp(perlinValue, 0, m_Prefabs.Length - 1); float totalSpawnPriority = 0f; foreach (PrefabClass pref in allPrefabs) { totalSpawnPriority += pref.priority; } float chanceValue = 0f; foreach (PrefabClass pref in allPrefabs) { chanceValue += pref.priority / totalSpawnPriority; pref.chanceValue = chanceValue; } //Custom randomness float randomValue = Random.value; foreach (PrefabClass pref in allPrefabs) { if (randomValue < pref.chanceValue) { currentPrefab = pref.obj; break; } } GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(currentPrefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); } }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { Vector3Int[] positions = new Vector3Int[] { position, position + Vector3Int.left + Vector3Int.down, position + Vector3Int.left, position + Vector3Int.left + Vector3Int.up, position + Vector3Int.up, position + Vector3Int.up + Vector3Int.right, position + Vector3Int.right, position + Vector3Int.right + Vector3Int.down, position + Vector3Int.down }; for (int i = 0; i < cellsToPaint; i++) { Vector3Int pos = new Vector3Int(positions[i].x, positions[i].y, m_Z); Transform itemInCell = GetObjectInCell(grid, brushTarget.transform, pos); if (itemInCell != null) { return; } if (pos == prev_position) { continue; } prev_position = pos; if (brushTarget) { prev_brushTarget = brushTarget; } brushTarget = prev_brushTarget; // Do not allow editing palettes if (brushTarget.layer == 31) { return; } int index = Mathf.Clamp(Mathf.FloorToInt(GetPerlinValue(pos, m_PerlinScale, k_PerlinOffset) * m_Prefabs.Length), 0, m_Prefabs.Length - 1); GameObject prefab = m_Prefabs[index]; GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(pos.x, pos.y, m_Z) + new Vector3(.5f, .5f, .5f))); } } }
private static void MoveToScene(Transform current, Scene target) { if (current == null) return; Undo.SetTransformParent(current, null, kCutAndPaste); if (target.isLoaded) { Undo.MoveGameObjectToScene(current.gameObject, target, kCutAndPaste); } current.SetAsLastSibling(); }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { if (position == prev_position) { return; } prev_position = position; if (brushTarget) { prev_brushTarget = brushTarget; } brushTarget = prev_brushTarget; // Do not allow editing palettes if (brushTarget.layer == 31) { return; } Debug.Log(EditModeTestScript.StaticRangeNumber); GameObject prefab = m_Prefabs[0]; GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(EditModeTestScript.StaticTilemap.transform); instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); } instance.GetComponent <RoomTile>().spriteRenderer.sprite = EditModeTestScript.sprites[EditModeTestScript.StaticRangeNumber]; instance.GetComponent <RoomTile>().ID = EditModeTestScript.StaticRangeNumber; if (EditModeTestScript.StaticWall) { instance.GetComponent <BoxCollider2D>().enabled = true; instance.layer = 9; } if (EditModeTestScript.StaticAlwaysOntop) { instance.GetComponent <SpriteRenderer>().sortingOrder = 10; } //roomForTiles.Tiles.Add(prefab); }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { Debug.Log(position); if (position == prev_position) { return; } prev_position = position; if (brushTarget) { prev_brushTarget = brushTarget; } brushTarget = prev_brushTarget; // Do not allow editing palettes if (brushTarget.layer == 31) { return; } int index = Mathf.Clamp(Mathf.FloorToInt(GetPerlinValue(position, m_PerlinScale, k_PerlinOffset) * m_Prefabs.Length), 0, m_Prefabs.Length - 1); GameObject prefab = m_Prefabs[index]; GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); var pos = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); instance.transform.position = new Vector3(pos.x, pos.y, -0.5f); } Tile tile = instance.GetComponent <Tile>(); if (tile != null) { tile.X = position.x; tile.Y = position.y; } }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { // Do not allow editing palettes if (brushTarget.layer == 31) { return; } var placementPosition = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); int layerID = 8; int layerMask = 1 << layerID; var cell = Physics2D.OverlapPoint(placementPosition, layerMask); // Don't place cell prefab if overlap not allowed and one already exists if (!allowOverlap && cell) { return; } // If overlap is allowed, then destroy the previous cell before placing prefab if (cell) { Erase(grid, brushTarget, position); } int index = Mathf.Clamp(Mathf.FloorToInt(GetPerlinValue(position, m_PerlinScale, k_PerlinOffset) * m_Prefabs.Length), 0, m_Prefabs.Length - 1); GameObject prefab = m_Prefabs[index]; GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); instance.transform.position = placementPosition; } }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { // Do not allow editing palettes if (brushTarget.layer == 31) return; int index = Mathf.Clamp(Mathf.FloorToInt(GetPerlinValue(position, m_PerlinScale, k_PerlinOffset)*m_Prefabs.Length), 0, m_Prefabs.Length - 1); GameObject prefab = m_Prefabs[index]; GameObject instance = (GameObject) PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); //Adriano:Change name of the prefab //int NumPaintedTiles = GameObject.FindGameObjectsWithTag(instance.tag).Length; if( NumPaintedTiles < 0 ) { NumPaintedTiles = 0; } instance.name = instance.name + " (" + NumPaintedTiles++ + ")"; } }
public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position) { if (position == prev_position) { return; } prev_position = position; if (brushTarget) { prev_brushTarget = brushTarget; } brushTarget = prev_brushTarget; // Do not allow editing palettes if (brushTarget.layer == 31) { return; } int index = Mathf.Clamp(Mathf.FloorToInt(GetPerlinValue(position, m_PerlinScale, k_PerlinOffset) * m_Prefabs.Length), 0, m_Prefabs.Length - 1); GameObject prefab = m_Prefabs[index]; GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Tilemap newTileMap = FindSuitableFrame(brushTarget.GetComponent <Tilemap>(), position); if (newTileMap == null) { return; } Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(newTileMap.transform); instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, 0) + new Vector3(.5f, .5f, .5f))) + Vector3.forward * m_Z; } }
private void CheckTile(GridLayout grid, GameObject brushTarget, Vector3Int position) { Transform erased = GetObjectInCell(grid, brushTarget.transform, new Vector3Int(position.x, position.y, m_Z)); if (erased != null) { Undo.DestroyObjectImmediate(erased.gameObject); } else { return; } GameObject prefab = GetCorrectTile(grid, brushTarget.transform, new Vector3Int(position.x, position.y, m_Z)); GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab); if (instance != null) { Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Prefabs"); Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs"); instance.transform.SetParent(brushTarget.transform); instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, m_Z) + new Vector3(.5f, .5f, .5f))); } }
internal static void CreateEmptyParent() { Transform[] selected = Selection.transforms; GameObject defaultParentObject = SceneView.GetDefaultParentObjectIfSet()?.gameObject; string defaultParentObjectSceneGUID = defaultParentObject?.scene.guid; // Clear default parent object so we could always reparent and move the new parent to the scene we need if (defaultParentObject != null) { SceneHierarchy.ClearDefaultParentObject(defaultParentObjectSceneGUID); } // If selected object is a prefab, get the its root object if (selected.Length > 0) { for (int i = 0; i < selected.Length; i++) { if (PrefabUtility.GetPrefabAssetType(selected[i].gameObject) != PrefabAssetType.NotAPrefab) { selected[i] = PrefabUtility.GetOutermostPrefabInstanceRoot(selected[i].gameObject).transform; } } } // Selection.transform does not provide correct list order, so we have to do it manually selected = selected.ToList().OrderBy(g => g.GetSiblingIndex()).ToArray(); GameObject go = ObjectFactory.CreateGameObject("GameObject"); if (Selection.activeGameObject == null && Selection.gameObjects != null) { Selection.activeGameObject = Selection.gameObjects[0]; } if (Selection.activeGameObject != null) { go.transform.position = Selection.activeGameObject.transform.position; } GameObject parent = Selection.activeTransform != null ? Selection.activeTransform.gameObject : null; Transform sibling = null; if (parent != null) { sibling = parent.transform; parent = parent.transform.parent != null ? parent.transform.parent.gameObject : null; } Place(go, parent, false); var rectTransform = go.GetComponent <RectTransform>(); // If new parent is RectTransform, make sure its position and size matches child rect transforms if (rectTransform != null && selected != null && selected.Length > 0) { CenterRectTransform(selected, rectTransform); } if (parent == null && sibling != null) { Undo.MoveGameObjectToScene(go, sibling.gameObject.scene, "Move To Scene"); } if (parent == null && sibling == null) { go.transform.SetAsLastSibling(); } else { go.transform.MoveAfterSibling(sibling, true); } // At this point, RecordStructureChange is already ongoing (from the CreateGameObject call). // We need to flush the stack to finalise the RecordStructureChange before any of following SetTransformParent calls takes place. Undo.FlushTrackedObjects(); // Put gameObjects under a created parent if (selected.Length > 0) { foreach (var gameObject in selected) { if (gameObject != null) { Undo.SetTransformParent(gameObject.transform, go.transform, "Reparenting"); gameObject.transform.SetAsLastSibling(); } } SceneHierarchyWindow.lastInteractedHierarchyWindow.SetExpanded(go.GetInstanceID(), true); } // Set back default parent object if we have one if (defaultParentObject != null) { SceneHierarchy.UpdateSessionStateInfoAndActiveParentObjectValuesForScene(defaultParentObjectSceneGUID, defaultParentObject.GetInstanceID()); } }
internal static void CreateEmptyParent() { Transform[] selected = Selection.transforms; // If selected object is a prefab, get the its root object if (selected.Length > 0) { for (int i = 0; i < selected.Length; i++) { if (PrefabUtility.GetPrefabAssetType(selected[i].gameObject) != PrefabAssetType.NotAPrefab) { selected[i] = PrefabUtility.GetOutermostPrefabInstanceRoot(selected[i].gameObject).transform; } } } // Selection.transform does not provide correct list order, so we have to do it manually selected = selected.ToList().OrderBy(g => g.GetSiblingIndex()).ToArray(); GameObject parent = Selection.activeTransform != null ? Selection.activeTransform.gameObject : null; Transform sibling = null; if (parent != null) { sibling = parent.transform; parent = parent.transform.parent != null ? parent.transform.parent.gameObject : null; } GameObject go = ObjectFactory.CreateGameObject("GameObject"); Place(go, parent); if (parent == null && sibling != null) { Undo.MoveGameObjectToScene(go, sibling.gameObject.scene, "Move To Scene"); } if (parent == null && sibling == null) { go.transform.SetAsLastSibling(); } else { go.transform.MoveAfterSibling(sibling, true); } // Put gameObjects under a created parent if (selected.Length > 0) { foreach (var gameObject in selected) { if (gameObject != null) { Undo.SetTransformParent(gameObject.transform, go.transform, "Reparenting"); gameObject.transform.SetAsLastSibling(); } } SceneHierarchyWindow.lastInteractedHierarchyWindow.SetExpanded(go.GetInstanceID(), true); } }