using System; using BumpCombat.Progression; using UnityEngine; namespace BumpCombat.Constants { [Serializable] public struct MissionTuning { [Tooltip("미션 목록에 표시할 이름")] public string DisplayName; [Tooltip("목표가 포함된 조건 설명. {0}은 목표 수, {1}은 측정 시간창입니다.")] public string ConditionFormat; [Min(1)] public int Target; [Min(0)] public int ExperienceReward; public bool RequiresGuardUnlock; public bool RequiresChargeUnlock; public MissionTuning( string displayName, string conditionFormat, int target, int experienceReward, bool requiresGuardUnlock = false, bool requiresChargeUnlock = false) { DisplayName = displayName; ConditionFormat = conditionFormat; Target = target; ExperienceReward = experienceReward; RequiresGuardUnlock = requiresGuardUnlock; RequiresChargeUnlock = requiresChargeUnlock; } } [CreateAssetMenu(menuName = "BumpCombat/Constants/Level Up")] public sealed class LevelUpConstants : ScriptableObject { [Header("경험치")] [Tooltip("레벨 1에서 다음 레벨까지 필요한 경험치"), Min(1)] public int BaseExperienceToNextLevel = 10; [Tooltip("레벨이 하나 오를 때마다 늘어나는 필요 경험치"), Min(0)] public int AdditionalExperiencePerLevel = 5; [Header("레벨업 선택")] [Tooltip("레벨업 때 표시할 모디파이어 후보 수 (UI 지원 범위: 1~3)"), Range(1, 3)] public int OptionCount = 3; [Tooltip("레벨업 후보 모디파이어 정의 에셋")] public ModifierDefinition[] ModifierDefinitions = Array.Empty(); [Header("미션")] [Tooltip("파죽지세의 측정 시간창 (전투초)"), Min(0.1f)] public float RampageWindowSeconds = 3f; [Tooltip("순서: 일반 적 처치, XP 구슬, 범핑, 아티팩트, 후방 범핑, 다중 적중, 공격 취소, 가드, 실드, 강화기, 파죽지세")] public MissionTuning[] Missions = { new("첫 소탕", "소환수가 아닌 일반 몬스터 {0}마리 처치", 100, 10), new("성장의 발판", "경험치 구슬 {0}개 실제 습득", 50, 10), new("몸으로 돌파", "실제 피해가 발생한 몸통박치기 {0}회", 60, 10), new("아티팩트 활용", "서로 다른 아티팩트 발동 {0}회에서 각각 유효 적중", 10, 10), new("등을 노려라", "서로 다른 적 {0}마리에게 후방 몸통박치기 성공", 15, 15), new("한 번에 몰아서", "아티팩트 한 번의 발동으로 서로 다른 적 {0}마리 유효 적중", 5, 15), new("빈틈 차단", "일반 적의 준비/활성 공격을 후방 몸통박치기로 실제 취소 {0}회", 8, 15), new("정확한 방어", "서로 다른 가드 발동 {0}회에서 실제 공격 차단", 3, 15, true), new("색을 맞춰라", "맞는 색 아티팩트로 실드의 남은 요구 횟수 실제 차감 {0}회", 6, 15), new("강화의 순간", "서로 다른 충전 강화기 발동 {0}회에서 각각 유효 적중", 3, 15, false, true), new("파죽지세", "연속된 {1}전투초 안에 소환수가 아닌 적 {0}마리 처치", 10, 20), }; public MissionTuning GetMission(int index, MissionTuning fallback) { return Missions != null && index >= 0 && index < Missions.Length ? Missions[index] : fallback; } } }