Files
Colosseum/Assets/_Game/Scripts/Abnormalities/AbnormalityData.cs
dal4segno 0889bb0f25 feat: 드로그 집행 개시 패턴 및 낙인 디버프 추가
- 드로그 시그니처 패턴 역할과 집행 개시 패턴 데이터를 추가하고 BT 브랜치에 연결
- 시그니처 차단 성공과 실패 흐름을 BossCombatBehaviorContext에 구현하고 authoring 그래프를 재구성
- 집행자의 낙인 이상상태를 추가하고 받는 피해 배율 증가가 플레이어 대미지 계산에 반영되도록 정리
- 집행 실패 시 광역 피해, 넉백, 다운, 낙인 부여 설정을 드로그 프리팹에 연결
- 성공 경로 검증 중 확인된 보스 Hit 트리거 오류를 방어 로직으로 수정
- Unity 플레이 검증으로 집행 개시 실패와 성공 분기를 모두 확인하고 설계값은 원복
2026-03-23 18:14:18 +09:00

113 lines
3.5 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using Colosseum.Stats;
namespace Colosseum.Abnormalities
{
/// <summary>
/// 제어 효과 타입
/// </summary>
public enum ControlType
{
None, // 제어 효과 없음
Stun, // 기절 (이동, 스킬 사용 불가)
Silence, // 침묵 (스킬 사용 불가)
Slow, // 둔화 (이동 속도 감소)
Invincible // 무적 (대미지 무시)
}
/// <summary>
/// 스탯 수정자 엔트리
/// </summary>
[Serializable]
public class AbnormalityStatModifier
{
[Tooltip("수정할 스탯 타입")]
public StatType statType;
[Tooltip("수정값")]
public float value;
[Tooltip("수정 타입 (Flat: 고정값, PercentAdd: 퍼센트 합산, PercentMult: 퍼센트 곱셈)")]
public StatModType modType;
public AbnormalityStatModifier() { }
public AbnormalityStatModifier(StatType statType, float value, StatModType modType)
{
this.statType = statType;
this.value = value;
this.modType = modType;
}
}
/// <summary>
/// 이상 상태 정의 ScriptableObject
/// 버프/디버프의 데이터를 정의합니다.
/// </summary>
[CreateAssetMenu(fileName = "AbnormalityData", menuName = "Colosseum/Abnormalities/Abnormality")]
public class AbnormalityData : ScriptableObject
{
[Header("기본 정보")]
[Tooltip("이상 상태 이름")]
public string abnormalityName = "Abnormality";
[Tooltip("아이콘")]
public Sprite icon;
[Tooltip("지속 시간 (초, 0 이하면 영구)")]
public float duration = 5f;
[Tooltip("효과 레벨 (중복 처리용, 높으면 우선)")]
public int level = 1;
[Tooltip("디버프 여부")]
public bool isDebuff = false;
[Header("스탯 수정자")]
[Tooltip("스탯에 적용할 수정자 목록")]
public List<AbnormalityStatModifier> statModifiers = new List<AbnormalityStatModifier>();
[Header("주기적 효과 (DoT/HoT)")]
[Tooltip("주기적 효과 간격 (초, 0이면 비활성)")]
public float periodicInterval = 0f;
[Tooltip("주기적 효과값 (양수=힐, 음수=데미지)")]
public float periodicValue = 0f;
[Header("제어 효과 (CC)")]
[Tooltip("제어 효과 타입")]
public ControlType controlType = ControlType.None;
[Tooltip("둔화 배율 (Slow일 때, 0.5 = 50% 감소)")]
[Range(0f, 1f)]
public float slowMultiplier = 0.5f;
[Header("피해 배율")]
[Tooltip("이상 상태가 적용된 동안 받는 피해 배율 (1 = 기본, 1.1 = 10% 증가)")]
[Min(0f)]
public float incomingDamageMultiplier = 1f;
/// <summary>
/// 영구 효과인지 확인
/// </summary>
public bool IsPermanent => duration <= 0f;
/// <summary>
/// 주기적 효과가 있는지 확인
/// </summary>
public bool HasPeriodicEffect => periodicInterval > 0f && periodicValue != 0f;
/// <summary>
/// 제어 효과가 있는지 확인
/// </summary>
public bool HasControlEffect => controlType != ControlType.None;
/// <summary>
/// 받는 피해 배율 변경 여부
/// </summary>
public bool HasIncomingDamageModifier => !Mathf.Approximately(incomingDamageMultiplier, 1f);
}
}