Skip to content

Repository files navigation

Fish Pet 🐟 v1.5.0

一个基于 Electron + Vite + Vue 3 制作的趣味桌面摸鱼宠物。它会陪伴你度过忙碌的工作时光,实时显示下班倒计时,并在下班时刻准时提醒你"快跑"!


✨ 功能特性

🕒 核心功能

  • 下班倒计时:实时显示距离下班的时间,精准到分钟。
  • 持久化配置:自定义下班时间,重启应用后自动恢复设置(含鱼的位置记忆)。
  • 喝水提醒:每 45 分钟温馨提醒喝水,点击确认后重新计时。💧
  • 开机自启动:可选随系统登录自动启动。
  • 系统托盘:支持最小化到托盘,右键菜单快速设置与退出,附带小鱼图标。
  • 全局鼠标追踪:基于 uiohook-napi 的全局鼠标钩子(30Hz 节流),驱动鱼眼跟随与避鼠行为;可在托盘菜单开关。支持 Windows 与 Linux X11,Wayland 下自动降级为窗口内追踪。

🐟 智能心情系统

小鱼会根据剩余工作时间变换状态:

  • 🌊 平静 (蓝色):剩余时间 > 2小时 —— "安心摸鱼,老板没看我。"
  • 🌟 开心 (黄色):剩余时间 < 2小时 —— "胜利在望,准备起飞!"
  • 💦 紧张 (粉色):剩余时间 < 30分钟 —— "流汗冲刺,马上解放!"
  • 😭 悲伤 (紫色):加班进行时 —— "别卷了,快跑吧!"

🖱️ 深度交互体验

  • 自主漫游:小鱼在全屏游乐场中连续游动,偶尔停下发呆;游动方向自动翻转朝向。
  • 避鼠本能:鼠标靠近时小鱼会悄悄游走;快速挥向它则会触发受惊逃窜。🐟💨
  • 眼神随动:小鱼的眼睛会实时追踪你的鼠标位置。
  • 触碰反馈:鼠标悬停触发加速游动与金色光效。
  • 随机自言自语:每隔一段时间冒出有趣的吐槽。
  • 受惊模式:鼠标快速冲到鱼身边会让它变红、剧烈抖动并逃开一段距离。
  • 自动睡眠:静置 3 分钟后,小鱼会进入 Zzz 睡眠状态。
  • 连击彩蛋:3 秒内点击 5 次,解锁全屏彩虹特效与皇冠装饰!👑

🛠️ 技术栈

  • 框架: Electron 31 + Vue 3
  • 构建工具: electron-vite
  • 语言: TypeScript
  • 测试: Vitest(fake timers,65 个单元测试)
  • 打包: electron-builder

📂 项目结构

src/
├── main/          # Electron 主进程
│   ├── index.ts   # 游乐场窗口、托盘接线、IPC 注册
│   ├── config.ts  # configStore:配置唯一属主(去抖持久化)
│   ├── menu.ts    # 菜单模块:tray / 右键菜单 / 自启动序列
│   └── globalMouse.ts # 全局鼠标钩子模块(uiohook-napi,30Hz 节流)
├── preload/       # 预加载脚本 (安全的 API 桥接)
├── shared/        # 跨进程共享类型 (Config / window.api 契约)
└── renderer/      # Vue 渲染进程
    └── src/
        ├── App.vue
        ├── components/
        │   └── DesktopPet.vue   # 宠物状态组合与模板
        ├── composables/
        │   ├── PetScheduler.ts  # 定时器调度模块(after/every/cancel)
        │   ├── usePetScheduler.ts
        │   └── useDrag.ts       # 拖拽模块(位移、点击判定)
        └── lib/
            ├── petTime.ts       # 时间推导模块(心情阈值与文案)
            ├── fishPosition.ts  # 鱼位置纯逻辑(初始落点、屏幕收敛)
            └── fishMotion.ts    # 运动模块:漫游/避鼠/逃窜转向力(MOTION 参数)

🚀 快速开始

1. 安装依赖

npm install

2. 启动开发环境

npm run dev

3. 运行测试

npm test

4. 构建与打包

# 构建并打包成安装包 (Windows .exe / Linux)
npm run dist

🎮 使用说明

  1. 移动:左键长按小鱼可拖拽至屏幕任意位置。
  2. 设置:右键点击小鱼或托盘图标,选择“设置下班时间”。
  3. 互动:尝试点击、快速晃动鼠标或静置屏幕,探索更多动画细节。

📋 更新日志

v1.5.0

  • 全屏游乐场窗口:320×200 小窗改为覆盖主屏的透明置顶游乐场窗口,鱼变为窗口内可拖拽的定位元素,活动范围扩展至全屏
  • 自主漫游与避鼠:定时小幅漂移升级为 ~30Hz 转向力积分(漫游 + 边缘软斥力 + 鼠标回避场,参数集中在 MOTION);鼠标进入回避半径鱼会悄悄游走,快速贴近触发受惊逃窜,游动方向自动翻转朝向
  • 全局鼠标追踪:基于 uiohook-napi 的全局鼠标钩子(30Hz 节流),鱼眼在全屏范围注视鼠标;托盘菜单可开关,支持 Windows 与 Linux X11,Wayland 下自动降级
  • 动态点击穿透:默认全屏穿透,光标位于鱼或交互 UI 上时经 elementFromPoint 命中检测临时恢复交互
  • 系统托盘图标:补齐托盘小鱼图标(scripts/generate-tray-icon.mjs 生成,PNG 内联进主进程 bundle)
  • 位置持久化改为"停靠点"语义:停歇、逃窜结束、拖拽结束、退出时落盘

v1.4.0

  • 架构重构(行为零变化):
    • 全部定时行为收归 PetScheduler 模块,修复组件卸载后定时器继续触发的隐患
    • 拖拽逻辑收归 useDrag 模块;菜单构建收归 menu 模块;时间/心情推导收归 petTime 模块
    • 配置收归 configStore 唯一属主:写盘去抖、退出时兜底落盘、坏配置自动回退默认值
    • Config 与 window.api 类型统一至 src/shared/,三进程共享单一契约
  • 测试基建:引入 Vitest(29 个单元测试),push / PR 时由 GitHub Actions 自动运行

v1.3.0

  • 新增喝水提醒系统与交互视觉
  • 支持开机自启动
  • 睡眠 / 受惊模式、连击系统与粒子特效

📄 开源协议

GNU General Public License v3.0 or later(GPL-3.0-or-later)

Copyright (C) 2026 jimmyshe

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages