Compare commits

...

7 Commits

Author SHA1 Message Date
265322f58b My bad team, this one will work for sure 2025-06-22 18:09:09 +01:00
5dbd9211de Added awaitingTimeout function (not tested, good luck team) 2025-06-22 18:00:42 +01:00
2a0def7fa6 Added NoPELib integration 2025-06-22 17:36:43 +01:00
08d6261d3f Updated version 2025-06-21 23:08:39 +01:00
95afab5431 Implemented centre() 2025-06-21 23:03:38 +01:00
d897a3744d Added documentation for createAnimObj() 2025-06-21 23:03:27 +01:00
4161ec9c5b Added timeouts 2025-06-21 23:03:11 +01:00
5 changed files with 82 additions and 11 deletions

View File

@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "gameUtils" name = "gameUtils"
version = "0.0.1.dev0" version = "1.0.0"
description = "A set of utilities to make the game development process less painful (despite the organisation name) and more unified." description = "A set of utilities to make the game development process less painful (despite the organisation name) and more unified."
authors = [{ name = "Brosef" }] authors = [{ name = "Brosef" }]
dependencies = ["pygame-ce"] dependencies = ["pygame-ce"]

View File

@ -4,3 +4,4 @@ from .anim import AnimationHandler
from .anim import AnimatedObject from .anim import AnimatedObject
from .events import AnimStart from .events import AnimStart
from .events import AnimFinish from .events import AnimFinish
from .events import Timeout

View File

@ -1,5 +1,8 @@
from .events import Timeout
from .anim import AnimatedObject from .anim import AnimatedObject
import NoPELib
import tomllib import tomllib
import time
class Game: class Game:
def __init__(self, surface): def __init__(self, surface):
@ -10,15 +13,24 @@ class Game:
surface (pygame.Surface): The surface the game devs draw on. surface (pygame.Surface): The surface the game devs draw on.
""" """
self.surf = surface
self.size = self.surf.size
self.pm = None
with open('./game.toml', 'r') as f: with open('./game.toml', 'r') as f:
self.cfg = tomllib.loads(f.read()) self.cfg = tomllib.loads(f.read())
self.surf = surface
self.size = self.surf.size
self.pm = NoPELib.PlayersManager(self.cfg['name'], playersPath='../players.json')
# Holds all the timeouts that haven't been fired yet
self._timeouts = []
def update(self): def update(self):
pass """
Updates some core things in the background.
"""
for timeout in self._timeouts.copy():
if timeout.fireOn <= time.perf_counter():
self.onEvent(timeout)
self._timeouts.remove(timeout)
def onEvent(self, event): def onEvent(self, event):
pass pass
@ -27,4 +39,39 @@ class Game:
pass pass
def createAnimObj(self, *args, **kwargs): def createAnimObj(self, *args, **kwargs):
"""
Creates an animated object.
Args:
objectID (str): The ID of the object.
baseFrame (str): The path to the base frame.
"""
return AnimatedObject(self, *args, **kwargs) return AnimatedObject(self, *args, **kwargs)
def timeout(self, id: str, delay: float):
"""
Fires a Timeout event with the specified ID
after the specified delay.
Args:
id (str): The timeout ID.
delay (float): How long (in seconds)
to wait before firing.
"""
self._timeouts.append(Timeout(id, time.perf_counter()+delay))
def awaitingTimeout(self, id: str):
"""
Tells you if a timeout ID is on the timeout stack.
Args:
id (str): The timeout ID.
Returns:
bool: True if there is a timeout with that ID
ID on the stack, False otherwise.
"""
return any([timeout.timeoutID == id for timeout in self._timeouts])

View File

@ -1,3 +1,5 @@
import time
class _event: class _event:
def __init__(self): def __init__(self):
self.type = self.__class__ self.type = self.__class__
@ -19,3 +21,16 @@ class AnimFinish(_event):
def __repr__(self): def __repr__(self):
return f'<AnimFinish | {self.objectID=} | {self.animationID=}>' return f'<AnimFinish | {self.objectID=} | {self.animationID=}>'
class Timeout(_event):
def __init__(self, timeoutID, fireOn):
super().__init__()
# The timeout ID specified by the user
self.timeoutID = timeoutID
# When the event should be fired
self.fireOn = fireOn
# When it was created
self.created = time.perf_counter()
def __repr__(self):
return f'<Timeout | {self.timeoutID=} | {self.fireOn=} | {self.created=}>'

View File

@ -1,14 +1,22 @@
import pygame import pygame
def centre(surface: pygame.Surface, rect: tuple[int, int, int, int]) -> pygame.Surface: def centre(surface: pygame.Surface, size: tuple[int, int]) -> pygame.Surface:
""" """
Centres a surface within a given rectangle. Centres a surface within a given rectangle.
Args: Args:
surface: The surface to be centred. surface: The surface to be centred.
rect: The rectangle the surface will be centred in. size: The size of the rectangle the surface will be centred in.
Returns: Returns:
pygame.Surface pygame.Surface
""" """
pass
surf = pygame.Surface(size)
offX = surf.size[0]//2 - surface.size[0]//2
offY = surf.size[1]//2 - surface.size[1]//2
surf.blit(surface, (offX, offY))
return surf