MazeRendererSetup.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using UnityEngine;
  2. using UnityEngine.Tilemaps;
  3. /// <summary>
  4. /// Helper script to set up MazeRenderer with placeholder tiles
  5. /// Attach this to the MazeRenderer and click "Generate Placeholder Tiles" in the inspector
  6. /// </summary>
  7. [RequireComponent(typeof(MazeRenderer))]
  8. public class MazeRendererSetup : MonoBehaviour
  9. {
  10. /// <summary>
  11. /// Call this from the inspector or in code to generate placeholder tiles
  12. /// </summary>
  13. [ContextMenu("Generate and Assign Placeholder Tiles")]
  14. public void GeneratePlaceholderTiles()
  15. {
  16. var renderer = GetComponent<MazeRenderer>();
  17. if (renderer == null)
  18. {
  19. Debug.LogError("MazeRenderer not found!");
  20. return;
  21. }
  22. // Create placeholder sprites
  23. var floorSprite = TileGenerator.CreateColoredSprite(new Color(0.8f, 0.8f, 0.8f), "Floor");
  24. var wallSprite = TileGenerator.CreateColoredSprite(new Color(0.3f, 0.3f, 0.3f), "Wall");
  25. var swampSprite = TileGenerator.CreateCheckerSprite(new Color(0.5f, 0.8f, 0.3f), new Color(0.4f, 0.6f, 0.2f), "Swamp");
  26. var stoneSprite = TileGenerator.CreateCheckerSprite(new Color(0.7f, 0.7f, 0.7f), new Color(0.6f, 0.6f, 0.6f), "Stone");
  27. var lavaSprite = TileGenerator.CreateColoredSprite(new Color(1.0f, 0.4f, 0.0f), "Lava");
  28. // Create tiles
  29. var floorTile = TileGenerator.CreateTile(floorSprite);
  30. var wallTile = TileGenerator.CreateTile(wallSprite);
  31. var swampTile = TileGenerator.CreateTile(swampSprite);
  32. var stoneTile = TileGenerator.CreateTile(stoneSprite);
  33. var lavaTile = TileGenerator.CreateTile(lavaSprite);
  34. // Assign to renderer via reflection (since the fields are private with SerializeField)
  35. var type = renderer.GetType();
  36. type.GetField("floorTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, floorTile);
  37. type.GetField("wallTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, wallTile);
  38. type.GetField("swampTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, swampTile);
  39. type.GetField("stoneTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, stoneTile);
  40. type.GetField("lavaTile", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, lavaTile);
  41. Debug.Log("Placeholder tiles generated and assigned!");
  42. }
  43. /// <summary>
  44. /// Creates empty tilemaps if they don't exist
  45. /// </summary>
  46. [ContextMenu("Create Missing Tilemaps")]
  47. public void CreateMissingTilemaps()
  48. {
  49. var grid = GetComponent<Grid>();
  50. if (grid == null)
  51. {
  52. Debug.LogError("Grid not found on this GameObject!");
  53. return;
  54. }
  55. // Create tilemaps if they don't exist
  56. var combinedTilemap = transform.Find("CombinedTilemap")?.GetComponent<Tilemap>();
  57. if (combinedTilemap == null)
  58. {
  59. var go = new GameObject("CombinedTilemap");
  60. go.transform.parent = transform;
  61. combinedTilemap = go.AddComponent<Tilemap>();
  62. go.AddComponent<TilemapRenderer>();
  63. }
  64. var decorationTilemap = transform.Find("DecorationTilemap")?.GetComponent<Tilemap>();
  65. if (decorationTilemap == null)
  66. {
  67. var go = new GameObject("DecorationTilemap");
  68. go.transform.parent = transform;
  69. decorationTilemap = go.AddComponent<Tilemap>();
  70. go.AddComponent<TilemapRenderer>();
  71. }
  72. // Assign to renderer via reflection
  73. var renderer = GetComponent<MazeRenderer>();
  74. var type = renderer.GetType();
  75. type.GetField("combinedTilemap", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, combinedTilemap);
  76. type.GetField("decorationTilemap", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)?.SetValue(renderer, decorationTilemap);
  77. Debug.Log("Tilemaps created and assigned!");
  78. }
  79. /// <summary>
  80. /// One-click setup: creates everything needed
  81. /// </summary>
  82. [ContextMenu("Quick Setup - Create Everything")]
  83. public void QuickSetup()
  84. {
  85. CreateMissingTilemaps();
  86. GeneratePlaceholderTiles();
  87. }
  88. }