コード例 #1
0
        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)));
            }
        }
コード例 #2
0
        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)));
            }
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
ファイル: PrefabBrush.cs プロジェクト: bertramf/Isabelle
        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)));
            }
        }
コード例 #6
0
ファイル: PrefabBrush.cs プロジェクト: Syfrex/Owlchemist
        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)));
                }
            }
        }
コード例 #7
0
        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();
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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;
            }
        }
コード例 #10
0
        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;
            }
        }
コード例 #11
0
		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++ + ")";
			}
		}
コード例 #12
0
        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;
            }
        }
コード例 #13
0
ファイル: TileBrush.cs プロジェクト: destintrang/FittingIn
        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)));
            }
        }
コード例 #14
0
        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());
            }
        }
コード例 #15
0
        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);
            }
        }