using UnityEngine;
using UnityEditor;
///
/// Utility to fix combat events that are still using old string-based enemy types
///
public class CombatEventFixer : EditorWindow
{
[MenuItem("RPG/Utilities/Fix Combat Events")]
public static void ShowWindow()
{
GetWindow("Combat Event Fixer");
}
void OnGUI()
{
GUILayout.Label("Combat Event Asset Fixer", EditorStyles.boldLabel);
EditorGUILayout.Space();
EditorGUILayout.HelpBox(
"This tool fixes combat events and forces Unity to refresh the inspector to show EnemyCharacterData asset references.",
MessageType.Info);
EditorGUILayout.Space();
if (GUILayout.Button("Find and Fix All Combat Events", GUILayout.Height(30)))
{
FixAllCombatEvents();
}
EditorGUILayout.Space();
if (GUILayout.Button("Force Reimport TravelEventTypes.cs"))
{
ForceReimportTravelEventTypes();
}
if (GUILayout.Button("Refresh Asset Database"))
{
AssetDatabase.Refresh();
Debug.Log("â
Asset database refreshed");
}
}
private void FixAllCombatEvents()
{
// Find all CombatTravelEvent assets
string[] guids = AssetDatabase.FindAssets("t:CombatTravelEvent");
int fixedCount = 0;
foreach (string guid in guids)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
CombatTravelEvent combatEvent = AssetDatabase.LoadAssetAtPath(path);
if (combatEvent != null)
{
// Mark as dirty to force Unity to update the inspector
EditorUtility.SetDirty(combatEvent);
fixedCount++;
Debug.Log($"đ§ Fixed combat event: {combatEvent.name}");
}
}
if (fixedCount > 0)
{
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log($"â
Fixed {fixedCount} combat event(s). Please check the Inspector.");
}
else
{
Debug.Log("âšī¸ No combat events found to fix. Try creating a new one.");
}
}
private void ForceReimportTravelEventTypes()
{
string[] paths = {
"Assets/Scripts/Events/TravelEventTypes.cs",
"Assets/Scripts/Events/TravelEvent.cs"
};
foreach (string path in paths)
{
if (System.IO.File.Exists(path))
{
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);
Debug.Log($"đ Reimported: {path}");
}
}
AssetDatabase.Refresh();
Debug.Log("â
Force reimport complete");
}
[MenuItem("Assets/RPG/Fix Combat Event Inspector", true)]
public static bool ValidateFixCombatEvent()
{
return Selection.activeObject is CombatTravelEvent;
}
[MenuItem("Assets/RPG/Fix Combat Event Inspector")]
public static void FixSelectedCombatEvent()
{
if (Selection.activeObject is CombatTravelEvent combatEvent)
{
EditorUtility.SetDirty(combatEvent);
AssetDatabase.SaveAssets();
Debug.Log($"đ§ Fixed inspector for: {combatEvent.name}");
}
}
}