refactor(sleep): 重构睡眠系统以实现睡后失眠机制

重构了原有的睡眠管理状态机,将睡前失眠逻辑调整为更真实的“睡后失眠”模式。现在系统会在角色入睡一段时间后,根据当前的睡眠压力判断是否触发失眠状态。

主要变更:
- **状态机调整**: 移除了入睡前的失眠检查,改为在进入`SLEEPING`状态后,延迟一段时间再根据睡眠压力触发`INSOMNIA`状态。
- **通知系统重构**: `NotificationSender`被简化,现在通过触发主动思考事件 (`goodnight`, `post_sleep_insomnia`) 来发送通知,而不是直接调用生成器API。
- **配置更新**: 将固定的失眠持续时间改为一个随机范围,并增加了触发失眠判定的延迟时间配置。
- **代码解耦**: `EnergyManager`现在直接依赖新的`SleepManager`,不再通过旧的`schedule_manager`。
This commit is contained in:
minecraft1024a
2025-09-06 13:34:53 +08:00
committed by Windpicker-owo
parent 02d8e7e5fc
commit 55819b85a4
6 changed files with 127 additions and 142 deletions

View File

@@ -625,7 +625,12 @@ class SleepSystemConfig(ValidatedConfigBase):
# --- 失眠机制相关参数 ---
enable_insomnia_system: bool = Field(default=True, description="是否启用失眠系统")
insomnia_duration_minutes: int = Field(default=30, ge=1, description="单次失眠状态的持续时间(分钟)")
insomnia_trigger_delay_minutes: List[int] = Field(
default_factory=lambda:[30, 60], description="入睡后触发失眠判定的延迟时间范围(分钟)"
)
insomnia_duration_minutes: List[int] = Field(
default_factory=lambda:[15, 45], description="单次失眠状态的持续时间范围(分钟)"
)
sleep_pressure_threshold: float = Field(default=30.0, description="触发“压力不足型失眠”的睡眠压力阈值")
deep_sleep_threshold: float = Field(default=80.0, description="进入“深度睡眠”的睡眠压力阈值")
insomnia_chance_low_pressure: float = Field(default=0.6, ge=0.0, le=1.0, description="压力不足时的失眠基础概率")