134 lines
5.3 KiB
C#
134 lines
5.3 KiB
C#
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEditor.SceneManagement;
|
|
using UnityEngine;
|
|
|
|
namespace TKS.EditorTools
|
|
{
|
|
/// <summary>
|
|
/// 프로젝트 자동 구성. 메뉴 TKS/Setup Project 또는
|
|
/// CLI: Unity.exe -batchmode -nographics -projectPath <proj> -executeMethod TKS.EditorTools.ProjectSetup.Build -quit
|
|
/// </summary>
|
|
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 기본값 재시드");
|
|
}
|
|
|
|
/// <summary>CLI 용: 기본값 재시드 + 씬·설정 재생성(기존 자산 수치를 덮어쓴다).</summary>
|
|
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<BalanceConfig>(ConfigPath);
|
|
bool created = false;
|
|
if (cfg == null)
|
|
{
|
|
cfg = ScriptableObject.CreateInstance<BalanceConfig>();
|
|
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<Camera>();
|
|
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<AudioListener>();
|
|
|
|
var bootGo = new GameObject("GameBootstrap");
|
|
var boot = bootGo.AddComponent<GameBootstrap>();
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 자동 플레이 실측(GUI 에디터 필요 · -batchmode 없이):
|
|
/// Unity.exe -projectPath <proj> -executeMethod TKS.EditorTools.ProjectSetup.AutoPlayCapture -autoplayDir <dir> [-autoplayTurns N]
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
}
|