frontengine 1.0.16__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.
Files changed (136) hide show
  1. {frontengine-1.0.16 → frontengine-1.0.17}/PKG-INFO +1 -1
  2. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/pet/desktop_pet.py +42 -0
  3. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/user_setting/user_setting_file.py +3 -0
  4. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/multi_language/english.py +1 -0
  5. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/multi_language/traditional_chinese.py +1 -0
  6. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine.egg-info/PKG-INFO +1 -1
  7. {frontengine-1.0.16 → frontengine-1.0.17}/pyproject.toml +1 -1
  8. {frontengine-1.0.16 → frontengine-1.0.17}/LICENSE +0 -0
  9. {frontengine-1.0.16 → frontengine-1.0.17}/README.md +0 -0
  10. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/__init__.py +0 -0
  11. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/__main__.py +0 -0
  12. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/__init__.py +0 -0
  13. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/base_widget.py +0 -0
  14. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/gif/__init__.py +0 -0
  15. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/gif/paint_gif.py +0 -0
  16. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/image/__init__.py +0 -0
  17. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/image/paint_image.py +0 -0
  18. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/load/__init__.py +0 -0
  19. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/load/load_someone_make_ui.py +0 -0
  20. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/overlay_factory.py +0 -0
  21. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/particle/__init__.py +0 -0
  22. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/particle/particle_ui.py +0 -0
  23. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/pet/__init__.py +0 -0
  24. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/scene/__init__.py +0 -0
  25. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/scene/extend_graphic_scene.py +0 -0
  26. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/scene/extend_graphic_view.py +0 -0
  27. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/scene/scene.py +0 -0
  28. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/sound_player/__init__.py +0 -0
  29. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/sound_player/sound_effect.py +0 -0
  30. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/sound_player/sound_player.py +0 -0
  31. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/text/__init__.py +0 -0
  32. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/text/draw_text.py +0 -0
  33. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/video/__init__.py +0 -0
  34. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/video/video_player.py +0 -0
  35. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/web/__init__.py +0 -0
  36. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/web/webview.py +0 -0
  37. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/show/window_helpers.py +0 -0
  38. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/system_tray/__init__.py +0 -0
  39. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/system_tray/extend_system_tray.py +0 -0
  40. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/__init__.py +0 -0
  41. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/color/__init__.py +0 -0
  42. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/color/global_color.py +0 -0
  43. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/dialog/__init__.py +0 -0
  44. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/dialog/choose_file_dialog.py +0 -0
  45. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/dialog/hotkey_settings_dialog.py +0 -0
  46. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/dialog/save_file_dialog.py +0 -0
  47. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/main_ui.py +0 -0
  48. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/menu/__init__.py +0 -0
  49. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/menu/help_menu.py +0 -0
  50. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/menu/how_to_menu.py +0 -0
  51. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/menu/language_menu.py +0 -0
  52. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/menu/preset_menu.py +0 -0
  53. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/menu/settings_menu.py +0 -0
  54. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/__init__.py +0 -0
  55. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/control_center/__init__.py +0 -0
  56. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/control_center/control_center_ui.py +0 -0
  57. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/gif/__init__.py +0 -0
  58. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/gif/gif_setting_ui.py +0 -0
  59. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/image/__init__.py +0 -0
  60. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/image/image_setting_ui.py +0 -0
  61. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/particle/__init__.py +0 -0
  62. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/particle/particle_setting_ui.py +0 -0
  63. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/pet/__init__.py +0 -0
  64. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/pet/pet_setting_ui.py +0 -0
  65. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/__init__.py +0 -0
  66. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_manager.py +0 -0
  67. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/__init__.py +0 -0
  68. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/base_scene_page.py +0 -0
  69. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/gif.py +0 -0
  70. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/image.py +0 -0
  71. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/registry.py +0 -0
  72. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/sound.py +0 -0
  73. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/text.py +0 -0
  74. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/video.py +0 -0
  75. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_page/web.py +0 -0
  76. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/scene_setting/scene_setting_ui.py +0 -0
  77. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/sound_player/__init__.py +0 -0
  78. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/sound_player/sound_player_setting_ui.py +0 -0
  79. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/text/__init__.py +0 -0
  80. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/text/text_setting_ui.py +0 -0
  81. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/utils.py +0 -0
  82. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/video/__init__.py +0 -0
  83. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/video/video_setting_ui.py +0 -0
  84. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/web/__init__.py +0 -0
  85. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/ui/page/web/web_setting_ui.py +0 -0
  86. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/user_setting/__init__.py +0 -0
  87. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/user_setting/preset_repository.py +0 -0
  88. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/user_setting/scene_setting.py +0 -0
  89. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/__init__.py +0 -0
  90. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/browser/__init__.py +0 -0
  91. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/browser/browser.py +0 -0
  92. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/critical_exit/__init__.py +0 -0
  93. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/critical_exit/check_key_is_press.py +0 -0
  94. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/critical_exit/critical_exit.py +0 -0
  95. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/critical_exit/win32_vk.py +0 -0
  96. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/exception/__init__.py +0 -0
  97. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/exception/exception_tags.py +0 -0
  98. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/exception/exceptions.py +0 -0
  99. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/file/__init__.py +0 -0
  100. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/file/open/__init__.py +0 -0
  101. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/file/open/open_file.py +0 -0
  102. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/file/save/__init__.py +0 -0
  103. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/file/save/save_file.py +0 -0
  104. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/hotkey/__init__.py +0 -0
  105. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/hotkey/hotkey_service.py +0 -0
  106. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/json/__init__.py +0 -0
  107. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/json/json_file.py +0 -0
  108. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/json/json_repository.py +0 -0
  109. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/json_format/__init__.py +0 -0
  110. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/json_format/json_process.py +0 -0
  111. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/logging/__init__.py +0 -0
  112. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/logging/loggin_instance.py +0 -0
  113. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/multi_language/__init__.py +0 -0
  114. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/multi_language/france.py +0 -0
  115. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/multi_language/germany.py +0 -0
  116. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/multi_language/italy.py +0 -0
  117. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/multi_language/language_wrapper.py +0 -0
  118. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/multi_language/russian.py +0 -0
  119. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/multi_language/simplified_chinese.py +0 -0
  120. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/preset_schedule/__init__.py +0 -0
  121. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/preset_schedule/preset_schedule_service.py +0 -0
  122. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/redirect_manager/__init__.py +0 -0
  123. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/redirect_manager/redirect_manager_class.py +0 -0
  124. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/smart_pause/__init__.py +0 -0
  125. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/smart_pause/smart_pause_service.py +0 -0
  126. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/theme_schedule/__init__.py +0 -0
  127. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/theme_schedule/theme_schedule_service.py +0 -0
  128. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/utils/web_url.py +0 -0
  129. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/worker/__init__.py +0 -0
  130. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine/worker/qthread_worker.py +0 -0
  131. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine.egg-info/SOURCES.txt +0 -0
  132. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine.egg-info/dependency_links.txt +0 -0
  133. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine.egg-info/entry_points.txt +0 -0
  134. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine.egg-info/requires.txt +0 -0
  135. {frontengine-1.0.16 → frontengine-1.0.17}/frontengine.egg-info/top_level.txt +0 -0
  136. {frontengine-1.0.16 → 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.16
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
@@ -290,6 +290,34 @@ class PetMood:
290
290
  return self.CONTENT
291
291
 
292
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
+
293
321
  class PetHunger:
294
322
  """
295
323
  寵物飽足值 0~100:餵食上升、隨時間下降;level() 回傳 full/ok/hungry。
@@ -768,6 +796,7 @@ class DesktopPetWidget(BaseWidget):
768
796
  self._mood = PetMood(user_setting_dict.get("pet_mood", 60))
769
797
  self._hunger = PetHunger(user_setting_dict.get("pet_hunger", 70))
770
798
  self._hunger_warned = False
799
+ self._growth = PetGrowth(user_setting_dict.get("pet_affection", 0))
771
800
  self._messages = self._load_messages()
772
801
  self._sound: Optional[QSoundEffect] = None
773
802
  self._init_sound(sound_path)
@@ -849,6 +878,7 @@ class DesktopPetWidget(BaseWidget):
849
878
  self.motion.clear_follow()
850
879
  if self._talk and not self._peer_greeted:
851
880
  self._peer_greeted = True
881
+ self._gain_affection(3)
852
882
  self.motion.vx = abs(self.motion.vx) if peer[0] >= my_center[0] else -abs(self.motion.vx)
853
883
  pool = self._messages.get("meet") or []
854
884
  if pool:
@@ -941,9 +971,19 @@ class DesktopPetWidget(BaseWidget):
941
971
  "hungry": lines("pet_chatter_hungry", "I'm hungry...|Got a snack?|Feed me?"),
942
972
  "fed": lines("pet_chatter_fed", "Yum!|Thank you!|Delicious!"),
943
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!"),
944
975
  "any": lines("pet_chatter_any", "Hi there!|(^_^)|Keep going!"),
945
976
  }
946
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
+
947
987
  def _persist_mood(self) -> None:
948
988
  user_setting_dict["pet_mood"] = self._mood.value
949
989
 
@@ -1043,6 +1083,7 @@ class DesktopPetWidget(BaseWidget):
1043
1083
  self._mood.pet()
1044
1084
  self._persist_hunger()
1045
1085
  self._persist_mood()
1086
+ self._gain_affection(5)
1046
1087
  pool = self._messages.get("fed") or []
1047
1088
  if pool:
1048
1089
  self.say(pool[self._chatter_rng.randrange(len(pool))])
@@ -1128,6 +1169,7 @@ class DesktopPetWidget(BaseWidget):
1128
1169
  self.motion.clear_follow()
1129
1170
  self._mood.pet() # petting cheers it up
1130
1171
  self._persist_mood()
1172
+ self._gain_affection(2)
1131
1173
  self._play_sound()
1132
1174
  self._set_active_sprite(STATE_DRAG)
1133
1175
  super().mousePressEvent(event)
@@ -39,6 +39,9 @@ user_setting_dict: Dict[str, Any] = {
39
39
  # 桌面寵物飽足值(0~100)
40
40
  # Desktop pet fullness (0..100)
41
41
  "pet_hunger": 70,
42
+ # 桌面寵物親密度(累積互動)
43
+ # Desktop pet affection (accumulated interactions)
44
+ "pet_affection": 0,
42
45
  }
43
46
 
44
47
 
@@ -229,6 +229,7 @@ english_word_dict = {
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
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!",
232
233
  "pet_set_reminder": "Set reminder...",
233
234
  "pet_reminder_prompt": "Remind me to:",
234
235
  "pet_reminder_minutes": "In how many minutes?",
@@ -230,6 +230,7 @@ traditional_chinese_word_dict = {
230
230
  "pet_chatter_hungry": "我餓了…|有點心嗎?|餵餵我好嗎?|肚子咕咕叫~",
231
231
  "pet_chatter_fed": "好吃!|謝謝你!|真美味!|嗯嗯 (^o^)",
232
232
  "pet_chatter_away": "還在嗎?|我先打個盹等你回來~|Zzz…|慢慢來沒關係!",
233
+ "pet_chatter_levelup": "升級了!|我長大了!|我們更親近了!|耶,謝謝你!",
233
234
  "pet_set_reminder": "設定提醒...",
234
235
  "pet_reminder_prompt": "提醒我:",
235
236
  "pet_reminder_minutes": "幾分鐘後?",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frontengine
3
- Version: 1.0.16
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
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "frontengine"
9
- version = "1.0.16"
9
+ version = "1.0.17"
10
10
  authors = [
11
11
  { name = "JE-Chen", email = "jechenmailman@gmail.com" },
12
12
  ]
File without changes
File without changes
File without changes