using System.IO;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
namespace TKS.EditorTools
{
///
/// 프로젝트 자동 구성. 메뉴 TKS/Setup Project 또는
/// CLI: Unity.exe -batchmode -nographics -projectPath <proj> -executeMethod TKS.EditorTools.ProjectSetup.Build -quit
///
public static class ProjectSetup
{
public const string ConfigPath = "Assets/Resources/BalanceConfig.asset";
public const string ScenePath = "Assets/Scenes/Battle.unity";
[MenuItem("TKS/Setup Project (설정 자산·씬 생성)")]
public static void Build()
{
var cfg = EnsureConfig(false);
BuildScene(cfg);
ApplySettings();
UnitArtImporter.ReimportAll();
UIThemeImporter.Import();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log("[TKS] Setup 완료 · " + ConfigPath + " · " + ScenePath);
}
[MenuItem("TKS/Reset Balance Defaults (기본값 재시드)")]
public static void ResetDefaults()
{
EnsureConfig(true);
AssetDatabase.SaveAssets();
Debug.Log("[TKS] BalanceConfig 기본값 재시드");
}
/// CLI 용: 기본값 재시드 + 씬·설정 재생성(기존 자산 수치를 덮어쓴다).
public static void BuildFresh()
{
var cfg = EnsureConfig(true);
BuildScene(cfg);
ApplySettings();
UnitArtImporter.ReimportAll();
UIThemeImporter.Import();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log("[TKS] BuildFresh 완료 · 기본값 재시드 · " + ScenePath);
}
public static BalanceConfig EnsureConfig(bool overwrite)
{
if (!AssetDatabase.IsValidFolder("Assets/Resources")) AssetDatabase.CreateFolder("Assets", "Resources");
var cfg = AssetDatabase.LoadAssetAtPath(ConfigPath);
bool created = false;
if (cfg == null)
{
cfg = ScriptableObject.CreateInstance();
AssetDatabase.CreateAsset(cfg, ConfigPath);
created = true;
}
if (created || overwrite)
{
BalanceDefaults.Apply(cfg);
StageImporter.ImportInto(cfg); // 챕터·스테이지 = Assets/Data/Stages/*.csv
EditorUtility.SetDirty(cfg);
}
return cfg;
}
static void BuildScene(BalanceConfig cfg)
{
if (!AssetDatabase.IsValidFolder("Assets/Scenes")) AssetDatabase.CreateFolder("Assets", "Scenes");
var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);
var camGo = new GameObject("Main Camera");
camGo.tag = "MainCamera";
var cam = camGo.AddComponent();
cam.orthographic = true;
cam.orthographicSize = 9.7f;
cam.clearFlags = CameraClearFlags.SolidColor;
cam.backgroundColor = new Color(0.07f, 0.09f, 0.11f);
cam.transform.position = new Vector3(0f, 0f, -10f);
camGo.AddComponent();
var bootGo = new GameObject("GameBootstrap");
var boot = bootGo.AddComponent();
boot.Config = cfg;
boot.AutoStart = true;
EditorSceneManager.SaveScene(scene, ScenePath);
EditorBuildSettings.scenes = new[] { new EditorBuildSettingsScene(ScenePath, true) };
}
static void ApplySettings()
{
PlayerSettings.companyName = "NerdNavis";
PlayerSettings.productName = "ThreeKingdomsSlingshot";
PlayerSettings.defaultInterfaceOrientation = UIOrientation.Portrait;
PlayerSettings.runInBackground = true;
EditorSettings.defaultBehaviorMode = EditorBehaviorMode.Mode2D;
}
///
/// 자동 플레이 실측(GUI 에디터 필요 · -batchmode 없이):
/// Unity.exe -projectPath <proj> -executeMethod TKS.EditorTools.ProjectSetup.AutoPlayCapture -autoplayDir <dir> [-autoplayTurns N]
///
public static void AutoPlayCapture()
{
string dir = GetArg("-autoplayDir");
if (string.IsNullOrEmpty(dir)) dir = Path.Combine(Directory.GetCurrentDirectory(), "Logs", "autoplay");
int turns;
if (!int.TryParse(GetArg("-autoplayTurns"), out turns)) turns = 3;
if (!File.Exists(ScenePath)) Build();
EditorSceneManager.OpenScene(ScenePath, OpenSceneMode.Single);
SessionState.SetString("TKS_AUTOPLAY_DIR", dir);
SessionState.SetInt("TKS_AUTOPLAY_TURNS", turns);
Debug.Log("[TKS] AutoPlay 시작 → " + dir + " · turns=" + turns);
EditorApplication.EnterPlaymode();
}
static string GetArg(string name)
{
var args = System.Environment.GetCommandLineArgs();
for (int i = 0; i < args.Length - 1; i++)
{
if (args[i] == name) return args[i + 1];
}
return null;
}
}
}