Przejdź do treści

Gamestate - stan gry

Pakiet Gamestate pozwala sprawdzić stan gry (rozpoczęcie gry, ładowanie gry lub zmiana poziomu).

Zależności

Inicjalizacja

Zainicjuj za pomocą flagi LeGo_Gamestate.

LeGo_Init(LeGo_Gamestate);

Implementacja

Gamestate.d na GitHubie

Funkcje

Gamestate_AddListener

Dodaje listener/handler zmiany stanu gry.

func void Gamestate_AddListener(var func listener)
Parametry
  • var func listener
    Ta funkcja zostanie wywołana przy zmianie stanu gry. Bieżący stan gry jest przekazywany jako parametr.

Gamestate_RemoveListener

Usuwa listener zmiany stanu gry.

func void Gamestate_RemoveListener(var func listener)
Parametry
  • var func listener
    Listener do usunięcia.

Przykłady

Istnieją teraz dwie możliwości. Wszystko można zrobić bezpośrednio w Init_Global lub za pomocą EventHandler.

Init_Global

func void Init_Global()
{
    // [...]

    LeGo_Init(LeGo_All);

    if(Gamestate == Gamestate_NewGame) 
    {
        MEM_Info("Nowa gra rozpoczęta.");
    }
    else if(Gamestate == Gamestate_Loaded)
    {
        MEM_Info("Ładowanie gry.");
    }
    else if(Gamestate == Gamestate_WorldChange)
    {
        MEM_Info("Zmiana świata.");
    }
    else
    {
        MEM_Info("Brak zmiany stanu gry");
    };
};

Można to również zrobić tak:

func void Init_Global()
{
    // [...]

    LeGo_Init(LeGo_All);

    if(Gamestate == Gamestate_NewGame)
    {
        FF_Apply(MyLoop);
        FF_Apply(My2ndLoop);
    };
};
Dałoby to taki sam efekt jak:
1
2
3
4
5
6
7
8
9
func void Init_Global()
{
    // [...]

    LeGo_Init(LeGo_All);

    FF_ApplyOnce(MyLoop);
    FF_ApplyOnce(My2ndLoop);
};

EventHandler

func void Init_Global()
{
    // [...]

    LeGo_Init(LeGo_All);

    Gamestate_AddListener(MyGamestateListener);
};

func void MyGamestateListener(var int state)
{
    if(state == Gamestate_NewGame)
    {
        MEM_Info("Nowa gra rozpoczęta.");
    }
    else if(state == Gamestate_Loaded)
    {
        MEM_Info("Ładowanie gry.");
    }
    else if(state == Gamestate_WorldChange)
    {
        MEM_Info("Zmiana świata.");
    }
    else
    {
        MEM_Info("Brak zmiany stanu gry.");
    };
};
Daje taki sam efekt jak przykład z Init_Global ale dla niektórych może lepiej wyglądać.

Note

Jest to tłumaczenie artykułu napisanego oryginalnie przez Gottfrieda i Lehone i umieszczonego w oficjalnej dokumentacji pakietu LeGo.