Esempio n. 1
0
    private static Transform GetObjectInCell(GridLayout gridlayout, Transform parent, Vector3Int position)
    {
        int     childCount = parent.childCount;
        Vector3 min        = gridlayout.LocalToWorld(gridlayout.CellToLocalInterpolated(position));
        Vector3 max        = gridlayout.LocalToWorld(gridlayout.CellToLocalInterpolated(position + Vector3Int.one));
        Bounds  bounds     = new Bounds((max + min) * 0.5f, max - min);    //Bounds of a tile

        //Checks child objects position against bounds of tile.

        /* Loops:
         * for
         * foreach
         * while
         * do...while
         */

        for (int i = 0; i < childCount; i++)
        {
            Transform child = parent.GetChild(i);
            if (bounds.Contains(child.position))
            {
                return(child);
            }
        }

        return(null);
    }
Esempio n. 2
0
        private static Transform GetObjectInCell(GridLayout grid, Transform parent, Vector3Int position)
        {
            int    childCount = parent.childCount;
            Bounds bounds;

            if (grid.cellLayout != GridLayout.CellLayout.Hexagon)
            {
                Vector3 min = grid.LocalToWorld(grid.CellToLocalInterpolated(position));
                Vector3 max = grid.LocalToWorld(grid.CellToLocalInterpolated(position + Vector3Int.one));
                bounds = new Bounds((max + min) * .5f, max - min);
            }
            else
            {
                Vector3 center = grid.LocalToWorld(grid.CellToLocalInterpolated(position));
                bounds = new Bounds(center, Vector3Int.one);
            }

            for (int i = 0; i < childCount; i++)
            {
                Transform child = parent.GetChild(i);
                if (bounds.Contains(child.position))
                {
                    return(child);
                }
            }
            return(null);
        }
Esempio n. 3
0
        public static void DrawGridMarquee(GridLayout gridLayout, BoundsInt area, Color color)
        {
            if (gridLayout == null)
            {
                return;
            }

            switch (gridLayout.cellLayout)
            {
            case GridLayout.CellLayout.Hexagon:
                DrawSelectedHexGridArea(gridLayout, area, color);
                break;

            case GridLayout.CellLayout.Isometric:
            case GridLayout.CellLayout.IsometricZAsY:
            case GridLayout.CellLayout.Rectangle:
                var cellStride = gridLayout.cellSize + gridLayout.cellGap;
                var cellGap    = Vector3.one;
                if (!Mathf.Approximately(cellStride.x, 0f))
                {
                    cellGap.x = gridLayout.cellSize.x / cellStride.x;
                }
                if (!Mathf.Approximately(cellStride.y, 0f))
                {
                    cellGap.y = gridLayout.cellSize.y / cellStride.y;
                }

                Vector3[] cellLocals =
                {
                    gridLayout.CellToLocal(new Vector3Int(area.xMin,                          area.yMin,                 area.zMin)),
                    gridLayout.CellToLocalInterpolated(new Vector3(area.xMax - 1 + cellGap.x, area.yMin,                 area.zMin)),
                    gridLayout.CellToLocalInterpolated(new Vector3(area.xMax - 1 + cellGap.x, area.yMax - 1 + cellGap.y, area.zMin)),
                    gridLayout.CellToLocalInterpolated(new Vector3(area.xMin,                 area.yMax - 1 + cellGap.y, area.zMin))
                };

                HandleUtility.ApplyWireMaterial();
                GL.PushMatrix();
                GL.MultMatrix(gridLayout.transform.localToWorldMatrix);
                GL.Begin(GL.LINES);
                GL.Color(color);
                int i = 0;

                for (int j = cellLocals.Length - 1; i < cellLocals.Length; j = i++)
                {
                    DrawBatchedLine(cellLocals[j], cellLocals[i]);
                }

                GL.End();
                GL.PopMatrix();
                break;
            }
        }
Esempio n. 4
0
		private static Transform GetObjectInCell(GridLayout grid, Transform parent, Vector3Int position)
		{
			int childCount = parent.childCount;
			Vector3 min = grid.LocalToWorld(grid.CellToLocalInterpolated(position));
			Vector3 max = grid.LocalToWorld(grid.CellToLocalInterpolated(position + Vector3Int.one));
			Bounds bounds = new Bounds((max + min)*.5f, max - min);

			for (int i = 0; i < childCount; i++)
			{
				Transform child = parent.GetChild(i);
				if (bounds.Contains(child.position))
					return child;
			}
			return null;
		}
Esempio n. 5
0
        public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
        {
            // Do not allow editing palettes
            if (brushTarget.layer == 31 || brushTarget == null)
            {
                return;
            }

            var tileObject = GetObjectInCell(grid, brushTarget.transform, position);

            if (tileObject)
            {
                return;
            }
            var 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(position + m_Anchor));
                instance.transform.localScale *= scaleFactor;
            }
        }
    public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
    {
        // Do not edit the palette //
        if (brushTarget.layer == 31)
        {
            return;
        }

        GameObject instance = Instantiate(tilePrefab);

        Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs");
        if (instance != null)
        {
            // Set up the sorting order component
            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.localScale = new Vector3(1, 1, 1);

            if (instance.GetComponent <SortingGroup>())
            {
                instance.GetComponent <SortingGroup>().sortingOrder = m_Z;
            }

            // Get rid of the sprite collider if should be higher than the player
            if (m_Z > 0)
            {
                instance.GetComponent <Collider2D>().enabled = false;
            }
        }
    }
Esempio n. 7
0
        /// <summary>
        /// 配置
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="brushTarget"></param>
        /// <param name="position"></param>
        public override void Paint(GridLayout grid, GameObject layer, Vector3Int position)
        {
            var target = GetObject(grid, position);
            if (target != null)
            {
                return;
            }

            var instance = EditorUtil.Instantiate(_prefab, grid.LocalToWorld(grid.CellToLocalInterpolated(position + OffsetFromBottomLeft)), GetLayer());

            foreach (var element in _elements)
            {
                var className = element.ToString();
                var type = Util.TypeUtil.GetTypeByClassName(className);
                // 先頭の子供に要素をつける
                var child = instance.transform.GetChild(0);
                if (child)
                {
                    child.gameObject.AddComponent(type);
                }
            }

            EditorUtil.SetDirty(instance);
            EditorUtil.Select(instance.gameObject);
        }
Esempio n. 8
0
        /// <summary>
        /// Paints Prefabs into a given position within the selected layers.
        /// The PrefabBrush overrides this to provide Prefab painting functionality.
        /// </summary>
        /// <param name="gridLayout">Grid used for layout.</param>
        /// <param name="brushTarget">Target of the paint operation. By default the currently selected GameObject.</param>
        /// <param name="position">The coordinates of the cell to paint data to.</param>
        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;

            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];
            Transform  targetTransform = brushTarget.transform;
            GameObject instance        = (GameObject)PrefabUtility.InstantiatePrefab(prefab, targetTransform.root.gameObject.scene);

            if (instance != null)
            {
                Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs");
                instance.transform.parent   = targetTransform;
                instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(position + new Vector3(.5f, .5f, .5f)));
            }
        }
        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);
            }
        }
Esempio n. 10
0
        private static void SetSceneCell(GridLayout grid, Transform parent, Vector3Int position, GameObject go, Vector3 offset, Vector3 scale, Quaternion orientation, Vector3 anchor)
        {
            if (go == null)
            {
                return;
            }

            GameObject instance;

            if (PrefabUtility.IsPartOfPrefabAsset(go))
            {
                instance = (GameObject)PrefabUtility.InstantiatePrefab(go, parent != null ? parent.root.gameObject.scene : SceneManager.GetActiveScene());
                instance.transform.parent = parent;
            }
            else
            {
                instance      = Instantiate(go, parent);
                instance.name = go.name;
                instance.SetActive(true);
                foreach (var renderer in instance.GetComponentsInChildren <Renderer>())
                {
                    renderer.enabled = true;
                }
            }

            Undo.RegisterCreatedObjectUndo(instance, "Paint GameObject");
            instance.transform.position      = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, position.z) + anchor));
            instance.transform.localRotation = orientation;
            instance.transform.localScale    = scale;
            instance.transform.Translate(offset);
        }
        private static void SetSceneCell(GridLayout grid, Transform parent, Vector3Int position, GameObject go, Vector3 offset, Vector3 scale, Quaternion orientation, Vector3 anchor)
        {
            if (parent == null || go == null)
            {
                return;
            }

            GameObject instance = null;

            if (PrefabUtility.IsPartOfPrefabAsset(go))
            {
                instance = (GameObject)PrefabUtility.InstantiatePrefab(go);
            }
            else
            {
                instance           = Instantiate(go);
                instance.hideFlags = HideFlags.None;
                instance.name      = go.name;
            }

            Undo.RegisterCreatedObjectUndo(instance, "Paint GameObject");
            instance.transform.SetParent(parent);
            instance.transform.position      = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, position.z) + anchor));
            instance.transform.localRotation = orientation;
            instance.transform.localScale    = scale;
            instance.transform.Translate(offset);
        }
Esempio n. 12
0
    public override void Paint(GridLayout grid, GameObject layer, Vector3Int position)
    {
        Undo.SetCurrentGroupName("PressurePlateGate Paint");
        int group = Undo.GetCurrentGroup();

        if (activeObject != null)
        {
            if (activeObject.PressurePlate == null)
            {
                Vector3    platePosition = grid.LocalToWorld(grid.CellToLocalInterpolated(position + PressurePlatePrefabOffset));
                GameObject newPlate      = BrushUtility.Instantiate(PressurePlatePrefab, platePosition, GetLayer());
                newPlate.GetComponent <PressurePlate>().Gate = activeObject;
                BrushUtility.SetDirty(newPlate);

                activeObject.PressurePlate = newPlate.GetComponent <PressurePlate>();
                BrushUtility.SetDirty(activeObject);
            }
            else
            {
                BrushUtility.Select(BrushUtility.GetRootGrid(false).gameObject);
            }
        }
        base.Paint(grid, layer, position);
        ClearTiles(grid);

        Undo.CollapseUndoOperations(group);
    }
Esempio n. 13
0
        private static void SetSceneCell(GridLayout grid, Transform parent, Vector3Int position, GameObject go, Vector3 offset, Vector3 scale, Quaternion orientation)
        {
            if (parent == null || go == null)
            {
                return;
            }

            GameObject instance = null;

#pragma warning disable CS0618 // Type or member is obsolete
            if (PrefabUtility.GetPrefabType(go) == PrefabType.Prefab)
#pragma warning restore CS0618 // Type or member is obsolete
            {
                instance = (GameObject)PrefabUtility.InstantiatePrefab(go);
            }
            else
            {
                instance           = Instantiate(go);
                instance.hideFlags = HideFlags.None;
                instance.name      = go.name;
            }

            Undo.RegisterCreatedObjectUndo(instance, "Paint GameObject");
            instance.transform.SetParent(parent);
            instance.transform.position      = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, position.z) + new Vector3(.5f, .5f, .5f)));
            instance.transform.localRotation = orientation;
            instance.transform.localScale    = scale;
            instance.transform.Translate(offset);
        }
Esempio n. 14
0
    public override void Paint(GridLayout gridLayout, GameObject brushTarget, Vector3Int position)
    {
        Transform itemInCell = GetObjectInCell(gridLayout, brushTarget.transform, new Vector3Int(position.x, position.y, zPosition));

        if (itemInCell || position == previousPosition)
        {
            return;
        }

        previousPosition = position;
        if (brushTarget)
        {
            previousBrushTarget = brushTarget;
        }

        brushTarget = previousBrushTarget;

        if (brushTarget.layer == 31)
        {
            return;
        }

        GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab);

        if (instance)
        {
            Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint prefab");
            Undo.RegisterCompleteObjectUndo(instance, "Paint prefab");
            instance.transform.SetParent(brushTarget.transform);
            instance.transform.position = gridLayout.LocalToWorld(gridLayout.CellToLocalInterpolated(new Vector3(position.x, position.y, zPosition) + (Vector3.one * 0.5f)));
        }
    }
Esempio n. 15
0
    public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
    {
        // Do not edit the palette //
        if (brushTarget.layer == 31)
        {
            return;
        }

        // Instantiate our gameobject with the sprite that we want
        GameObject     instance = new GameObject();
        SpriteRenderer renderer = instance.AddComponent <SpriteRenderer>();

        renderer.sprite = spriteToPaint;

        if (addCollisionBox)
        {
            instance.AddComponent <PolygonCollider2D>();
        }

        Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Tiles");
        if (instance != null)
        {
            // Set up the sorting order component
            instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, 0) + new Vector3(.5f, .5f, .5f)));
            instance.transform.SetParent(brushTarget.transform);
            instance.transform.localScale = new Vector3(1, 1, 1);
        }
    }
Esempio n. 16
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)));
            }
        }
Esempio n. 17
0
        /// <summary>
        /// Paints a single prefab into a given position within the selected layers, if a gameObject isn't already there
        /// </summary>
        /// <param name="gridLayout">Grid used for layout</param>
        /// <param name="brushTarget">Target of the paint operation. By default the currently selected GameObject</param>
        /// <param name="position">The coordinates of the cell to paint data to</param>
        public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
        {
            //Set the current GameObject we're painting to?
            if (brushTarget)
            {
                prev_brushTarget = brushTarget;
            }
            brushTarget = prev_brushTarget;

            //Do not allow editing palettes
            if (brushTarget.layer == 31)
            {
                return;
            }

            //Only draw if the current cell doesn't have an object in it
            Transform checkObject = GetObjectInCell(grid, brushTarget.transform, position);

            if (checkObject != null)
            {
                return;
            }

            //Actually draw the object
            GameObject objectToPaint = (GameObject)PrefabUtility.InstantiatePrefab(prefab);

            if (objectToPaint != null)
            {
                Undo.MoveGameObjectToScene(objectToPaint, brushTarget.scene, "Paint Prefabs");
                Undo.RegisterCreatedObjectUndo(objectToPaint, "Paint Prefabs");

                objectToPaint.transform.SetParent(brushTarget.transform);
                objectToPaint.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(position + m_Anchor));
            }
        }
Esempio n. 18
0
        /// <summary>
        /// 配置
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="brushTarget"></param>
        /// <param name="position"></param>
        public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
        {
            // 編集を許可しない
            if (brushTarget.layer == 31)
            {
                return;
            }

            var instance = new GameObject(_event.ToString());

            instance.gameObject.layer = LayerMask.NameToLayer("Event");

            var className = _event.ToString();
            var type      = Util.TypeUtil.GetTypeByClassName(className);

            instance.AddComponent(type);

            var rigid = instance.AddComponent <Rigidbody2D>();

            rigid.bodyType = RigidbodyType2D.Static;
            var collider = instance.AddComponent <BoxCollider2D>();

            collider.isTrigger = true;

            // Ctrl Z できるようにUndo
            Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Event");

            if (instance != null)
            {
                // 座標調整
                instance.transform.SetParent(brushTarget.transform);
                instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(position + new Vector3(.5f, .5f, .5f)));
            }
        }
Esempio n. 19
0
        public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
        {
            // Do not allow editing palettes
            if (brushTarget.layer == 31)
            {
                return;
            }

            if (gameConfig == null)
            {
                return;
            }

            var        entityConfig = gameConfig.entityConfigs[selectedIndex];
            GameObject instance     = (GameObject)PrefabUtility.InstantiatePrefab(entityConfig.prefab);

            if (instance != null)
            {
                Undo.MoveGameObjectToScene(instance, brushTarget.scene, "Paint Entity");
                Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Entity");
                instance.transform.SetParent(brushTarget.transform);
                instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, 0) + new Vector3(.5f, .5f, 0f)));
                var displacement = DirectionUtils.DirectionToDisplacement(direction);
                instance.transform.localRotation = Quaternion.LookRotation(Vector3.forward, new Vector3(displacement.x, displacement.y, 0f));
            }
        }
Esempio n. 20
0
        public override void Paint(GridLayout gridLayout, GameObject brushTarget, Vector3Int position)
        {
            if (brushTarget.layer == 31)
            {
                return;
            }

            // Create an instance of the prefab
            GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab);

            // if its created
            if (instance)
            {
                Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Chest Brush");

                // Make sure you set the instances' parent to the brushTarget
                instance.transform.SetParent(brushTarget.transform);
                instance.transform.position = gridLayout.LocalToWorld(
                    gridLayout.CellToLocalInterpolated(
                        new Vector3Int(position.x, position.y, mZ) +
                        new Vector3(0.5f, 0.5f, 0.5f)
                        ));
            }
            //base.Paint(gridLayout, brushTarget, position);
        }
        private void PickCell(Vector3Int position, Vector3Int brushPosition, GridLayout grid, Transform parent)
        {
            if (parent != null)
            {
                var cellCenter = grid.LocalToWorld(grid.CellToLocalInterpolated(position + new Vector3(.5f, .5f, .5f)));
                var go         = GetObjectInCell(grid, parent, position);

                if (go != null)
                {
                    var prefab = PrefabUtility.GetPrefabParent(go);

                    if (prefab)
                    {
                        SetGameObject(brushPosition, (GameObject)prefab);
                    }
                    else
                    {
                        var newInstance = Instantiate(go);
                        newInstance.hideFlags = HideFlags.HideAndDontSave;
                        SetGameObject(brushPosition, newInstance);
                    }

                    SetOffset(brushPosition, go.transform.position - cellCenter);
                    SetScale(brushPosition, go.transform.localScale);
                    SetOrientation(brushPosition, go.transform.localRotation);
                }
            }
        }
Esempio n. 22
0
        public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
        {
            // Do not allow editing palettes
            if (IsPalette(brushTarget))
            {
                return;
            }

            // 追加箇所1:重なっていたら描画しないようにする
            {
                Transform overlapped = GetObjectInCell(grid, brushTarget.transform, new Vector3Int(position.x, position.y, m_Z));
                if (overlapped != null)
                {
                    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);

            Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs");
            if (instance != null)
            {
                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)));
            }
        }
Esempio n. 23
0
        public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
        {
            // Do not allow editing palettes
            if (brushTarget.layer == 31)
            {
                return;
            }

            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);
            ItemObject itemObject = instance.GetComponentInChildren <ItemObject>();

            itemObject.ItemType = m_ItemType;
            itemObject.AddToCurrentAmount(m_ItemType, m_Amount);
//            TextMesh textMesh = instance.GetComponentInChildren<TextMesh>();
//		    textMesh.text = m_amount.ToString();
            Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs");
            if (instance != null)
            {
                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)));
            }
        }
Esempio n. 24
0
        private static void SetSceneCell(GridLayout grid, Transform parent, Vector3Int position, GameObject go, Vector3 offset, Vector3 scale, Quaternion orientation)
        {
            if (parent == null || go == null)
            {
                return;
            }

            GameObject instance = null;

            switch (PrefabUtility.GetPrefabAssetType(go))
            {
            case PrefabAssetType.Variant:
            case PrefabAssetType.Model:
            case PrefabAssetType.Regular:
                instance = (GameObject)PrefabUtility.InstantiatePrefab(go);
                break;

            default:
                instance           = Instantiate(go);
                instance.hideFlags = HideFlags.None;
                instance.name      = go.name;
                break;
            }

            Undo.RegisterCreatedObjectUndo(instance, "Paint GameObject");
            instance.transform.SetParent(parent);
            instance.transform.position      = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, position.z) + new Vector3(.5f, .5f, .5f)));
            instance.transform.localRotation = orientation;
            instance.transform.localScale    = scale;
            instance.transform.Translate(offset);
        }
Esempio n. 25
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)));
            }
        }
Esempio n. 26
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);
                }
            }
        }
        private void PickCell(Vector3Int position, Vector3Int brushPosition, GridLayout grid, Transform parent)
        {
            if (parent != null)
            {
                Vector3    cellCenter = grid.LocalToWorld(grid.CellToLocalInterpolated(position + m_Anchor));
                GameObject go         = GetObjectInCell(grid, parent, position);

                if (go != null)
                {
                    Object prefab = PrefabUtility.GetCorrespondingObjectFromSource(go);

                    if (prefab)
                    {
                        SetGameObject(brushPosition, (GameObject)prefab);
                    }
                    else
                    {
                        GameObject newInstance = Instantiate(go);
                        newInstance.hideFlags = HideFlags.HideAndDontSave;
                        SetGameObject(brushPosition, newInstance);
                    }

                    SetOffset(brushPosition, go.transform.position - cellCenter);
                    SetScale(brushPosition, go.transform.localScale);
                    SetOrientation(brushPosition, go.transform.localRotation);
                }
            }
        }
Esempio n. 28
0
    private GameObject CreateExitDoor(GridLayout grid, Vector3Int position)
    {
        GameObject door = BrushUtility.Instantiate(m_Prefab, grid.LocalToWorld(grid.CellToLocalInterpolated(position + offsetFromBottomLeft)), GetLayer());

        door.transform.rotation = m_PrefabRotation * Quaternion.AngleAxis(180f, Vector3.forward);
        return(door);
    }
Esempio n. 29
0
        /// <summary>
        /// Paints Prefabs into a given position within the selected layers.
        /// The PrefabBrush overrides this to provide Prefab painting functionality.
        /// </summary>
        /// <param name="gridLayout">Grid used for layout.</param>
        /// <param name="brushTarget">Target of the paint operation. By default the currently selected GameObject.</param>
        /// <param name="position">The coordinates of the cell to paint data to.</param>
        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)
            {
                Erase(grid, brushTarget, position);

                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(position + m_Anchor));
            }
        }
Esempio n. 30
0
        public override void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
        {
            // Do not allow editing palettes
            if (brushTarget.layer == 31)
            {
                return;
            }

            Erase(grid, brushTarget, position);

            GameObject prefab   = m_Prefabs[(int)currentBrush];
            GameObject instance = (GameObject)PrefabUtility.InstantiatePrefab(prefab);

            Undo.RegisterCreatedObjectUndo((Object)instance, "Paint Prefabs");
            if (instance != null)
            {
                instance.transform.SetParent(brushTarget.transform);
                instance.transform.position = grid.LocalToWorld(grid.CellToLocalInterpolated(new Vector3Int(position.x, position.y, zPos) + new Vector3(.5f, .5f, .5f)));
                MapTile tile = instance.GetComponent <MapTile>();
                tile.groupID       = groupIndex;
                tile.reversed      = reversed;
                tile.faceDirection = faceDirection;
                tile.multiSolve    = multiSolve;
                tile.percent       = percent * 0.01f;
                tile.SetupEditor();
            }
        }