# 睡眠系统文档

## 概述

睡眠系统实现了基于真实时间的自动睡眠机制，让宠物在特定时段自动进入睡眠状态。睡眠时寠物处于类似"暂停"的状态，时间和年龄继续增长，但属性衰减大幅降低。

## 睡眠时段配置

睡眠时段在 `data/pet-species.js` 的 `baseStats.sleepSchedule` 中配置：

### 夜间睡眠 (Night Sleep)
- **时间**: 21:30 - 08:00
- **自动睡眠**: 是
- **唤醒后随机再睡机率**: 30%

### 午休 (Noon Nap)
- **时间**: 12:00 - 13:00
- **自动睡眠**: 是
- **唤醒后随机再睡机率**: 30%

## 配置结构

```javascript
sleepSchedule: {
  nightSleep: {
    startHour: 21,        // 开始小时
    startMinute: 30,      // 开始分钟
    endHour: 8,           // 结束小时
    endMinute: 0,         // 结束分钟
    autoSleep: true,      // 是否自动进入睡眠
    randomWakeChance: 0.3 // 唤醒后随机再睡的机率 (0-1)
  },
  noonNap: {
    startHour: 12,
    startMinute: 0,
    endHour: 13,
    endMinute: 0,
    autoSleep: true,
    randomWakeChance: 0.3
  }
}
```

## 睡眠机制

### 1. 自动进入睡眠
- 每个 tick (3秒) 检查当前时间
- 如果在睡眠时段且宠物未睡觉，自动进入睡眠
- 控制台显示：`😴 夜間睡眠時間，寵物自動進入睡眠`

### 2. 自动醒来
- 当睡眠时段结束时，自动睡眠的宠物会自动醒来
- 控制台显示：`⏰ 睡眠時間結束，寵物自動醒來`

### 3. 手动唤醒 + 随机再睡
- 在睡眠时段手动唤醒宠物时：
  - 有 30% 机率宠物会打个哈欠又睡着
  - 控制台显示：`寵物醒來後打了個哈欠，在夜間時段又睡著了...`
  - 有 70% 机率成功唤醒

### 4. 手动睡眠
- 在非睡眠时段，玩家可以手动让宠物睡觉
- 手动睡眠不受时段限制

## 睡眠时的状态

### 属性衰减
- **饥饿衰减**: 降低到 10%
- **快乐衰减**: 降低到 10%
- **便便**: 不会产生新便便
- **年龄**: 继续增长

### 互动限制
- ❌ 不能餵食
- ❌ 不能玩耍
- ❌ 不能治療
- ✅ 可以清理便便
- ✅ 可以唤醒

### 系统暂停
- **事件系统**: 睡眠时不会触发任何随机事件
- **战斗系统**: 睡眠时无法进行战斗

## 实现细节

### 核心方法

#### `isInSleepTime()`
检查当前时间是否在睡眠时段内，返回 `'nightSleep'`、`'noonNap'` 或 `null`。

#### `getSleepPeriod(periodName)`
获取指定睡眠时段的配置。

#### `toggleSleep()`
切换睡眠状态，包含随机再睡逻辑。

### 状态标记

- `isSleeping`: 是否在睡眠中
- `_autoSlept`: 是否为自动睡眠（内部使用，用于区分自动/手动睡眠）

## 游戏体验

睡眠系统提供了以下游戏体验：

1. **真实感**: 宠物遵循自然的作息时间
2. **保护机制**: 夜间和午休时宠物自动进入低消耗模式
3. **互动性**: 玩家可以尝试唤醒宠物，但有机率失败
4. **平衡性**: 睡眠时不会完全暂停，只是大幅降低消耗

## 调整建议

可以通过修改配置来调整睡眠系统：

- **延长/缩短睡眠时段**: 修改 `startHour/endHour`
- **调整唤醒难度**: 修改 `randomWakeChance` (0 = 总是能唤醒, 1 = 总是失败)
- **添加新的睡眠时段**: 在 `sleepSchedule` 中添加新配置
- **完全禁用自动睡眠**: 设置 `autoSleep: false`
