using System;

namespace Icarus.Logic.GameEngine
{
	/// <summary>
	/// The interface that all game states must implement.
	/// </summary>
	public interface IGameState
	{
		/// <summary>
		/// Called when we enter the state.
		/// </summary>
		void Enter();

		/// <summary>
		/// Called at every iteration of the game engine loop.
		/// </summary>
		/// <param name="millis">The numbher of milliseconds since the function was last called.</param>
		void Step(int millis);

		/// <summary>
		/// Gets called when the state needs to be rendered.
		/// </summary>
		/// <param name="parameters"></param>
		void RenderState(Icarus.Graphics.Animation.IRenderParameters parameters);

		/// <summary>
		/// This function will be called when the state needs to be paused to be revived later on.
		/// </summary>
		void Pause();

		/// <summary>
		/// This function will be called when the state is revived after a previous pause.
		/// </summary>
		void Unpause();

		/// <summary>
		/// Called when we exit the state.
		/// </summary>
		void Exit();
	}
}
