A hot reload enhancer for pygame developement
Project description
pygame-hotreload
Table of Contents
Installation
pip install pygame-hotreload
How it work
The pygame-hotreload
module is a simple hot-reload module for pygame. It is partialy parse the main python file provided.
It looks for these comments in the main file:
imports-start-hotreload
# imports-start-hotreload
...
# imports-end-hotreload
This is where the module will look for the imports that needed for the game loop.
globals-start-hotreload
# globals-start-hotreload
...
# globals-end-hotreload
This is where the module will look for the global variables that needed for the game loop.
init-start-hotreload
# init-start-hotreload
...
# init-end-hotreload
This is where the module will look for the initialization of the game loop. There is where you should initialize your global variables.
loop-start-hotreload
# loop-start-hotreload
...
# loop-end-hotreload
This is where the module will look for the game loop.
Example
game.py
# game.py
from pygame_hotreload import HotReload, set_caption
# imports-start-hotreload
import pygame
# imports-end-hotreload
# Initialize pygame
pygame.init()
# Set the window caption
set_caption("Hot Reload Example")
clock = pygame.time.Clock()
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
# globals-start-hotreload
global dt
global player_pos
global player_pos_2
# globals-end-hotreload
# init-start-hotreload
def init():
global dt
global player_pos
global player_pos_2
dt = 0
player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
player_pos_2 = pygame.Vector2(screen.get_width() // 3, screen.get_height() // 3)
# init-end-hotreload
# loop-start-hotreload
def loop():
global dt
global player_pos
global player_pos_2
screen.fill("black")
pygame.draw.rect(screen, "purple",
pygame.Rect(player_pos.x, player_pos.y, 100, 100))
pygame.draw.rect(screen, "purple",
pygame.Rect(player_pos_2.x, player_pos_2.y, 100, 100), 1)
keys = pygame.key.get_pressed()
if keys[pygame.K_z] or keys[pygame.K_UP]:
player_pos.y -= 300 * dt
if keys[pygame.K_s] or keys[pygame.K_DOWN]:
player_pos.y += 300 * dt
if keys[pygame.K_q] or keys[pygame.K_LEFT]:
player_pos.x -= 300 * dt
if keys[pygame.K_d] or keys[pygame.K_RIGHT]:
player_pos.x += 300 * dt
dt = clock.tick(60) / 1000
# loop-end-hotreload
# Initialize the hot reload
hotreload = HotReload(
main_file=__file__,
screen=screen,
clock=clock,
clock_tick=60,
gen_script_name="gen.py",
)
hotreload.run()
gen.py
import pygame
global dt
global player_pos
global player_pos_2
def init():
global dt
global player_pos
global player_pos_2
dt = 0
player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
player_pos_2 = pygame.Vector2(screen.get_width() // 3, screen.get_height() // 3)
def loop():
global dt
global player_pos
global player_pos_2
screen.fill("black")
pygame.draw.rect(screen, "purple",
pygame.Rect(player_pos.x, player_pos.y, 100, 100))
pygame.draw.rect(screen, "purple",
pygame.Rect(player_pos_2.x, player_pos_2.y, 100, 100), 1)
keys = pygame.key.get_pressed()
if keys[pygame.K_z] or keys[pygame.K_UP]:
player_pos.y -= 300 * dt
if keys[pygame.K_s] or keys[pygame.K_DOWN]:
player_pos.y += 300 * dt
if keys[pygame.K_q] or keys[pygame.K_LEFT]:
player_pos.x -= 300 * dt
if keys[pygame.K_d] or keys[pygame.K_RIGHT]:
player_pos.x += 300 * dt
dt = clock.tick(60) / 1000
Contributing
Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given.
Development
To set up pygame-hotreload
for local development:
- Fork the
pygame-hotreload
repository. - Clone your fork locally
- Use
pipenv shell
to enter the virtual environment - Use
pipenv install
to install all dependencies - Make a change, and push your local branch to your fork
- Make a pull request
- You can build your own version of the project with
hatch version beta && hatch build --wheel
and install it withpipenv install dist/pygame_hotreload-<VERSION>-py3-none-any.whl
License
pygame-hotreload
is distributed under the terms of the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pygame_hotreload-0.0.32.tar.gz
.
File metadata
- Download URL: pygame_hotreload-0.0.32.tar.gz
- Upload date:
- Size: 17.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.24.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5af1da2a7f8eb27c3541fad997b3fff31d5c5b378613cab45aece8fc6cd7f85 |
|
MD5 | d4692315f933016b851d2a8eff1e1722 |
|
BLAKE2b-256 | 632d2591476f125acf7bc1906e16893876051d45210330aedef0c8955c52dd6c |
File details
Details for the file pygame_hotreload-0.0.32-py3-none-any.whl
.
File metadata
- Download URL: pygame_hotreload-0.0.32-py3-none-any.whl
- Upload date:
- Size: 6.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.24.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8f5a4b45ca4762397bc5d66ee664d8a22f664ebac95e9eeff6a274b9bf5b27f0 |
|
MD5 | e3ea95a20548f8fe14434e78d3d4ae86 |
|
BLAKE2b-256 | 27e820acb7f81c14f2d4bab46ff5d13773b2075a64ae662a1280314f96e2a152 |