#if UNITY_EDITOR using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace BulletHellTemplate { /// /// Editor script to generate XP progression values for gameplay. /// public class XPProgressionGenerator : EditorWindow { private int level1XP = 40; // XP required for level 1 private int maxLevelXP = 8230; // XP required for the max level private int maxLevel = 40; // Maximum level private int[] xpToNextLevel; [MenuItem("Tools/XP Progression Generator")] public static void ShowWindow() { GetWindow("XP Progression Generator"); } private void OnGUI() { GUILayout.Label("XP Progression Generator", EditorStyles.boldLabel); level1XP = EditorGUILayout.IntField("XP for Level 1", level1XP); maxLevelXP = EditorGUILayout.IntField("XP for Max Level", maxLevelXP); maxLevel = EditorGUILayout.IntField("Max Level", maxLevel); if (GUILayout.Button("Generate XP Progression")) { GenerateXPProgression(); } } private void GenerateXPProgression() { // Validate inputs if (level1XP <= 0 || maxLevelXP <= level1XP || maxLevel <= 1) { Debug.LogError("Invalid XP values. Ensure XP for Level 1 is greater than 0, Max Level XP is greater, and Max Level is greater than 1."); return; } // Calculate XP progression values List xpValues = new List(); xpValues.Add(level1XP); float factor = Mathf.Pow((float)maxLevelXP / level1XP, 1f / (maxLevel - 1)); int previousXP = level1XP; for (int level = 1; level < maxLevel; level++) { int xpForNextLevel = Mathf.RoundToInt(previousXP * factor); xpValues.Add(xpForNextLevel); previousXP = xpForNextLevel; } xpToNextLevel = xpValues.ToArray(); #if UNITY_6000_0_OR_NEWER GameplayManager gameplayManager = FindFirstObjectByType(); #else GameplayManager gameplayManager = FindObjectOfType(); #endif if (gameplayManager != null) { gameplayManager.xpToNextLevel = xpToNextLevel; EditorUtility.SetDirty(gameplayManager); Debug.Log("XP progression values updated successfully."); } else { Debug.LogError("GameplayManager not found in the scene."); } } } } #endif