Przeglądaj źródła

Fix AS bindings.

Eugene Kozlov 7 lat temu
rodzic
commit
bcad960586

+ 30 - 26
Source/Urho3D/AngelScript/GraphicsAPI.cpp

@@ -326,9 +326,10 @@ static void RegisterRenderPath(asIScriptEngine* engine)
     engine->RegisterEnumValue("TextureUnit", "MAX_MATERIAL_TEXTURE_UNITS", MAX_MATERIAL_TEXTURE_UNITS);
     engine->RegisterEnumValue("TextureUnit", "MAX_TEXTURE_UNITS", MAX_TEXTURE_UNITS);
 
-    engine->RegisterGlobalProperty("uint CLEAR_COLOR", (void*)&CLEAR_COLOR);
-    engine->RegisterGlobalProperty("uint CLEAR_DEPTH", (void*)&CLEAR_DEPTH);
-    engine->RegisterGlobalProperty("uint CLEAR_STENCIL", (void*)&CLEAR_STENCIL);
+    engine->RegisterEnum("ClearFlag");
+    engine->RegisterEnumValue("ClearFlag", "CLEAR_COLOR", CLEAR_COLOR);
+    engine->RegisterEnumValue("ClearFlag", "CLEAR_DEPTH", CLEAR_DEPTH);
+    engine->RegisterEnumValue("ClearFlag", "CLEAR_STENCIL", CLEAR_STENCIL);
 
     engine->RegisterObjectType("RenderTargetInfo", sizeof(RenderTargetInfo), asOBJ_VALUE | asOBJ_APP_CLASS_C);
     engine->RegisterObjectBehaviour("RenderTargetInfo", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructRenderTargetInfo), asCALL_CDECL_OBJLAST);
@@ -725,21 +726,22 @@ static VectorBuffer IndexBufferGetData(IndexBuffer* ptr)
 
 static void RegisterBuffers(asIScriptEngine* engine)
 {
-    engine->RegisterGlobalProperty("const uint MASK_NONE", (void*)&MASK_NONE);
-    engine->RegisterGlobalProperty("const uint MASK_POSITION", (void*)&MASK_POSITION);
-    engine->RegisterGlobalProperty("const uint MASK_NORMAL", (void*)&MASK_NORMAL);
-    engine->RegisterGlobalProperty("const uint MASK_COLOR", (void*)&MASK_COLOR);
-    engine->RegisterGlobalProperty("const uint MASK_TEXCOORD1", (void*)&MASK_TEXCOORD1);
-    engine->RegisterGlobalProperty("const uint MASK_TEXCOORD2", (void*)&MASK_TEXCOORD2);
-    engine->RegisterGlobalProperty("const uint MASK_CUBETEXCOORD1", (void*)&MASK_CUBETEXCOORD1);
-    engine->RegisterGlobalProperty("const uint MASK_CUBETEXCOORD2", (void*)&MASK_CUBETEXCOORD2);
-    engine->RegisterGlobalProperty("const uint MASK_TANGENT", (void*)&MASK_TANGENT);
-    engine->RegisterGlobalProperty("const uint MASK_BLENDWEIGHTS", (void*)&MASK_BLENDWEIGHTS);
-    engine->RegisterGlobalProperty("const uint MASK_BLENDINDICES", (void*)&MASK_BLENDINDICES);
-    engine->RegisterGlobalProperty("const uint MASK_INSTANCEMATRIX1", (void*)&MASK_INSTANCEMATRIX1);
-    engine->RegisterGlobalProperty("const uint MASK_INSTANCEMATRIX2", (void*)&MASK_INSTANCEMATRIX2);
-    engine->RegisterGlobalProperty("const uint MASK_INSTANCEMATRIX3", (void*)&MASK_INSTANCEMATRIX3);
-    engine->RegisterGlobalProperty("const uint MASK_OBJECTINDEX", (void*)&MASK_OBJECTINDEX);
+    engine->RegisterEnum("VertexMask");
+    engine->RegisterEnumValue("VertexMask", "MASK_NONE", MASK_NONE);
+    engine->RegisterEnumValue("VertexMask", "MASK_POSITION", MASK_POSITION);
+    engine->RegisterEnumValue("VertexMask", "MASK_NORMAL", MASK_NORMAL);
+    engine->RegisterEnumValue("VertexMask", "MASK_COLOR", MASK_COLOR);
+    engine->RegisterEnumValue("VertexMask", "MASK_TEXCOORD1", MASK_TEXCOORD1);
+    engine->RegisterEnumValue("VertexMask", "MASK_TEXCOORD2", MASK_TEXCOORD2);
+    engine->RegisterEnumValue("VertexMask", "MASK_CUBETEXCOORD1", MASK_CUBETEXCOORD1);
+    engine->RegisterEnumValue("VertexMask", "MASK_CUBETEXCOORD2", MASK_CUBETEXCOORD2);
+    engine->RegisterEnumValue("VertexMask", "MASK_TANGENT", MASK_TANGENT);
+    engine->RegisterEnumValue("VertexMask", "MASK_BLENDWEIGHTS", MASK_BLENDWEIGHTS);
+    engine->RegisterEnumValue("VertexMask", "MASK_BLENDINDICES", MASK_BLENDINDICES);
+    engine->RegisterEnumValue("VertexMask", "MASK_INSTANCEMATRIX1", MASK_INSTANCEMATRIX1);
+    engine->RegisterEnumValue("VertexMask", "MASK_INSTANCEMATRIX2", MASK_INSTANCEMATRIX2);
+    engine->RegisterEnumValue("VertexMask", "MASK_INSTANCEMATRIX3", MASK_INSTANCEMATRIX3);
+    engine->RegisterEnumValue("VertexMask", "MASK_OBJECTINDEX", MASK_OBJECTINDEX);
 
     engine->RegisterEnum("PrimitiveType");
     engine->RegisterEnumValue("PrimitiveType", "TRIANGLE_LIST", TRIANGLE_LIST);
@@ -799,7 +801,7 @@ static void RegisterBuffers(asIScriptEngine* engine)
     engine->RegisterObjectMethod("VertexBuffer", "bool get_dynamic() const", asMETHOD(VertexBuffer, IsDynamic), asCALL_THISCALL);
     engine->RegisterObjectMethod("VertexBuffer", "uint get_vertexCount() const", asMETHOD(VertexBuffer, GetVertexCount), asCALL_THISCALL);
     engine->RegisterObjectMethod("VertexBuffer", "uint get_vertexSize() const", asMETHODPR(VertexBuffer, GetVertexSize, () const, unsigned), asCALL_THISCALL);
-    engine->RegisterObjectMethod("VertexBuffer", "uint get_elementMask() const", asMETHODPR(VertexBuffer, GetElementMask, () const, unsigned), asCALL_THISCALL);
+    engine->RegisterObjectMethod("VertexBuffer", "uint get_elementMask() const", asMETHODPR(VertexBuffer, GetElementMask, () const, VertexMaskFlags), asCALL_THISCALL);
     engine->RegisterObjectMethod("VertexBuffer", "Array<VertexElement>@ get_elements() const", asFUNCTION(VertexBufferGetElements), asCALL_CDECL_OBJLAST);
 
     RegisterObject<IndexBuffer>(engine, "IndexBuffer");
@@ -1085,9 +1087,10 @@ static Animation* AnimationClone(const String& cloneName, Animation* ptr)
 
 static void RegisterAnimation(asIScriptEngine* engine)
 {
-    engine->RegisterGlobalProperty("const uint8 CHANNEL_POSITION", (void*)&CHANNEL_POSITION);
-    engine->RegisterGlobalProperty("const uint8 CHANNEL_ROTATION", (void*)&CHANNEL_ROTATION);
-    engine->RegisterGlobalProperty("const uint8 CHANNEL_SCALE", (void*)&CHANNEL_SCALE);
+    engine->RegisterEnum("AnimationChannel");
+    engine->RegisterEnumValue("AnimationChannel", "CHANNEL_POSITION", CHANNEL_POSITION);
+    engine->RegisterEnumValue("AnimationChannel", "CHANNEL_ROTATION", CHANNEL_ROTATION);
+    engine->RegisterEnumValue("AnimationChannel", "CHANNEL_SCALE", CHANNEL_SCALE);
 
     engine->RegisterObjectType("AnimationKeyFrame", sizeof(AnimationKeyFrame), asOBJ_VALUE | asOBJ_APP_CLASS_C);
     engine->RegisterObjectBehaviour("AnimationKeyFrame", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(ConstructAnimationKeyFrame), asCALL_CDECL_OBJLAST);
@@ -1953,10 +1956,11 @@ static void RendererSetVSMShadowParameters(const Vector2& parameters, Renderer*
 
 static void RegisterRenderer(asIScriptEngine* engine)
 {
-    engine->RegisterGlobalProperty("const int QUALITY_LOW", (void*)&QUALITY_LOW);
-    engine->RegisterGlobalProperty("const int QUALITY_MEDIUM", (void*)&QUALITY_MEDIUM);
-    engine->RegisterGlobalProperty("const int QUALITY_HIGH", (void*)&QUALITY_HIGH);
-    engine->RegisterGlobalProperty("const int QUALITY_MAX", (void*)&QUALITY_MAX);
+    engine->RegisterEnum("MaterialQuality");
+    engine->RegisterEnumValue("MaterialQuality", "QUALITY_LOW", QUALITY_LOW);
+    engine->RegisterEnumValue("MaterialQuality", "QUALITY_MEDIUM", QUALITY_MEDIUM);
+    engine->RegisterEnumValue("MaterialQuality", "QUALITY_HIGH", QUALITY_HIGH);
+    engine->RegisterEnumValue("MaterialQuality", "QUALITY_MAX", QUALITY_MAX);
 
     engine->RegisterEnum("ShadowQuality");
     engine->RegisterEnumValue("ShadowQuality", "SHADOWQUALITY_SIMPLE_16BIT", SHADOWQUALITY_SIMPLE_16BIT);

+ 529 - 517
Source/Urho3D/AngelScript/InputAPI.cpp

@@ -66,524 +66,536 @@ static void RegisterControls(asIScriptEngine* engine)
 
 static void RegisterInputConstants(asIScriptEngine* engine)
 {
-    engine->RegisterGlobalProperty("const int MOUSEB_LEFT", (void*)&MOUSEB_LEFT);
-    engine->RegisterGlobalProperty("const int MOUSEB_MIDDLE", (void*)&MOUSEB_MIDDLE);
-    engine->RegisterGlobalProperty("const int MOUSEB_RIGHT", (void*)&MOUSEB_RIGHT);
-    engine->RegisterGlobalProperty("const int QUAL_SHIFT", (void*)&QUAL_SHIFT);
-    engine->RegisterGlobalProperty("const int QUAL_CTRL", (void*)&QUAL_CTRL);
-    engine->RegisterGlobalProperty("const int QUAL_ALT", (void*)&QUAL_ALT);
-    engine->RegisterGlobalProperty("const int QUAL_ANY", (void*)&QUAL_ANY);
-    engine->RegisterGlobalProperty("const int KEY_UNKNOWN", (void*)&KEY_UNKNOWN);
-    engine->RegisterGlobalProperty("const int KEY_A", (void*)&KEY_A);
-    engine->RegisterGlobalProperty("const int KEY_B", (void*)&KEY_B);
-    engine->RegisterGlobalProperty("const int KEY_C", (void*)&KEY_C);
-    engine->RegisterGlobalProperty("const int KEY_D", (void*)&KEY_D);
-    engine->RegisterGlobalProperty("const int KEY_E", (void*)&KEY_E);
-    engine->RegisterGlobalProperty("const int KEY_F", (void*)&KEY_F);
-    engine->RegisterGlobalProperty("const int KEY_G", (void*)&KEY_G);
-    engine->RegisterGlobalProperty("const int KEY_H", (void*)&KEY_H);
-    engine->RegisterGlobalProperty("const int KEY_I", (void*)&KEY_I);
-    engine->RegisterGlobalProperty("const int KEY_J", (void*)&KEY_J);
-    engine->RegisterGlobalProperty("const int KEY_K", (void*)&KEY_K);
-    engine->RegisterGlobalProperty("const int KEY_L", (void*)&KEY_L);
-    engine->RegisterGlobalProperty("const int KEY_M", (void*)&KEY_M);
-    engine->RegisterGlobalProperty("const int KEY_N", (void*)&KEY_N);
-    engine->RegisterGlobalProperty("const int KEY_O", (void*)&KEY_O);
-    engine->RegisterGlobalProperty("const int KEY_P", (void*)&KEY_P);
-    engine->RegisterGlobalProperty("const int KEY_Q", (void*)&KEY_Q);
-    engine->RegisterGlobalProperty("const int KEY_R", (void*)&KEY_R);
-    engine->RegisterGlobalProperty("const int KEY_S", (void*)&KEY_S);
-    engine->RegisterGlobalProperty("const int KEY_T", (void*)&KEY_T);
-    engine->RegisterGlobalProperty("const int KEY_U", (void*)&KEY_U);
-    engine->RegisterGlobalProperty("const int KEY_V", (void*)&KEY_V);
-    engine->RegisterGlobalProperty("const int KEY_W", (void*)&KEY_W);
-    engine->RegisterGlobalProperty("const int KEY_X", (void*)&KEY_X);
-    engine->RegisterGlobalProperty("const int KEY_Y", (void*)&KEY_Y);
-    engine->RegisterGlobalProperty("const int KEY_Z", (void*)&KEY_Z);
-    engine->RegisterGlobalProperty("const int KEY_0", (void*)&KEY_0);
-    engine->RegisterGlobalProperty("const int KEY_1", (void*)&KEY_1);
-    engine->RegisterGlobalProperty("const int KEY_2", (void*)&KEY_2);
-    engine->RegisterGlobalProperty("const int KEY_3", (void*)&KEY_3);
-    engine->RegisterGlobalProperty("const int KEY_4", (void*)&KEY_4);
-    engine->RegisterGlobalProperty("const int KEY_5", (void*)&KEY_5);
-    engine->RegisterGlobalProperty("const int KEY_6", (void*)&KEY_6);
-    engine->RegisterGlobalProperty("const int KEY_7", (void*)&KEY_7);
-    engine->RegisterGlobalProperty("const int KEY_8", (void*)&KEY_8);
-    engine->RegisterGlobalProperty("const int KEY_9", (void*)&KEY_9);
-    engine->RegisterGlobalProperty("const int KEY_BACKSPACE", (void*)&KEY_BACKSPACE);
-    engine->RegisterGlobalProperty("const int KEY_TAB", (void*)&KEY_TAB);
-    engine->RegisterGlobalProperty("const int KEY_RETURN", (void*)&KEY_RETURN);
-    engine->RegisterGlobalProperty("const int KEY_RETURN2", (void*)&KEY_RETURN2);
-    engine->RegisterGlobalProperty("const int KEY_KP_ENTER", (void*)&KEY_KP_ENTER);
-    engine->RegisterGlobalProperty("const int KEY_SHIFT", (void*)&KEY_SHIFT);
-    engine->RegisterGlobalProperty("const int KEY_CTRL", (void*)&KEY_CTRL);
-    engine->RegisterGlobalProperty("const int KEY_ALT", (void*)&KEY_ALT);
-    engine->RegisterGlobalProperty("const int KEY_GUI", (void*)&KEY_GUI);
-    engine->RegisterGlobalProperty("const int KEY_PAUSE", (void*)&KEY_PAUSE);
-    engine->RegisterGlobalProperty("const int KEY_CAPSLOCK", (void*)&KEY_CAPSLOCK);
-    engine->RegisterGlobalProperty("const int KEY_ESCAPE", (void*)&KEY_ESCAPE);
-    engine->RegisterGlobalProperty("const int KEY_SPACE", (void*)&KEY_SPACE);
-    engine->RegisterGlobalProperty("const int KEY_PAGEUP", (void*)&KEY_PAGEUP);
-    engine->RegisterGlobalProperty("const int KEY_PAGEDOWN", (void*)&KEY_PAGEDOWN);
-    engine->RegisterGlobalProperty("const int KEY_END", (void*)&KEY_END);
-    engine->RegisterGlobalProperty("const int KEY_HOME", (void*)&KEY_HOME);
-    engine->RegisterGlobalProperty("const int KEY_LEFT", (void*)&KEY_LEFT);
-    engine->RegisterGlobalProperty("const int KEY_UP", (void*)&KEY_UP);
-    engine->RegisterGlobalProperty("const int KEY_RIGHT", (void*)&KEY_RIGHT);
-    engine->RegisterGlobalProperty("const int KEY_DOWN", (void*)&KEY_DOWN);
-    engine->RegisterGlobalProperty("const int KEY_SELECT", (void*)&KEY_SELECT);
-    engine->RegisterGlobalProperty("const int KEY_PRINTSCREEN", (void*)&KEY_PRINTSCREEN);
-    engine->RegisterGlobalProperty("const int KEY_INSERT", (void*)&KEY_INSERT);
-    engine->RegisterGlobalProperty("const int KEY_DELETE", (void*)&KEY_DELETE);
-    engine->RegisterGlobalProperty("const int KEY_LGUI", (void*)&KEY_LGUI);
-    engine->RegisterGlobalProperty("const int KEY_RGUI", (void*)&KEY_RGUI);
-    engine->RegisterGlobalProperty("const int KEY_APPLICATION", (void*)&KEY_APPLICATION);
-    engine->RegisterGlobalProperty("const int KEY_KP_0", (void*)&KEY_KP_0);
-    engine->RegisterGlobalProperty("const int KEY_KP_1", (void*)&KEY_KP_1);
-    engine->RegisterGlobalProperty("const int KEY_KP_2", (void*)&KEY_KP_2);
-    engine->RegisterGlobalProperty("const int KEY_KP_3", (void*)&KEY_KP_3);
-    engine->RegisterGlobalProperty("const int KEY_KP_4", (void*)&KEY_KP_4);
-    engine->RegisterGlobalProperty("const int KEY_KP_5", (void*)&KEY_KP_5);
-    engine->RegisterGlobalProperty("const int KEY_KP_6", (void*)&KEY_KP_6);
-    engine->RegisterGlobalProperty("const int KEY_KP_7", (void*)&KEY_KP_7);
-    engine->RegisterGlobalProperty("const int KEY_KP_8", (void*)&KEY_KP_8);
-    engine->RegisterGlobalProperty("const int KEY_KP_9", (void*)&KEY_KP_9);
-    engine->RegisterGlobalProperty("const int KEY_KP_MULTIPLY", (void*)&KEY_KP_MULTIPLY);
-    engine->RegisterGlobalProperty("const int KEY_KP_PLUS", (void*)&KEY_KP_PLUS);
-    engine->RegisterGlobalProperty("const int KEY_KP_MINUS", (void*)&KEY_KP_MINUS);
-    engine->RegisterGlobalProperty("const int KEY_KP_PERIOD", (void*)&KEY_KP_PERIOD);
-    engine->RegisterGlobalProperty("const int KEY_KP_DIVIDE", (void*)&KEY_KP_DIVIDE);
-    engine->RegisterGlobalProperty("const int KEY_F1", (void*)&KEY_F1);
-    engine->RegisterGlobalProperty("const int KEY_F2", (void*)&KEY_F2);
-    engine->RegisterGlobalProperty("const int KEY_F3", (void*)&KEY_F3);
-    engine->RegisterGlobalProperty("const int KEY_F4", (void*)&KEY_F4);
-    engine->RegisterGlobalProperty("const int KEY_F5", (void*)&KEY_F5);
-    engine->RegisterGlobalProperty("const int KEY_F6", (void*)&KEY_F6);
-    engine->RegisterGlobalProperty("const int KEY_F7", (void*)&KEY_F7);
-    engine->RegisterGlobalProperty("const int KEY_F8", (void*)&KEY_F8);
-    engine->RegisterGlobalProperty("const int KEY_F9", (void*)&KEY_F9);
-    engine->RegisterGlobalProperty("const int KEY_F10", (void*)&KEY_F10);
-    engine->RegisterGlobalProperty("const int KEY_F11", (void*)&KEY_F11);
-    engine->RegisterGlobalProperty("const int KEY_F12", (void*)&KEY_F12);
-    engine->RegisterGlobalProperty("const int KEY_F13", (void*)&KEY_F13);
-    engine->RegisterGlobalProperty("const int KEY_F14", (void*)&KEY_F14);
-    engine->RegisterGlobalProperty("const int KEY_F15", (void*)&KEY_F15);
-    engine->RegisterGlobalProperty("const int KEY_F16", (void*)&KEY_F16);
-    engine->RegisterGlobalProperty("const int KEY_F17", (void*)&KEY_F17);
-    engine->RegisterGlobalProperty("const int KEY_F18", (void*)&KEY_F18);
-    engine->RegisterGlobalProperty("const int KEY_F19", (void*)&KEY_F19);
-    engine->RegisterGlobalProperty("const int KEY_F20", (void*)&KEY_F20);
-    engine->RegisterGlobalProperty("const int KEY_F21", (void*)&KEY_F21);
-    engine->RegisterGlobalProperty("const int KEY_F22", (void*)&KEY_F22);
-    engine->RegisterGlobalProperty("const int KEY_F23", (void*)&KEY_F23);
-    engine->RegisterGlobalProperty("const int KEY_F24", (void*)&KEY_F24);
-    engine->RegisterGlobalProperty("const int KEY_NUMLOCKCLEAR", (void*)&KEY_NUMLOCKCLEAR);
-    engine->RegisterGlobalProperty("const int KEY_SCROLLLOCK", (void*)&KEY_SCROLLLOCK);
-    engine->RegisterGlobalProperty("const int KEY_LSHIFT", (void*)&KEY_LSHIFT);
-    engine->RegisterGlobalProperty("const int KEY_RSHIFT", (void*)&KEY_RSHIFT);
-    engine->RegisterGlobalProperty("const int KEY_LCTRL", (void*)&KEY_LCTRL);
-    engine->RegisterGlobalProperty("const int KEY_RCTRL", (void*)&KEY_RCTRL);
-    engine->RegisterGlobalProperty("const int KEY_LALT", (void*)&KEY_LALT);
-    engine->RegisterGlobalProperty("const int KEY_RALT", (void*)&KEY_RALT);
-    engine->RegisterGlobalProperty("const int KEY_AC_BACK", (void*)&KEY_AC_BACK);
-    engine->RegisterGlobalProperty("const int KEY_AC_BOOKMARKS", (void*)&KEY_AC_BOOKMARKS);
-    engine->RegisterGlobalProperty("const int KEY_AC_FORWARD", (void*)&KEY_AC_FORWARD);
-    engine->RegisterGlobalProperty("const int KEY_AC_HOME", (void*)&KEY_AC_HOME);
-    engine->RegisterGlobalProperty("const int KEY_AC_REFRESH", (void*)&KEY_AC_REFRESH);
-    engine->RegisterGlobalProperty("const int KEY_AC_SEARCH", (void*)&KEY_AC_SEARCH);
-    engine->RegisterGlobalProperty("const int KEY_AC_STOP", (void*)&KEY_AC_STOP);
-    engine->RegisterGlobalProperty("const int KEY_AGAIN", (void*)&KEY_AGAIN);
-    engine->RegisterGlobalProperty("const int KEY_ALTERASE", (void*)&KEY_ALTERASE);
-    engine->RegisterGlobalProperty("const int KEY_AMPERSAND", (void*)&KEY_AMPERSAND);
-    engine->RegisterGlobalProperty("const int KEY_ASTERISK", (void*)&KEY_ASTERISK);
-    engine->RegisterGlobalProperty("const int KEY_AT", (void*)&KEY_AT);
-    engine->RegisterGlobalProperty("const int KEY_AUDIOMUTE", (void*)&KEY_AUDIOMUTE);
-    engine->RegisterGlobalProperty("const int KEY_AUDIONEXT", (void*)&KEY_AUDIONEXT);
-    engine->RegisterGlobalProperty("const int KEY_AUDIOPLAY", (void*)&KEY_AUDIOPLAY);
-    engine->RegisterGlobalProperty("const int KEY_AUDIOPREV", (void*)&KEY_AUDIOPREV);
-    engine->RegisterGlobalProperty("const int KEY_AUDIOSTOP", (void*)&KEY_AUDIOSTOP);
-    engine->RegisterGlobalProperty("const int KEY_BACKQUOTE", (void*)&KEY_BACKQUOTE);
-    engine->RegisterGlobalProperty("const int KEY_BACKSLASH", (void*)&KEY_BACKSLASH);
-    engine->RegisterGlobalProperty("const int KEY_BRIGHTNESSDOWN", (void*)&KEY_BRIGHTNESSDOWN);
-    engine->RegisterGlobalProperty("const int KEY_BRIGHTNESSUP", (void*)&KEY_BRIGHTNESSUP);
-    engine->RegisterGlobalProperty("const int KEY_CALCULATOR", (void*)&KEY_CALCULATOR);
-    engine->RegisterGlobalProperty("const int KEY_CANCEL", (void*)&KEY_CANCEL);
-    engine->RegisterGlobalProperty("const int KEY_CARET", (void*)&KEY_CARET);
-    engine->RegisterGlobalProperty("const int KEY_CLEAR", (void*)&KEY_CLEAR);
-    engine->RegisterGlobalProperty("const int KEY_CLEARAGAIN", (void*)&KEY_CLEARAGAIN);
-    engine->RegisterGlobalProperty("const int KEY_COLON", (void*)&KEY_COLON);
-    engine->RegisterGlobalProperty("const int KEY_COMMA", (void*)&KEY_COMMA);
-    engine->RegisterGlobalProperty("const int KEY_COMPUTER", (void*)&KEY_COMPUTER);
-    engine->RegisterGlobalProperty("const int KEY_COPY", (void*)&KEY_COPY);
-    engine->RegisterGlobalProperty("const int KEY_CRSEL", (void*)&KEY_CRSEL);
-    engine->RegisterGlobalProperty("const int KEY_CURRENCYSUBUNIT", (void*)&KEY_CURRENCYSUBUNIT);
-    engine->RegisterGlobalProperty("const int KEY_CURRENCYUNIT", (void*)&KEY_CURRENCYUNIT);
-    engine->RegisterGlobalProperty("const int KEY_CUT", (void*)&KEY_CUT);
-    engine->RegisterGlobalProperty("const int KEY_DECIMALSEPARATOR", (void*)&KEY_DECIMALSEPARATOR);
-    engine->RegisterGlobalProperty("const int KEY_DISPLAYSWITCH", (void*)&KEY_DISPLAYSWITCH);
-    engine->RegisterGlobalProperty("const int KEY_DOLLAR", (void*)&KEY_DOLLAR);
-    engine->RegisterGlobalProperty("const int KEY_EJECT", (void*)&KEY_EJECT);
-    engine->RegisterGlobalProperty("const int KEY_EQUALS", (void*)&KEY_EQUALS);
-    engine->RegisterGlobalProperty("const int KEY_EXCLAIM", (void*)&KEY_EXCLAIM);
-    engine->RegisterGlobalProperty("const int KEY_EXSEL", (void*)&KEY_EXSEL);
-    engine->RegisterGlobalProperty("const int KEY_FIND", (void*)&KEY_FIND);
-    engine->RegisterGlobalProperty("const int KEY_GREATER", (void*)&KEY_GREATER);
-    engine->RegisterGlobalProperty("const int KEY_HASH", (void*)&KEY_HASH);
-    engine->RegisterGlobalProperty("const int KEY_HELP", (void*)&KEY_HELP);
-    engine->RegisterGlobalProperty("const int KEY_KBDILLUMDOWN", (void*)&KEY_KBDILLUMDOWN);
-    engine->RegisterGlobalProperty("const int KEY_KBDILLUMTOGGLE", (void*)&KEY_KBDILLUMTOGGLE);
-    engine->RegisterGlobalProperty("const int KEY_KBDILLUMUP", (void*)&KEY_KBDILLUMUP);
-    engine->RegisterGlobalProperty("const int KEY_KP_00", (void*)&KEY_KP_00);
-    engine->RegisterGlobalProperty("const int KEY_KP_000", (void*)&KEY_KP_000);
-    engine->RegisterGlobalProperty("const int KEY_KP_A", (void*)&KEY_KP_A);
-    engine->RegisterGlobalProperty("const int KEY_KP_AMPERSAND", (void*)&KEY_KP_AMPERSAND);
-    engine->RegisterGlobalProperty("const int KEY_KP_AT", (void*)&KEY_KP_AT);
-    engine->RegisterGlobalProperty("const int KEY_KP_B", (void*)&KEY_KP_B);
-    engine->RegisterGlobalProperty("const int KEY_KP_BACKSPACE", (void*)&KEY_KP_BACKSPACE);
-    engine->RegisterGlobalProperty("const int KEY_KP_BINARY", (void*)&KEY_KP_BINARY);
-    engine->RegisterGlobalProperty("const int KEY_KP_C", (void*)&KEY_KP_C);
-    engine->RegisterGlobalProperty("const int KEY_KP_CLEAR", (void*)&KEY_KP_CLEAR);
-    engine->RegisterGlobalProperty("const int KEY_KP_CLEARENTRY", (void*)&KEY_KP_CLEARENTRY);
-    engine->RegisterGlobalProperty("const int KEY_KP_COLON", (void*)&KEY_KP_COLON);
-    engine->RegisterGlobalProperty("const int KEY_KP_COMMA", (void*)&KEY_KP_COMMA);
-    engine->RegisterGlobalProperty("const int KEY_KP_D", (void*)&KEY_KP_D);
-    engine->RegisterGlobalProperty("const int KEY_KP_DBLAMPERSAND", (void*)&KEY_KP_DBLAMPERSAND);
-    engine->RegisterGlobalProperty("const int KEY_KP_DBLVERTICALBAR", (void*)&KEY_KP_DBLVERTICALBAR);
-    engine->RegisterGlobalProperty("const int KEY_KP_DECIMAL", (void*)&KEY_KP_DECIMAL);
-    engine->RegisterGlobalProperty("const int KEY_KP_E", (void*)&KEY_KP_E);
-    engine->RegisterGlobalProperty("const int KEY_KP_EQUALS", (void*)&KEY_KP_EQUALS);
-    engine->RegisterGlobalProperty("const int KEY_KP_EQUALSAS400", (void*)&KEY_KP_EQUALSAS400);
-    engine->RegisterGlobalProperty("const int KEY_KP_EXCLAM", (void*)&KEY_KP_EXCLAM);
-    engine->RegisterGlobalProperty("const int KEY_KP_F", (void*)&KEY_KP_F);
-    engine->RegisterGlobalProperty("const int KEY_KP_GREATER", (void*)&KEY_KP_GREATER);
-    engine->RegisterGlobalProperty("const int KEY_KP_HASH", (void*)&KEY_KP_HASH);
-    engine->RegisterGlobalProperty("const int KEY_KP_HEXADECIMAL", (void*)&KEY_KP_HEXADECIMAL);
-    engine->RegisterGlobalProperty("const int KEY_KP_LEFTBRACE", (void*)&KEY_KP_LEFTBRACE);
-    engine->RegisterGlobalProperty("const int KEY_KP_LEFTPAREN", (void*)&KEY_KP_LEFTPAREN);
-    engine->RegisterGlobalProperty("const int KEY_KP_LESS", (void*)&KEY_KP_LESS);
-    engine->RegisterGlobalProperty("const int KEY_KP_MEMADD", (void*)&KEY_KP_MEMADD);
-    engine->RegisterGlobalProperty("const int KEY_KP_MEMCLEAR", (void*)&KEY_KP_MEMCLEAR);
-    engine->RegisterGlobalProperty("const int KEY_KP_MEMDIVIDE", (void*)&KEY_KP_MEMDIVIDE);
-    engine->RegisterGlobalProperty("const int KEY_KP_MEMMULTIPLY", (void*)&KEY_KP_MEMMULTIPLY);
-    engine->RegisterGlobalProperty("const int KEY_KP_MEMRECALL", (void*)&KEY_KP_MEMRECALL);
-    engine->RegisterGlobalProperty("const int KEY_KP_MEMSTORE", (void*)&KEY_KP_MEMSTORE);
-    engine->RegisterGlobalProperty("const int KEY_KP_MEMSUBTRACT", (void*)&KEY_KP_MEMSUBTRACT);
-    engine->RegisterGlobalProperty("const int KEY_KP_OCTAL", (void*)&KEY_KP_OCTAL);
-    engine->RegisterGlobalProperty("const int KEY_KP_PERCENT", (void*)&KEY_KP_PERCENT);
-    engine->RegisterGlobalProperty("const int KEY_KP_PLUSMINUS", (void*)&KEY_KP_PLUSMINUS);
-    engine->RegisterGlobalProperty("const int KEY_KP_POWER", (void*)&KEY_KP_POWER);
-    engine->RegisterGlobalProperty("const int KEY_KP_RIGHTBRACE", (void*)&KEY_KP_RIGHTBRACE);
-    engine->RegisterGlobalProperty("const int KEY_KP_RIGHTPAREN", (void*)&KEY_KP_RIGHTPAREN);
-    engine->RegisterGlobalProperty("const int KEY_KP_SPACE", (void*)&KEY_KP_SPACE);
-    engine->RegisterGlobalProperty("const int KEY_KP_TAB", (void*)&KEY_KP_TAB);
-    engine->RegisterGlobalProperty("const int KEY_KP_VERTICALBAR", (void*)&KEY_KP_VERTICALBAR);
-    engine->RegisterGlobalProperty("const int KEY_KP_XOR", (void*)&KEY_KP_XOR);
-    engine->RegisterGlobalProperty("const int KEY_LEFTBRACKET", (void*)&KEY_LEFTBRACKET);
-    engine->RegisterGlobalProperty("const int KEY_LEFTPAREN", (void*)&KEY_LEFTPAREN);
-    engine->RegisterGlobalProperty("const int KEY_LESS", (void*)&KEY_LESS);
-    engine->RegisterGlobalProperty("const int KEY_MAIL", (void*)&KEY_MAIL);
-    engine->RegisterGlobalProperty("const int KEY_MEDIASELECT", (void*)&KEY_MEDIASELECT);
-    engine->RegisterGlobalProperty("const int KEY_MENU", (void*)&KEY_MENU);
-    engine->RegisterGlobalProperty("const int KEY_MINUS", (void*)&KEY_MINUS);
-    engine->RegisterGlobalProperty("const int KEY_MODE", (void*)&KEY_MODE);
-    engine->RegisterGlobalProperty("const int KEY_MUTE", (void*)&KEY_MUTE);
-    engine->RegisterGlobalProperty("const int KEY_OPER", (void*)&KEY_OPER);
-    engine->RegisterGlobalProperty("const int KEY_OUT", (void*)&KEY_OUT);
-    engine->RegisterGlobalProperty("const int KEY_PASTE", (void*)&KEY_PASTE);
-    engine->RegisterGlobalProperty("const int KEY_PERCENT", (void*)&KEY_PERCENT);
-    engine->RegisterGlobalProperty("const int KEY_PERIOD", (void*)&KEY_PERIOD);
-    engine->RegisterGlobalProperty("const int KEY_PLUS", (void*)&KEY_PLUS);
-    engine->RegisterGlobalProperty("const int KEY_POWER", (void*)&KEY_POWER);
-    engine->RegisterGlobalProperty("const int KEY_PRIOR", (void*)&KEY_PRIOR);
-    engine->RegisterGlobalProperty("const int KEY_QUESTION", (void*)&KEY_QUESTION);
-    engine->RegisterGlobalProperty("const int KEY_QUOTE", (void*)&KEY_QUOTE);
-    engine->RegisterGlobalProperty("const int KEY_QUOTEDBL", (void*)&KEY_QUOTEDBL);
-    engine->RegisterGlobalProperty("const int KEY_RIGHTBRACKET", (void*)&KEY_RIGHTBRACKET);
-    engine->RegisterGlobalProperty("const int KEY_RIGHTPAREN", (void*)&KEY_RIGHTPAREN);
-    engine->RegisterGlobalProperty("const int KEY_SEMICOLON", (void*)&KEY_SEMICOLON);
-    engine->RegisterGlobalProperty("const int KEY_SEPARATOR", (void*)&KEY_SEPARATOR);
-    engine->RegisterGlobalProperty("const int KEY_SLASH", (void*)&KEY_SLASH);
-    engine->RegisterGlobalProperty("const int KEY_SLEEP", (void*)&KEY_SLEEP);
-    engine->RegisterGlobalProperty("const int KEY_STOP", (void*)&KEY_STOP);
-    engine->RegisterGlobalProperty("const int KEY_SYSREQ", (void*)&KEY_SYSREQ);
-    engine->RegisterGlobalProperty("const int KEY_THOUSANDSSEPARATOR", (void*)&KEY_THOUSANDSSEPARATOR);
-    engine->RegisterGlobalProperty("const int KEY_UNDERSCORE", (void*)&KEY_UNDERSCORE);
-    engine->RegisterGlobalProperty("const int KEY_UNDO", (void*)&KEY_UNDO);
-    engine->RegisterGlobalProperty("const int KEY_VOLUMEDOWN", (void*)&KEY_VOLUMEDOWN);
-    engine->RegisterGlobalProperty("const int KEY_VOLUMEUP", (void*)&KEY_VOLUMEUP);
-    engine->RegisterGlobalProperty("const int KEY_WWW", (void*)&KEY_WWW);
+    engine->RegisterEnum("MouseButton");
+    engine->RegisterEnumValue("MouseButton", "MOUSEB_LEFT", MOUSEB_LEFT);
+    engine->RegisterEnumValue("MouseButton", "MOUSEB_MIDDLE", MOUSEB_MIDDLE);
+    engine->RegisterEnumValue("MouseButton", "MOUSEB_RIGHT", MOUSEB_RIGHT);
 
-    engine->RegisterGlobalProperty("const int SCANCODE_UNKNOWN", (void*)&SCANCODE_UNKNOWN);
-    engine->RegisterGlobalProperty("const int SCANCODE_CTRL", (void*)&SCANCODE_CTRL);
-    engine->RegisterGlobalProperty("const int SCANCODE_SHIFT", (void*)&SCANCODE_SHIFT);
-    engine->RegisterGlobalProperty("const int SCANCODE_ALT", (void*)&SCANCODE_ALT);
-    engine->RegisterGlobalProperty("const int SCANCODE_GUI", (void*)&SCANCODE_GUI);
-    engine->RegisterGlobalProperty("const int SCANCODE_A", (void*)&SCANCODE_A);
-    engine->RegisterGlobalProperty("const int SCANCODE_B", (void*)&SCANCODE_B);
-    engine->RegisterGlobalProperty("const int SCANCODE_C", (void*)&SCANCODE_C);
-    engine->RegisterGlobalProperty("const int SCANCODE_D", (void*)&SCANCODE_D);
-    engine->RegisterGlobalProperty("const int SCANCODE_E", (void*)&SCANCODE_E);
-    engine->RegisterGlobalProperty("const int SCANCODE_F", (void*)&SCANCODE_F);
-    engine->RegisterGlobalProperty("const int SCANCODE_G", (void*)&SCANCODE_G);
-    engine->RegisterGlobalProperty("const int SCANCODE_H", (void*)&SCANCODE_H);
-    engine->RegisterGlobalProperty("const int SCANCODE_I", (void*)&SCANCODE_I);
-    engine->RegisterGlobalProperty("const int SCANCODE_J", (void*)&SCANCODE_J);
-    engine->RegisterGlobalProperty("const int SCANCODE_K", (void*)&SCANCODE_K);
-    engine->RegisterGlobalProperty("const int SCANCODE_L", (void*)&SCANCODE_L);
-    engine->RegisterGlobalProperty("const int SCANCODE_M", (void*)&SCANCODE_M);
-    engine->RegisterGlobalProperty("const int SCANCODE_N", (void*)&SCANCODE_N);
-    engine->RegisterGlobalProperty("const int SCANCODE_O", (void*)&SCANCODE_O);
-    engine->RegisterGlobalProperty("const int SCANCODE_P", (void*)&SCANCODE_P);
-    engine->RegisterGlobalProperty("const int SCANCODE_Q", (void*)&SCANCODE_Q);
-    engine->RegisterGlobalProperty("const int SCANCODE_R", (void*)&SCANCODE_R);
-    engine->RegisterGlobalProperty("const int SCANCODE_S", (void*)&SCANCODE_S);
-    engine->RegisterGlobalProperty("const int SCANCODE_T", (void*)&SCANCODE_T);
-    engine->RegisterGlobalProperty("const int SCANCODE_U", (void*)&SCANCODE_U);
-    engine->RegisterGlobalProperty("const int SCANCODE_V", (void*)&SCANCODE_V);
-    engine->RegisterGlobalProperty("const int SCANCODE_W", (void*)&SCANCODE_W);
-    engine->RegisterGlobalProperty("const int SCANCODE_X", (void*)&SCANCODE_X);
-    engine->RegisterGlobalProperty("const int SCANCODE_Y", (void*)&SCANCODE_Y);
-    engine->RegisterGlobalProperty("const int SCANCODE_Z", (void*)&SCANCODE_Z);
-    engine->RegisterGlobalProperty("const int SCANCODE_1", (void*)&SCANCODE_1);
-    engine->RegisterGlobalProperty("const int SCANCODE_2", (void*)&SCANCODE_2);
-    engine->RegisterGlobalProperty("const int SCANCODE_3", (void*)&SCANCODE_3);
-    engine->RegisterGlobalProperty("const int SCANCODE_4", (void*)&SCANCODE_4);
-    engine->RegisterGlobalProperty("const int SCANCODE_5", (void*)&SCANCODE_5);
-    engine->RegisterGlobalProperty("const int SCANCODE_6", (void*)&SCANCODE_6);
-    engine->RegisterGlobalProperty("const int SCANCODE_7", (void*)&SCANCODE_7);
-    engine->RegisterGlobalProperty("const int SCANCODE_8", (void*)&SCANCODE_8);
-    engine->RegisterGlobalProperty("const int SCANCODE_9", (void*)&SCANCODE_9);
-    engine->RegisterGlobalProperty("const int SCANCODE_0", (void*)&SCANCODE_0);
-    engine->RegisterGlobalProperty("const int SCANCODE_RETURN", (void*)&SCANCODE_RETURN);
-    engine->RegisterGlobalProperty("const int SCANCODE_ESCAPE", (void*)&SCANCODE_ESCAPE);
-    engine->RegisterGlobalProperty("const int SCANCODE_BACKSPACE", (void*)&SCANCODE_BACKSPACE);
-    engine->RegisterGlobalProperty("const int SCANCODE_TAB", (void*)&SCANCODE_TAB);
-    engine->RegisterGlobalProperty("const int SCANCODE_SPACE", (void*)&SCANCODE_SPACE);
-    engine->RegisterGlobalProperty("const int SCANCODE_MINUS", (void*)&SCANCODE_MINUS);
-    engine->RegisterGlobalProperty("const int SCANCODE_EQUALS", (void*)&SCANCODE_EQUALS);
-    engine->RegisterGlobalProperty("const int SCANCODE_LEFTBRACKET", (void*)&SCANCODE_LEFTBRACKET);
-    engine->RegisterGlobalProperty("const int SCANCODE_RIGHTBRACKET", (void*)&SCANCODE_RIGHTBRACKET);
-    engine->RegisterGlobalProperty("const int SCANCODE_BACKSLASH", (void*)&SCANCODE_BACKSLASH);
-    engine->RegisterGlobalProperty("const int SCANCODE_NONUSHASH", (void*)&SCANCODE_NONUSHASH);
-    engine->RegisterGlobalProperty("const int SCANCODE_SEMICOLON", (void*)&SCANCODE_SEMICOLON);
-    engine->RegisterGlobalProperty("const int SCANCODE_APOSTROPHE", (void*)&SCANCODE_APOSTROPHE);
-    engine->RegisterGlobalProperty("const int SCANCODE_GRAVE", (void*)&SCANCODE_GRAVE);
-    engine->RegisterGlobalProperty("const int SCANCODE_COMMA", (void*)&SCANCODE_COMMA);
-    engine->RegisterGlobalProperty("const int SCANCODE_PERIOD", (void*)&SCANCODE_PERIOD);
-    engine->RegisterGlobalProperty("const int SCANCODE_SLASH", (void*)&SCANCODE_SLASH);
-    engine->RegisterGlobalProperty("const int SCANCODE_CAPSLOCK", (void*)&SCANCODE_CAPSLOCK);
-    engine->RegisterGlobalProperty("const int SCANCODE_F1", (void*)&SCANCODE_F1);
-    engine->RegisterGlobalProperty("const int SCANCODE_F2", (void*)&SCANCODE_F2);
-    engine->RegisterGlobalProperty("const int SCANCODE_F3", (void*)&SCANCODE_F3);
-    engine->RegisterGlobalProperty("const int SCANCODE_F4", (void*)&SCANCODE_F4);
-    engine->RegisterGlobalProperty("const int SCANCODE_F5", (void*)&SCANCODE_F5);
-    engine->RegisterGlobalProperty("const int SCANCODE_F6", (void*)&SCANCODE_F6);
-    engine->RegisterGlobalProperty("const int SCANCODE_F7", (void*)&SCANCODE_F7);
-    engine->RegisterGlobalProperty("const int SCANCODE_F8", (void*)&SCANCODE_F8);
-    engine->RegisterGlobalProperty("const int SCANCODE_F9", (void*)&SCANCODE_F9);
-    engine->RegisterGlobalProperty("const int SCANCODE_F10", (void*)&SCANCODE_F10);
-    engine->RegisterGlobalProperty("const int SCANCODE_F11", (void*)&SCANCODE_F11);
-    engine->RegisterGlobalProperty("const int SCANCODE_F12", (void*)&SCANCODE_F12);
-    engine->RegisterGlobalProperty("const int SCANCODE_PRINTSCREEN", (void*)&SCANCODE_PRINTSCREEN);
-    engine->RegisterGlobalProperty("const int SCANCODE_SCROLLLOCK", (void*)&SCANCODE_SCROLLLOCK);
-    engine->RegisterGlobalProperty("const int SCANCODE_PAUSE", (void*)&SCANCODE_PAUSE);
-    engine->RegisterGlobalProperty("const int SCANCODE_INSERT", (void*)&SCANCODE_INSERT);
-    engine->RegisterGlobalProperty("const int SCANCODE_HOME", (void*)&SCANCODE_HOME);
-    engine->RegisterGlobalProperty("const int SCANCODE_PAGEUP", (void*)&SCANCODE_PAGEUP);
-    engine->RegisterGlobalProperty("const int SCANCODE_DELETE", (void*)&SCANCODE_DELETE);
-    engine->RegisterGlobalProperty("const int SCANCODE_END", (void*)&SCANCODE_END);
-    engine->RegisterGlobalProperty("const int SCANCODE_PAGEDOWN", (void*)&SCANCODE_PAGEDOWN);
-    engine->RegisterGlobalProperty("const int SCANCODE_RIGHT", (void*)&SCANCODE_RIGHT);
-    engine->RegisterGlobalProperty("const int SCANCODE_LEFT", (void*)&SCANCODE_LEFT);
-    engine->RegisterGlobalProperty("const int SCANCODE_DOWN", (void*)&SCANCODE_DOWN);
-    engine->RegisterGlobalProperty("const int SCANCODE_UP", (void*)&SCANCODE_UP);
-    engine->RegisterGlobalProperty("const int SCANCODE_NUMLOCKCLEAR", (void*)&SCANCODE_NUMLOCKCLEAR);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_DIVIDE", (void*)&SCANCODE_KP_DIVIDE);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_MULTIPLY", (void*)&SCANCODE_KP_MULTIPLY);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_MINUS", (void*)&SCANCODE_KP_MINUS);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_PLUS", (void*)&SCANCODE_KP_PLUS);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_ENTER", (void*)&SCANCODE_KP_ENTER);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_1", (void*)&SCANCODE_KP_1);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_2", (void*)&SCANCODE_KP_2);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_3", (void*)&SCANCODE_KP_3);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_4", (void*)&SCANCODE_KP_4);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_5", (void*)&SCANCODE_KP_5);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_6", (void*)&SCANCODE_KP_6);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_7", (void*)&SCANCODE_KP_7);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_8", (void*)&SCANCODE_KP_8);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_9", (void*)&SCANCODE_KP_9);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_0", (void*)&SCANCODE_KP_0);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_PERIOD", (void*)&SCANCODE_KP_PERIOD);
-    engine->RegisterGlobalProperty("const int SCANCODE_NONUSBACKSLASH", (void*)&SCANCODE_NONUSBACKSLASH);
-    engine->RegisterGlobalProperty("const int SCANCODE_APPLICATION", (void*)&SCANCODE_APPLICATION);
-    engine->RegisterGlobalProperty("const int SCANCODE_POWER", (void*)&SCANCODE_POWER);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_EQUALS", (void*)&SCANCODE_KP_EQUALS);
-    engine->RegisterGlobalProperty("const int SCANCODE_F13", (void*)&SCANCODE_F13);
-    engine->RegisterGlobalProperty("const int SCANCODE_F14", (void*)&SCANCODE_F14);
-    engine->RegisterGlobalProperty("const int SCANCODE_F15", (void*)&SCANCODE_F15);
-    engine->RegisterGlobalProperty("const int SCANCODE_F16", (void*)&SCANCODE_F16);
-    engine->RegisterGlobalProperty("const int SCANCODE_F17", (void*)&SCANCODE_F17);
-    engine->RegisterGlobalProperty("const int SCANCODE_F18", (void*)&SCANCODE_F18);
-    engine->RegisterGlobalProperty("const int SCANCODE_F19", (void*)&SCANCODE_F19);
-    engine->RegisterGlobalProperty("const int SCANCODE_F20", (void*)&SCANCODE_F20);
-    engine->RegisterGlobalProperty("const int SCANCODE_F21", (void*)&SCANCODE_F21);
-    engine->RegisterGlobalProperty("const int SCANCODE_F22", (void*)&SCANCODE_F22);
-    engine->RegisterGlobalProperty("const int SCANCODE_F23", (void*)&SCANCODE_F23);
-    engine->RegisterGlobalProperty("const int SCANCODE_F24", (void*)&SCANCODE_F24);
-    engine->RegisterGlobalProperty("const int SCANCODE_EXECUTE", (void*)&SCANCODE_EXECUTE);
-    engine->RegisterGlobalProperty("const int SCANCODE_HELP", (void*)&SCANCODE_HELP);
-    engine->RegisterGlobalProperty("const int SCANCODE_MENU", (void*)&SCANCODE_MENU);
-    engine->RegisterGlobalProperty("const int SCANCODE_SELECT", (void*)&SCANCODE_SELECT);
-    engine->RegisterGlobalProperty("const int SCANCODE_STOP", (void*)&SCANCODE_STOP);
-    engine->RegisterGlobalProperty("const int SCANCODE_AGAIN", (void*)&SCANCODE_AGAIN);
-    engine->RegisterGlobalProperty("const int SCANCODE_UNDO", (void*)&SCANCODE_UNDO);
-    engine->RegisterGlobalProperty("const int SCANCODE_CUT", (void*)&SCANCODE_CUT);
-    engine->RegisterGlobalProperty("const int SCANCODE_COPY", (void*)&SCANCODE_COPY);
-    engine->RegisterGlobalProperty("const int SCANCODE_PASTE", (void*)&SCANCODE_PASTE);
-    engine->RegisterGlobalProperty("const int SCANCODE_FIND", (void*)&SCANCODE_FIND);
-    engine->RegisterGlobalProperty("const int SCANCODE_MUTE", (void*)&SCANCODE_MUTE);
-    engine->RegisterGlobalProperty("const int SCANCODE_VOLUMEUP", (void*)&SCANCODE_VOLUMEUP);
-    engine->RegisterGlobalProperty("const int SCANCODE_VOLUMEDOWN", (void*)&SCANCODE_VOLUMEDOWN);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_COMMA", (void*)&SCANCODE_KP_COMMA);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_EQUALSAS400", (void*)&SCANCODE_KP_EQUALSAS400);
-    engine->RegisterGlobalProperty("const int SCANCODE_INTERNATIONAL1", (void*)&SCANCODE_INTERNATIONAL1);
-    engine->RegisterGlobalProperty("const int SCANCODE_INTERNATIONAL2", (void*)&SCANCODE_INTERNATIONAL2);
-    engine->RegisterGlobalProperty("const int SCANCODE_INTERNATIONAL3", (void*)&SCANCODE_INTERNATIONAL3);
-    engine->RegisterGlobalProperty("const int SCANCODE_INTERNATIONAL4", (void*)&SCANCODE_INTERNATIONAL4);
-    engine->RegisterGlobalProperty("const int SCANCODE_INTERNATIONAL5", (void*)&SCANCODE_INTERNATIONAL5);
-    engine->RegisterGlobalProperty("const int SCANCODE_INTERNATIONAL6", (void*)&SCANCODE_INTERNATIONAL6);
-    engine->RegisterGlobalProperty("const int SCANCODE_INTERNATIONAL7", (void*)&SCANCODE_INTERNATIONAL7);
-    engine->RegisterGlobalProperty("const int SCANCODE_INTERNATIONAL8", (void*)&SCANCODE_INTERNATIONAL8);
-    engine->RegisterGlobalProperty("const int SCANCODE_INTERNATIONAL9", (void*)&SCANCODE_INTERNATIONAL9);
-    engine->RegisterGlobalProperty("const int SCANCODE_LANG1", (void*)&SCANCODE_LANG1);
-    engine->RegisterGlobalProperty("const int SCANCODE_LANG2", (void*)&SCANCODE_LANG2);
-    engine->RegisterGlobalProperty("const int SCANCODE_LANG3", (void*)&SCANCODE_LANG3);
-    engine->RegisterGlobalProperty("const int SCANCODE_LANG4", (void*)&SCANCODE_LANG4);
-    engine->RegisterGlobalProperty("const int SCANCODE_LANG5", (void*)&SCANCODE_LANG5);
-    engine->RegisterGlobalProperty("const int SCANCODE_LANG6", (void*)&SCANCODE_LANG6);
-    engine->RegisterGlobalProperty("const int SCANCODE_LANG7", (void*)&SCANCODE_LANG7);
-    engine->RegisterGlobalProperty("const int SCANCODE_LANG8", (void*)&SCANCODE_LANG8);
-    engine->RegisterGlobalProperty("const int SCANCODE_LANG9", (void*)&SCANCODE_LANG9);
-    engine->RegisterGlobalProperty("const int SCANCODE_ALTERASE", (void*)&SCANCODE_ALTERASE);
-    engine->RegisterGlobalProperty("const int SCANCODE_SYSREQ", (void*)&SCANCODE_SYSREQ);
-    engine->RegisterGlobalProperty("const int SCANCODE_CANCEL", (void*)&SCANCODE_CANCEL);
-    engine->RegisterGlobalProperty("const int SCANCODE_CLEAR", (void*)&SCANCODE_CLEAR);
-    engine->RegisterGlobalProperty("const int SCANCODE_PRIOR", (void*)&SCANCODE_PRIOR);
-    engine->RegisterGlobalProperty("const int SCANCODE_RETURN2", (void*)&SCANCODE_RETURN2);
-    engine->RegisterGlobalProperty("const int SCANCODE_SEPARATOR", (void*)&SCANCODE_SEPARATOR);
-    engine->RegisterGlobalProperty("const int SCANCODE_OUT", (void*)&SCANCODE_OUT);
-    engine->RegisterGlobalProperty("const int SCANCODE_OPER", (void*)&SCANCODE_OPER);
-    engine->RegisterGlobalProperty("const int SCANCODE_CLEARAGAIN", (void*)&SCANCODE_CLEARAGAIN);
-    engine->RegisterGlobalProperty("const int SCANCODE_CRSEL", (void*)&SCANCODE_CRSEL);
-    engine->RegisterGlobalProperty("const int SCANCODE_EXSEL", (void*)&SCANCODE_EXSEL);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_00", (void*)&SCANCODE_KP_00);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_000", (void*)&SCANCODE_KP_000);
-    engine->RegisterGlobalProperty("const int SCANCODE_THOUSANDSSEPARATOR", (void*)&SCANCODE_THOUSANDSSEPARATOR);
-    engine->RegisterGlobalProperty("const int SCANCODE_DECIMALSEPARATOR", (void*)&SCANCODE_DECIMALSEPARATOR);
-    engine->RegisterGlobalProperty("const int SCANCODE_CURRENCYUNIT", (void*)&SCANCODE_CURRENCYUNIT);
-    engine->RegisterGlobalProperty("const int SCANCODE_CURRENCYSUBUNIT", (void*)&SCANCODE_CURRENCYSUBUNIT);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_LEFTPAREN", (void*)&SCANCODE_KP_LEFTPAREN);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_RIGHTPAREN", (void*)&SCANCODE_KP_RIGHTPAREN);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_LEFTBRACE", (void*)&SCANCODE_KP_LEFTBRACE);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_RIGHTBRACE", (void*)&SCANCODE_KP_RIGHTBRACE);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_TAB", (void*)&SCANCODE_KP_TAB);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_BACKSPACE", (void*)&SCANCODE_KP_BACKSPACE);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_A", (void*)&SCANCODE_KP_A);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_B", (void*)&SCANCODE_KP_B);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_C", (void*)&SCANCODE_KP_C);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_D", (void*)&SCANCODE_KP_D);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_E", (void*)&SCANCODE_KP_E);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_F", (void*)&SCANCODE_KP_F);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_XOR", (void*)&SCANCODE_KP_XOR);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_POWER", (void*)&SCANCODE_KP_POWER);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_PERCENT", (void*)&SCANCODE_KP_PERCENT);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_LESS", (void*)&SCANCODE_KP_LESS);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_GREATER", (void*)&SCANCODE_KP_GREATER);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_AMPERSAND", (void*)&SCANCODE_KP_AMPERSAND);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_DBLAMPERSAND", (void*)&SCANCODE_KP_DBLAMPERSAND);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_VERTICALBAR", (void*)&SCANCODE_KP_VERTICALBAR);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_DBLVERTICALBAR", (void*)&SCANCODE_KP_DBLVERTICALBAR);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_COLON", (void*)&SCANCODE_KP_COLON);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_HASH", (void*)&SCANCODE_KP_HASH);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_SPACE", (void*)&SCANCODE_KP_SPACE);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_AT", (void*)&SCANCODE_KP_AT);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_EXCLAM", (void*)&SCANCODE_KP_EXCLAM);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_MEMSTORE", (void*)&SCANCODE_KP_MEMSTORE);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_MEMRECALL", (void*)&SCANCODE_KP_MEMRECALL);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_MEMCLEAR", (void*)&SCANCODE_KP_MEMCLEAR);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_MEMADD", (void*)&SCANCODE_KP_MEMADD);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_MEMSUBTRACT", (void*)&SCANCODE_KP_MEMSUBTRACT);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_MEMMULTIPLY", (void*)&SCANCODE_KP_MEMMULTIPLY);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_MEMDIVIDE", (void*)&SCANCODE_KP_MEMDIVIDE);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_PLUSMINUS", (void*)&SCANCODE_KP_PLUSMINUS);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_CLEAR", (void*)&SCANCODE_KP_CLEAR);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_CLEARENTRY", (void*)&SCANCODE_KP_CLEARENTRY);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_BINARY", (void*)&SCANCODE_KP_BINARY);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_OCTAL", (void*)&SCANCODE_KP_OCTAL);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_DECIMAL", (void*)&SCANCODE_KP_DECIMAL);
-    engine->RegisterGlobalProperty("const int SCANCODE_KP_HEXADECIMAL", (void*)&SCANCODE_KP_HEXADECIMAL);
-    engine->RegisterGlobalProperty("const int SCANCODE_LCTRL", (void*)&SCANCODE_LCTRL);
-    engine->RegisterGlobalProperty("const int SCANCODE_LSHIFT", (void*)&SCANCODE_LSHIFT);
-    engine->RegisterGlobalProperty("const int SCANCODE_LALT", (void*)&SCANCODE_LALT);
-    engine->RegisterGlobalProperty("const int SCANCODE_LGUI", (void*)&SCANCODE_LGUI);
-    engine->RegisterGlobalProperty("const int SCANCODE_RCTRL", (void*)&SCANCODE_RCTRL);
-    engine->RegisterGlobalProperty("const int SCANCODE_RSHIFT", (void*)&SCANCODE_RSHIFT);
-    engine->RegisterGlobalProperty("const int SCANCODE_RALT", (void*)&SCANCODE_RALT);
-    engine->RegisterGlobalProperty("const int SCANCODE_RGUI", (void*)&SCANCODE_RGUI);
-    engine->RegisterGlobalProperty("const int SCANCODE_MODE", (void*)&SCANCODE_MODE);
-    engine->RegisterGlobalProperty("const int SCANCODE_AUDIONEXT", (void*)&SCANCODE_AUDIONEXT);
-    engine->RegisterGlobalProperty("const int SCANCODE_AUDIOPREV", (void*)&SCANCODE_AUDIOPREV);
-    engine->RegisterGlobalProperty("const int SCANCODE_AUDIOSTOP", (void*)&SCANCODE_AUDIOSTOP);
-    engine->RegisterGlobalProperty("const int SCANCODE_AUDIOPLAY", (void*)&SCANCODE_AUDIOPLAY);
-    engine->RegisterGlobalProperty("const int SCANCODE_AUDIOMUTE", (void*)&SCANCODE_AUDIOMUTE);
-    engine->RegisterGlobalProperty("const int SCANCODE_MEDIASELECT", (void*)&SCANCODE_MEDIASELECT);
-    engine->RegisterGlobalProperty("const int SCANCODE_WWW", (void*)&SCANCODE_WWW);
-    engine->RegisterGlobalProperty("const int SCANCODE_MAIL", (void*)&SCANCODE_MAIL);
-    engine->RegisterGlobalProperty("const int SCANCODE_CALCULATOR", (void*)&SCANCODE_CALCULATOR);
-    engine->RegisterGlobalProperty("const int SCANCODE_COMPUTER", (void*)&SCANCODE_COMPUTER);
-    engine->RegisterGlobalProperty("const int SCANCODE_AC_SEARCH", (void*)&SCANCODE_AC_SEARCH);
-    engine->RegisterGlobalProperty("const int SCANCODE_AC_HOME", (void*)&SCANCODE_AC_HOME);
-    engine->RegisterGlobalProperty("const int SCANCODE_AC_BACK", (void*)&SCANCODE_AC_BACK);
-    engine->RegisterGlobalProperty("const int SCANCODE_AC_FORWARD", (void*)&SCANCODE_AC_FORWARD);
-    engine->RegisterGlobalProperty("const int SCANCODE_AC_STOP", (void*)&SCANCODE_AC_STOP);
-    engine->RegisterGlobalProperty("const int SCANCODE_AC_REFRESH", (void*)&SCANCODE_AC_REFRESH);
-    engine->RegisterGlobalProperty("const int SCANCODE_AC_BOOKMARKS", (void*)&SCANCODE_AC_BOOKMARKS);
-    engine->RegisterGlobalProperty("const int SCANCODE_BRIGHTNESSDOWN", (void*)&SCANCODE_BRIGHTNESSDOWN);
-    engine->RegisterGlobalProperty("const int SCANCODE_BRIGHTNESSUP", (void*)&SCANCODE_BRIGHTNESSUP);
-    engine->RegisterGlobalProperty("const int SCANCODE_DISPLAYSWITCH", (void*)&SCANCODE_DISPLAYSWITCH);
-    engine->RegisterGlobalProperty("const int SCANCODE_KBDILLUMTOGGLE", (void*)&SCANCODE_KBDILLUMTOGGLE);
-    engine->RegisterGlobalProperty("const int SCANCODE_KBDILLUMDOWN", (void*)&SCANCODE_KBDILLUMDOWN);
-    engine->RegisterGlobalProperty("const int SCANCODE_KBDILLUMUP", (void*)&SCANCODE_KBDILLUMUP);
-    engine->RegisterGlobalProperty("const int SCANCODE_EJECT", (void*)&SCANCODE_EJECT);
-    engine->RegisterGlobalProperty("const int SCANCODE_SLEEP", (void*)&SCANCODE_SLEEP);
-    engine->RegisterGlobalProperty("const int SCANCODE_APP1", (void*)&SCANCODE_APP1);
-    engine->RegisterGlobalProperty("const int SCANCODE_APP2", (void*)&SCANCODE_APP2);
-    engine->RegisterGlobalProperty("const int HAT_CENTER", (void*)&HAT_CENTER);
-    engine->RegisterGlobalProperty("const int HAT_UP", (void*)&HAT_UP);
-    engine->RegisterGlobalProperty("const int HAT_RIGHT", (void*)&HAT_RIGHT);
-    engine->RegisterGlobalProperty("const int HAT_DOWN", (void*)&HAT_DOWN);
-    engine->RegisterGlobalProperty("const int HAT_LEFT", (void*)&HAT_LEFT);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_A", (void*)&CONTROLLER_BUTTON_A);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_B", (void*)&CONTROLLER_BUTTON_B);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_X", (void*)&CONTROLLER_BUTTON_X);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_Y", (void*)&CONTROLLER_BUTTON_Y);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_BACK", (void*)&CONTROLLER_BUTTON_BACK);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_GUIDE", (void*)&CONTROLLER_BUTTON_GUIDE);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_START", (void*)&CONTROLLER_BUTTON_START);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_LEFTSTICK", (void*)&CONTROLLER_BUTTON_LEFTSTICK);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_RIGHTSTICK", (void*)&CONTROLLER_BUTTON_RIGHTSTICK);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_LEFTSHOULDER", (void*)&CONTROLLER_BUTTON_LEFTSHOULDER);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_RIGHTSHOULDER", (void*)&CONTROLLER_BUTTON_RIGHTSHOULDER);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_DPAD_UP", (void*)&CONTROLLER_BUTTON_DPAD_UP);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_DPAD_DOWN", (void*)&CONTROLLER_BUTTON_DPAD_DOWN);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_DPAD_LEFT", (void*)&CONTROLLER_BUTTON_DPAD_LEFT);
-    engine->RegisterGlobalProperty("const int CONTROLLER_BUTTON_DPAD_RIGHT", (void*)&CONTROLLER_BUTTON_DPAD_RIGHT);
-    engine->RegisterGlobalProperty("const int CONTROLLER_AXIS_LEFTX", (void*)&CONTROLLER_AXIS_LEFTX);
-    engine->RegisterGlobalProperty("const int CONTROLLER_AXIS_LEFTY", (void*)&CONTROLLER_AXIS_LEFTY);
-    engine->RegisterGlobalProperty("const int CONTROLLER_AXIS_RIGHTX", (void*)&CONTROLLER_AXIS_RIGHTX);
-    engine->RegisterGlobalProperty("const int CONTROLLER_AXIS_RIGHTY", (void*)&CONTROLLER_AXIS_RIGHTY);
-    engine->RegisterGlobalProperty("const int CONTROLLER_AXIS_TRIGGERLEFT", (void*)&CONTROLLER_AXIS_TRIGGERLEFT);
-    engine->RegisterGlobalProperty("const int CONTROLLER_AXIS_TRIGGERRIGHT", (void*)&CONTROLLER_AXIS_TRIGGERRIGHT);
+    engine->RegisterEnum("Qualifier");
+    engine->RegisterEnumValue("Qualifier", "QUAL_SHIFT", QUAL_SHIFT);
+    engine->RegisterEnumValue("Qualifier", "QUAL_CTRL", QUAL_CTRL);
+    engine->RegisterEnumValue("Qualifier", "QUAL_ALT", QUAL_ALT);
+    engine->RegisterEnumValue("Qualifier", "QUAL_ANY", QUAL_ANY);
+
+    engine->RegisterEnum("Key");
+    engine->RegisterEnumValue("Key", "KEY_UNKNOWN", KEY_UNKNOWN);
+    engine->RegisterEnumValue("Key", "KEY_A", KEY_A);
+    engine->RegisterEnumValue("Key", "KEY_B", KEY_B);
+    engine->RegisterEnumValue("Key", "KEY_C", KEY_C);
+    engine->RegisterEnumValue("Key", "KEY_D", KEY_D);
+    engine->RegisterEnumValue("Key", "KEY_E", KEY_E);
+    engine->RegisterEnumValue("Key", "KEY_F", KEY_F);
+    engine->RegisterEnumValue("Key", "KEY_G", KEY_G);
+    engine->RegisterEnumValue("Key", "KEY_H", KEY_H);
+    engine->RegisterEnumValue("Key", "KEY_I", KEY_I);
+    engine->RegisterEnumValue("Key", "KEY_J", KEY_J);
+    engine->RegisterEnumValue("Key", "KEY_K", KEY_K);
+    engine->RegisterEnumValue("Key", "KEY_L", KEY_L);
+    engine->RegisterEnumValue("Key", "KEY_M", KEY_M);
+    engine->RegisterEnumValue("Key", "KEY_N", KEY_N);
+    engine->RegisterEnumValue("Key", "KEY_O", KEY_O);
+    engine->RegisterEnumValue("Key", "KEY_P", KEY_P);
+    engine->RegisterEnumValue("Key", "KEY_Q", KEY_Q);
+    engine->RegisterEnumValue("Key", "KEY_R", KEY_R);
+    engine->RegisterEnumValue("Key", "KEY_S", KEY_S);
+    engine->RegisterEnumValue("Key", "KEY_T", KEY_T);
+    engine->RegisterEnumValue("Key", "KEY_U", KEY_U);
+    engine->RegisterEnumValue("Key", "KEY_V", KEY_V);
+    engine->RegisterEnumValue("Key", "KEY_W", KEY_W);
+    engine->RegisterEnumValue("Key", "KEY_X", KEY_X);
+    engine->RegisterEnumValue("Key", "KEY_Y", KEY_Y);
+    engine->RegisterEnumValue("Key", "KEY_Z", KEY_Z);
+    engine->RegisterEnumValue("Key", "KEY_0", KEY_0);
+    engine->RegisterEnumValue("Key", "KEY_1", KEY_1);
+    engine->RegisterEnumValue("Key", "KEY_2", KEY_2);
+    engine->RegisterEnumValue("Key", "KEY_3", KEY_3);
+    engine->RegisterEnumValue("Key", "KEY_4", KEY_4);
+    engine->RegisterEnumValue("Key", "KEY_5", KEY_5);
+    engine->RegisterEnumValue("Key", "KEY_6", KEY_6);
+    engine->RegisterEnumValue("Key", "KEY_7", KEY_7);
+    engine->RegisterEnumValue("Key", "KEY_8", KEY_8);
+    engine->RegisterEnumValue("Key", "KEY_9", KEY_9);
+    engine->RegisterEnumValue("Key", "KEY_BACKSPACE", KEY_BACKSPACE);
+    engine->RegisterEnumValue("Key", "KEY_TAB", KEY_TAB);
+    engine->RegisterEnumValue("Key", "KEY_RETURN", KEY_RETURN);
+    engine->RegisterEnumValue("Key", "KEY_RETURN2", KEY_RETURN2);
+    engine->RegisterEnumValue("Key", "KEY_KP_ENTER", KEY_KP_ENTER);
+    engine->RegisterEnumValue("Key", "KEY_SHIFT", KEY_SHIFT);
+    engine->RegisterEnumValue("Key", "KEY_CTRL", KEY_CTRL);
+    engine->RegisterEnumValue("Key", "KEY_ALT", KEY_ALT);
+    engine->RegisterEnumValue("Key", "KEY_GUI", KEY_GUI);
+    engine->RegisterEnumValue("Key", "KEY_PAUSE", KEY_PAUSE);
+    engine->RegisterEnumValue("Key", "KEY_CAPSLOCK", KEY_CAPSLOCK);
+    engine->RegisterEnumValue("Key", "KEY_ESCAPE", KEY_ESCAPE);
+    engine->RegisterEnumValue("Key", "KEY_SPACE", KEY_SPACE);
+    engine->RegisterEnumValue("Key", "KEY_PAGEUP", KEY_PAGEUP);
+    engine->RegisterEnumValue("Key", "KEY_PAGEDOWN", KEY_PAGEDOWN);
+    engine->RegisterEnumValue("Key", "KEY_END", KEY_END);
+    engine->RegisterEnumValue("Key", "KEY_HOME", KEY_HOME);
+    engine->RegisterEnumValue("Key", "KEY_LEFT", KEY_LEFT);
+    engine->RegisterEnumValue("Key", "KEY_UP", KEY_UP);
+    engine->RegisterEnumValue("Key", "KEY_RIGHT", KEY_RIGHT);
+    engine->RegisterEnumValue("Key", "KEY_DOWN", KEY_DOWN);
+    engine->RegisterEnumValue("Key", "KEY_SELECT", KEY_SELECT);
+    engine->RegisterEnumValue("Key", "KEY_PRINTSCREEN", KEY_PRINTSCREEN);
+    engine->RegisterEnumValue("Key", "KEY_INSERT", KEY_INSERT);
+    engine->RegisterEnumValue("Key", "KEY_DELETE", KEY_DELETE);
+    engine->RegisterEnumValue("Key", "KEY_LGUI", KEY_LGUI);
+    engine->RegisterEnumValue("Key", "KEY_RGUI", KEY_RGUI);
+    engine->RegisterEnumValue("Key", "KEY_APPLICATION", KEY_APPLICATION);
+    engine->RegisterEnumValue("Key", "KEY_KP_0", KEY_KP_0);
+    engine->RegisterEnumValue("Key", "KEY_KP_1", KEY_KP_1);
+    engine->RegisterEnumValue("Key", "KEY_KP_2", KEY_KP_2);
+    engine->RegisterEnumValue("Key", "KEY_KP_3", KEY_KP_3);
+    engine->RegisterEnumValue("Key", "KEY_KP_4", KEY_KP_4);
+    engine->RegisterEnumValue("Key", "KEY_KP_5", KEY_KP_5);
+    engine->RegisterEnumValue("Key", "KEY_KP_6", KEY_KP_6);
+    engine->RegisterEnumValue("Key", "KEY_KP_7", KEY_KP_7);
+    engine->RegisterEnumValue("Key", "KEY_KP_8", KEY_KP_8);
+    engine->RegisterEnumValue("Key", "KEY_KP_9", KEY_KP_9);
+    engine->RegisterEnumValue("Key", "KEY_KP_MULTIPLY", KEY_KP_MULTIPLY);
+    engine->RegisterEnumValue("Key", "KEY_KP_PLUS", KEY_KP_PLUS);
+    engine->RegisterEnumValue("Key", "KEY_KP_MINUS", KEY_KP_MINUS);
+    engine->RegisterEnumValue("Key", "KEY_KP_PERIOD", KEY_KP_PERIOD);
+    engine->RegisterEnumValue("Key", "KEY_KP_DIVIDE", KEY_KP_DIVIDE);
+    engine->RegisterEnumValue("Key", "KEY_F1", KEY_F1);
+    engine->RegisterEnumValue("Key", "KEY_F2", KEY_F2);
+    engine->RegisterEnumValue("Key", "KEY_F3", KEY_F3);
+    engine->RegisterEnumValue("Key", "KEY_F4", KEY_F4);
+    engine->RegisterEnumValue("Key", "KEY_F5", KEY_F5);
+    engine->RegisterEnumValue("Key", "KEY_F6", KEY_F6);
+    engine->RegisterEnumValue("Key", "KEY_F7", KEY_F7);
+    engine->RegisterEnumValue("Key", "KEY_F8", KEY_F8);
+    engine->RegisterEnumValue("Key", "KEY_F9", KEY_F9);
+    engine->RegisterEnumValue("Key", "KEY_F10", KEY_F10);
+    engine->RegisterEnumValue("Key", "KEY_F11", KEY_F11);
+    engine->RegisterEnumValue("Key", "KEY_F12", KEY_F12);
+    engine->RegisterEnumValue("Key", "KEY_F13", KEY_F13);
+    engine->RegisterEnumValue("Key", "KEY_F14", KEY_F14);
+    engine->RegisterEnumValue("Key", "KEY_F15", KEY_F15);
+    engine->RegisterEnumValue("Key", "KEY_F16", KEY_F16);
+    engine->RegisterEnumValue("Key", "KEY_F17", KEY_F17);
+    engine->RegisterEnumValue("Key", "KEY_F18", KEY_F18);
+    engine->RegisterEnumValue("Key", "KEY_F19", KEY_F19);
+    engine->RegisterEnumValue("Key", "KEY_F20", KEY_F20);
+    engine->RegisterEnumValue("Key", "KEY_F21", KEY_F21);
+    engine->RegisterEnumValue("Key", "KEY_F22", KEY_F22);
+    engine->RegisterEnumValue("Key", "KEY_F23", KEY_F23);
+    engine->RegisterEnumValue("Key", "KEY_F24", KEY_F24);
+    engine->RegisterEnumValue("Key", "KEY_NUMLOCKCLEAR", KEY_NUMLOCKCLEAR);
+    engine->RegisterEnumValue("Key", "KEY_SCROLLLOCK", KEY_SCROLLLOCK);
+    engine->RegisterEnumValue("Key", "KEY_LSHIFT", KEY_LSHIFT);
+    engine->RegisterEnumValue("Key", "KEY_RSHIFT", KEY_RSHIFT);
+    engine->RegisterEnumValue("Key", "KEY_LCTRL", KEY_LCTRL);
+    engine->RegisterEnumValue("Key", "KEY_RCTRL", KEY_RCTRL);
+    engine->RegisterEnumValue("Key", "KEY_LALT", KEY_LALT);
+    engine->RegisterEnumValue("Key", "KEY_RALT", KEY_RALT);
+    engine->RegisterEnumValue("Key", "KEY_AC_BACK", KEY_AC_BACK);
+    engine->RegisterEnumValue("Key", "KEY_AC_BOOKMARKS", KEY_AC_BOOKMARKS);
+    engine->RegisterEnumValue("Key", "KEY_AC_FORWARD", KEY_AC_FORWARD);
+    engine->RegisterEnumValue("Key", "KEY_AC_HOME", KEY_AC_HOME);
+    engine->RegisterEnumValue("Key", "KEY_AC_REFRESH", KEY_AC_REFRESH);
+    engine->RegisterEnumValue("Key", "KEY_AC_SEARCH", KEY_AC_SEARCH);
+    engine->RegisterEnumValue("Key", "KEY_AC_STOP", KEY_AC_STOP);
+    engine->RegisterEnumValue("Key", "KEY_AGAIN", KEY_AGAIN);
+    engine->RegisterEnumValue("Key", "KEY_ALTERASE", KEY_ALTERASE);
+    engine->RegisterEnumValue("Key", "KEY_AMPERSAND", KEY_AMPERSAND);
+    engine->RegisterEnumValue("Key", "KEY_ASTERISK", KEY_ASTERISK);
+    engine->RegisterEnumValue("Key", "KEY_AT", KEY_AT);
+    engine->RegisterEnumValue("Key", "KEY_AUDIOMUTE", KEY_AUDIOMUTE);
+    engine->RegisterEnumValue("Key", "KEY_AUDIONEXT", KEY_AUDIONEXT);
+    engine->RegisterEnumValue("Key", "KEY_AUDIOPLAY", KEY_AUDIOPLAY);
+    engine->RegisterEnumValue("Key", "KEY_AUDIOPREV", KEY_AUDIOPREV);
+    engine->RegisterEnumValue("Key", "KEY_AUDIOSTOP", KEY_AUDIOSTOP);
+    engine->RegisterEnumValue("Key", "KEY_BACKQUOTE", KEY_BACKQUOTE);
+    engine->RegisterEnumValue("Key", "KEY_BACKSLASH", KEY_BACKSLASH);
+    engine->RegisterEnumValue("Key", "KEY_BRIGHTNESSDOWN", KEY_BRIGHTNESSDOWN);
+    engine->RegisterEnumValue("Key", "KEY_BRIGHTNESSUP", KEY_BRIGHTNESSUP);
+    engine->RegisterEnumValue("Key", "KEY_CALCULATOR", KEY_CALCULATOR);
+    engine->RegisterEnumValue("Key", "KEY_CANCEL", KEY_CANCEL);
+    engine->RegisterEnumValue("Key", "KEY_CARET", KEY_CARET);
+    engine->RegisterEnumValue("Key", "KEY_CLEAR", KEY_CLEAR);
+    engine->RegisterEnumValue("Key", "KEY_CLEARAGAIN", KEY_CLEARAGAIN);
+    engine->RegisterEnumValue("Key", "KEY_COLON", KEY_COLON);
+    engine->RegisterEnumValue("Key", "KEY_COMMA", KEY_COMMA);
+    engine->RegisterEnumValue("Key", "KEY_COMPUTER", KEY_COMPUTER);
+    engine->RegisterEnumValue("Key", "KEY_COPY", KEY_COPY);
+    engine->RegisterEnumValue("Key", "KEY_CRSEL", KEY_CRSEL);
+    engine->RegisterEnumValue("Key", "KEY_CURRENCYSUBUNIT", KEY_CURRENCYSUBUNIT);
+    engine->RegisterEnumValue("Key", "KEY_CURRENCYUNIT", KEY_CURRENCYUNIT);
+    engine->RegisterEnumValue("Key", "KEY_CUT", KEY_CUT);
+    engine->RegisterEnumValue("Key", "KEY_DECIMALSEPARATOR", KEY_DECIMALSEPARATOR);
+    engine->RegisterEnumValue("Key", "KEY_DISPLAYSWITCH", KEY_DISPLAYSWITCH);
+    engine->RegisterEnumValue("Key", "KEY_DOLLAR", KEY_DOLLAR);
+    engine->RegisterEnumValue("Key", "KEY_EJECT", KEY_EJECT);
+    engine->RegisterEnumValue("Key", "KEY_EQUALS", KEY_EQUALS);
+    engine->RegisterEnumValue("Key", "KEY_EXCLAIM", KEY_EXCLAIM);
+    engine->RegisterEnumValue("Key", "KEY_EXSEL", KEY_EXSEL);
+    engine->RegisterEnumValue("Key", "KEY_FIND", KEY_FIND);
+    engine->RegisterEnumValue("Key", "KEY_GREATER", KEY_GREATER);
+    engine->RegisterEnumValue("Key", "KEY_HASH", KEY_HASH);
+    engine->RegisterEnumValue("Key", "KEY_HELP", KEY_HELP);
+    engine->RegisterEnumValue("Key", "KEY_KBDILLUMDOWN", KEY_KBDILLUMDOWN);
+    engine->RegisterEnumValue("Key", "KEY_KBDILLUMTOGGLE", KEY_KBDILLUMTOGGLE);
+    engine->RegisterEnumValue("Key", "KEY_KBDILLUMUP", KEY_KBDILLUMUP);
+    engine->RegisterEnumValue("Key", "KEY_KP_00", KEY_KP_00);
+    engine->RegisterEnumValue("Key", "KEY_KP_000", KEY_KP_000);
+    engine->RegisterEnumValue("Key", "KEY_KP_A", KEY_KP_A);
+    engine->RegisterEnumValue("Key", "KEY_KP_AMPERSAND", KEY_KP_AMPERSAND);
+    engine->RegisterEnumValue("Key", "KEY_KP_AT", KEY_KP_AT);
+    engine->RegisterEnumValue("Key", "KEY_KP_B", KEY_KP_B);
+    engine->RegisterEnumValue("Key", "KEY_KP_BACKSPACE", KEY_KP_BACKSPACE);
+    engine->RegisterEnumValue("Key", "KEY_KP_BINARY", KEY_KP_BINARY);
+    engine->RegisterEnumValue("Key", "KEY_KP_C", KEY_KP_C);
+    engine->RegisterEnumValue("Key", "KEY_KP_CLEAR", KEY_KP_CLEAR);
+    engine->RegisterEnumValue("Key", "KEY_KP_CLEARENTRY", KEY_KP_CLEARENTRY);
+    engine->RegisterEnumValue("Key", "KEY_KP_COLON", KEY_KP_COLON);
+    engine->RegisterEnumValue("Key", "KEY_KP_COMMA", KEY_KP_COMMA);
+    engine->RegisterEnumValue("Key", "KEY_KP_D", KEY_KP_D);
+    engine->RegisterEnumValue("Key", "KEY_KP_DBLAMPERSAND", KEY_KP_DBLAMPERSAND);
+    engine->RegisterEnumValue("Key", "KEY_KP_DBLVERTICALBAR", KEY_KP_DBLVERTICALBAR);
+    engine->RegisterEnumValue("Key", "KEY_KP_DECIMAL", KEY_KP_DECIMAL);
+    engine->RegisterEnumValue("Key", "KEY_KP_E", KEY_KP_E);
+    engine->RegisterEnumValue("Key", "KEY_KP_EQUALS", KEY_KP_EQUALS);
+    engine->RegisterEnumValue("Key", "KEY_KP_EQUALSAS400", KEY_KP_EQUALSAS400);
+    engine->RegisterEnumValue("Key", "KEY_KP_EXCLAM", KEY_KP_EXCLAM);
+    engine->RegisterEnumValue("Key", "KEY_KP_F", KEY_KP_F);
+    engine->RegisterEnumValue("Key", "KEY_KP_GREATER", KEY_KP_GREATER);
+    engine->RegisterEnumValue("Key", "KEY_KP_HASH", KEY_KP_HASH);
+    engine->RegisterEnumValue("Key", "KEY_KP_HEXADECIMAL", KEY_KP_HEXADECIMAL);
+    engine->RegisterEnumValue("Key", "KEY_KP_LEFTBRACE", KEY_KP_LEFTBRACE);
+    engine->RegisterEnumValue("Key", "KEY_KP_LEFTPAREN", KEY_KP_LEFTPAREN);
+    engine->RegisterEnumValue("Key", "KEY_KP_LESS", KEY_KP_LESS);
+    engine->RegisterEnumValue("Key", "KEY_KP_MEMADD", KEY_KP_MEMADD);
+    engine->RegisterEnumValue("Key", "KEY_KP_MEMCLEAR", KEY_KP_MEMCLEAR);
+    engine->RegisterEnumValue("Key", "KEY_KP_MEMDIVIDE", KEY_KP_MEMDIVIDE);
+    engine->RegisterEnumValue("Key", "KEY_KP_MEMMULTIPLY", KEY_KP_MEMMULTIPLY);
+    engine->RegisterEnumValue("Key", "KEY_KP_MEMRECALL", KEY_KP_MEMRECALL);
+    engine->RegisterEnumValue("Key", "KEY_KP_MEMSTORE", KEY_KP_MEMSTORE);
+    engine->RegisterEnumValue("Key", "KEY_KP_MEMSUBTRACT", KEY_KP_MEMSUBTRACT);
+    engine->RegisterEnumValue("Key", "KEY_KP_OCTAL", KEY_KP_OCTAL);
+    engine->RegisterEnumValue("Key", "KEY_KP_PERCENT", KEY_KP_PERCENT);
+    engine->RegisterEnumValue("Key", "KEY_KP_PLUSMINUS", KEY_KP_PLUSMINUS);
+    engine->RegisterEnumValue("Key", "KEY_KP_POWER", KEY_KP_POWER);
+    engine->RegisterEnumValue("Key", "KEY_KP_RIGHTBRACE", KEY_KP_RIGHTBRACE);
+    engine->RegisterEnumValue("Key", "KEY_KP_RIGHTPAREN", KEY_KP_RIGHTPAREN);
+    engine->RegisterEnumValue("Key", "KEY_KP_SPACE", KEY_KP_SPACE);
+    engine->RegisterEnumValue("Key", "KEY_KP_TAB", KEY_KP_TAB);
+    engine->RegisterEnumValue("Key", "KEY_KP_VERTICALBAR", KEY_KP_VERTICALBAR);
+    engine->RegisterEnumValue("Key", "KEY_KP_XOR", KEY_KP_XOR);
+    engine->RegisterEnumValue("Key", "KEY_LEFTBRACKET", KEY_LEFTBRACKET);
+    engine->RegisterEnumValue("Key", "KEY_LEFTPAREN", KEY_LEFTPAREN);
+    engine->RegisterEnumValue("Key", "KEY_LESS", KEY_LESS);
+    engine->RegisterEnumValue("Key", "KEY_MAIL", KEY_MAIL);
+    engine->RegisterEnumValue("Key", "KEY_MEDIASELECT", KEY_MEDIASELECT);
+    engine->RegisterEnumValue("Key", "KEY_MENU", KEY_MENU);
+    engine->RegisterEnumValue("Key", "KEY_MINUS", KEY_MINUS);
+    engine->RegisterEnumValue("Key", "KEY_MODE", KEY_MODE);
+    engine->RegisterEnumValue("Key", "KEY_MUTE", KEY_MUTE);
+    engine->RegisterEnumValue("Key", "KEY_OPER", KEY_OPER);
+    engine->RegisterEnumValue("Key", "KEY_OUT", KEY_OUT);
+    engine->RegisterEnumValue("Key", "KEY_PASTE", KEY_PASTE);
+    engine->RegisterEnumValue("Key", "KEY_PERCENT", KEY_PERCENT);
+    engine->RegisterEnumValue("Key", "KEY_PERIOD", KEY_PERIOD);
+    engine->RegisterEnumValue("Key", "KEY_PLUS", KEY_PLUS);
+    engine->RegisterEnumValue("Key", "KEY_POWER", KEY_POWER);
+    engine->RegisterEnumValue("Key", "KEY_PRIOR", KEY_PRIOR);
+    engine->RegisterEnumValue("Key", "KEY_QUESTION", KEY_QUESTION);
+    engine->RegisterEnumValue("Key", "KEY_QUOTE", KEY_QUOTE);
+    engine->RegisterEnumValue("Key", "KEY_QUOTEDBL", KEY_QUOTEDBL);
+    engine->RegisterEnumValue("Key", "KEY_RIGHTBRACKET", KEY_RIGHTBRACKET);
+    engine->RegisterEnumValue("Key", "KEY_RIGHTPAREN", KEY_RIGHTPAREN);
+    engine->RegisterEnumValue("Key", "KEY_SEMICOLON", KEY_SEMICOLON);
+    engine->RegisterEnumValue("Key", "KEY_SEPARATOR", KEY_SEPARATOR);
+    engine->RegisterEnumValue("Key", "KEY_SLASH", KEY_SLASH);
+    engine->RegisterEnumValue("Key", "KEY_SLEEP", KEY_SLEEP);
+    engine->RegisterEnumValue("Key", "KEY_STOP", KEY_STOP);
+    engine->RegisterEnumValue("Key", "KEY_SYSREQ", KEY_SYSREQ);
+    engine->RegisterEnumValue("Key", "KEY_THOUSANDSSEPARATOR", KEY_THOUSANDSSEPARATOR);
+    engine->RegisterEnumValue("Key", "KEY_UNDERSCORE", KEY_UNDERSCORE);
+    engine->RegisterEnumValue("Key", "KEY_UNDO", KEY_UNDO);
+    engine->RegisterEnumValue("Key", "KEY_VOLUMEDOWN", KEY_VOLUMEDOWN);
+    engine->RegisterEnumValue("Key", "KEY_VOLUMEUP", KEY_VOLUMEUP);
+    engine->RegisterEnumValue("Key", "KEY_WWW", KEY_WWW);
+
+    engine->RegisterEnum("Scancode");
+    engine->RegisterEnumValue("Scancode", "SCANCODE_UNKNOWN", SCANCODE_UNKNOWN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CTRL", SCANCODE_CTRL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_SHIFT", SCANCODE_SHIFT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_ALT", SCANCODE_ALT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_GUI", SCANCODE_GUI);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_A", SCANCODE_A);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_B", SCANCODE_B);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_C", SCANCODE_C);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_D", SCANCODE_D);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_E", SCANCODE_E);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F", SCANCODE_F);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_G", SCANCODE_G);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_H", SCANCODE_H);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_I", SCANCODE_I);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_J", SCANCODE_J);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_K", SCANCODE_K);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_L", SCANCODE_L);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_M", SCANCODE_M);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_N", SCANCODE_N);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_O", SCANCODE_O);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_P", SCANCODE_P);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_Q", SCANCODE_Q);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_R", SCANCODE_R);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_S", SCANCODE_S);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_T", SCANCODE_T);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_U", SCANCODE_U);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_V", SCANCODE_V);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_W", SCANCODE_W);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_X", SCANCODE_X);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_Y", SCANCODE_Y);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_Z", SCANCODE_Z);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_1", SCANCODE_1);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_2", SCANCODE_2);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_3", SCANCODE_3);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_4", SCANCODE_4);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_5", SCANCODE_5);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_6", SCANCODE_6);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_7", SCANCODE_7);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_8", SCANCODE_8);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_9", SCANCODE_9);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_0", SCANCODE_0);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_RETURN", SCANCODE_RETURN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_ESCAPE", SCANCODE_ESCAPE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_BACKSPACE", SCANCODE_BACKSPACE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_TAB", SCANCODE_TAB);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_SPACE", SCANCODE_SPACE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_MINUS", SCANCODE_MINUS);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_EQUALS", SCANCODE_EQUALS);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LEFTBRACKET", SCANCODE_LEFTBRACKET);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_RIGHTBRACKET", SCANCODE_RIGHTBRACKET);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_BACKSLASH", SCANCODE_BACKSLASH);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_NONUSHASH", SCANCODE_NONUSHASH);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_SEMICOLON", SCANCODE_SEMICOLON);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_APOSTROPHE", SCANCODE_APOSTROPHE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_GRAVE", SCANCODE_GRAVE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_COMMA", SCANCODE_COMMA);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_PERIOD", SCANCODE_PERIOD);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_SLASH", SCANCODE_SLASH);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CAPSLOCK", SCANCODE_CAPSLOCK);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F1", SCANCODE_F1);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F2", SCANCODE_F2);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F3", SCANCODE_F3);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F4", SCANCODE_F4);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F5", SCANCODE_F5);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F6", SCANCODE_F6);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F7", SCANCODE_F7);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F8", SCANCODE_F8);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F9", SCANCODE_F9);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F10", SCANCODE_F10);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F11", SCANCODE_F11);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F12", SCANCODE_F12);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_PRINTSCREEN", SCANCODE_PRINTSCREEN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_SCROLLLOCK", SCANCODE_SCROLLLOCK);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_PAUSE", SCANCODE_PAUSE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INSERT", SCANCODE_INSERT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_HOME", SCANCODE_HOME);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_PAGEUP", SCANCODE_PAGEUP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_DELETE", SCANCODE_DELETE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_END", SCANCODE_END);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_PAGEDOWN", SCANCODE_PAGEDOWN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_RIGHT", SCANCODE_RIGHT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LEFT", SCANCODE_LEFT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_DOWN", SCANCODE_DOWN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_UP", SCANCODE_UP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_NUMLOCKCLEAR", SCANCODE_NUMLOCKCLEAR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_DIVIDE", SCANCODE_KP_DIVIDE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_MULTIPLY", SCANCODE_KP_MULTIPLY);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_MINUS", SCANCODE_KP_MINUS);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_PLUS", SCANCODE_KP_PLUS);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_ENTER", SCANCODE_KP_ENTER);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_1", SCANCODE_KP_1);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_2", SCANCODE_KP_2);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_3", SCANCODE_KP_3);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_4", SCANCODE_KP_4);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_5", SCANCODE_KP_5);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_6", SCANCODE_KP_6);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_7", SCANCODE_KP_7);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_8", SCANCODE_KP_8);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_9", SCANCODE_KP_9);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_0", SCANCODE_KP_0);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_PERIOD", SCANCODE_KP_PERIOD);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_NONUSBACKSLASH", SCANCODE_NONUSBACKSLASH);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_APPLICATION", SCANCODE_APPLICATION);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_POWER", SCANCODE_POWER);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_EQUALS", SCANCODE_KP_EQUALS);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F13", SCANCODE_F13);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F14", SCANCODE_F14);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F15", SCANCODE_F15);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F16", SCANCODE_F16);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F17", SCANCODE_F17);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F18", SCANCODE_F18);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F19", SCANCODE_F19);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F20", SCANCODE_F20);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F21", SCANCODE_F21);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F22", SCANCODE_F22);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F23", SCANCODE_F23);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_F24", SCANCODE_F24);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_EXECUTE", SCANCODE_EXECUTE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_HELP", SCANCODE_HELP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_MENU", SCANCODE_MENU);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_SELECT", SCANCODE_SELECT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_STOP", SCANCODE_STOP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AGAIN", SCANCODE_AGAIN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_UNDO", SCANCODE_UNDO);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CUT", SCANCODE_CUT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_COPY", SCANCODE_COPY);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_PASTE", SCANCODE_PASTE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_FIND", SCANCODE_FIND);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_MUTE", SCANCODE_MUTE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_VOLUMEUP", SCANCODE_VOLUMEUP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_VOLUMEDOWN", SCANCODE_VOLUMEDOWN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_COMMA", SCANCODE_KP_COMMA);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_EQUALSAS400", SCANCODE_KP_EQUALSAS400);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INTERNATIONAL1", SCANCODE_INTERNATIONAL1);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INTERNATIONAL2", SCANCODE_INTERNATIONAL2);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INTERNATIONAL3", SCANCODE_INTERNATIONAL3);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INTERNATIONAL4", SCANCODE_INTERNATIONAL4);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INTERNATIONAL5", SCANCODE_INTERNATIONAL5);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INTERNATIONAL6", SCANCODE_INTERNATIONAL6);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INTERNATIONAL7", SCANCODE_INTERNATIONAL7);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INTERNATIONAL8", SCANCODE_INTERNATIONAL8);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_INTERNATIONAL9", SCANCODE_INTERNATIONAL9);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LANG1", SCANCODE_LANG1);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LANG2", SCANCODE_LANG2);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LANG3", SCANCODE_LANG3);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LANG4", SCANCODE_LANG4);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LANG5", SCANCODE_LANG5);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LANG6", SCANCODE_LANG6);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LANG7", SCANCODE_LANG7);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LANG8", SCANCODE_LANG8);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LANG9", SCANCODE_LANG9);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_ALTERASE", SCANCODE_ALTERASE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_SYSREQ", SCANCODE_SYSREQ);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CANCEL", SCANCODE_CANCEL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CLEAR", SCANCODE_CLEAR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_PRIOR", SCANCODE_PRIOR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_RETURN2", SCANCODE_RETURN2);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_SEPARATOR", SCANCODE_SEPARATOR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_OUT", SCANCODE_OUT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_OPER", SCANCODE_OPER);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CLEARAGAIN", SCANCODE_CLEARAGAIN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CRSEL", SCANCODE_CRSEL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_EXSEL", SCANCODE_EXSEL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_00", SCANCODE_KP_00);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_000", SCANCODE_KP_000);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_THOUSANDSSEPARATOR", SCANCODE_THOUSANDSSEPARATOR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_DECIMALSEPARATOR", SCANCODE_DECIMALSEPARATOR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CURRENCYUNIT", SCANCODE_CURRENCYUNIT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CURRENCYSUBUNIT", SCANCODE_CURRENCYSUBUNIT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_LEFTPAREN", SCANCODE_KP_LEFTPAREN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_RIGHTPAREN", SCANCODE_KP_RIGHTPAREN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_LEFTBRACE", SCANCODE_KP_LEFTBRACE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_RIGHTBRACE", SCANCODE_KP_RIGHTBRACE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_TAB", SCANCODE_KP_TAB);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_BACKSPACE", SCANCODE_KP_BACKSPACE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_A", SCANCODE_KP_A);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_B", SCANCODE_KP_B);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_C", SCANCODE_KP_C);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_D", SCANCODE_KP_D);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_E", SCANCODE_KP_E);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_F", SCANCODE_KP_F);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_XOR", SCANCODE_KP_XOR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_POWER", SCANCODE_KP_POWER);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_PERCENT", SCANCODE_KP_PERCENT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_LESS", SCANCODE_KP_LESS);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_GREATER", SCANCODE_KP_GREATER);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_AMPERSAND", SCANCODE_KP_AMPERSAND);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_DBLAMPERSAND", SCANCODE_KP_DBLAMPERSAND);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_VERTICALBAR", SCANCODE_KP_VERTICALBAR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_DBLVERTICALBAR", SCANCODE_KP_DBLVERTICALBAR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_COLON", SCANCODE_KP_COLON);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_HASH", SCANCODE_KP_HASH);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_SPACE", SCANCODE_KP_SPACE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_AT", SCANCODE_KP_AT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_EXCLAM", SCANCODE_KP_EXCLAM);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_MEMSTORE", SCANCODE_KP_MEMSTORE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_MEMRECALL", SCANCODE_KP_MEMRECALL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_MEMCLEAR", SCANCODE_KP_MEMCLEAR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_MEMADD", SCANCODE_KP_MEMADD);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_MEMSUBTRACT", SCANCODE_KP_MEMSUBTRACT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_MEMMULTIPLY", SCANCODE_KP_MEMMULTIPLY);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_MEMDIVIDE", SCANCODE_KP_MEMDIVIDE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_PLUSMINUS", SCANCODE_KP_PLUSMINUS);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_CLEAR", SCANCODE_KP_CLEAR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_CLEARENTRY", SCANCODE_KP_CLEARENTRY);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_BINARY", SCANCODE_KP_BINARY);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_OCTAL", SCANCODE_KP_OCTAL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_DECIMAL", SCANCODE_KP_DECIMAL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KP_HEXADECIMAL", SCANCODE_KP_HEXADECIMAL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LCTRL", SCANCODE_LCTRL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LSHIFT", SCANCODE_LSHIFT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LALT", SCANCODE_LALT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_LGUI", SCANCODE_LGUI);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_RCTRL", SCANCODE_RCTRL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_RSHIFT", SCANCODE_RSHIFT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_RALT", SCANCODE_RALT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_RGUI", SCANCODE_RGUI);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_MODE", SCANCODE_MODE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AUDIONEXT", SCANCODE_AUDIONEXT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AUDIOPREV", SCANCODE_AUDIOPREV);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AUDIOSTOP", SCANCODE_AUDIOSTOP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AUDIOPLAY", SCANCODE_AUDIOPLAY);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AUDIOMUTE", SCANCODE_AUDIOMUTE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_MEDIASELECT", SCANCODE_MEDIASELECT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_WWW", SCANCODE_WWW);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_MAIL", SCANCODE_MAIL);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_CALCULATOR", SCANCODE_CALCULATOR);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_COMPUTER", SCANCODE_COMPUTER);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AC_SEARCH", SCANCODE_AC_SEARCH);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AC_HOME", SCANCODE_AC_HOME);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AC_BACK", SCANCODE_AC_BACK);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AC_FORWARD", SCANCODE_AC_FORWARD);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AC_STOP", SCANCODE_AC_STOP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AC_REFRESH", SCANCODE_AC_REFRESH);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_AC_BOOKMARKS", SCANCODE_AC_BOOKMARKS);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_BRIGHTNESSDOWN", SCANCODE_BRIGHTNESSDOWN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_BRIGHTNESSUP", SCANCODE_BRIGHTNESSUP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_DISPLAYSWITCH", SCANCODE_DISPLAYSWITCH);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KBDILLUMTOGGLE", SCANCODE_KBDILLUMTOGGLE);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KBDILLUMDOWN", SCANCODE_KBDILLUMDOWN);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_KBDILLUMUP", SCANCODE_KBDILLUMUP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_EJECT", SCANCODE_EJECT);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_SLEEP", SCANCODE_SLEEP);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_APP1", SCANCODE_APP1);
+    engine->RegisterEnumValue("Scancode", "SCANCODE_APP2", SCANCODE_APP2);
+
+    engine->RegisterEnum("HatPosition");
+    engine->RegisterEnumValue("HatPosition", "HAT_CENTER", HAT_CENTER);
+    engine->RegisterEnumValue("HatPosition", "HAT_UP", HAT_UP);
+    engine->RegisterEnumValue("HatPosition", "HAT_RIGHT", HAT_RIGHT);
+    engine->RegisterEnumValue("HatPosition", "HAT_DOWN", HAT_DOWN);
+    engine->RegisterEnumValue("HatPosition", "HAT_LEFT", HAT_LEFT);
+
+    engine->RegisterEnum("ControllerButton");
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_A", CONTROLLER_BUTTON_A);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_B", CONTROLLER_BUTTON_B);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_X", CONTROLLER_BUTTON_X);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_Y", CONTROLLER_BUTTON_Y);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_BACK", CONTROLLER_BUTTON_BACK);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_GUIDE", CONTROLLER_BUTTON_GUIDE);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_START", CONTROLLER_BUTTON_START);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_LEFTSTICK", CONTROLLER_BUTTON_LEFTSTICK);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_RIGHTSTICK", CONTROLLER_BUTTON_RIGHTSTICK);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_LEFTSHOULDER", CONTROLLER_BUTTON_LEFTSHOULDER);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_RIGHTSHOULDER", CONTROLLER_BUTTON_RIGHTSHOULDER);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_DPAD_UP", CONTROLLER_BUTTON_DPAD_UP);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_DPAD_DOWN", CONTROLLER_BUTTON_DPAD_DOWN);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_DPAD_LEFT", CONTROLLER_BUTTON_DPAD_LEFT);
+    engine->RegisterEnumValue("ControllerButton", "CONTROLLER_BUTTON_DPAD_RIGHT", CONTROLLER_BUTTON_DPAD_RIGHT);
+
+    engine->RegisterEnum("ControllerAxis");
+    engine->RegisterEnumValue("ControllerAxis", "CONTROLLER_AXIS_LEFTX", CONTROLLER_AXIS_LEFTX);
+    engine->RegisterEnumValue("ControllerAxis", "CONTROLLER_AXIS_LEFTY", CONTROLLER_AXIS_LEFTY);
+    engine->RegisterEnumValue("ControllerAxis", "CONTROLLER_AXIS_RIGHTX", CONTROLLER_AXIS_RIGHTX);
+    engine->RegisterEnumValue("ControllerAxis", "CONTROLLER_AXIS_RIGHTY", CONTROLLER_AXIS_RIGHTY);
+    engine->RegisterEnumValue("ControllerAxis", "CONTROLLER_AXIS_TRIGGERLEFT", CONTROLLER_AXIS_TRIGGERLEFT);
+    engine->RegisterEnumValue("ControllerAxis", "CONTROLLER_AXIS_TRIGGERRIGHT", CONTROLLER_AXIS_TRIGGERRIGHT);
 }
 
 static Input* GetInput()

+ 3 - 0
Source/Urho3D/AngelScript/MathAPI.cpp

@@ -28,6 +28,9 @@
 #include "../Math/Ray.h"
 #include "../Math/Matrix2.h"
 
+// Some headers could re-define M_PI, ensure that it's undefined.
+#undef M_PI
+
 namespace Urho3D
 {
 

+ 10 - 10
Source/Urho3D/AngelScript/SceneAPI.cpp

@@ -36,22 +36,22 @@ namespace Urho3D
 
 static void RegisterSerializable(asIScriptEngine* engine)
 {
-    engine->RegisterGlobalProperty("const uint AM_FILE", (void*)&AM_FILE);
-    engine->RegisterGlobalProperty("const uint AM_NET", (void*)&AM_NET);
-    engine->RegisterGlobalProperty("const uint AM_DEFAULT", (void*)&AM_DEFAULT);
-    engine->RegisterGlobalProperty("const uint AM_LATESTDATA", (void*)&AM_LATESTDATA);
-    engine->RegisterGlobalProperty("const uint AM_NOEDIT", (void*)&AM_NOEDIT);
-    engine->RegisterGlobalProperty("const uint AM_NODEID", (void*)&AM_NODEID);
-    engine->RegisterGlobalProperty("const uint AM_COMPONENTID", (void*)&AM_COMPONENTID);
-    engine->RegisterGlobalProperty("const uint AM_NODEIDVECTOR", (void*)&AM_NODEIDVECTOR);
+    engine->RegisterEnum("AttributeMode");
+    engine->RegisterEnumValue("AttributeMode", "AM_FILE", AM_FILE);
+    engine->RegisterEnumValue("AttributeMode", "AM_NET", AM_NET);
+    engine->RegisterEnumValue("AttributeMode", "AM_DEFAULT", AM_DEFAULT);
+    engine->RegisterEnumValue("AttributeMode", "AM_LATESTDATA", AM_LATESTDATA);
+    engine->RegisterEnumValue("AttributeMode", "AM_NOEDIT", AM_NOEDIT);
+    engine->RegisterEnumValue("AttributeMode", "AM_NODEID", AM_NODEID);
+    engine->RegisterEnumValue("AttributeMode", "AM_COMPONENTID", AM_COMPONENTID);
+    engine->RegisterEnumValue("AttributeMode", "AM_NODEIDVECTOR", AM_NODEIDVECTOR);
+    engine->RegisterEnumValue("AttributeMode", "AM_FILEREADONLY", AM_FILEREADONLY);
 
     engine->RegisterEnum("AutoRemoveMode");
     engine->RegisterEnumValue("AutoRemoveMode", "REMOVE_DISABLED", REMOVE_DISABLED);
     engine->RegisterEnumValue("AutoRemoveMode", "REMOVE_COMPONENT", REMOVE_COMPONENT);
     engine->RegisterEnumValue("AutoRemoveMode", "REMOVE_NODE", REMOVE_NODE);
 
-    engine->RegisterGlobalProperty("const uint AM_FILEREADONLY", (void*)&AM_FILEREADONLY);
-
     RegisterSerializable<Serializable>(engine, "Serializable");
 }
 

+ 5 - 4
Source/Urho3D/AngelScript/UIAPI.cpp

@@ -125,10 +125,11 @@ static void RegisterUIElement(asIScriptEngine* engine)
     engine->RegisterEnumValue("TraversalMode", "TM_BREADTH_FIRST", TM_BREADTH_FIRST);
     engine->RegisterEnumValue("TraversalMode", "TM_DEPTH_FIRST", TM_DEPTH_FIRST);
 
-    engine->RegisterGlobalProperty("const uint DD_DISABLED", (void*)&DD_DISABLED);
-    engine->RegisterGlobalProperty("const uint DD_SOURCE", (void*)&DD_SOURCE);
-    engine->RegisterGlobalProperty("const uint DD_TARGET", (void*)&DD_TARGET);
-    engine->RegisterGlobalProperty("const uint DD_SOURCE_AND_TARGET", (void*)&DD_SOURCE_AND_TARGET);
+    engine->RegisterEnum("DragAndDropMode");
+    engine->RegisterEnumValue("DragAndDropMode", "DD_DISABLED", DD_DISABLED);
+    engine->RegisterEnumValue("DragAndDropMode", "DD_SOURCE", DD_SOURCE);
+    engine->RegisterEnumValue("DragAndDropMode", "DD_TARGET", DD_TARGET);
+    engine->RegisterEnumValue("DragAndDropMode", "DD_SOURCE_AND_TARGET", DD_SOURCE_AND_TARGET);
 
     RegisterUIElement<UIElement>(engine, "UIElement");