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();
}
}