#pragma once
#include <Stuff\Stuff.hpp>
using namespace Stuff;

namespace Adept {
class Entity;
				};

namespace gosFX {
class Light;
				};


extern bool GameInitilized;
extern bool AllowBuild;
extern bool AllowBldSkies; // jcem
extern bool NoBldMissions; // jcem
extern bool NeedResourceBuild;

void _stdcall TerminateGameEngine();
float ComputeTerrainElevation(float x,float z,Adept::Entity *ignore_entity=NULL); 
Adept::Entity *GetTopEntity(float x,float z,float& height); 
CString GetMissionScriptName();
void	SetMissionScriptName(const CString& script_name);
void BindEntity(Adept::Entity *entity);
void UnBindEntity(Adept::Entity *entity);
void AddEntityToMap(Adept::Entity *entity,Stuff::LinearMatrix4D &mat);
void RemoveEntityFromMap(Adept::Entity *entity);
void MoveEntityTo(Adept::Entity *entity,Stuff::LinearMatrix4D &mat);
const char*GetEntityScriptName(Adept::Entity *entity);
void SetEntityScriptName(Adept::Entity *entity,char* script_name);
void SetEntityName(Adept::Entity *entity,CString newname);
void RemoveEntityFromNameTable(Adept::Entity *entity);
void AddEntityAI(Adept::Entity *entity);
void RemoveEntityAI(Adept::Entity *entity);
void AddEntityToNameTable(Adept::Entity *entity);
void MakeMissionNight(bool night);
bool IsMissionNight();
bool HasSkin(Adept::Entity *entity);
char GetEntitySkin(Adept::Entity *entity);
void SetEntitySkin(Adept::Entity *entity,char skin);
void AdoptFogColors();
void AddLightToMap(gosFX::Light *light);
void RemoveLightFromMap(gosFX::Light *light);
Scalar GetWaterLevel();
void MakeFileWriteable(CString str);
void LoadSkys(CComboBox *ctrl);
bool HasCollsion(Adept::Entity *entity);
CString DaySkyName();
CString NightSkyName();
void SetDaySky(CString sname);
void SetNightSky(CString sname);
float GetFarClip();
int GetSkinCount();
int EntitiesInTile(int x,int y);
CString GetSkinName(char skin);
CString GetNthSkinName(int val);
char GetNthSkin(int val);
void TranslateMissionNameBackIfNecessary(CString &mis_name);
CString GetMissionName();
void RunEula();