#pragma once
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// File: “gameState.h”
// Author: Scott Smallback (SS)
// Purpose: The interface for game states
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class gameState
{
protected:
	volatile bool entered, rendering;

	gameState() : entered(false), rendering(false) {}
public:
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “Deconstructor”
	// Last modified: August 27, 2008
	// Purpose: The deconstructor for the various game states
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual ~gameState(void) = 0 {}
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “enter”
	// Last modified: August 27, 2008
	// Purpose: Enters the various game states
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void enter(void) = 0;

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “exit”
	// Last modified: August 27, 2008
	// Purpose: Exits the various game states
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void exit(void) = 0;

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “input”
	// Last modified: August 27, 2008
	// Purpose: Input used for the various game states
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual bool input(float dt) = 0;

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “update”
	// Last modified: August 27, 2008
	// Purpose: Updates the various game states
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void update(float dt) = 0;

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “render”
	// Last modified: August 27, 2008
	// Purpose: Renders the various game states
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void render(void) const = 0;

	virtual void Rendering(bool set) { rendering = set; }
	virtual void Entered(bool set) { entered = set; }
	virtual bool Entered() const { return entered; }
};