|
|
@@ -713,12 +713,29 @@ void ScriptController::initialize()
|
|
|
GP_ERROR("Failed to load custom loadfile() function with error: '%s'.", lua_tostring(_lua, -1));
|
|
|
if (luaL_dostring(_lua, lua_dofile_function))
|
|
|
GP_ERROR("Failed to load custom dofile() function with error: '%s'.", lua_tostring(_lua, -1));
|
|
|
+
|
|
|
+ // Write game command-line arguments to a global lua "arg" table
|
|
|
+ std::ostringstream args;
|
|
|
+ int argc;
|
|
|
+ char** argv;
|
|
|
+ Game::getInstance()->getArguments(&argc, &argv);
|
|
|
+ args << "arg = { }\n";
|
|
|
+ for (int i = 0; i < argc; ++i)
|
|
|
+ {
|
|
|
+ args << "arg[" << (i) << "] = [[" << argv[i] << "]]\n";
|
|
|
+ }
|
|
|
+ std::string argsStr = args.str();
|
|
|
+ if (argsStr.length() > 0)
|
|
|
+ {
|
|
|
+ if (luaL_dostring(_lua, argsStr.c_str()))
|
|
|
+ GP_ERROR("Failed to pass command-line arguments with error: '%s'.", lua_tostring(_lua, -1));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void ScriptController::initializeGame()
|
|
|
{
|
|
|
std::vector<std::string>& list = _callbacks[INITIALIZE];
|
|
|
- for (size_t i = 0, count = list.size(); i < count; ++i)
|
|
|
+ for (size_t i = 0; i < list.size(); ++i)
|
|
|
executeFunction<void>(list[i].c_str());
|
|
|
}
|
|
|
|
|
|
@@ -740,7 +757,7 @@ void ScriptController::finalizeGame()
|
|
|
_callbacks[i].clear();
|
|
|
|
|
|
// Fire script finalize callbacks
|
|
|
- for (size_t i = 0, count = finalizeCallbacks.size(); i < count; ++i)
|
|
|
+ for (size_t i = 0; i < finalizeCallbacks.size(); ++i)
|
|
|
executeFunction<void>(finalizeCallbacks[i].c_str());
|
|
|
|
|
|
// Perform a full garbage collection cycle.
|
|
|
@@ -753,42 +770,42 @@ void ScriptController::finalizeGame()
|
|
|
void ScriptController::update(float elapsedTime)
|
|
|
{
|
|
|
std::vector<std::string>& list = _callbacks[UPDATE];
|
|
|
- for (size_t i = 0, count = list.size(); i < count; ++i)
|
|
|
+ for (size_t i = 0; i < list.size(); ++i)
|
|
|
executeFunction<void>(list[i].c_str(), "f", elapsedTime);
|
|
|
}
|
|
|
|
|
|
void ScriptController::render(float elapsedTime)
|
|
|
{
|
|
|
std::vector<std::string>& list = _callbacks[RENDER];
|
|
|
- for (size_t i = 0, count = list.size(); i < count; ++i)
|
|
|
+ for (size_t i = 0; i < list.size(); ++i)
|
|
|
executeFunction<void>(list[i].c_str(), "f", elapsedTime);
|
|
|
}
|
|
|
|
|
|
void ScriptController::resizeEvent(unsigned int width, unsigned int height)
|
|
|
{
|
|
|
std::vector<std::string>& list = _callbacks[RESIZE_EVENT];
|
|
|
- for (size_t i = 0, count = list.size(); i < count; ++i)
|
|
|
+ for (size_t i = 0; i < list.size(); ++i)
|
|
|
executeFunction<void>(list[i].c_str(), "uiui", width, height);
|
|
|
}
|
|
|
|
|
|
void ScriptController::keyEvent(Keyboard::KeyEvent evt, int key)
|
|
|
{
|
|
|
std::vector<std::string>& list = _callbacks[KEY_EVENT];
|
|
|
- for (size_t i = 0, count = list.size(); i < count; ++i)
|
|
|
+ for (size_t i = 0; i < list.size(); ++i)
|
|
|
executeFunction<void>(list[i].c_str(), "[Keyboard::KeyEvent][Keyboard::Key]", evt, key);
|
|
|
}
|
|
|
|
|
|
void ScriptController::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
|
|
|
{
|
|
|
std::vector<std::string>& list = _callbacks[TOUCH_EVENT];
|
|
|
- for (size_t i = 0, count = list.size(); i < count; ++i)
|
|
|
+ for (size_t i = 0; i < list.size(); ++i)
|
|
|
executeFunction<void>(list[i].c_str(), "[Touch::TouchEvent]iiui", evt, x, y, contactIndex);
|
|
|
}
|
|
|
|
|
|
bool ScriptController::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
|
|
|
{
|
|
|
std::vector<std::string>& list = _callbacks[MOUSE_EVENT];
|
|
|
- for (size_t i = 0, count = list.size(); i < count; ++i)
|
|
|
+ for (size_t i = 0; i < list.size(); ++i)
|
|
|
{
|
|
|
if (executeFunction<bool>(list[i].c_str(), "[Mouse::MouseEvent]iii", evt, x, y, wheelDelta))
|
|
|
return true;
|
|
|
@@ -799,7 +816,7 @@ bool ScriptController::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheel
|
|
|
void ScriptController::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad, unsigned int analogIndex)
|
|
|
{
|
|
|
std::vector<std::string>& list = _callbacks[GAMEPAD_EVENT];
|
|
|
- for (size_t i = 0, count = list.size(); i < count; ++i)
|
|
|
+ for (size_t i = 0; i < list.size(); ++i)
|
|
|
executeFunction<void>(list[i].c_str(), "[Gamepad::GamepadEvent]<Gamepad>", evt, gamepad);
|
|
|
}
|
|
|
|