You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Matteo Benedetto ce74da63ba Enhance marine unit functionality: update visibility logic, improve movement handling, and refactor ray casting for better performance and clarity. 4 months ago
Entities Enhance marine unit functionality: update visibility logic, improve movement handling, and refactor ray casting for better performance and clarity. 4 months ago
assets Refactor code structure for improved readability and maintainability 7 months ago
conf Refactor code structure for improved readability and maintainability 7 months ago
enne2engine Enhance marine unit functionality: update visibility logic, improve movement handling, and refactor ray casting for better performance and clarity. 4 months ago
.gitignore Refactor code structure for improved readability and maintainability 7 months ago
README.md Update README.md for clarity and completeness; add requirements.txt for core dependencies 7 months ago
game_adv.py Enhance marine unit functionality: update visibility logic, improve movement handling, and refactor ray casting for better performance and clarity. 4 months ago
game_rts.py Refactor engine and rendering system: move SDL2 logic to render.py, update entity/game structure, clean up unused files, and fix event handling. Major codebase reorganization for maintainability. 4 months ago
logo.jpg Refactor code structure and improve readability in multiple modules 7 months ago
requirements.txt Refactor engine and rendering system: move SDL2 logic to render.py, update entity/game structure, clean up unused files, and fix event handling. Major codebase reorganization for maintainability. 4 months ago

README.md

Enne2Engine

Enne2Engine Logo

Un semplice motore di gioco 2D isometrico sviluppato in Python con supporto per SDL2.

Caratteristiche

  • Supporto per più backend grafici
  • Sistema di rendering di sprite e tilesheet
  • Gestione delle animazioni tramite file JSON
  • Sistema di controllo utente e gestione eventi
  • Trasformazioni di coordinate isometriche
  • Sistema di selezione singola e multipla di entità
  • Gestione degli asset semplificata
  • Supporto per mappe basate su tile con ombreggiatura
  • Pathfinding per le unità di gioco

Prerequisiti

  • Python 3.7+
  • SDL2 (per l'utilizzo del backend SDL2)
  • Pyglet (per l'utilizzo del backend Pyglet)

Installazione

  1. Clona il repository:
git clone https://git.enne2.net/enne2/enne2engine
cd enne2engine
  1. Installa le dipendenze con Python 3.13
pip install -r requirements.txt

Utilizzo

Avvio della demo

Per avviare la demo con il backend SDL2:

python engine_demo.py

Sistema di Entità

L'engine supporta un sistema di entità per la creazione di unità di gioco:

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:

# 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:

[
  [0, 1, 2, 3],
  [4, 5, 6, 7],
  [8, 9, 10, 11]
]

Dove ogni numero rappresenta un indice di tile nel tilesheet.

Creazione di un nuovo progetto

from enne2engine.sdl2_wrapper import SDL2Wrapper
from enne2engine.controls import UserControls

class MioGioco(UserControls):
    def __init__(self):
        super().__init__()
        self.graphics = SDL2Wrapper(self)
        # Inizializzazione delle risorse e della logica di gioco
        self.load_assets()
        
    def run(self):
        running = True
        while running:
            event = self.graphics.handle_events()
            if event == "QUIT":
                running = False
            
            self.graphics.clear_screen()
            # Logica di rendering
            self.graphics.present_renderer()
        
        self.graphics.quit()
        
    def load_assets(self):
        # Caricamento delle risorse
        self.graphics.load_tilesheet("tiles", "assets/tiles/my_tiles.png")
        self.graphics.load_spritesheet("player", "assets/player/player_animations.json")

if __name__ == "__main__":
    gioco = MioGioco()
    gioco.run()

Struttura del Progetto

  • enne2engine/: Moduli principali del motore
    • sdl2_wrapper.py: Wrapper per SDL2
    • pyglet_wrapper.py: Wrapper per Pyglet
    • controls.py: Sistema di gestione degli input utente
  • assets/: Contiene gli asset di esempio
    • KnightBasic/: Animazioni del cavaliere (Idle, Run, Walk, Die, Attack)
    • tiles/: Tileset di esempio
    • maps/: Mappe di esempio in formato JSON
  • Entities/: Definizioni delle entità di gioco
    • Units/: Unità di gioco come Marines
  • engine_demo.py: Demo del motore

Formato delle Animazioni

Le animazioni sono definite in file JSON con il seguente formato:

{
  "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
  }
}

Rendering e Performance

Il motore include funzionalità per ottimizzare le performance:

  • Rendering di background in texture separate
  • Texture targeting per operazioni di disegno efficiente
  • Conteggio FPS e regolazione del frame timing

Licenza

Questo progetto è rilasciato sotto la licenza MIT.