From 08c33a7fbc2f6ef8aa21cb6f7d16b1a85f58d186 Mon Sep 17 00:00:00 2001 From: Mario Brandao Date: Mon, 24 May 2021 19:53:22 +0200 Subject: [PATCH] Random Terrain Tile --- Documentation~/RandomTerrainTile.md | 33 ++ Documentation~/Tiles.md | 1 + .../images/RandomTerrainTilePositioning.png | Bin 0 -> 34832 bytes .../RandomTerrainTile/RandomTerrainTile.cs | 349 ++++++++++++++++++ .../RandomTerrainTile.cs.meta | 11 + 5 files changed, 394 insertions(+) create mode 100644 Documentation~/RandomTerrainTile.md create mode 100644 Documentation~/images/RandomTerrainTilePositioning.png create mode 100644 Runtime/Tiles/RandomTerrainTile/RandomTerrainTile.cs create mode 100644 Runtime/Tiles/RandomTerrainTile/RandomTerrainTile.cs.meta diff --git a/Documentation~/RandomTerrainTile.md b/Documentation~/RandomTerrainTile.md new file mode 100644 index 0000000..1ead717 --- /dev/null +++ b/Documentation~/RandomTerrainTile.md @@ -0,0 +1,33 @@ +# Random Terrain Tile + +Very similar to the Terrain Tile, but this supports an array of sprites for each property, and applies them randomly, at the time of the placement. + +## Properties + +The following properties describe the appearance of Sprites representing terrain or walls. Assign Sprites that matches the description to each of these properties. + +| Property | Function | +| ------------------------------------- | ------------------------------------------------------------ | +| 1. __Filled__ | Sprites with all sides filled. | +| 2. __Three Sides__ | Sprites with three sides. | +| 3. __Two Sides and One Corner__ | Sprites with two sides and one corner without adjacent sides. | +| 4. __Two Adjacent Sides__ | Sprites with two adjacent sides. | +| 5. __Two Opposite Sides__ | Sprites with two opposite sides across each other. | +| 6. __One Side and Two Corners__ | Sprites with a single side and two corners without adjacent sides. | +| 7. __One Side and One Lower Corner__ | Sprites with one side and a corner in the lower half of the Sprite. | +| 8. __One Side and One Upper Corner__ | Sprites with one side and a corner in the upper half of the Sprite. | +| 9. __One Side__ | Sprites with a single side. | +| 10. __Four Corners__ | Sprites with four unconnected corners without adjacent sides. | +| 11. __Three Corners__ | Sprites with three corners without adjacent sides. | +| 12. __Two Adjacent Corners__ | Sprites with two adjacent corners. | +| 13. __Two Opposite Corners__ | Sprites with two opposite corners across each other. | +| 14. __One Corner__ | Sprites with a single corner with no adjacent sides. | +| 15. __Empty__ | Sprites without any terrain. | + +## Usage + +The Random Terrain Tile is a copy of Terrain Tile with the only difference that it supports multiple sprites for each level. + +The image below may be of help to know how to position tiles in a way to facilitate their positioning. Such layout works for Terrain Tiles too, by the way. + +![Random Terrain Tile Positioning](images/RandomTerrainTilePositioning.png) diff --git a/Documentation~/Tiles.md b/Documentation~/Tiles.md index 605fffe..d8be8ff 100644 --- a/Documentation~/Tiles.md +++ b/Documentation~/Tiles.md @@ -12,5 +12,6 @@ The following are some implementations and examples of __Scriptables Tiles__ whi - [Rule Override Tile](RuleOverrideTile.md) - [Terrain Tile](TerrainTile.md) - [Weighted Random Tile](WeightedRandomTile.md) +- [Random Terrain Tile](RandomTerrainTile.md) Refer to the [Scriptable Tiles](https://docs.unity3d.com/Manual/Tilemap-ScriptableTiles.html) documentation page for more information on creating your own Scriptable Tiles. \ No newline at end of file diff --git a/Documentation~/images/RandomTerrainTilePositioning.png b/Documentation~/images/RandomTerrainTilePositioning.png new file mode 100644 index 0000000000000000000000000000000000000000..6fa86f5418ba0d11d6e25afb6fda9f698d133e8f GIT binary patch literal 34832 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 Le6i%htq1=LY#3h& literal 0 HcmV?d00001 diff --git a/Runtime/Tiles/RandomTerrainTile/RandomTerrainTile.cs b/Runtime/Tiles/RandomTerrainTile/RandomTerrainTile.cs new file mode 100644 index 0000000..47cf073 --- /dev/null +++ b/Runtime/Tiles/RandomTerrainTile/RandomTerrainTile.cs @@ -0,0 +1,349 @@ +using System; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace UnityEngine.Tilemaps +{ + + /// + /// Terrain Tiles, similar to Pipeline Tiles, are tiles which take into consideration its orthogonal and diagonal neighboring tiles and displays a sprite depending on whether the neighboring tile is the same tile. + /// + [Serializable] + [CreateAssetMenu(fileName = "New Random Terrain Tile", menuName = "2D Extras/Tiles/Random Terrain Tile", order = 360)] + public class RandomTerrainTile : TileBase + { + [SerializeField] public Sprite[] Filled; + [SerializeField] public Sprite[] ThreeSides; + [SerializeField] public Sprite[] TwoSidesAndOneCorner; + [SerializeField] public Sprite[] TwoAdjacentSides; + [SerializeField] public Sprite[] TwoOppositeSides; + [SerializeField] public Sprite[] OneSideAndTwoCorners; + [SerializeField] public Sprite[] OneSideAndOneLowerCorner; + [SerializeField] public Sprite[] OneSideAndOneUpperCorner; + [SerializeField] public Sprite[] OneSide; + [SerializeField] public Sprite[] FourCorners; + [SerializeField] public Sprite[] ThreeCorners; + [SerializeField] public Sprite[] TwoAdjacentCorners; + [SerializeField] public Sprite[] TwoOppositeCorners; + [SerializeField] public Sprite[] OneCorner; + [SerializeField] public Sprite[] Empty; + + /// + /// The Sprites used for defining the Terrain. + /// + // [SerializeField] + // public Sprite[] m_Sprites; + + /// + /// This method is called when the tile is refreshed. + /// + /// Position of the Tile on the Tilemap. + /// The Tilemap the tile is present on. + public override void RefreshTile(Vector3Int location, ITilemap tileMap) + { + for (int yd = -1; yd <= 1; yd++) + for (int xd = -1; xd <= 1; xd++) + { + Vector3Int position = new Vector3Int(location.x + xd, location.y + yd, location.z); + if (TileValue(tileMap, position)) + tileMap.RefreshTile(position); + } + } + + /// + /// Retrieves any tile rendering data from the scripted tile. + /// + /// Position of the Tile on the Tilemap. + /// The Tilemap the tile is present on. + /// Data to render the tile. + public override void GetTileData(Vector3Int location, ITilemap tileMap, ref TileData tileData) + { + UpdateTile(location, tileMap, ref tileData); + } + + private void UpdateTile(Vector3Int location, ITilemap tileMap, ref TileData tileData) + { + tileData.transform = Matrix4x4.identity; + tileData.color = Color.white; + + int mask = TileValue(tileMap, location + new Vector3Int(0, 1, 0)) ? 1 : 0; + mask += TileValue(tileMap, location + new Vector3Int(1, 1, 0)) ? 2 : 0; + mask += TileValue(tileMap, location + new Vector3Int(1, 0, 0)) ? 4 : 0; + mask += TileValue(tileMap, location + new Vector3Int(1, -1, 0)) ? 8 : 0; + mask += TileValue(tileMap, location + new Vector3Int(0, -1, 0)) ? 16 : 0; + mask += TileValue(tileMap, location + new Vector3Int(-1, -1, 0)) ? 32 : 0; + mask += TileValue(tileMap, location + new Vector3Int(-1, 0, 0)) ? 64 : 0; + mask += TileValue(tileMap, location + new Vector3Int(-1, 1, 0)) ? 128 : 0; + + byte original = (byte)mask; + if ((original | 254) < 255) { mask = mask & 125; } + if ((original | 251) < 255) { mask = mask & 245; } + if ((original | 239) < 255) { mask = mask & 215; } + if ((original | 191) < 255) { mask = mask & 95; } + + Sprite[][] m_Sprites = GetSpritesAsOne(); + + int index = GetIndex((byte)mask); + if (index >= 0 && index < m_Sprites.Length && TileValue(tileMap, location)) + { + tileData.sprite = GetRandomSprite(m_Sprites[index]); + tileData.transform = GetTransform((byte)mask); + tileData.color = Color.white; + tileData.flags = TileFlags.LockTransform | TileFlags.LockColor; + tileData.colliderType = Tile.ColliderType.Sprite; + } + } + + private Sprite GetRandomSprite(Sprite[] spriteList) { + if (spriteList.Length == 0) { + return null; + } + + int spriteIndex = Random.Range(0, spriteList.Length - 1); + return spriteList[spriteIndex]; + } + + private Sprite[][] GetSpritesAsOne() { + Sprite[][] m_Sprites = new Sprite[15][]; + m_Sprites[0] = Filled; + m_Sprites[1] = ThreeSides; + m_Sprites[2] = TwoSidesAndOneCorner; + m_Sprites[3] = TwoAdjacentSides; + m_Sprites[4] = TwoOppositeSides; + m_Sprites[5] = OneSideAndTwoCorners; + m_Sprites[6] = OneSideAndOneLowerCorner; + m_Sprites[7] = OneSideAndOneUpperCorner; + m_Sprites[8] = OneSide; + m_Sprites[9] = FourCorners; + m_Sprites[10] = ThreeCorners; + m_Sprites[11] = TwoAdjacentCorners; + m_Sprites[12] = TwoOppositeCorners; + m_Sprites[13] = OneCorner; + m_Sprites[14] = Empty; + return m_Sprites; + } + + private bool TileValue(ITilemap tileMap, Vector3Int position) + { + TileBase tile = tileMap.GetTile(position); + return (tile != null && tile == this); + } + + private int GetIndex(byte mask) + { + switch (mask) + { + case 0: return 0; + case 1: + case 4: + case 16: + case 64: return 1; + case 5: + case 20: + case 80: + case 65: return 2; + case 7: + case 28: + case 112: + case 193: return 3; + case 17: + case 68: return 4; + case 21: + case 84: + case 81: + case 69: return 5; + case 23: + case 92: + case 113: + case 197: return 6; + case 29: + case 116: + case 209: + case 71: return 7; + case 31: + case 124: + case 241: + case 199: return 8; + case 85: return 9; + case 87: + case 93: + case 117: + case 213: return 10; + case 95: + case 125: + case 245: + case 215: return 11; + case 119: + case 221: return 12; + case 127: + case 253: + case 247: + case 223: return 13; + case 255: return 14; + } + return -1; + } + + private Matrix4x4 GetTransform(byte mask) + { + switch (mask) + { + case 4: + case 20: + case 28: + case 68: + case 84: + case 92: + case 116: + case 124: + case 93: + case 125: + case 221: + case 253: + return Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0f, 0f, -90f), Vector3.one); + case 16: + case 80: + case 112: + case 81: + case 113: + case 209: + case 241: + case 117: + case 245: + case 247: + return Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0f, 0f, -180f), Vector3.one); + case 64: + case 65: + case 193: + case 69: + case 197: + case 71: + case 199: + case 213: + case 215: + case 223: + return Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0f, 0f, -270f), Vector3.one); + } + return Matrix4x4.identity; + } + } + +#if UNITY_EDITOR + [CustomEditor(typeof(RandomTerrainTile))] + public class RandomTerrainTileEditor : Editor + { + private RandomTerrainTile tile { get { return (target as RandomTerrainTile); } } + + public void OnEnable() + { + bool setDirty = false; + + if (tile.Filled == null || tile.Filled.Length == 0) { + tile.Filled = new Sprite[1]; setDirty = true; + } + + if (tile.ThreeSides == null || tile.ThreeSides.Length == 0) { + tile.ThreeSides = new Sprite[1]; setDirty = true; + } + + if (tile.TwoSidesAndOneCorner == null || tile.TwoSidesAndOneCorner.Length == 0) { + tile.TwoSidesAndOneCorner = new Sprite[1]; setDirty = true; + } + + if (tile.TwoAdjacentSides == null || tile.TwoAdjacentSides.Length == 0) { + tile.TwoAdjacentSides = new Sprite[1]; setDirty = true; + } + + if (tile.TwoOppositeSides == null || tile.TwoOppositeSides.Length == 0) { + tile.TwoOppositeSides = new Sprite[1]; setDirty = true; + } + + if (tile.OneSideAndTwoCorners == null || tile.OneSideAndTwoCorners.Length == 0) { + tile.OneSideAndTwoCorners = new Sprite[1]; setDirty = true; + } + + if (tile.OneSideAndOneLowerCorner == null || tile.OneSideAndOneLowerCorner.Length == 0) { + tile.OneSideAndOneLowerCorner = new Sprite[1]; setDirty = true; + } + + if (tile.OneSideAndOneUpperCorner == null || tile.OneSideAndOneUpperCorner.Length == 0) { + tile.OneSideAndOneUpperCorner = new Sprite[1]; setDirty = true; + } + + if (tile.OneSide == null || tile.OneSide.Length == 0) { + tile.OneSide = new Sprite[1]; setDirty = true; + } + + if (tile.FourCorners == null || tile.FourCorners.Length == 0) { + tile.FourCorners = new Sprite[1]; setDirty = true; + } + + if (tile.ThreeCorners == null || tile.ThreeCorners.Length == 0) { + tile.ThreeCorners = new Sprite[1]; setDirty = true; + } + + if (tile.TwoAdjacentCorners == null || tile.TwoAdjacentCorners.Length == 0) { + tile.TwoAdjacentCorners = new Sprite[1]; setDirty = true; + } + + if (tile.TwoOppositeCorners == null || tile.TwoOppositeCorners.Length == 0) { + tile.TwoOppositeCorners = new Sprite[1]; setDirty = true; + } + + if (tile.OneCorner == null || tile.OneCorner.Length == 0) { + tile.OneCorner = new Sprite[1]; setDirty = true; + } + + if (tile.Empty == null || tile.Empty.Length == 0) { + tile.Empty = new Sprite[1]; setDirty = true; + } + + if (setDirty) { + EditorUtility.SetDirty(tile); + } + } + + // public void OnEnable() + // { + // if (tile.m_Sprites == null || tile.m_Sprites.Length != 15) + // { + // tile.m_Sprites = new Sprite[15]; + // EditorUtility.SetDirty(tile); + // } + // } + + + // public override void OnInspectorGUI() + // { + // EditorGUILayout.LabelField("Place sprites shown based on the contents of the sprite."); + // EditorGUILayout.Space(); + + // float oldLabelWidth = EditorGUIUtility.labelWidth; + // EditorGUIUtility.labelWidth = 210; + + // EditorGUI.BeginChangeCheck(); + // tile.m_Sprites[0] = (Sprite) EditorGUILayout.ObjectField("Filled", tile.m_Sprites[0], typeof(Sprite), false, null); + // tile.m_Sprites[1] = (Sprite) EditorGUILayout.ObjectField("Three Sides", tile.m_Sprites[1], typeof(Sprite), false, null); + // tile.m_Sprites[2] = (Sprite) EditorGUILayout.ObjectField("Two Sides and One Corner", tile.m_Sprites[2], typeof(Sprite), false, null); + // tile.m_Sprites[3] = (Sprite) EditorGUILayout.ObjectField("Two Adjacent Sides", tile.m_Sprites[3], typeof(Sprite), false, null); + // tile.m_Sprites[4] = (Sprite) EditorGUILayout.ObjectField("Two Opposite Sides", tile.m_Sprites[4], typeof(Sprite), false, null); + // tile.m_Sprites[5] = (Sprite) EditorGUILayout.ObjectField("One Side and Two Corners", tile.m_Sprites[5], typeof(Sprite), false, null); + // tile.m_Sprites[6] = (Sprite) EditorGUILayout.ObjectField("One Side and One Lower Corner", tile.m_Sprites[6], typeof(Sprite), false, null); + // tile.m_Sprites[7] = (Sprite) EditorGUILayout.ObjectField("One Side and One Upper Corner", tile.m_Sprites[7], typeof(Sprite), false, null); + // tile.m_Sprites[8] = (Sprite) EditorGUILayout.ObjectField("One Side", tile.m_Sprites[8], typeof(Sprite), false, null); + // tile.m_Sprites[9] = (Sprite) EditorGUILayout.ObjectField("Four Corners", tile.m_Sprites[9], typeof(Sprite), false, null); + // tile.m_Sprites[10] = (Sprite) EditorGUILayout.ObjectField("Three Corners", tile.m_Sprites[10], typeof(Sprite), false, null); + // tile.m_Sprites[11] = (Sprite) EditorGUILayout.ObjectField("Two Adjacent Corners", tile.m_Sprites[11], typeof(Sprite), false, null); + // tile.m_Sprites[12] = (Sprite) EditorGUILayout.ObjectField("Two Opposite Corners", tile.m_Sprites[12], typeof(Sprite), false, null); + // tile.m_Sprites[13] = (Sprite) EditorGUILayout.ObjectField("One Corner", tile.m_Sprites[13], typeof(Sprite), false, null); + // tile.m_Sprites[14] = (Sprite) EditorGUILayout.ObjectField("Empty", tile.m_Sprites[14], typeof(Sprite), false, null); + // if (EditorGUI.EndChangeCheck()) + // EditorUtility.SetDirty(tile); + + // EditorGUIUtility.labelWidth = oldLabelWidth; + // } + } +#endif +} diff --git a/Runtime/Tiles/RandomTerrainTile/RandomTerrainTile.cs.meta b/Runtime/Tiles/RandomTerrainTile/RandomTerrainTile.cs.meta new file mode 100644 index 0000000..b5b25e2 --- /dev/null +++ b/Runtime/Tiles/RandomTerrainTile/RandomTerrainTile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af8ebeabaad034943bca08de2636b4b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: