feat: 허수아비 계산 시뮬레이터 추가

- 빌드 입력, 룰셋, 회전 정책, 결과/리포트 모델을 포함한 데미지 계산 시뮬레이터 기반을 추가
- 단일 실행 창과 배치 전수 조사 창, 플레이어 데미지 스윕 메뉴를 추가
- DamageEffect 계산값 접근자를 열어 기존 전투 공식을 시뮬레이터에서 재사용하도록 정리
This commit is contained in:
2026-03-28 15:07:09 +09:00
parent 29cb132d5d
commit 285da31047
30 changed files with 2909 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
using UnityEngine;
using Colosseum.Passives;
namespace Colosseum.Combat.Simulation
{
/// <summary>
/// 전수 점검용 조합 생성 조건입니다.
/// </summary>
[System.Serializable]
public class SimulationCombinationSpec
{
[Header("Label")]
[SerializeField] private string batchName = "전체 조합";
[Header("Dimensions")]
[SerializeField] private bool combineSkills = true;
[SerializeField] private bool combineGems = true;
[SerializeField] private bool combinePassives = true;
[Header("Slots")]
[Tooltip("조합 생성 대상 슬롯 인덱스입니다. 0 기반입니다.")]
[SerializeField] private int[] activeSlotIndices = new[] { 0, 1, 2, 3, 4, 5 };
[SerializeField] private bool allowDuplicateSkills;
[SerializeField] private bool includeEmptyGemSet = true;
[Header("Passive")]
[SerializeField] private PassiveTreeData passiveTree;
[SerializeField] private bool includeEmptyPassiveSelection = true;
[Tooltip("0이면 포인트 허용 범위 안에서 제한 없이 생성합니다.")]
[Min(0)] [SerializeField] private int maxPassiveNodeCount = 0;
[Header("Safety")]
[Tooltip("생성할 최대 빌드 수입니다. 조합 폭발을 막기 위한 안전장치입니다.")]
[Min(1)] [SerializeField] private int maxBuildCount = 500;
public string BatchName => string.IsNullOrWhiteSpace(batchName) ? "전체 조합" : batchName.Trim();
public bool CombineSkills => combineSkills;
public bool CombineGems => combineGems;
public bool CombinePassives => combinePassives;
public int[] ActiveSlotIndices => activeSlotIndices ?? System.Array.Empty<int>();
public bool AllowDuplicateSkills => allowDuplicateSkills;
public bool IncludeEmptyGemSet => includeEmptyGemSet;
public PassiveTreeData PassiveTree => passiveTree;
public bool IncludeEmptyPassiveSelection => includeEmptyPassiveSelection;
public int MaxPassiveNodeCount => Mathf.Max(0, maxPassiveNodeCount);
public int MaxBuildCount => Mathf.Max(1, maxBuildCount);
/// <summary>
/// 조합 생성 조건을 한 번에 설정합니다.
/// </summary>
public void Configure(
string batchName,
bool combineSkills,
bool combineGems,
bool combinePassives,
int[] activeSlotIndices,
bool allowDuplicateSkills,
bool includeEmptyGemSet,
PassiveTreeData passiveTree,
bool includeEmptyPassiveSelection,
int maxPassiveNodeCount,
int maxBuildCount)
{
this.batchName = batchName ?? string.Empty;
this.combineSkills = combineSkills;
this.combineGems = combineGems;
this.combinePassives = combinePassives;
this.activeSlotIndices = activeSlotIndices ?? System.Array.Empty<int>();
this.allowDuplicateSkills = allowDuplicateSkills;
this.includeEmptyGemSet = includeEmptyGemSet;
this.passiveTree = passiveTree;
this.includeEmptyPassiveSelection = includeEmptyPassiveSelection;
this.maxPassiveNodeCount = Mathf.Max(0, maxPassiveNodeCount);
this.maxBuildCount = Mathf.Max(1, maxBuildCount);
}
}
}