void GrimEngine::handleChars(Common::EventType operation, const Common::KeyState &key) { if (!CHAR_KEY(key.ascii)) return; char keychar[2]; keychar[0] = key.ascii; keychar[1] = 0; LuaObjects objects; objects.add(keychar); if (!LuaBase::instance()->callback("characterHandler", objects)) { error("handleChars: invalid handler"); } }
void GrimEngine::handleChars(int operation, int key, int /*keyModifier*/, uint16 ascii) { lua_Object func; char keychar[2]; if (!CHAR_KEY(ascii)) return; lua_beginblock(); lua_pushobject(lua_getref(refSystemTable)); lua_pushstring("characterHandler"); lua_Object handler = lua_gettable(); if (lua_istable(handler)) { lua_pushobject(handler); lua_pushstring("characterHandler"); func = lua_gettable(); if (!lua_isfunction(func)) error("handleChars: handler not a function"); lua_pushobject(handler); } else if (lua_isfunction(handler)) { func = handler; } else if (!lua_isnil(handler)) { error("handleChars: invalid handler"); return; } else { lua_endblock(); return; } keychar[0] = ascii; keychar[1] = 0; lua_pushstring(keychar); lua_callfunction(func); lua_endblock(); }