|
|
|
@ -1,17 +1,19 @@ |
|
|
|
# Enne2Engine |
|
|
|
# Enne2Engine |
|
|
|
 |
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
Un semplice motore di gioco 2D sviluppato in Python con supporto per SDL2 e Pyglet. |
|
|
|
Un semplice motore di gioco 2D isometrico sviluppato in Python con supporto per SDL2. |
|
|
|
|
|
|
|
|
|
|
|
## Caratteristiche |
|
|
|
## Caratteristiche |
|
|
|
|
|
|
|
|
|
|
|
- Supporto per più backend grafici (SDL2, Pyglet) |
|
|
|
- Supporto per più backend grafici |
|
|
|
- Sistema di rendering di sprite e tilesheet |
|
|
|
- Sistema di rendering di sprite e tilesheet |
|
|
|
- Gestione delle animazioni tramite file JSON |
|
|
|
- Gestione delle animazioni tramite file JSON |
|
|
|
- Sistema di controllo utente e gestione eventi |
|
|
|
- Sistema di controllo utente e gestione eventi |
|
|
|
- Trasformazioni di coordinate isometriche |
|
|
|
- Trasformazioni di coordinate isometriche |
|
|
|
- Sistema di selezione entità |
|
|
|
- Sistema di selezione singola e multipla di entità |
|
|
|
- Gestione degli asset semplificata |
|
|
|
- Gestione degli asset semplificata |
|
|
|
|
|
|
|
- Supporto per mappe basate su tile con ombreggiatura |
|
|
|
|
|
|
|
- Pathfinding per le unità di gioco |
|
|
|
|
|
|
|
|
|
|
|
## Prerequisiti |
|
|
|
## Prerequisiti |
|
|
|
|
|
|
|
|
|
|
|
@ -23,11 +25,11 @@ Un semplice motore di gioco 2D sviluppato in Python con supporto per SDL2 e Pygl |
|
|
|
|
|
|
|
|
|
|
|
1. Clona il repository: |
|
|
|
1. Clona il repository: |
|
|
|
```bash |
|
|
|
```bash |
|
|
|
git clone https://github.com/tuousername/enne2engine.git |
|
|
|
git clone https://git.enne2.net/enne2/enne2engine |
|
|
|
cd enne2engine |
|
|
|
cd enne2engine |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
2. Installa le dipendenze: |
|
|
|
2. Installa le dipendenze con Python 3.13 |
|
|
|
```bash |
|
|
|
```bash |
|
|
|
pip install -r requirements.txt |
|
|
|
pip install -r requirements.txt |
|
|
|
``` |
|
|
|
``` |
|
|
|
@ -36,17 +38,56 @@ pip install -r requirements.txt |
|
|
|
|
|
|
|
|
|
|
|
### Avvio della demo |
|
|
|
### Avvio della demo |
|
|
|
|
|
|
|
|
|
|
|
Per avviare la demo con il backend SDL2 (predefinito): |
|
|
|
Per avviare la demo con il backend SDL2: |
|
|
|
```bash |
|
|
|
```bash |
|
|
|
python engine_demo.py |
|
|
|
python engine_demo.py |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Per avviare la demo con il backend Pyglet: |
|
|
|
### Sistema di Entità |
|
|
|
```bash |
|
|
|
|
|
|
|
python engine_demo.py --pyglet |
|
|
|
L'engine supporta un sistema di entità per la creazione di unità di gioco: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```python |
|
|
|
|
|
|
|
from Entities.Units.marine import Marine |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Creazione di un'unità Marine |
|
|
|
|
|
|
|
marine = Marine("knight", x=5, y=10, animation="idle", speed=1, health=100, game_engine=engine) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Aggiunta dell'unità al gioco |
|
|
|
|
|
|
|
game.entities.append(marine) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Selezionare e muovere l'unità |
|
|
|
|
|
|
|
marine.select_unit() |
|
|
|
|
|
|
|
marine.set_target_cell((10, 8)) # L'unità inizierà a muoversi verso questo punto |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Sistema Isometrico |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Il motore supporta trasformazioni isometriche per la visualizzazione 2.5D: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```python |
|
|
|
|
|
|
|
# Trasformazione da coordinate di mappa a coordinate schermo |
|
|
|
|
|
|
|
screen_x, screen_y = graphics.iso_transform(map_x, map_y) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Trasformazione da coordinate schermo a coordinate di mappa |
|
|
|
|
|
|
|
map_x, map_y = graphics.inv_iso_transform(screen_x, screen_y) |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Gestione delle Mappe |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Le mappe sono definite tramite file JSON: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```json |
|
|
|
|
|
|
|
[ |
|
|
|
|
|
|
|
[0, 1, 2, 3], |
|
|
|
|
|
|
|
[4, 5, 6, 7], |
|
|
|
|
|
|
|
[8, 9, 10, 11] |
|
|
|
|
|
|
|
] |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
### Creazione di un nuovo progetto |
|
|
|
Dove ogni numero rappresenta un indice di tile nel tilesheet. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Creazione di un nuovo progetto |
|
|
|
|
|
|
|
|
|
|
|
```python |
|
|
|
```python |
|
|
|
from enne2engine.sdl2_wrapper import SDL2Wrapper |
|
|
|
from enne2engine.sdl2_wrapper import SDL2Wrapper |
|
|
|
@ -89,22 +130,50 @@ if __name__ == "__main__": |
|
|
|
- `pyglet_wrapper.py`: Wrapper per Pyglet |
|
|
|
- `pyglet_wrapper.py`: Wrapper per Pyglet |
|
|
|
- `controls.py`: Sistema di gestione degli input utente |
|
|
|
- `controls.py`: Sistema di gestione degli input utente |
|
|
|
- `assets/`: Contiene gli asset di esempio |
|
|
|
- `assets/`: Contiene gli asset di esempio |
|
|
|
- `KnightBasic/`: Animazioni del cavaliere |
|
|
|
- `KnightBasic/`: Animazioni del cavaliere (Idle, Run, Walk, Die, Attack) |
|
|
|
- `tiles/`: Tileset di esempio |
|
|
|
- `tiles/`: Tileset di esempio |
|
|
|
|
|
|
|
- `maps/`: Mappe di esempio in formato JSON |
|
|
|
- `Entities/`: Definizioni delle entità di gioco |
|
|
|
- `Entities/`: Definizioni delle entità di gioco |
|
|
|
|
|
|
|
- `Units/`: Unità di gioco come Marines |
|
|
|
- `engine_demo.py`: Demo del motore |
|
|
|
- `engine_demo.py`: Demo del motore |
|
|
|
|
|
|
|
|
|
|
|
## Gestione degli Asset |
|
|
|
## Formato delle Animazioni |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Le animazioni sono definite in file JSON con il seguente formato: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```json |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
"frames": [ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
"frame": {"x": 0, "y": 0, "w": 256, "h": 256}, |
|
|
|
|
|
|
|
"duration": 100 |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
"frame": {"x": 256, "y": 0, "w": 256, "h": 256}, |
|
|
|
|
|
|
|
"duration": 100 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
"meta": { |
|
|
|
|
|
|
|
"app": "https://pixelover.io", |
|
|
|
|
|
|
|
"frameAnimations": [ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
"name": "Walk", |
|
|
|
|
|
|
|
"fps": 10, |
|
|
|
|
|
|
|
"from": 0, |
|
|
|
|
|
|
|
"to": 10 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
"direction": 0 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Il motore supporta il caricamento di spritesheet e tilesheet: |
|
|
|
## Rendering e Performance |
|
|
|
|
|
|
|
|
|
|
|
```python |
|
|
|
Il motore include funzionalità per ottimizzare le performance: |
|
|
|
# Caricamento di un tilesheet |
|
|
|
- Rendering di background in texture separate |
|
|
|
graphics.load_tilesheet("tiles", "percorso/al/tilesheet.png") |
|
|
|
- Texture targeting per operazioni di disegno efficiente |
|
|
|
|
|
|
|
- Conteggio FPS e regolazione del frame timing |
|
|
|
# Caricamento di un'animazione tramite file JSON |
|
|
|
|
|
|
|
graphics.load_spritesheet("personaggio", "percorso/al/animazione.json") |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Licenza |
|
|
|
## Licenza |
|
|
|
|
|
|
|
|
|
|
|
|