https://github.com/aermoss/reforge
A 2D game engine written in Python using PySDL2, PySDL3 and PyGame.
https://github.com/aermoss/reforge
2d-game-engine 2d-graphics abstraction-layer engine game-engine low-level-graphics pygame sdl2 sdl3
Last synced: 6 months ago
JSON representation
A 2D game engine written in Python using PySDL2, PySDL3 and PyGame.
- Host: GitHub
- URL: https://github.com/aermoss/reforge
- Owner: Aermoss
- License: mit
- Created: 2024-02-26T21:36:17.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-25T19:52:28.000Z (10 months ago)
- Last Synced: 2025-04-09T03:51:12.152Z (9 months ago)
- Topics: 2d-game-engine, 2d-graphics, abstraction-layer, engine, game-engine, low-level-graphics, pygame, sdl2, sdl3
- Language: Python
- Homepage:
- Size: 41 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# ReForge [Forge IV]
A 2D game engine written in Python using PySDL2, PySDL3 and PyGame.
# Getting Started
## How to install.
```
pip install ReForge
```
# Examples
## Creating a window.
```python
import os
os.environ["REFORGE_API"] = "sdl3"
import reforge, ctypes
def reforgeEntry(argc: int, argv: list[str]) -> int:
context = reforge.Context()
context.makeContextCurrent()
window = reforge.Window(title = "ReForge", width = 1200, height = 600)
context.registerWindow(window)
renderer = reforge.Renderer(window)
scene = reforge.Scene()
while not context.isTerminated():
context.pollEvents()
renderer.clear(reforge.Vector4(0.0, 0.0, 0.0, 255.0))
renderer.renderScene(scene)
renderer.present()
context.terminate()
return reforge.exitSuccess
```
## Rendering a rect.
```python
import os
os.environ["REFORGE_API"] = "sdl3"
import reforge, ctypes
def reforgeEntry(argc: int, argv: list[str]) -> int:
context = reforge.Context()
context.makeContextCurrent()
window = reforge.Window(title = "ReForge", width = 1200, height = 600)
context.registerWindow(window)
renderer = reforge.Renderer(window)
scene = reforge.Scene()
entity = scene.createEntity()
entity.addComponent(reforge.RectComponent(fill = False, color = reforge.Vector4(0.0, 128.0, 128.0, 255.0)))
entity.getComponent(reforge.TransformComponent).scale = reforge.Vector2(200.0, 200.0)
entity.getComponent(reforge.TransformComponent).position = \
window.size / 2.0 - entity.getComponent(reforge.TransformComponent).scale / 2.0
while not context.isTerminated():
context.pollEvents()
renderer.clear(reforge.Vector4(0.0, 0.0, 0.0, 255.0))
renderer.renderScene(scene)
renderer.present()
renderer.terminate()
context.terminate()
return reforge.exitSuccess
```
## Using the low-level API.
```python
import os
os.environ["REFORGE_API"] = "sdl3"
import reforge, ctypes
def reforgeEntry(argc: int, argv: list[str]) -> int:
context = reforge.api.Context()
window = reforge.api.Window(title = "ReForge", width = 1200, height = 600)
renderer = reforge.api.Renderer(window)
inputHandler = reforge.api.Input(window)
eventHandler = reforge.api.EventHandler()
event = reforge.api.Event()
running = True
while running:
while eventHandler.pollEvents(event):
if event.type == reforge.api.EventType.WindowClosed:
running = False
inputHandler.eventHandler(event)
if inputHandler.keyboard.keys[reforge.api.Key.Escape]:
running = False
renderer.clear(reforge.Vector4(0.0, 0.0, 0.0, 255.0))
renderer.present()
eventHandler.terminate()
inputHandler.terminate()
renderer.terminate()
window.terminate()
context.terminate()
return reforge.exitSuccess
```