frontengine 1.0.15__tar.gz → 1.0.17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {frontengine-1.0.15 → frontengine-1.0.17}/PKG-INFO +1 -1
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/pet/desktop_pet.py +100 -2
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/user_setting/user_setting_file.py +3 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/english.py +2 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/traditional_chinese.py +2 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine.egg-info/PKG-INFO +1 -1
- {frontengine-1.0.15 → frontengine-1.0.17}/pyproject.toml +1 -1
- {frontengine-1.0.15 → frontengine-1.0.17}/LICENSE +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/README.md +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/__main__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/base_widget.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/gif/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/gif/paint_gif.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/image/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/image/paint_image.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/load/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/load/load_someone_make_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/overlay_factory.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/particle/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/particle/particle_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/pet/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/scene/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/scene/extend_graphic_scene.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/scene/extend_graphic_view.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/scene/scene.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/sound_player/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/sound_player/sound_effect.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/sound_player/sound_player.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/text/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/text/draw_text.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/video/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/video/video_player.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/web/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/web/webview.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/show/window_helpers.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/system_tray/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/system_tray/extend_system_tray.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/color/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/color/global_color.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/dialog/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/dialog/choose_file_dialog.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/dialog/hotkey_settings_dialog.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/dialog/save_file_dialog.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/main_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/menu/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/menu/help_menu.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/menu/how_to_menu.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/menu/language_menu.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/menu/preset_menu.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/menu/settings_menu.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/control_center/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/control_center/control_center_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/gif/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/gif/gif_setting_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/image/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/image/image_setting_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/particle/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/particle/particle_setting_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/pet/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/pet/pet_setting_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_manager.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/base_scene_page.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/gif.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/image.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/registry.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/sound.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/text.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/video.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/web.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/sound_player/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/text/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/text/text_setting_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/utils.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/video/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/video/video_setting_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/web/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/web/web_setting_ui.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/user_setting/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/user_setting/preset_repository.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/user_setting/scene_setting.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/browser/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/browser/browser.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/critical_exit/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/critical_exit/critical_exit.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/critical_exit/win32_vk.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/exception/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/exception/exception_tags.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/exception/exceptions.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/file/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/file/open/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/file/open/open_file.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/file/save/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/file/save/save_file.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/hotkey/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/hotkey/hotkey_service.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/json/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/json/json_file.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/json/json_repository.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/json_format/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/json_format/json_process.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/logging/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/logging/loggin_instance.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/france.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/germany.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/italy.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/language_wrapper.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/russian.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/simplified_chinese.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/preset_schedule/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/preset_schedule/preset_schedule_service.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/redirect_manager/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/smart_pause/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/smart_pause/smart_pause_service.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/theme_schedule/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/theme_schedule/theme_schedule_service.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/web_url.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/worker/__init__.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine/worker/qthread_worker.py +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine.egg-info/SOURCES.txt +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine.egg-info/dependency_links.txt +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine.egg-info/entry_points.txt +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine.egg-info/requires.txt +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/frontengine.egg-info/top_level.txt +0 -0
- {frontengine-1.0.15 → frontengine-1.0.17}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frontengine
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.17
|
|
4
4
|
Summary: FrontEngine is use-define frontview or only use like screen saver
|
|
5
5
|
Author-email: JE-Chen <jechenmailman@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/FrontEngine
|
|
@@ -144,6 +144,30 @@ def windows_platforms(exclude_hwnds=()) -> list:
|
|
|
144
144
|
return []
|
|
145
145
|
|
|
146
146
|
|
|
147
|
+
def idle_seconds():
|
|
148
|
+
"""
|
|
149
|
+
回傳使用者未操作的秒數;無法取得時回傳 None。僅 Windows 實作。
|
|
150
|
+
Seconds since the last user input, or None when unavailable (Windows only).
|
|
151
|
+
"""
|
|
152
|
+
if sys.platform != "win32":
|
|
153
|
+
return None
|
|
154
|
+
try:
|
|
155
|
+
import ctypes
|
|
156
|
+
|
|
157
|
+
class _LASTINPUTINFO(ctypes.Structure):
|
|
158
|
+
_fields_ = [("cbSize", ctypes.c_uint), ("dwTime", ctypes.c_uint)]
|
|
159
|
+
|
|
160
|
+
info = _LASTINPUTINFO()
|
|
161
|
+
info.cbSize = ctypes.sizeof(info)
|
|
162
|
+
if not ctypes.windll.user32.GetLastInputInfo(ctypes.byref(info)):
|
|
163
|
+
return None
|
|
164
|
+
elapsed_ms = ctypes.windll.kernel32.GetTickCount() - info.dwTime
|
|
165
|
+
return max(0.0, elapsed_ms / 1000.0)
|
|
166
|
+
except Exception as error: # pragma: no cover - Win32 boundary
|
|
167
|
+
front_engine_logger.warning(f"[idle_seconds] error: {error!r}")
|
|
168
|
+
return None
|
|
169
|
+
|
|
170
|
+
|
|
147
171
|
def pop_due_reminders(now, reminders):
|
|
148
172
|
"""
|
|
149
173
|
依 now 分出已到期與未到期的提醒。reminders 為 (due_datetime, text) 清單。
|
|
@@ -266,6 +290,34 @@ class PetMood:
|
|
|
266
290
|
return self.CONTENT
|
|
267
291
|
|
|
268
292
|
|
|
293
|
+
class PetGrowth:
|
|
294
|
+
"""
|
|
295
|
+
親密度累積與等級:互動會累加親密度,跨過門檻即升級。
|
|
296
|
+
Affection points accrue from interactions; crossing a threshold levels up.
|
|
297
|
+
"""
|
|
298
|
+
|
|
299
|
+
THRESHOLDS = (0, 100, 250, 500, 1000, 2000)
|
|
300
|
+
|
|
301
|
+
def __init__(self, affection: int = 0) -> None:
|
|
302
|
+
self.affection = self._clamp(affection)
|
|
303
|
+
|
|
304
|
+
@staticmethod
|
|
305
|
+
def _clamp(value) -> int:
|
|
306
|
+
try:
|
|
307
|
+
return max(0, int(value))
|
|
308
|
+
except (TypeError, ValueError):
|
|
309
|
+
return 0
|
|
310
|
+
|
|
311
|
+
def level(self) -> int:
|
|
312
|
+
return max(1, sum(1 for threshold in self.THRESHOLDS if self.affection >= threshold))
|
|
313
|
+
|
|
314
|
+
def add(self, amount: int) -> bool:
|
|
315
|
+
"""累加親密度;若因此升級回傳 True。"""
|
|
316
|
+
before = self.level()
|
|
317
|
+
self.affection = self._clamp(self.affection + int(amount))
|
|
318
|
+
return self.level() > before
|
|
319
|
+
|
|
320
|
+
|
|
269
321
|
class PetHunger:
|
|
270
322
|
"""
|
|
271
323
|
寵物飽足值 0~100:餵食上升、隨時間下降;level() 回傳 full/ok/hungry。
|
|
@@ -646,6 +698,12 @@ class PetMotion:
|
|
|
646
698
|
self._idle_count = 0
|
|
647
699
|
self._new_state(force_walk=True)
|
|
648
700
|
|
|
701
|
+
def sleep(self) -> None:
|
|
702
|
+
"""讓寵物進入睡眠(使用者閒置時呼叫)/ Put the pet to sleep."""
|
|
703
|
+
self.state = STATE_SLEEP
|
|
704
|
+
self._state_ticks = self._rng.randint(300, 600)
|
|
705
|
+
self.follow_target_x = None
|
|
706
|
+
|
|
649
707
|
# --- free wander ---
|
|
650
708
|
def _step_wander(self, left, top, right, bottom) -> Tuple[int, int]:
|
|
651
709
|
if abs(self.vy) < 1e-9:
|
|
@@ -738,6 +796,7 @@ class DesktopPetWidget(BaseWidget):
|
|
|
738
796
|
self._mood = PetMood(user_setting_dict.get("pet_mood", 60))
|
|
739
797
|
self._hunger = PetHunger(user_setting_dict.get("pet_hunger", 70))
|
|
740
798
|
self._hunger_warned = False
|
|
799
|
+
self._growth = PetGrowth(user_setting_dict.get("pet_affection", 0))
|
|
741
800
|
self._messages = self._load_messages()
|
|
742
801
|
self._sound: Optional[QSoundEffect] = None
|
|
743
802
|
self._init_sound(sound_path)
|
|
@@ -750,6 +809,9 @@ class DesktopPetWidget(BaseWidget):
|
|
|
750
809
|
# 電量提醒 / Low-battery reaction
|
|
751
810
|
self._battery_provider = read_battery
|
|
752
811
|
self._battery_warned = False
|
|
812
|
+
# 閒置反應 / Idle reaction
|
|
813
|
+
self._idle_provider = idle_seconds
|
|
814
|
+
self._idle_reacted = False
|
|
753
815
|
# 提醒事項 / Reminders
|
|
754
816
|
self._now_provider = datetime.now
|
|
755
817
|
self._reminders: list = []
|
|
@@ -816,6 +878,7 @@ class DesktopPetWidget(BaseWidget):
|
|
|
816
878
|
self.motion.clear_follow()
|
|
817
879
|
if self._talk and not self._peer_greeted:
|
|
818
880
|
self._peer_greeted = True
|
|
881
|
+
self._gain_affection(3)
|
|
819
882
|
self.motion.vx = abs(self.motion.vx) if peer[0] >= my_center[0] else -abs(self.motion.vx)
|
|
820
883
|
pool = self._messages.get("meet") or []
|
|
821
884
|
if pool:
|
|
@@ -907,9 +970,20 @@ class DesktopPetWidget(BaseWidget):
|
|
|
907
970
|
"battery": lines("pet_chatter_battery", "Battery's low - plug me in?|Low power!|Find a charger?"),
|
|
908
971
|
"hungry": lines("pet_chatter_hungry", "I'm hungry...|Got a snack?|Feed me?"),
|
|
909
972
|
"fed": lines("pet_chatter_fed", "Yum!|Thank you!|Delicious!"),
|
|
973
|
+
"away": lines("pet_chatter_away", "Still there?|I'll nap till you're back~|Zzz..."),
|
|
974
|
+
"levelup": lines("pet_chatter_levelup", "Level up!|I'm growing!|We're getting closer!"),
|
|
910
975
|
"any": lines("pet_chatter_any", "Hi there!|(^_^)|Keep going!"),
|
|
911
976
|
}
|
|
912
977
|
|
|
978
|
+
def _gain_affection(self, amount: int) -> None:
|
|
979
|
+
"""互動累加親密度;升級時慶祝一下並保存。"""
|
|
980
|
+
leveled = self._growth.add(amount)
|
|
981
|
+
user_setting_dict["pet_affection"] = self._growth.affection
|
|
982
|
+
if leveled and self._talk:
|
|
983
|
+
pool = self._messages.get("levelup") or []
|
|
984
|
+
if pool:
|
|
985
|
+
self.say(pool[self._chatter_rng.randrange(len(pool))])
|
|
986
|
+
|
|
913
987
|
def _persist_mood(self) -> None:
|
|
914
988
|
user_setting_dict["pet_mood"] = self._mood.value
|
|
915
989
|
|
|
@@ -973,11 +1047,33 @@ class DesktopPetWidget(BaseWidget):
|
|
|
973
1047
|
self._mood.decay() # a little neglect over time
|
|
974
1048
|
self._hunger.decay()
|
|
975
1049
|
self._persist_mood()
|
|
976
|
-
# priority: low battery,
|
|
977
|
-
if not self._warn_battery() and not self._warn_hungry():
|
|
1050
|
+
# priority: user idle (nap), low battery, hunger, otherwise normal chatter
|
|
1051
|
+
if not self._check_idle() and not self._warn_battery() and not self._warn_hungry():
|
|
978
1052
|
self.say()
|
|
979
1053
|
self._schedule_chatter()
|
|
980
1054
|
|
|
1055
|
+
IDLE_THRESHOLD = 120.0
|
|
1056
|
+
|
|
1057
|
+
def _check_idle(self) -> bool:
|
|
1058
|
+
"""使用者閒置久了打盹並說一句;回來後醒。回傳是否有反應(抑制一般閒聊)。"""
|
|
1059
|
+
seconds = self._idle_provider()
|
|
1060
|
+
if seconds is None:
|
|
1061
|
+
return False
|
|
1062
|
+
if seconds >= self.IDLE_THRESHOLD:
|
|
1063
|
+
if not self._idle_reacted:
|
|
1064
|
+
self._idle_reacted = True
|
|
1065
|
+
self.motion.sleep()
|
|
1066
|
+
if self._talk:
|
|
1067
|
+
pool = self._messages.get("away") or []
|
|
1068
|
+
if pool:
|
|
1069
|
+
self.say(pool[self._chatter_rng.randrange(len(pool))])
|
|
1070
|
+
return True
|
|
1071
|
+
return False
|
|
1072
|
+
if seconds < 5.0 and self._idle_reacted:
|
|
1073
|
+
self._idle_reacted = False
|
|
1074
|
+
self.motion.wake()
|
|
1075
|
+
return False
|
|
1076
|
+
|
|
981
1077
|
def _persist_hunger(self) -> None:
|
|
982
1078
|
user_setting_dict["pet_hunger"] = self._hunger.value
|
|
983
1079
|
|
|
@@ -987,6 +1083,7 @@ class DesktopPetWidget(BaseWidget):
|
|
|
987
1083
|
self._mood.pet()
|
|
988
1084
|
self._persist_hunger()
|
|
989
1085
|
self._persist_mood()
|
|
1086
|
+
self._gain_affection(5)
|
|
990
1087
|
pool = self._messages.get("fed") or []
|
|
991
1088
|
if pool:
|
|
992
1089
|
self.say(pool[self._chatter_rng.randrange(len(pool))])
|
|
@@ -1072,6 +1169,7 @@ class DesktopPetWidget(BaseWidget):
|
|
|
1072
1169
|
self.motion.clear_follow()
|
|
1073
1170
|
self._mood.pet() # petting cheers it up
|
|
1074
1171
|
self._persist_mood()
|
|
1172
|
+
self._gain_affection(2)
|
|
1075
1173
|
self._play_sound()
|
|
1076
1174
|
self._set_active_sprite(STATE_DRAG)
|
|
1077
1175
|
super().mousePressEvent(event)
|
|
@@ -228,6 +228,8 @@ english_word_dict = {
|
|
|
228
228
|
"pet_feed": "Feed",
|
|
229
229
|
"pet_chatter_hungry": "I'm hungry...|Got a snack?|Feed me, please?|My tummy's rumbling~",
|
|
230
230
|
"pet_chatter_fed": "Yum!|Thank you!|Delicious!|Nom nom (^o^)",
|
|
231
|
+
"pet_chatter_away": "Still there?|I'll nap till you're back~|Zzz...|Take your time!",
|
|
232
|
+
"pet_chatter_levelup": "Level up!|I'm growing!|We're getting closer!|Yay, thank you!",
|
|
231
233
|
"pet_set_reminder": "Set reminder...",
|
|
232
234
|
"pet_reminder_prompt": "Remind me to:",
|
|
233
235
|
"pet_reminder_minutes": "In how many minutes?",
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/traditional_chinese.py
RENAMED
|
@@ -229,6 +229,8 @@ traditional_chinese_word_dict = {
|
|
|
229
229
|
"pet_feed": "餵食",
|
|
230
230
|
"pet_chatter_hungry": "我餓了…|有點心嗎?|餵餵我好嗎?|肚子咕咕叫~",
|
|
231
231
|
"pet_chatter_fed": "好吃!|謝謝你!|真美味!|嗯嗯 (^o^)",
|
|
232
|
+
"pet_chatter_away": "還在嗎?|我先打個盹等你回來~|Zzz…|慢慢來沒關係!",
|
|
233
|
+
"pet_chatter_levelup": "升級了!|我長大了!|我們更親近了!|耶,謝謝你!",
|
|
232
234
|
"pet_set_reminder": "設定提醒...",
|
|
233
235
|
"pet_reminder_prompt": "提醒我:",
|
|
234
236
|
"pet_reminder_minutes": "幾分鐘後?",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: frontengine
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.17
|
|
4
4
|
Summary: FrontEngine is use-define frontview or only use like screen saver
|
|
5
5
|
Author-email: JE-Chen <jechenmailman@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/Intergration-Automation-Testing/FrontEngine
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/control_center/control_center_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/particle/particle_setting_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_manager.py
RENAMED
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/gif.py
RENAMED
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/image.py
RENAMED
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/registry.py
RENAMED
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/sound.py
RENAMED
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/text.py
RENAMED
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/video.py
RENAMED
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/web.py
RENAMED
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_setting_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/critical_exit/check_key_is_press.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/language_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/multi_language/simplified_chinese.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/smart_pause/smart_pause_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{frontengine-1.0.15 → frontengine-1.0.17}/frontengine/utils/theme_schedule/theme_schedule_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|