From bdda3fd5bf9950f7d28eb9f0ed9caa4eebfbca58 Mon Sep 17 00:00:00 2001 From: mx57 <38256814+mx57@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:39:24 +0000 Subject: [PATCH] feat: add procedural animations and pet size configuration - Implement procedural transformations for 'playing' and 'shaking' states in AnimationManager.update_frame(). - Add laser_mode_changed signal in InputManager and synchronize TrayMenu checkable action state. - Add pet_size setting (50-250px) across ConfigManager, PetWindow, SettingsDialog, TrayMenu, and InputManager. - Add unit tests for procedural animations, laser mode signal, and pet size configuration. --- assets/animations/svg_skins/cat_default.svg | 1 + src/core/animation_manager.py | 10 +++ src/core/input_manager.py | 14 +++- src/ui/main_window.py | 11 ++- src/ui/settings_dialog.py | 17 ++++ src/ui/tray_menu.py | 15 ++-- src/utils/config_manager.py | 3 +- tests/test_utils.py | 88 ++++++++++++++++++++ verification/screenshots/stats_history.png | Bin 22831 -> 23048 bytes 9 files changed, 148 insertions(+), 11 deletions(-) create mode 100644 assets/animations/svg_skins/cat_default.svg diff --git a/assets/animations/svg_skins/cat_default.svg b/assets/animations/svg_skins/cat_default.svg new file mode 100644 index 0000000..661c129 --- /dev/null +++ b/assets/animations/svg_skins/cat_default.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/core/animation_manager.py b/src/core/animation_manager.py index faa829b..5906cec 100644 --- a/src/core/animation_manager.py +++ b/src/core/animation_manager.py @@ -146,6 +146,11 @@ def update_frame(self): # Бешеная тряска + увеличение painter.scale(1.2, 1.2) painter.translate(random.randint(-4, 4), random.randint(-4, 4)) + elif self.current_state == "shaking": + # Сильное встряхивание + динамический масштаб + scale = 1.0 + random.uniform(-0.08, 0.08) + painter.scale(scale, scale) + painter.translate(random.randint(-6, 6), random.randint(-6, 6)) elif self.current_state == "stretching": # Растягивание painter.scale(0.8, 1.4) @@ -154,6 +159,11 @@ def update_frame(self): scale_y = 1.0 + 0.1 * abs(math.sin(self.frame_counter * 0.8)) painter.translate(0, 10 * (scale_y - 1.0)) painter.scale(1.0, scale_y) + elif self.current_state == "playing": + # Покачивание из стороны в сторону и легкое подпрыгивание + angle = 8 * math.sin(self.frame_counter * 0.6) + painter.rotate(angle) + painter.translate(0, -abs(5 * math.sin(self.frame_counter * 0.8))) elif self.current_state == "thinking": # Наклон + покачивание painter.rotate(10 + 5 * math.sin(self.frame_counter * 0.2)) diff --git a/src/core/input_manager.py b/src/core/input_manager.py index 9ca9d10..b3b727b 100644 --- a/src/core/input_manager.py +++ b/src/core/input_manager.py @@ -44,6 +44,8 @@ def stop(self): self.keyboard_listener.stop() class InputManager(QObject): + laser_mode_changed = Signal(bool) + def __init__(self, pet_window, data_store=None): super().__init__() self.window = pet_window @@ -404,14 +406,17 @@ def handle_mouse(self, x, y): # Проверка "поглаживания" pet_pos = self.window.get_cached_pos() - center_x = pet_pos.x() + self.window.width() // 2 - center_y = pet_pos.y() + self.window.height() // 2 + pet_width = self.window.width() if self.window else 100 + pet_height = self.window.height() if self.window else 100 + center_x = pet_pos.x() + pet_width // 2 + center_y = pet_pos.y() + pet_height // 2 dx_pet = x - center_x dy_pet = y - center_y dist_sq_pet = dx_pet * dx_pet + dy_pet * dy_pet - # Оптимизация: сравнение квадрата расстояния (порог 60px -> 3600) - if dist_sq_pet < 3600: + # Динамический радиус поглаживания на основе размера питомца (по умолчанию 60px при размере 100px) + pet_radius = max(30, int(pet_width * 0.6)) + if dist_sq_pet < pet_radius * pet_radius: # Исключаем пассивный фарм (требуем активное поглаживание: активное движение мыши и кулдаун) if self.last_pet_time == 0: self.last_pet_mouse_pos = (x, y) @@ -470,6 +475,7 @@ def toggle_laser_mode(self): else: self.window.setCursor(Qt.ArrowCursor) self.window.animation_manager.play_state("idle") + self.laser_mode_changed.emit(self.laser_mode) return self.laser_mode def reset_all_data(self): diff --git a/src/ui/main_window.py b/src/ui/main_window.py index e619905..a3a9532 100644 --- a/src/ui/main_window.py +++ b/src/ui/main_window.py @@ -55,7 +55,8 @@ def __init__(self, config_manager=None): self.is_dragging = False self.shake_count = 0 self.last_shake_time = 0 - self.original_size = QSize(100, 100) + pet_size = self.config.get("pet_size") if self.config else 100 + self.original_size = QSize(pet_size, pet_size) # Начальный размер self.resize(self.original_size) @@ -91,6 +92,14 @@ def set_opacity(self, value): """Устанавливает прозрачность окна (0-100)""" self.setWindowOpacity(value / 100.0) + def set_pet_size(self, size_px): + """Устанавливает базовый размер питомца в пикселях (50-250)""" + if self.config: + self.config.set("pet_size", size_px) + self.original_size = QSize(size_px, size_px) + self.resize(self.original_size) + self.animation_manager.update_size(self.size()) + def set_always_on_top(self, enabled): """Включает или выключает режим 'Поверх всех окон' динамически""" if self.config: diff --git a/src/ui/settings_dialog.py b/src/ui/settings_dialog.py index 5339824..12827ed 100644 --- a/src/ui/settings_dialog.py +++ b/src/ui/settings_dialog.py @@ -52,6 +52,22 @@ def __init__(self, config, parent=None): self.opacity_slider.valueChanged.connect(lambda v: self.opacity_val_label.setText(f"{v}%")) layout.addWidget(self.opacity_slider) + # Размер питомца + size_header_layout = QHBoxLayout() + size_header_layout.addWidget(QLabel("Размер питомца (px):")) + pet_size_val = self.config.get("pet_size") or 100 + self.size_val_label = QLabel(f"{pet_size_val}px") + self.size_val_label.setStyleSheet("font-weight: bold; color: #555;") + size_header_layout.addStretch() + size_header_layout.addWidget(self.size_val_label) + layout.addLayout(size_header_layout) + + self.size_slider = QSlider(Qt.Horizontal) + self.size_slider.setRange(50, 250) + self.size_slider.setValue(pet_size_val) + self.size_slider.valueChanged.connect(lambda v: self.size_val_label.setText(f"{v}px")) + layout.addWidget(self.size_slider) + # Интервал растяжки layout.addWidget(QLabel("Интервал растяжки (мин):")) self.stretch_spin = QSpinBox() @@ -168,6 +184,7 @@ def save_settings(self): self.config.set("always_on_top", self.always_on_top_check.isChecked()) self.config.set("volume", self.volume_slider.value()) self.config.set("opacity", self.opacity_slider.value()) + self.config.set("pet_size", self.size_slider.value()) self.config.set("stretch_interval", self.stretch_spin.value()) self.config.set("pomodoro_work", self.pomodoro_work_spin.value()) self.config.set("pomodoro_break", self.pomodoro_break_spin.value()) diff --git a/src/ui/tray_menu.py b/src/ui/tray_menu.py index b3d0392..0490efe 100644 --- a/src/ui/tray_menu.py +++ b/src/ui/tray_menu.py @@ -30,6 +30,10 @@ def __init__(self, pet_window): self.window.timer_system.pomodoro_tick.connect(self.update_pomodoro_status) self.window.timer_system.pomodoro_finished.connect(self.on_pomodoro_finished) + # Подписка на сигнал смены режима лазерной указки + if hasattr(self.window, "input_manager") and self.window.input_manager: + self.window.input_manager.laser_mode_changed.connect(self.laser_action.setChecked) + def setup_menu(self): # 1. Секция статуса Pomodoro self.status_action = QAction("Таймер не запущен", self) @@ -59,10 +63,10 @@ def setup_menu(self): self.menu.addSeparator() # Лазерная указка - laser_action = QAction("Лазерная указка 🔴", self) - laser_action.setCheckable(True) - laser_action.triggered.connect(self.toggle_laser) - self.menu.addAction(laser_action) + self.laser_action = QAction("Лазерная указка 🔴", self) + self.laser_action.setCheckable(True) + self.laser_action.triggered.connect(self.toggle_laser) + self.menu.addAction(self.laser_action) self.menu.addSeparator() @@ -183,9 +187,10 @@ def start_break_timer(self, checked=False): def show_settings(self, checked=False): dialog = SettingsDialog(self.window.config, self.window) if dialog.exec(): - # Обновляем скин и прозрачность в реальном времени + # Обновляем скин, прозрачность и размер в реальном времени self.window.animation_manager.set_skin(self.window.config.get("skin")) self.window.set_opacity(self.window.config.get("opacity")) + self.window.set_pet_size(self.window.config.get("pet_size")) # Обновляем меню скинов self.update_skin_menu() # Обновляем режим "Поверх всех окон" в реальном времени diff --git a/src/utils/config_manager.py b/src/utils/config_manager.py index e6ad878..fb39511 100644 --- a/src/utils/config_manager.py +++ b/src/utils/config_manager.py @@ -12,7 +12,8 @@ class ConfigManager: "volume": 70, "language": "ru", "skin": "default", - "opacity": 100 + "opacity": 100, + "pet_size": 100 } def __init__(self, config_path="settings.json"): diff --git a/tests/test_utils.py b/tests/test_utils.py index 1a72e44..5342b3e 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -58,6 +58,8 @@ def test_always_on_top_logic(self): self.assertFalse(bool(flags & Qt.WindowStaysOnTopHint)) self.assertFalse(config.get("always_on_top")) + window.close() + def test_config_manager(self): config = ConfigManager(self.config_path) config.set("username", "TestUser") @@ -356,6 +358,7 @@ def test_delete_custom_skin(self): self.assertNotIn("custom_todel_skin", CAT_SKINS) self.assertEqual(config.get("skin"), "default") self.assertNotIn("custom_todel_skin", config.get("custom_skins") or {}) + dialog.close() finally: # Восстанавливаем моки гарантированно QMessageBox.question = original_question @@ -481,6 +484,85 @@ def test_input_manager_reset_logic(self): db.close() + def test_procedural_animations_playing_and_shaking(self): + os.environ["QT_QPA_PLATFORM"] = "offscreen" + from PySide6.QtWidgets import QApplication, QLabel + from src.core.animation_manager import AnimationManager + from src.utils.paths import ANIMATIONS_DIR + + app = QApplication.instance() or QApplication([]) + label = QLabel() + config = ConfigManager(self.config_path) + am = AnimationManager(label, config) + + # Подкладываем минимальный SVG-рендерер для вызова update_frame + test_svg_path = os.path.join(ANIMATIONS_DIR, "svg_skins", "cat_default.svg") + if not os.path.exists(test_svg_path): + os.makedirs(os.path.dirname(test_svg_path), exist_ok=True) + with open(test_svg_path, "w", encoding="utf-8") as f: + f.write("") + + am.set_animation(test_svg_path) + + # Вызываем update_frame в состояниях playing и shaking + am.play_state("playing") + am.update_frame() + self.assertIsNotNone(label.pixmap()) + + am.play_state("shaking") + am.update_frame() + self.assertIsNotNone(label.pixmap()) + + am.anim_timer.stop() + + def test_laser_mode_changed_signal(self): + mock_window = MagicMock() + mock_cursor = MagicMock() + mock_cursor.pos.return_value = QPoint(100, 100) + mock_window.cursor.return_value = mock_cursor + + db = DataStore(self.db_path) + im = InputManager(mock_window, db) + + signal_mock = MagicMock() + im.laser_mode_changed.connect(signal_mock) + + im.toggle_laser_mode() + signal_mock.assert_called_with(True) + + im.toggle_laser_mode() + signal_mock.assert_called_with(False) + + db.close() + + def test_pet_size_configuration(self): + os.environ["QT_QPA_PLATFORM"] = "offscreen" + from PySide6.QtWidgets import QApplication + from src.ui.settings_dialog import SettingsDialog + + app = QApplication.instance() or QApplication([]) + + config = ConfigManager(self.config_path) + self.assertEqual(config.get("pet_size"), 100) + + # Тест PetWindow + window = PetWindow(config) + self.assertEqual(window.original_size.width(), 100) + + window.set_pet_size(150) + self.assertEqual(window.original_size.width(), 150) + self.assertEqual(config.get("pet_size"), 150) + + # Тест SettingsDialog + dialog = SettingsDialog(config) + self.assertEqual(dialog.size_slider.value(), 150) + dialog.size_slider.setValue(200) + dialog.save_settings() + self.assertEqual(config.get("pet_size"), 200) + + window.close() + dialog.close() + def test_stats_dialog_reset_ui_flow(self): from src.ui.stats_dialog import StatsDialog from PySide6.QtWidgets import QMessageBox, QApplication @@ -512,6 +594,12 @@ def test_stats_dialog_reset_ui_flow(self): self.assertEqual(db.get_affection_points(), 0) QMessageBox.information.assert_called_once() finally: + if 'dialog' in locals() and hasattr(dialog, 'update_timer'): + dialog.update_timer.stop() + if 'dialog' in locals(): + dialog.close() + dialog.deleteLater() + app.processEvents() QMessageBox.question = original_question QMessageBox.information = original_information db.close() diff --git a/verification/screenshots/stats_history.png b/verification/screenshots/stats_history.png index 1fa59b4d5793668869a36bebd63e723b22c6927b..845b7d097a537a9fce15b3a75dbfb4cc8ae1dac8 100644 GIT binary patch literal 23048 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 M>YM5zA2^5q7boHkz5oCK literal 22831 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
    ~#Z^ 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