# Jill’s Room · After Hours

当前 Jill's Room 网站的完整独立工程。原生 JavaScript ES Modules + Three.js 0.169.0，无 React/Vue，无 CDN 或云端运行依赖。Three.js 和 addons 随仓库保存于 `public/vendor/`，许可见其中的 LICENSE。

## 本地启动

安装 Node.js 18 或更新版本，在本目录运行：

```sh
npm run dev
```

打开 <http://127.0.0.1:4173> 。无 npm 依赖，无须先执行 npm install。不要直接双击 index.html，ES 模块需要 HTTP 服务。

```sh
npm run check              # 检查资源完整性和源码语法
npm run build              # 将当前源码和资源复制为独立静态网站 dist/
npm run preview            # 从 dist/ 启动，先停止 dev 服务
npm run dev -- --port 4174 # 自定义端口
```

构建工具是随仓库提供的 Node.js 静态构建脚本，不压缩、不打包改写场景。dist/ 可部署到普通静态服务器；链接均为站内相对路径。开发与构建使用同一套源码。

## 文件结构

- `index.html`：页面入口、UI DOM 和 Three.js import map。
- `src/room.js`：Three.js 启动入口、场景交互、灯光状态。
- `src/scene-layout.js`：房间、家具、灯光与门窗等模型构建。
- `src/room-controls.js`：相机旋转、平移、缩放和重置。
- `src/poster-system.js`、`src/posters.config.js`：海报编辑、素材与默认布局。
- `src/characters.js`：Jill Sprite 动画与角色接口。
- `src/room-cat.js`：当前 Fore/黑猫的程序化模型、驻留点和动作。当前版本没有独立 Fore 图片或外部模型文件。
- `src/desktop.js`、`src/dorothy.js`、`src/city-animation.js`：窗口、对话、Dorothy 和动态城市。
- `src/music.js`、`src/music-tracks.js`：完整本地音乐播放逻辑和 13 首曲目。
- `src/crt.js`、`src/cel-style.js`：Shader、CRT 与卡通渲染。
- `src/*.css`：当前 UI、背景和响应式样式，保留原来的加载顺序。
- `public/assets/home/`：房间参考纹理、海报、电视画面。
- `public/assets/characters/`：Jill 三方向 idle 图和 Dorothy 图集。
- `public/assets/ui/`：城市/UI 图、涂鸦、封面和现有 Phone 图。
- `public/assets/audio/`：13 首 MP3。
- `public/vendor/`：Three.js、addons、MIT 许可证。
- `scripts/`：本地 HTTP 服务、静态构建、资源校验清单。

## 当前功能

左键拖动旋转、中键平移、滚轮缩放、RESET VIEW；海报拖动与缩放；家具和灯光交互；向外开门并自动关闭；Jill idle 与点击对话；窗口拖动/最小化/Dock；开放式 Phone；音乐选曲、播放、进度、音量、随机与循环；城市雨丝、灯光、时钟；单实例 Dorothy 串门；黑猫驻留和动作；CRT 电视画面。

海报位置保存在当前浏览器 localStorage，新地址会使用自己的存储。音乐自动播放可能被浏览器拦截，首次点击后恢复，这是浏览器策略。

## 资源完整性和迁移范围

45 个图片/音频资源已逐文件复制，保留原始字节；Three.js 文件也完整包含。无外部下载资源、远程字体或旧工程绝对路径。字体使用系统字体栈（Courier New / Microsoft YaHei 等）。场景模型、黑猫和着色器主要由源码生成，不需要额外 GLB/FBX。

未加入 Club.fbx / Club.glb 或第二场景。未包含旧的临时构建压缩包、云端发布凭据、浏览器截图和历史修补脚本，它们不是当前运行工程的依赖。未迁移浏览器个人 localStorage。

本项目为非官方粉丝作品。原作角色、图像与音乐权利归相应权利人。
