Scala-Game-Engine

Design di dettaglio

Dato il modello del dominio analizzato in requisiti e specifica questo diagramma ne mostra invece il lato di progettazione. Diagramma del design di dettaglio

Behaviour

Behaviour rappresenta il comportamento di un oggetto ed è il punto principale nel quale l’utente definisce la sua logica applicativa. Può essere attivo o disattivo, questo implica che salterà o meno certe fasi del game loop. Ogni behaviour possiede dei metodi che vengono chiamati dall’engine in momenti specifici del game loop:

Questi metodi ricevono come parametro l’Engine in modo da poterci interagire.

IO

IO è pensato per essere implementato in modo che si possa definire un qualsiasi proprio sistema di input/output.

Le classi che implementano IO possono inoltre agganciarsi a un momento specifico del game loop ovvero la fine dell’elaborazione di un frame, attraverso il metodo onFrameEnd, oppure alla fine dell’intero game loop attraverso il metodo onEngineStop.

Le specifiche implementazioni di IO forniranno ai behaviour addetti al rendering o all’input tutte le informazioni e i riferimenti di cui hanno bisogno per svolgere il loro compito.

Questo implica che l’utente utilizzando una specifica implementazione di IO assuma nei behaviour che quella sia l’implementazione sottostante.

Il caso nel quale l’utente volesse implementare più di un tipo di IO contemporaneamente sarebbe comunque realizzabile sotto al concetto di singolo IO.

Scene

Siccome l’engine non ha i concetti di scene o di scena attiva, ma solo di game object, allora Scene rappresenta una struttura dati che memorizza come gli oggetti andranno creati quando questa verrà caricata dall’engine.

Storage

Storage fornisce la possibilità all’utente di salvare coppie chiave valore in modo da permettere la persistenza di alcuni dati, cosa molto utile nel caso di passaggio da una scena all’altra.

Engine

Engine è il motore di gioco che orchestra tutti gli altri componenti e mette a disposizione le API per farli interagire.

L’utente può:

Inoltre engine mette a disposizione un riferimento ad IO, uno a Storage e l’informazione di quanto tempo è trascorso dall’utlimo frame (deltaTimeNanos).

Gameloop

Diagramma di attività del gameloop