DungeonGenerationPlus_Letha.../DunGenPlus/DunGenPlus/Generation/DunGenPlusGeneratorDebug.cs
2026-04-30 23:32:56 -07:00

64 lines
2.7 KiB
C#

using DunGen.Graph;
using DunGen;
using HarmonyLib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using UnityEngine;
using DunGenPlus.Collections;
using DunGenPlus.Components;
using BepInEx.Logging;
using DunGenPlus.DevTools;
using DunGenPlus.Patches;
namespace DunGenPlus.Generation {
internal partial class DunGenPlusGenerator {
public static void PrintAddTileError(DungeonGenerator gen, TileProxy previousTile, TilePlacementParameters placementParameters, IEnumerable<TileSet> useableTileSets, int branchId, int lineLength, float lineRatio){
var prevName = previousTile != null ? previousTile.Prefab.name : "NULL";
var archetypeName = placementParameters.Archetype ? placementParameters.Archetype.name : "NULL";
var tileSetNames = string.Join(", ", useableTileSets);
var stringList = new List<string>();
stringList.Add($"Main branch gen failed at Branch {branchId} (Length: {lineLength}, Ratio: {lineRatio})");
stringList.Add($"Prev tile: {prevName}");
stringList.Add($"Archetype: {archetypeName}");
stringList.Add($"Tilesets: {tileSetNames}");
stringList.Add($"Reason: {lastTilePlacementResult}");
if (previousTile != null) {
var availableDoorways = string.Join(", ", previousTile.UnusedDoorways.Select(d => d.DoorwayComponent.gameObject.name));
var usedDoorways = string.Join(", ", previousTile.UsedDoorways.Select(d => d.DoorwayComponent.gameObject.name));
stringList.Add($"Available Doorways: {availableDoorways}");
stringList.Add($"Used Doorways: {usedDoorways}");
if (API.IsDevDebugModeActive()){
var allTiles = GetDoorwayPairsDebug(gen, previousTile, useableTileSets, lineRatio, placementParameters);
var uniqueTiles = string.Join(", ", allTiles.Select(t => t.NextTemplate.Prefab).Distinct().Select(d => d.name));
stringList.Add($"Next Possible Tiles: {uniqueTiles}");
}
}
stringList.Add(string.Empty);
Plugin.logger.LogDebug(string.Join("\n", stringList));
}
public static void PrintAddTileErrorQuick(DungeonGenerator gen, int lineLength){
PrintAddTileError(gen, DungeonGeneratorPatch.lastAttachTo, DungeonGeneratorPatch.lastPlacementParms, DungeonGeneratorPatch.lastUseableTileSets, 0, lineLength, DungeonGeneratorPatch.lastNormalizedDepth);
}
public static TilePlacementResult lastTilePlacementResult;
public static void RecordLastTilePlacementResult(DungeonGenerator gen, TilePlacementResult result, TileProxy attachTo){
if (result == null) result = new NoMatchingDoorwayPlacementResult(attachTo);
lastTilePlacementResult = result;
}
}
}