feat(core): SkillSystemState에 GCD 및 스킬 슬롯 추가
- globalCooldownEndMs: GCD 종료 시점 추적 - globalCooldownDuration: 1500ms 상수 정의 - equippedSkills: 장착된 스킬 슬롯 (SkillSlots) - isGlobalCooldownActive, remainingGlobalCooldown getter - startGlobalCooldown() 메서드 추가
This commit is contained in:
@@ -8,6 +8,7 @@ import 'package:asciineverdie/src/core/model/item_stats.dart';
|
||||
import 'package:asciineverdie/src/core/model/monster_grade.dart';
|
||||
import 'package:asciineverdie/src/core/model/potion.dart';
|
||||
import 'package:asciineverdie/src/core/model/skill.dart';
|
||||
import 'package:asciineverdie/src/core/model/skill_slots.dart';
|
||||
import 'package:asciineverdie/src/core/util/deterministic_random.dart';
|
||||
|
||||
/// Minimal skeletal state to mirror Progress Quest structures.
|
||||
@@ -193,14 +194,19 @@ enum DeathCause {
|
||||
|
||||
/// 스킬 시스템 상태 (Phase 3)
|
||||
///
|
||||
/// 스킬 쿨타임, 활성 버프, 게임 경과 시간 등을 관리
|
||||
/// 스킬 쿨타임, 활성 버프, 게임 경과 시간, 장착 스킬 등을 관리
|
||||
class SkillSystemState {
|
||||
const SkillSystemState({
|
||||
required this.skillStates,
|
||||
required this.activeBuffs,
|
||||
required this.elapsedMs,
|
||||
this.equippedSkills = const SkillSlots(),
|
||||
this.globalCooldownEndMs = 0,
|
||||
});
|
||||
|
||||
/// 글로벌 쿨타임 (GCD) 상수: 1500ms
|
||||
static const int globalCooldownDuration = 1500;
|
||||
|
||||
/// 스킬별 쿨타임 상태
|
||||
final List<SkillState> skillStates;
|
||||
|
||||
@@ -210,8 +216,26 @@ class SkillSystemState {
|
||||
/// 게임 진행 경과 시간 (밀리초, 스킬 쿨타임 계산용)
|
||||
final int elapsedMs;
|
||||
|
||||
factory SkillSystemState.empty() =>
|
||||
const SkillSystemState(skillStates: [], activeBuffs: [], elapsedMs: 0);
|
||||
/// 장착된 스킬 슬롯 (타입별 제한 있음)
|
||||
final SkillSlots equippedSkills;
|
||||
|
||||
/// 글로벌 쿨타임 종료 시점 (elapsedMs 기준)
|
||||
final int globalCooldownEndMs;
|
||||
|
||||
/// GCD가 활성화 중인지 확인
|
||||
bool get isGlobalCooldownActive => elapsedMs < globalCooldownEndMs;
|
||||
|
||||
/// 남은 GCD 시간 (ms)
|
||||
int get remainingGlobalCooldown =>
|
||||
isGlobalCooldownActive ? globalCooldownEndMs - elapsedMs : 0;
|
||||
|
||||
factory SkillSystemState.empty() => const SkillSystemState(
|
||||
skillStates: [],
|
||||
activeBuffs: [],
|
||||
elapsedMs: 0,
|
||||
equippedSkills: SkillSlots(),
|
||||
globalCooldownEndMs: 0,
|
||||
);
|
||||
|
||||
/// 특정 스킬 상태 가져오기
|
||||
SkillState? getSkillState(String skillId) {
|
||||
@@ -254,13 +278,22 @@ class SkillSystemState {
|
||||
List<SkillState>? skillStates,
|
||||
List<ActiveBuff>? activeBuffs,
|
||||
int? elapsedMs,
|
||||
SkillSlots? equippedSkills,
|
||||
int? globalCooldownEndMs,
|
||||
}) {
|
||||
return SkillSystemState(
|
||||
skillStates: skillStates ?? this.skillStates,
|
||||
activeBuffs: activeBuffs ?? this.activeBuffs,
|
||||
elapsedMs: elapsedMs ?? this.elapsedMs,
|
||||
equippedSkills: equippedSkills ?? this.equippedSkills,
|
||||
globalCooldownEndMs: globalCooldownEndMs ?? this.globalCooldownEndMs,
|
||||
);
|
||||
}
|
||||
|
||||
/// GCD 시작 (스킬 사용 후 호출)
|
||||
SkillSystemState startGlobalCooldown() {
|
||||
return copyWith(globalCooldownEndMs: elapsedMs + globalCooldownDuration);
|
||||
}
|
||||
}
|
||||
|
||||
/// 태스크 타입 (원본 fTask.Caption 값들에 대응)
|
||||
@@ -594,8 +627,11 @@ class Equipment {
|
||||
}
|
||||
|
||||
/// 초보자 방어구 생성 헬퍼
|
||||
static EquipmentItem _starterArmor(String name, EquipmentSlot slot,
|
||||
{required int def}) {
|
||||
static EquipmentItem _starterArmor(
|
||||
String name,
|
||||
EquipmentSlot slot, {
|
||||
required int def,
|
||||
}) {
|
||||
return EquipmentItem(
|
||||
name: name,
|
||||
slot: slot,
|
||||
|
||||
Reference in New Issue
Block a user