diff --git a/assets/image/grid/bomb/animation/bomb_anim_i23.png b/assets/image/grid/bomb/animation/1.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i23.png rename to assets/image/grid/bomb/animation/1.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i14.png b/assets/image/grid/bomb/animation/10.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i14.png rename to assets/image/grid/bomb/animation/10.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i13.png b/assets/image/grid/bomb/animation/11.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i13.png rename to assets/image/grid/bomb/animation/11.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i12.png b/assets/image/grid/bomb/animation/12.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i12.png rename to assets/image/grid/bomb/animation/12.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i11.png b/assets/image/grid/bomb/animation/13.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i11.png rename to assets/image/grid/bomb/animation/13.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i10.png b/assets/image/grid/bomb/animation/14.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i10.png rename to assets/image/grid/bomb/animation/14.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i9.png b/assets/image/grid/bomb/animation/15.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i9.png rename to assets/image/grid/bomb/animation/15.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i8.png b/assets/image/grid/bomb/animation/16.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i8.png rename to assets/image/grid/bomb/animation/16.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i7.png b/assets/image/grid/bomb/animation/17.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i7.png rename to assets/image/grid/bomb/animation/17.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i6.png b/assets/image/grid/bomb/animation/18.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i6.png rename to assets/image/grid/bomb/animation/18.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i5.png b/assets/image/grid/bomb/animation/19.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i5.png rename to assets/image/grid/bomb/animation/19.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i22.png b/assets/image/grid/bomb/animation/2.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i22.png rename to assets/image/grid/bomb/animation/2.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i4.png b/assets/image/grid/bomb/animation/20.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i4.png rename to assets/image/grid/bomb/animation/20.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i3.png b/assets/image/grid/bomb/animation/21.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i3.png rename to assets/image/grid/bomb/animation/21.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i2.png b/assets/image/grid/bomb/animation/22.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i2.png rename to assets/image/grid/bomb/animation/22.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i1.png b/assets/image/grid/bomb/animation/23.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i1.png rename to assets/image/grid/bomb/animation/23.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i21.png b/assets/image/grid/bomb/animation/3.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i21.png rename to assets/image/grid/bomb/animation/3.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i20.png b/assets/image/grid/bomb/animation/4.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i20.png rename to assets/image/grid/bomb/animation/4.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i19.png b/assets/image/grid/bomb/animation/5.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i19.png rename to assets/image/grid/bomb/animation/5.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i18.png b/assets/image/grid/bomb/animation/6.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i18.png rename to assets/image/grid/bomb/animation/6.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i17.png b/assets/image/grid/bomb/animation/7.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i17.png rename to assets/image/grid/bomb/animation/7.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i16.png b/assets/image/grid/bomb/animation/8.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i16.png rename to assets/image/grid/bomb/animation/8.png diff --git a/assets/image/grid/bomb/animation/bomb_anim_i15.png b/assets/image/grid/bomb/animation/9.png similarity index 100% rename from assets/image/grid/bomb/animation/bomb_anim_i15.png rename to assets/image/grid/bomb/animation/9.png diff --git a/source/gui/texture/Background.py b/source/gui/texture/Background.py index b6eb38c..7f8279b 100644 --- a/source/gui/texture/Background.py +++ b/source/gui/texture/Background.py @@ -1,10 +1,10 @@ -from . import _image_path +from . import path from .abc import Style -_image_path = _image_path + "background/" +path = path / "background" class Background(Style): - main = _image_path + "main.png" - game = _image_path + "game.png" + main = path / "main.png" + game = path / "game.png" diff --git a/source/gui/texture/Button.py b/source/gui/texture/Button.py index d6fae1b..feca348 100644 --- a/source/gui/texture/Button.py +++ b/source/gui/texture/Button.py @@ -1,11 +1,11 @@ -from . import _image_path +from . import path from .abc import Style -_image_path = _image_path + "button/" +path = path / "button" class Button: class Style1(Style): - normal = _image_path + "normal.png" - click = _image_path + "clicking.png" - hover = _image_path + "hovering.png" + normal = path / "normal.png" + click = path / "clicking.png" + hover = path / "hovering.png" diff --git a/source/gui/texture/Checkbox.py b/source/gui/texture/Checkbox.py index 069f76b..074ddda 100644 --- a/source/gui/texture/Checkbox.py +++ b/source/gui/texture/Checkbox.py @@ -1,10 +1,10 @@ -from . import _image_path +from . import path from .abc import Style -_image_path = _image_path + "checkbox/" +path = path / "checkbox" class Checkbox: class Style1(Style): - disabled = _image_path + "disabled.png" - enabled = _image_path + "enabled.png" + disabled = path / "disabled.png" + enabled = path / "enabled.png" diff --git a/source/gui/texture/Grid.py b/source/gui/texture/Grid.py index 9d75be7..f4b9a8e 100644 --- a/source/gui/texture/Grid.py +++ b/source/gui/texture/Grid.py @@ -1,17 +1,28 @@ -from . import _image_path +from . import path from .abc import Style -_image_path = _image_path + "grid/" -_image_boat_path = _image_path + "boat/" +path = path / "grid" +path_boat = path / "boat" +path_bomb = path / "bomb" class Grid: class Style1(Style): - background = _image_path + "background.png" + background = path / "background.png" class Boat: class Style1(Style): - body = _image_boat_path + "body.png" - edge = _image_boat_path + "edge.png" - broken = _image_boat_path + "broken.png" - solo = _image_boat_path + "solo.png" + body = path_boat / "body.png" + edge = path_boat / "edge.png" + broken = path_boat / "broken.png" + solo = path_boat / "solo.png" + + class Bomb: + class Style1(Style): + _animation = sorted( + (path_bomb / "animation").iterdir(), + key=lambda path: int(path.stem) + ) + + missed = [*_animation, path_bomb / "missed.png"], 0.03, False + touched = [*_animation, path_bomb / "touched.png"], 0.03, False diff --git a/source/gui/texture/Input.py b/source/gui/texture/Input.py index e8cf4e8..24580b1 100644 --- a/source/gui/texture/Input.py +++ b/source/gui/texture/Input.py @@ -1,11 +1,11 @@ -from . import _image_path +from . import path from .abc import Style -_image_path = _image_path + "input/" +path = path / "input" class Input: class Style1(Style): - normal = _image_path + "normal.png" - active = _image_path + "active.png" - error = _image_path + "error.png" + normal = path / "normal.png" + active = path / "active.png" + error = path / "error.png" diff --git a/source/gui/texture/Scroller.py b/source/gui/texture/Scroller.py index 5c5ac2d..be699fd 100644 --- a/source/gui/texture/Scroller.py +++ b/source/gui/texture/Scroller.py @@ -1,10 +1,10 @@ -from . import _image_path +from . import path from .abc import Style -_image_path = _image_path + "scroller/" +path = path / "scroller" class Scroller: class Style1(Style): - background = _image_path + "background.png" - cursor = _image_path + "cursor.png" + background = path / "background.png" + cursor = path / "cursor.png" diff --git a/source/gui/texture/__init__.py b/source/gui/texture/__init__.py index ce0c289..d191ac1 100644 --- a/source/gui/texture/__init__.py +++ b/source/gui/texture/__init__.py @@ -1,9 +1,10 @@ -_image_path: str = "./assets/image/" +from pathlib import Path +path: Path = Path("./assets/image") -from .Background import Background # NOQA: E402 -from .Button import Button # NOQA: E402 -from .Checkbox import Checkbox # NOQA: E402 -from .Grid import Grid # NOQA: E402 -from .Input import Input # NOQA: E402 -from .Scroller import Scroller # NOQA: E402 +from .Background import Background +from .Button import Button +from .Checkbox import Checkbox +from .Grid import Grid +from .Input import Input +from .Scroller import Scroller diff --git a/source/gui/texture/abc/Style.py b/source/gui/texture/abc/Style.py index ddf4265..246f530 100644 --- a/source/gui/texture/abc/Style.py +++ b/source/gui/texture/abc/Style.py @@ -1,4 +1,5 @@ from abc import ABC +from pathlib import Path from typing import Optional, Any import pyglet @@ -8,9 +9,23 @@ class Style(ABC): def __init_subclass__(cls, **kwargs): atlas = pyglet.image.atlas.TextureAtlas() - for name, path in cls.__dict__.items(): + for name, args in cls.__dict__.items(): if name.startswith("_"): continue - setattr(cls, name, atlas.add(pyglet.image.load(path))) + + if isinstance(args, Path): # if this is a normal path for a normal image + path = args + texture = atlas.add(pyglet.image.load(path)) + + elif isinstance(args, tuple): # if this is a tuple for an animation + paths, duration, loop = args + + textures = map(lambda path: atlas.add(pyglet.image.load(path)), paths) + texture = pyglet.image.Animation.from_image_sequence(textures, duration, loop) + + else: + raise ValueError(f"Invalid type : {type(args)}") + + setattr(cls, name, texture) setattr(cls, "_atlas", atlas) diff --git a/source/gui/widget/grid/GameGridAlly.py b/source/gui/widget/grid/GameGridAlly.py index 5cecffb..2a913e8 100644 --- a/source/gui/widget/grid/GameGridAlly.py +++ b/source/gui/widget/grid/GameGridAlly.py @@ -1,5 +1,5 @@ from copy import copy -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Type import pyglet import numpy as np @@ -8,6 +8,7 @@ from source.core.enums import Orientation from source.core.error import InvalidBoatPosition from source.gui import texture from source.gui.sprite import Sprite +from source.gui.texture.abc import Style from source.gui.widget.grid.abc import GameGrid from source.core import Board, Boat from source.type import Point2D, ColorRGB @@ -20,13 +21,18 @@ if TYPE_CHECKING: class GameGridAlly(GameGrid): def __init__(self, scene: "Scene", + rows: int, + columns: int, + + style: Type[Style], + boats_length: list[int], preview_color: ColorRGB = (150, 255, 150), **kwargs): self.cell_sprites: dict[Point2D, "Sprite"] = {} - super().__init__(scene, **kwargs) + super().__init__(scene, rows, columns, style, **kwargs) self.boats_length = boats_length # the list of the size of the boats to place self.preview_color = preview_color diff --git a/source/gui/widget/grid/GameGridEnemy.py b/source/gui/widget/grid/GameGridEnemy.py index a0c8802..be82a51 100644 --- a/source/gui/widget/grid/GameGridEnemy.py +++ b/source/gui/widget/grid/GameGridEnemy.py @@ -1,5 +1,10 @@ +from typing import Type + +from source.gui.texture.abc import Style from source.gui.widget.grid.abc import GameGrid class GameGridEnemy(GameGrid): - pass + def __init__(self, scene: "Scene", rows: int, columns: int, style: Type[Style], **kwargs): + super().__init__(scene, rows, columns, style, **kwargs) + diff --git a/source/type.py b/source/type.py index c0488da..af980a6 100644 --- a/source/type.py +++ b/source/type.py @@ -8,4 +8,4 @@ ColorRGBA = tuple[int, int, int, int] DistanceFunction = Callable[[Any], int] # a function that return a distance # a distance, represented either by a whole number, a percentage or a function -Distance = Union[Percentage, int, DistanceFunction] \ No newline at end of file +Distance = Union[Percentage, int, DistanceFunction]