Beispiele: Gamestate

Die Variable

Es ist möglich mit diesem Paket den Gamestate abzuprüfen. (Das hat der Name fast erahnen lassen, nicht?)

Dabei gibt es nun zwei Möglichkeiten: Entweder man schmiert sich direkt die Init_Global voll, oder man macht es lässig mit dem EventHandler.
Auch wenn ich zweifellos letztere Methode bevorzuge seien beide erwähnt und erläutert.

Beginnen wir mit Nummer 1:func void Init_Global() {
// [...]

LeGo_Init(LeGo_All); // Ein wahrer Fan initialisiert alles!

if(Gamestate == Gamestate_NewGame) {
MEM_Info("Neues Spiel gestartet.");
}
else if(Gamestate == Gamestate_Loaded) {
MEM_Info("Spiel geladen.");
}
else if(Gamestate == Gamestate_WorldChange) {
MEM_Info("Weltenwechsel.");
}
else {
MEM_Info("Ich passiere nie.");
};
};
Das war schon alles was das Paket kann.
Der Sinn ist erkennbar, hoffe ich: Sachen die man zB. mit PermMem machen möchte, also das ganze Spiel über existieren kann man im ersten Block abhandeln. Ein PermMem-Objekt braucht nach einem geladenen Spiel nicht neu erzeugt werden.. Das ist ja genau nicht der Sinn der Sache.

Ebenso kann man sich so etwas erdenken:func void Init_Global() {
// [...]

LeGo_Init(LeGo_All); // Ein wahrer Fan initialisiert IMMER alles!

if(Gamestate == Gamestate_NewGame) {
FF_Apply(MyLoop);
FF_Apply(My2ndLoop);
};
};
Das hätte den gleichen Effekt wie:
func void Init_Global() {
// [...]

LeGo_Init(LeGo_All);

FF_ApplyOnce(MyLoop);
FF_ApplyOnce(My2ndLoop);
};
Ist aber einen Tick schneller, und sieht außerdem (meiner Meinung nach) besser aus. Das ist aber Geschmackssache.

Achja.. Den zweiten Punkt hätte ich fast vergessen:

Der EventHandler

Der ist schnell erklärt:
func void Init_Global() {
// [...]

LeGo_Init(LeGo_All);

Gamestate_AddListener(MyGamestateListener);
};

func void MyGamestateListener(var int state) {
if(state == Gamestate_NewGame) {
MEM_Info("Neues Spiel gestartet.");
}
else if(state == Gamestate_Loaded) {
MEM_Info("Spiel geladen.");
}
else if(state == Gamestate_WorldChange) {
MEM_Info("Weltenwechsel.");
}
else {
MEM_Info("Ich passiere nie.");
};
};
Bis auf das der Listener ausgelagert ist ist alles beim Alten.
Vorteil: Es sieht besser aus. Mehr eigentlich nicht.