package com.brackeen.javagamebook.state;

import java.awt.Graphics2D;
import com.brackeen.javagamebook.input.InputManager;

public interface GameState {


    /**
        Zwraca nazwę tego stanu. Metoda jest wykorzystywana przez
        metodę checkForStateChange().
    */
    public String getName();


    /**
        Zwraca nazwę kolejnego stanu, jeśli bieżący stan jest gotowy
        do przejścia do innego stanu; w przeciwnym przypadku metoda
        zwraca null.
    */
    public String checkForStateChange();


    /**
        Wczytuje wszystkie zasoby dla tego stanu. Ta metoda jest
        wywoływana w wątku działającym w tle, zanim zostanie ustawiony
        jakikolwiek obiekt klasy GameState.
    */
    public void loadResources(ResourceManager resourceManager);

    /**
        Inicjalizuje ten stan i ustawia menadżera sygnałów wejściowych
    */
    public void start(InputManager inputManager);


    /**
        Wykonuje wszystkie czynności potrzebne do zatrzymania tego stanu.
    */
    public void stop();


    /**
        Aktualizuje świat, obsługuje sygnały z urządzeń wejściowych.
    */
    public void update(long elapsedTime);


    /**
        Rysuje obraz na ekranie.
    */
    public void draw(Graphics2D g);
}

