#pragma once

#include "MapManager.h"
#include "SpriteRenderer.h"

class SpriteRenderer;

class ScreenManager
{
public:
	ScreenManager();
	~ScreenManager();
	// set map manager
	void setMapManager( MapManager* newMapManager );
	// set sprite renderer
	void setSpriteRenderer( SpriteRenderer* newSpriteRenderer );
    // render screen 
	HRESULT render();
    // move screen in direction
	bool moveScreenUp();
	bool moveScreenDown();
	bool moveScreenLeft();
	bool moveScreenRight();
	// display statistics
	void printStatistics();
	int getXPixelOffset();
	void setXPixelOffset( int xPixelOffset );
	int getYPixelOffset();
	void setYPixelOffset( int yPixelOffset );
	int getYTextureOffset();
	void setYTextureOffset( int yTextureOffset );
	int getXTextureOffset();
	void setXTextureOffset( int xTextureOffset );
	// Get a texture id for a tile
	int getTextureId( TILE* aTile );
	// convenience method to find out where the screen is
	int getScreenX();
	int getScreenY();
	static const int getWindowHeight();
	static const int getWindowWidth();
	static const int getWindowBoundLeft();
	static const int getWindowBoundRight();
	static const int getWindowBoundTop();
	static const int getWindowBoundBottom();
	TILE* getTileFromWorldPoint( POINT* aPoint );

    // passed down to texture manager through sprite renderer
    bool getWalkability( int textureId, RECT* collideRect, bool mainCharacter );


private:
	MapManager* mapManager;         // pointer to map manager
	SpriteRenderer* spriteRenderer; // pointer to sprite renderer
	int xPixelOffset;               // pixel offsets
	int yPixelOffset;               // 
	int xTextureOffset;             // texture offsets - world offset
	int yTextureOffset;             // 
	static const int WINDOW_WIDTH = 1024;
	static const int WINDOW_HEIGHT = 768;
	static const int BOUND_TOP = 216;
	static const int BOUND_BOTTOM = 552;
	static const int BOUND_RIGHT = 712;
	static const int BOUND_LEFT = 312;
};

