Ho una classe GameState
progettata per contenere una matrice di giocatori, un Array
di StarSystems
e alcuni altri campi che devono persistere dal salvataggio al salvataggio. Ogni GameObject
tiene traccia del proprio ID, che è anche il suo indice nel suo array e l'id dei relativi oggetti di gioco.
public class GameState implements Json.Serializable
{
private Array<StarSystem> systems;
private Array<Player> players;
//Methods used to access data and some utilities
}
Ogni StarSystem
nella GameState
memorizza un Array
di Planet
e una Stella o tre, che a loro volta contengono informazioni su temperatura e abitabilità. Class Star si estende dal pianeta e ha 0 abitabilità. La classe StarSystem
ha anche riferimenti a tutte le flotte presenti nel sistema, i loro proprietari. La classe Fleet
contiene un elenco di istanze Ship presenti nella flotta e le informazioni pertinenti per ogni nave.
Ho progettato questo sistema per due motivi:
- Volevo essere in grado di chiamare 'Json.toJson (Object)' una volta quando salvo il gioco invece di passare e salvare ogni oggetto singolarmente.
- Prima di questo il mio codice era molto disorganizzato e avevo strani riferimenti a varie cose disseminate nel codice. Questo è più pulito.
Sfortunatamente questo ha anche abbassato il FPS dal 35-40 al 20-25, il che mi fa schifo e probabilmente ticcherebbe anche qualsiasi utente. In altre parole, sto chiedendo come posso migliorare questo design?
Note: la natura indicizzata indica che per un Planet.ProductionQueue
per aggiungere un nuovo Fighter
a Fleet
SomeFleet di Player
A, deve prima chiamare GameInstance.getInstance().getState().getSystem(parent_system).getFleet(fleet_target_id).addShip(new Fighter(owner_id, getLeastPowerfulCommandShip().getID()))
Nota che sto usando anche libGdx e che la classe Json di cui ho parlato fa parte della libreria.