using SFML.Graphics;

namespace YourBeatingHeart.Main.States
{
    // A general Game state. Examples for GameStates are the different menu screens and play modes.
    public abstract class GameState
    {
        public Game Game { get; private set; }
        public RenderWindow Window { get; private set; }

        protected GameState(Game game)
        {
            Game = game;
            Window = game.Window;
        }

        /// <summary>Called when switching to this state after the old one is teared down.</summary>
        public abstract void SetUp();

        /// <summary>Called when switching to another state before the other one is set up.</summary>
        public abstract void TearDown();

        /// <summary>Called each frame after the Game is drawn.</summary>
        public abstract void Update(float elapsedTime);

        /// <summary>Called each frame after the state is updated.</summary>
        public abstract void Draw();
    }
}
