#ifndef DEF_TX_WORLD
 #define DEF_TX_WORLD

//------------------------------------------//
//		TKA4 Main Object Graph classes		//
//				26. 10. 2007				//
//------------------------------------------//


//--- Includes
#include "gl_add.h"

#include "TX_Error.h"
#include "TX_Collision.h"
#include "TX_Light.h"
#include "TX_Shader.h"
#include "TX_Fog.h"

#include "../GLTools/GLTools.h"
#include "../StrDivider/StrDiv.h"
#include "../LibTexture/libTexture.h"

//=== Includes 


//--- Defines
#define MAX_VIEW_AREA	1000
#define MAX_SHADERS		1000
#define MAX_LIGHTS		8
//=== Defines
	

//--- World Object ---//
class txWorld {
public: 
	txErrorFile *Log;
	int			Screen_Width, Screen_Height;
	long int	World_Time;

	int			ShadersCount;
	txShader	*Shaders;

	GLTFrame	Camera, CameraOld;
	txCollisionMap	Collision;

	int			LightsCount;
	txLight		*Lights;
	txFog		Fog;

public:
	txWorld (txErrorFile *log, char *s);
	~txWorld () { delete [] Lights; delete [] Shaders;}

	inline void Init ();

	inline int AddShader(char* Vname, char* Fname);
};


//----------------------------------------------------------------

txWorld :: txWorld (txErrorFile *log, char *s)
{ 
	Log = log;
		
	if (GetParamFromStr(s, "CAMERA") == STR_NONE) {
		gltInitFrame(&Camera);
		gltInitFrame(&CameraOld);
		CameraOld.vLocation[1] = 2.0;
		Camera.vLocation[1] = 0.91;

		CameraOld.vLocation[0] = 15.0;
		Camera.vLocation[0] = 15.0;
	}
		
	if (GetParamFromStr(s, "WORLD_TIME") == STR_NONE) {
		World_Time = 0;
	}

	LightsCount = 2;
	Lights = new txLight[MAX_LIGHTS];
	Lights[1] = txLight(1, GetParamFromStr(s, "LIGHT1"));
	
	ShadersCount = 0;
	Shaders = new txShader[MAX_SHADERS];
};


//--- txWorld Init ---
void txWorld :: Init()
{
	Lights[1].Init();
	Lights[1].Enable();

	Fog.Init();
}


//--- txWorld Add Shader
inline int txWorld :: AddShader(char* Vname, char* Fname)
{
	if (ShadersCount > 1) {
		
		// --- 
		Shaders[ShadersCount].Load(Vname, Fname);
		Shaders[ShadersCount].Log = Log;

		ShadersCount++;
	} 
	else {
		
		Shaders[0].Log = Log;
		Shaders[0].Init();
		Shaders[0].Load(Vname, Fname);
		ShadersCount++;
	}

	return ShadersCount-1;
}

#endif