Mods
This commit is contained in:
		| @@ -56,12 +56,7 @@ class Ants: | |||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def prepare() -> None: |     def prepare() -> None: | ||||||
|         objs = Storage.get_ants() |         Ants.get_ants() | ||||||
|  |  | ||||||
|         for obj in objs: |  | ||||||
|             ant = Ant() |  | ||||||
|             ant.from_dict(obj) |  | ||||||
|             Ants.ants.append(ant) |  | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def hatch() -> None: |     def hatch() -> None: | ||||||
| @@ -83,7 +78,7 @@ class Ants: | |||||||
|         Ants.save() |         Ants.save() | ||||||
|  |  | ||||||
|         image_path = Config.hatched_image_path |         image_path = Config.hatched_image_path | ||||||
|         Game.add_message(f"{ant.name} is born", image_path) |         Game.add_message("Hatched", f"{ant.name} is born", image_path) | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def terminate() -> None: |     def terminate() -> None: | ||||||
| @@ -97,7 +92,7 @@ class Ants: | |||||||
|         Ants.save() |         Ants.save() | ||||||
|  |  | ||||||
|         image_path = Config.terminated_image_path |         image_path = Config.terminated_image_path | ||||||
|         Game.add_message(f"{ant.name} was terminated", image_path) |         Game.add_message("Terminated", f"{ant.name} is gone", image_path) | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def get_random_ant() -> Ant: |     def get_random_ant() -> Ant: | ||||||
| @@ -115,6 +110,7 @@ class Ants: | |||||||
|     def get_lazy() -> Ant: |     def get_lazy() -> Ant: | ||||||
|         return min(Ants.ants, key=lambda ant: ant.updated) |         return min(Ants.ants, key=lambda ant: ant.updated) | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|     def set_status(ant: Ant, status: str) -> None: |     def set_status(ant: Ant, status: str) -> None: | ||||||
|         from .game import Game |         from .game import Game | ||||||
|  |  | ||||||
| @@ -128,6 +124,16 @@ class Ants: | |||||||
|         Game.add_status(ant) |         Game.add_status(ant) | ||||||
|         Ants.save() |         Ants.save() | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|     def get_other(ant: Ant) -> Ant: |     def get_other(ant: Ant) -> Ant: | ||||||
|         ants = [a for a in Ants.ants if a.name != ant.name] |         ants = [a for a in Ants.ants if a.name != ant.name] | ||||||
|         return random.choice(ants) |         return random.choice(ants) | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def get_ants() -> None: | ||||||
|  |         objs = Storage.get_ants() | ||||||
|  |  | ||||||
|  |         for obj in objs: | ||||||
|  |             ant = Ant() | ||||||
|  |             ant.from_dict(obj) | ||||||
|  |             Ants.ants.append(ant) | ||||||
| @@ -19,8 +19,10 @@ class Config: | |||||||
|     names_json: Path |     names_json: Path | ||||||
|     background_color: str = "#2c2c2c" |     background_color: str = "#2c2c2c" | ||||||
|     text_color: str = "#ffffff" |     text_color: str = "#ffffff" | ||||||
|     image_size: int = 50 |     image_size: int = 80 | ||||||
|     space_1: int = 25 |     space_1: int = 25 | ||||||
|  |     max_messages: int = 120 | ||||||
|  |     loop_delay: int = 2_000 | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def prepare() -> None: |     def prepare() -> None: | ||||||
|   | |||||||
| @@ -5,8 +5,10 @@ from pathlib import Path | |||||||
|  |  | ||||||
| from PySide6.QtCore import Qt  # type: ignore | from PySide6.QtCore import Qt  # type: ignore | ||||||
| from PySide6.QtWidgets import QHBoxLayout | from PySide6.QtWidgets import QHBoxLayout | ||||||
|  | from PySide6.QtWidgets import QVBoxLayout | ||||||
| from PySide6.QtWidgets import QLabel | from PySide6.QtWidgets import QLabel | ||||||
| from PySide6.QtGui import QPixmap  # type: ignore | from PySide6.QtGui import QPixmap  # type: ignore | ||||||
|  | from PySide6.QtCore import QTimer | ||||||
|  |  | ||||||
| from wonderwords import RandomSentence  # type: ignore | from wonderwords import RandomSentence  # type: ignore | ||||||
|  |  | ||||||
| @@ -18,33 +20,56 @@ from .window import Window | |||||||
|  |  | ||||||
|  |  | ||||||
| class Game: | class Game: | ||||||
|  |     timer: QTimer | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def prepare() -> None: | ||||||
|  |         Game.initial_fill() | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def add_status(ant: Ant) -> None: |     def add_status(ant: Ant) -> None: | ||||||
|         container = QHBoxLayout() |         container = QHBoxLayout() | ||||||
|         image_label = Game.get_image(Config.status_image_path, ant.color) |         image_label = Game.get_image(Config.status_image_path, ant.color) | ||||||
|         name = QLabel(ant.name) |         right_container = Game.make_right_container(ant.name, ant.status) | ||||||
|         status = QLabel(ant.status) |  | ||||||
|  |  | ||||||
|         container.addWidget(image_label) |         container.addWidget(image_label) | ||||||
|         container.addSpacing(Config.space_1) |         container.addSpacing(Config.space_1) | ||||||
|         container.addWidget(name) |         container.addLayout(right_container) | ||||||
|         container.addSpacing(Config.space_1) |         Game.add_view_container(container) | ||||||
|         container.addWidget(status) |  | ||||||
|  |  | ||||||
|         Window.view.insertLayout(0, container) |  | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def add_message(message: str, image_path: Path) -> None: |     def add_message(title: str, message: str, image_path: Path) -> None: | ||||||
|         container = QHBoxLayout() |         container = QHBoxLayout() | ||||||
|         image_label = Game.get_image(image_path, (255, 255, 255)) |         image_label = Game.get_image(image_path, (255, 255, 255)) | ||||||
|         message_label = QLabel(message) |         right_container = Game.make_right_container(title, message) | ||||||
|  |  | ||||||
|         container.addWidget(image_label) |         container.addWidget(image_label) | ||||||
|         container.addSpacing(Config.space_1) |         container.addSpacing(Config.space_1) | ||||||
|         container.addWidget(message_label) |         container.addLayout(right_container) | ||||||
|  |         Game.add_view_container(container) | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def add_view_container(container: QHBoxLayout) -> None: | ||||||
|         Window.view.insertLayout(0, container) |         Window.view.insertLayout(0, container) | ||||||
|  |  | ||||||
|  |         while Window.view.count() > Config.max_messages: | ||||||
|  |             item = Window.view.takeAt(Window.view.count() - 1) | ||||||
|  |             if item.widget(): | ||||||
|  |                 item.widget().deleteLater() | ||||||
|  |             elif item.layout(): | ||||||
|  |                 Window.delete_layout(item.layout()) | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def make_right_container(title: str, message: str) -> QVBoxLayout: | ||||||
|  |         container = QVBoxLayout() | ||||||
|  |         container.setAlignment(Qt.AlignTop) | ||||||
|  |         title_label = QLabel(title) | ||||||
|  |         title_label.setStyleSheet("font-weight: bold;") | ||||||
|  |         message_label = QLabel(message) | ||||||
|  |         container.addWidget(title_label) | ||||||
|  |         container.addWidget(message_label) | ||||||
|  |         return container | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def get_image(image_path: Path, border_color: tuple[int, int, int]) -> QLabel: |     def get_image(image_path: Path, border_color: tuple[int, int, int]) -> QLabel: | ||||||
|         image_label = QLabel() |         image_label = QLabel() | ||||||
| @@ -91,3 +116,20 @@ class Game: | |||||||
|             status = s.sentence() |             status = s.sentence() | ||||||
|  |  | ||||||
|         Ants.set_status(ant, status) |         Ants.set_status(ant, status) | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def initial_fill() -> None: | ||||||
|  |         if not len(Ants.ants): | ||||||
|  |             return | ||||||
|  |  | ||||||
|  |         ants = sorted(Ants.ants, key=lambda ant: ant.updated) | ||||||
|  |  | ||||||
|  |         for ant in ants: | ||||||
|  |             Game.add_status(ant) | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def start_loop() -> None: | ||||||
|  |         interval_ms = Config.loop_delay | ||||||
|  |         Game.timer = QTimer() | ||||||
|  |         Game.timer.timeout.connect(Game.get_status) | ||||||
|  |         Game.timer.start(interval_ms) | ||||||
| @@ -4,6 +4,7 @@ from .config import Config | |||||||
| from .utils import Utils | from .utils import Utils | ||||||
| from .ants import Ants | from .ants import Ants | ||||||
| from .window import Window | from .window import Window | ||||||
|  | from .game import Game | ||||||
|  |  | ||||||
|  |  | ||||||
| def main() -> None: | def main() -> None: | ||||||
| @@ -11,6 +12,9 @@ def main() -> None: | |||||||
|     Utils.prepare() |     Utils.prepare() | ||||||
|     Ants.prepare() |     Ants.prepare() | ||||||
|     Window.prepare() |     Window.prepare() | ||||||
|  |     Game.prepare() | ||||||
|  |     Game.start_loop() | ||||||
|  |     Window.start() | ||||||
|  |  | ||||||
|  |  | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|   | |||||||
| @@ -11,7 +11,6 @@ from PySide6.QtWidgets import QHBoxLayout | |||||||
| from PySide6.QtWidgets import QScrollArea | from PySide6.QtWidgets import QScrollArea | ||||||
| from PySide6.QtGui import QIcon | from PySide6.QtGui import QIcon | ||||||
| from PySide6.QtCore import Qt  # type: ignore | from PySide6.QtCore import Qt  # type: ignore | ||||||
| from PySide6.QtCore import QTimer |  | ||||||
|  |  | ||||||
| from .config import Config | from .config import Config | ||||||
|  |  | ||||||
| @@ -22,15 +21,12 @@ class Window: | |||||||
|     root: QHBoxLayout |     root: QHBoxLayout | ||||||
|     view: QGraphicsView |     view: QGraphicsView | ||||||
|     view_scene: QGraphicsScene |     view_scene: QGraphicsScene | ||||||
|     timer: QTimer |  | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def prepare() -> None: |     def prepare() -> None: | ||||||
|         Window.make() |         Window.make() | ||||||
|         Window.add_buttons() |         Window.add_buttons() | ||||||
|         Window.add_view() |         Window.add_view() | ||||||
|         Window.start_timer() |  | ||||||
|         Window.start() |  | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def make() -> None: |     def make() -> None: | ||||||
| @@ -94,15 +90,6 @@ class Window: | |||||||
|  |  | ||||||
|         Ants.terminate() |         Ants.terminate() | ||||||
|  |  | ||||||
|     @staticmethod |  | ||||||
|     def start_timer() -> None: |  | ||||||
|         from .game import Game |  | ||||||
|  |  | ||||||
|         interval_ms = 3_000 |  | ||||||
|         Window.timer = QTimer() |  | ||||||
|         Window.timer.timeout.connect(Game.get_status) |  | ||||||
|         Window.timer.start(interval_ms) |  | ||||||
|  |  | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def start() -> None: |     def start() -> None: | ||||||
|         Window.window.show() |         Window.window.show() | ||||||
| @@ -111,3 +98,14 @@ class Window: | |||||||
|     @staticmethod |     @staticmethod | ||||||
|     def close() -> None: |     def close() -> None: | ||||||
|         Window.app.quit() |         Window.app.quit() | ||||||
|  |  | ||||||
|  |     @staticmethod | ||||||
|  |     def delete_layout(layout): | ||||||
|  |         while layout.count(): | ||||||
|  |             item = layout.takeAt(0) | ||||||
|  |             if item.widget(): | ||||||
|  |                 item.widget().deleteLater() | ||||||
|  |             elif item.layout(): | ||||||
|  |                 Window.delete_layout(item.layout()) | ||||||
|  |  | ||||||
|  |         layout.deleteLater() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Auric Vente
					Auric Vente