From cf2e4f410a950c3b8581657c560424643302e410 Mon Sep 17 00:00:00 2001 From: mx57 <38256814+mx57@users.noreply.github.com> Date: Tue, 18 Aug 2026 05:15:18 +0000 Subject: [PATCH] feat: add custom pet size setting and dynamic scaling Add customizable pet_size setting (50-250px) to ConfigManager, SettingsDialog slider with live preview, PetWindow.set_pet_size method, dynamic petting radius scaling in InputManager, and proportional animation transforms in AnimationManager. --- src/core/animation_manager.py | 4 +- src/core/input_manager.py | 18 ++++- src/ui/main_window.py | 13 +++- src/ui/settings_dialog.py | 22 ++++++ src/ui/tray_menu.py | 8 +-- src/utils/config_manager.py | 3 +- tests/test_utils.py | 78 +++++++++++++++++++++ verification/screenshots/stats_history.png | Bin 22831 -> 22807 bytes 8 files changed, 136 insertions(+), 10 deletions(-) diff --git a/src/core/animation_manager.py b/src/core/animation_manager.py index faa829b..8c9f4a5 100644 --- a/src/core/animation_manager.py +++ b/src/core/animation_manager.py @@ -132,7 +132,7 @@ def update_frame(self): painter.rotate(angle) elif self.current_state == "happy": # Прыжки - painter.translate(0, -abs(15 * math.sin(self.frame_counter * 0.5))) + painter.translate(0, -abs(size.height() * 0.15 * math.sin(self.frame_counter * 0.5))) elif self.current_state == "sleeping": # Глубокое медленное дыхание + наклон scale = 1.0 + 0.05 * math.sin(self.frame_counter * 0.1) @@ -152,7 +152,7 @@ def update_frame(self): elif self.current_state == "eating": # Наклоны головы вперед-назад при еде scale_y = 1.0 + 0.1 * abs(math.sin(self.frame_counter * 0.8)) - painter.translate(0, 10 * (scale_y - 1.0)) + painter.translate(0, (size.height() * 0.1) * (scale_y - 1.0)) painter.scale(1.0, scale_y) elif self.current_state == "thinking": # Наклон + покачивание diff --git a/src/core/input_manager.py b/src/core/input_manager.py index 9ca9d10..45031db 100644 --- a/src/core/input_manager.py +++ b/src/core/input_manager.py @@ -410,8 +410,22 @@ def handle_mouse(self, x, y): dy_pet = y - center_y dist_sq_pet = dx_pet * dx_pet + dy_pet * dy_pet - # Оптимизация: сравнение квадрата расстояния (порог 60px -> 3600) - if dist_sq_pet < 3600: + # Радиус поглаживания динамически масштабируется на основе размера питомца + pet_width = 100 + if hasattr(self.window, 'original_size'): + orig_sz = self.window.original_size + w = orig_sz.width() if callable(getattr(orig_sz, 'width', None)) else getattr(orig_sz, 'width', 100) + if isinstance(w, (int, float)): + pet_width = w + elif hasattr(self.window, 'width'): + w = self.window.width() + if isinstance(w, (int, float)): + pet_width = w + + pet_radius = pet_width * 0.6 + threshold_sq = pet_radius * pet_radius + + if dist_sq_pet < threshold_sq: # Исключаем пассивный фарм (требуем активное поглаживание: активное движение мыши и кулдаун) if self.last_pet_time == 0: self.last_pet_mouse_pos = (x, y) diff --git a/src/ui/main_window.py b/src/ui/main_window.py index e619905..18d8ee6 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,16 @@ def set_opacity(self, value): """Устанавливает прозрачность окна (0-100)""" self.setWindowOpacity(value / 100.0) + def set_pet_size(self, size): + """Устанавливает базовый размер окна питомца (50-250px)""" + size = max(50, min(250, int(size))) + self.original_size = QSize(size, size) + if not self.is_dragging: + self.resize(self.original_size) + self.animation_manager.update_size(self.size()) + if self.config: + self.config.set("pet_size", 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..46d333a 100644 --- a/src/ui/settings_dialog.py +++ b/src/ui/settings_dialog.py @@ -52,6 +52,21 @@ 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("Размер питомца:")) + self.size_val_label = QLabel(f"{self.config.get('pet_size')} 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(self.config.get("pet_size")) + self.size_slider.valueChanged.connect(self.on_size_slider_changed) + layout.addWidget(self.size_slider) + # Интервал растяжки layout.addWidget(QLabel("Интервал растяжки (мин):")) self.stretch_spin = QSpinBox() @@ -103,6 +118,12 @@ def __init__(self, config, parent=None): btn_layout.addWidget(cancel_btn) layout.addLayout(btn_layout) + def on_size_slider_changed(self, value): + self.size_val_label.setText(f"{value} px") + parent = self.parent() + if parent and hasattr(parent, "set_pet_size"): + parent.set_pet_size(value) + def play_test_sound(self): # Если есть родительское окно с менеджером звуков, проигрываем звук через него parent = self.parent() @@ -168,6 +189,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..e04efd4 100644 --- a/src/ui/tray_menu.py +++ b/src/ui/tray_menu.py @@ -183,9 +183,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() # Обновляем режим "Поверх всех окон" в реальном времени @@ -198,10 +199,9 @@ def show_settings(self, checked=False): self.window.timer_system.restart_stretch_timer() self.window.show_message("Настройки сохранены! 💾") else: - # Даже если диалог был отклонен, скин мог быть импортирован или удален мгновенно. - # Поэтому мы в любом случае синхронизируем меню выбора окрасов в трее. + # Если диалог был отменен, восстанавливаем размер питомца и скин из конфига + self.window.set_pet_size(self.window.config.get("pet_size")) self.update_skin_menu() - # Также обновляем отображаемый скин (если удалили текущий активный, он мог сброситься на default) self.window.animation_manager.set_skin(self.window.config.get("skin")) def show_stats(self, checked=False): 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..b7333b2 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -481,6 +481,84 @@ def test_input_manager_reset_logic(self): db.close() + def test_pet_size_config_and_window_resize(self): + os.environ["QT_QPA_PLATFORM"] = "offscreen" + from PySide6.QtWidgets import QApplication + app = QApplication.instance() or QApplication([]) + + config = ConfigManager(self.config_path) + self.assertEqual(config.get("pet_size"), 100) + + config.set("pet_size", 150) + self.assertEqual(config.get("pet_size"), 150) + + window = PetWindow(config) + self.assertEqual(window.original_size.width(), 150) + self.assertEqual(window.original_size.height(), 150) + + # Динамическая смена размера + window.set_pet_size(180) + self.assertEqual(window.original_size.width(), 180) + self.assertEqual(config.get("pet_size"), 180) + + def test_petting_radius_scaled_by_pet_size(self): + mock_window = MagicMock() + mock_window.original_size.width.return_value = 150 + mock_window.width.return_value = 150 + mock_window.height.return_value = 150 + + # Позиция центра на (150, 150) + mock_pos = MagicMock() + mock_pos.x.return_value = 75 + mock_pos.y.return_value = 75 + mock_window.get_cached_pos.return_value = mock_pos + + mock_cursor = MagicMock() + mock_cursor.pos.return_value = QPoint(75, 75) + mock_window.cursor.return_value = mock_cursor + + mock_window.animation_manager.current_state = "idle" + + db = DataStore(self.db_path) + im = InputManager(mock_window, db) + + # Радиус для 150px составляет 150 * 0.6 = 90px (порог 8100) + # Мышь на 150, 150 (расстояние от центра 75,75 до 150,150 = sqrt(75^2 + 75^2) = sqrt(11250) > 8100 -> вне радиуса) + # Мышь на 120, 120 (расстояние 45, 45 -> 45^2 + 45^2 = 4050 < 8100 -> внутри радиуса) + + # 1. Первая точка поглаживания в (120, 120) + im.handle_mouse(120, 120) + self.assertEqual(im.pending_stats["petting_count"], 0) + + # 2. Движение > 30px внутри расширенного радиуса (150, 150) с кулдауном + im.last_pet_time -= 1.0 + im.handle_mouse(155, 155) # мазок от (120,120) до (155,155) это ~49px + self.assertEqual(im.pending_stats["petting_count"], 1) + + db.close() + + def test_settings_dialog_pet_size_slider(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) + mock_parent = MagicMock() + + dialog = SettingsDialog(config, None) + dialog.parent = lambda: mock_parent + self.assertEqual(dialog.size_slider.value(), 100) + + # Сдвигаем слайдер + dialog.size_slider.setValue(120) + mock_parent.set_pet_size.assert_called_with(120) + + # Сохранение настроек + dialog.save_settings() + self.assertEqual(config.get("pet_size"), 120) + def test_stats_dialog_reset_ui_flow(self): from src.ui.stats_dialog import StatsDialog from PySide6.QtWidgets import QMessageBox, QApplication diff --git a/verification/screenshots/stats_history.png b/verification/screenshots/stats_history.png index 1fa59b4d5793668869a36bebd63e723b22c6927b..a3c9ea750746a984d094d25f0731e782b73e1ea4 100644 GIT binary patch literal 22807 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
    ~#Z^ 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