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. 7 months ago
Entities Enhance marine unit functionality: update visibility logic, improve movement handling, and refactor ray casting for better performance and clarity. 7 months ago
assets Refactor code structure for improved readability and maintainability 10 months ago
conf Refactor code structure for improved readability and maintainability 10 months ago
enne2engine Enhance marine unit functionality: update visibility logic, improve movement handling, and refactor ray casting for better performance and clarity. 7 months ago
.gitignore Refactor code structure for improved readability and maintainability 11 months ago
README.md Update README.md for clarity and completeness; add requirements.txt for core dependencies 10 months ago
game_adv.py Enhance marine unit functionality: update visibility logic, improve movement handling, and refactor ray casting for better performance and clarity. 7 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. 7 months ago
logo.jpg Refactor code structure and improve readability in multiple modules 11 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. 7 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.