using UnityEngine; using UnityEngine.Tilemaps; /// /// Helper script to set up MazeRenderer with placeholder tiles /// Attach this to the MazeRenderer and click "Generate Placeholder Tiles" in the inspector /// [RequireComponent(typeof(MazeRenderer))] public class MazeRendererSetup : MonoBehaviour { /// /// Call this from the inspector or in code to generate placeholder tiles /// [ContextMenu("Generate and Assign Placeholder Tiles")] public void GeneratePlaceholderTiles() { var renderer = GetComponent(); if (renderer == null) { Debug.LogError("MazeRenderer not found!"); return; } // Create placeholder sprites var floorSprite = TileGenerator.CreateColoredSprite(new Color(0.8f, 0.8f, 0.8f), "Floor"); var wallSprite = TileGenerator.CreateColoredSprite(new Color(0.3f, 0.3f, 0.3f), "Wall"); var swampSprite = TileGenerator.CreateCheckerSprite(new Color(0.5f, 0.8f, 0.3f), new Color(0.4f, 0.6f, 0.2f), "Swamp"); var stoneSprite = TileGenerator.CreateCheckerSprite(new Color(0.7f, 0.7f, 0.7f), new Color(0.6f, 0.6f, 0.6f), "Stone"); var lavaSprite = TileGenerator.CreateColoredSprite(new Color(1.0f, 0.4f, 0.0f), "Lava"); // Create tiles var floorTile = TileGenerator.CreateTile(floorSprite); var wallTile = TileGenerator.CreateTile(wallSprite); var swampTile = TileGenerator.CreateTile(swampSprite); var stoneTile = TileGenerator.CreateTile(stoneSprite); var lavaTile = TileGenerator.CreateTile(lavaSprite); // Assign to renderer via reflection (since the fields are private with SerializeField) var type = renderer.GetType(); type.GetField("floorTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, floorTile); type.GetField("wallTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, wallTile); type.GetField("swampTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, swampTile); type.GetField("stoneTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, stoneTile); type.GetField("lavaTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, lavaTile); Debug.Log("Placeholder tiles generated and assigned!"); } /// /// Creates empty tilemaps if they don't exist /// [ContextMenu("Create Missing Tilemaps")] public void CreateMissingTilemaps() { var grid = GetComponent(); if (grid == null) { Debug.LogError("Grid not found on this GameObject!"); return; } // Create tilemaps if they don't exist var combinedTilemap = transform.Find("CombinedTilemap")?.GetComponent(); if (combinedTilemap == null) { var go = new GameObject("CombinedTilemap"); go.transform.parent = transform; combinedTilemap = go.AddComponent(); go.AddComponent(); } var decorationTilemap = transform.Find("DecorationTilemap")?.GetComponent(); if (decorationTilemap == null) { var go = new GameObject("DecorationTilemap"); go.transform.parent = transform; decorationTilemap = go.AddComponent(); go.AddComponent(); } // Assign to renderer via reflection var renderer = GetComponent(); var type = renderer.GetType(); type.GetField("combinedTilemap", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, combinedTilemap); type.GetField("decorationTilemap", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, decorationTilemap); Debug.Log("Tilemaps created and assigned!"); } /// /// One-click setup: creates everything needed /// [ContextMenu("Quick Setup - Create Everything")] public void QuickSetup() { CreateMissingTilemaps(); GeneratePlaceholderTiles(); } }