int LuaEnv_Engine::GetTotalEntityCount(LuaEnvironment &env)
	{
		// First arg is self
		//Engine* engine = LuaEnvironment::convertUserdata<Engine>(state, 1, "jl.Engine");
		if(env.readGlobal("SAUROBYTE_GAME"))
		{
			Engine *engine = env.readStack<Engine*>("Saurobyte_Engine");
			env.pushArgs(engine->getEntityPool().getEntityCount());
		}

		//lua_pushnumber(state, engine->getEntityPool().getEntityCount());

		return 1;
	}
 	int LuaEnv_Engine::GetWindowWidth(LuaEnvironment &env)
 	{
 		// First arg is self
		//Engine* engine = LuaEnvironment::convertUserdata<Engine>(state, 1, "jl.Engine");
		if(env.readGlobal("SAUROBYTE_GAME"))
		{
			Engine *engine = env.readStack<Engine*>("Saurobyte_Engine");
			env.pushArgs(engine->getWindow().getSize().x);
		}


		//lua_pushnumber(state, engine->getWindow().getSize().x);

		return 1;
 	}
	int LuaEnv_Engine::ChangeScene(LuaEnvironment &env)
	{

		// First arg is self
		if(env.readGlobal("SAUROBYTE_GAME"))
		{
			Engine *engine = env.readStack<Engine*>("Saurobyte_Engine");
			std::string sceneName = env.readArg<std::string>();
			engine->changeScene(sceneName.c_str());

		}
		//Engine* engine = env.toObject<Engine*>(state, 1, "jl.Engine");

		// Second argument is scene name
		//std::string sceneName = luaL_checkstring(state, 2);

		return 0;
	}
	int LuaEnv_Engine::DeleteScene(LuaEnvironment &env)
	{

 		// First arg is self
 		if(env.readGlobal("SAUROBYTE_GAME"))
		{
			Engine *engine = env.readStack<Engine*>("Saurobyte_Engine");
			std::string sceneName = env.readArg<std::string>();
			engine->getScenePool().deleteScene(sceneName.c_str());
		}
		//Engine* engine = LuaEnvironment::convertUserdata<Engine>(state, 1, "jl.Engine");

		/// Second argument is scene name
		//std::string sceneName = luaL_checkstring(state, 2);

		//lua_settop(state, 0);


		return 0;
	}
	int LuaEnv_Engine::MoveCamera(LuaEnvironment &env)
	{
		// First arg is self
		//Engine* engine = LuaEnvironment::convertUserdata<Engine>(state, 1, "jl.Engine");
		if(env.readGlobal("SAUROBYTE_GAME"))
		{
			Engine *engine = env.readStack<Engine*>("Saurobyte_Engine");

			// 2nd arg is X offset, 3rd arg is Y offset, 4th arg is Z offset
			float xOff = env.readArg<float>();
			float yOff = env.readArg<float>();
			float zOff = env.readArg<float>();
		}

		

		//engine->getScenePool().getActiveScene()->getCamera().move(glm::vec3(xOff, yOff, zOff));

		return 0;
	}
	int LuaEnv_Engine::GetActiveScene(LuaEnvironment &env)
	{
		// First arg is self
		if(env.readGlobal("SAUROBYTE_GAME"))
		{
			Engine *engine = env.readStack<Engine*>("Saurobyte_Engine");

			Scene *activeScene = engine->getScenePool().getActiveScene();
			
			if(activeScene == nullptr)
				env.pushNil();
			else
				env.pushObject<Scene*>(activeScene, "Saurobyte_Scene");
		}

		//Engine* engine = LuaEnvironment::convertUserdata<Engine>(state, 1, "jl.Engine");

		//Scene *activeScene = engine->getScenePool().getActiveScene();



		return 1;
	}