#ifndef __GAME_STATE_H__
#define __GAME_STATE_H__

#include <stdbool.h>

#include "chipmunk.h"

typedef struct GameState GameState;

struct GameState {
	cpSpace * space;
	cpBody * staticBody;
	
	unsigned int wallSegmentCount;
	cpShape ** wallSegments;
	
	float playerRadius;
	cpBody * player;
	cpShape * playerShape;
	
	bool stuck;
	unsigned int anchorCount;
	cpVect * anchors;
	
	void (* levelCompleteCallback)(void);
	void (* diedCallback)(void);
};

struct Level;

GameState * GameState_create(void (* levelCompleteCallback)(void), void (* diedCallback)(void));
void GameState_init(GameState * self, void (* levelCompleteCallback)(void), void (* diedCallback)(void));

void GameState_dispose(GameState * self);
void GameState_loadLevel(GameState * self, struct Level * level);

void GameState_launchPlayer(GameState * self, float forceX, float forceY);
void GameState_step(GameState * self, float interval);

#endif
