Daniele Bartolini преди 10 години
родител
ревизия
63d477fd4d
променени са 3 файла, в които са добавени 446 реда и са изтрити 440 реда
  1. 426 426
      src/lua/lua_api.cpp
  2. 7 7
      src/lua/lua_environment.cpp
  3. 13 7
      src/lua/lua_environment.h

+ 426 - 426
src/lua/lua_api.cpp

@@ -2855,432 +2855,432 @@ static int window_show_cursor(lua_State* L)
 
 void load_api(LuaEnvironment& env)
 {
-	env.load_module_function("Math", "ray_plane_intersection",  math_ray_plane_intersection);
-	env.load_module_function("Math", "ray_disc_intersection",   math_ray_disc_intersection);
-	env.load_module_function("Math", "ray_sphere_intersection", math_ray_sphere_intersection);
-	env.load_module_function("Math", "ray_obb_intersection",    math_ray_obb_intersection);
-
-	env.load_module_function("Vector3", "new",              vector3_new);
-	env.load_module_function("Vector3", "x",                vector3_x);
-	env.load_module_function("Vector3", "y",                vector3_y);
-	env.load_module_function("Vector3", "z",                vector3_z);
-	env.load_module_function("Vector3", "set_x",            vector3_set_x);
-	env.load_module_function("Vector3", "set_y",            vector3_set_y);
-	env.load_module_function("Vector3", "set_z",            vector3_set_z);
-	env.load_module_function("Vector3", "elements",         vector3_elements);
-	env.load_module_function("Vector3", "add",              vector3_add);
-	env.load_module_function("Vector3", "subtract",         vector3_subtract);
-	env.load_module_function("Vector3", "multiply",         vector3_multiply);
-	env.load_module_function("Vector3", "dot",              vector3_dot);
-	env.load_module_function("Vector3", "cross",            vector3_cross);
-	env.load_module_function("Vector3", "equal",            vector3_equal);
-	env.load_module_function("Vector3", "length",           vector3_length);
-	env.load_module_function("Vector3", "length_squared",   vector3_length_squared);
-	env.load_module_function("Vector3", "set_length",       vector3_set_length);
-	env.load_module_function("Vector3", "normalize",        vector3_normalize);
-	env.load_module_function("Vector3", "distance",         vector3_distance);
-	env.load_module_function("Vector3", "distance_squared", vector3_distance_squared);
-	env.load_module_function("Vector3", "angle",            vector3_angle);
-	env.load_module_function("Vector3", "max",              vector3_max);
-	env.load_module_function("Vector3", "min",              vector3_min);
-	env.load_module_function("Vector3", "lerp",             vector3_lerp);
-	env.load_module_function("Vector3", "forward",          vector3_forward);
-	env.load_module_function("Vector3", "backward",         vector3_backward);
-	env.load_module_function("Vector3", "left",             vector3_left);
-	env.load_module_function("Vector3", "right",            vector3_right);
-	env.load_module_function("Vector3", "up",               vector3_up);
-	env.load_module_function("Vector3", "down",             vector3_down);
-	env.load_module_function("Vector3", "zero",             vector3_zero);
-	env.load_module_function("Vector3", "to_string",        vector3_to_string);
-
-	env.load_module_constructor("Vector3", vector3_ctor);
-
-	env.load_module_function("Vector2", "new",            vector2_new);
-	env.load_module_constructor("Vector2", vector2_ctor);
-
-	env.load_module_function("Vector3Box", "new",        vector3box_new);
-	env.load_module_function("Vector3Box", "store",      vector3box_store);
-	env.load_module_function("Vector3Box", "unbox",      vector3box_unbox);
-	env.load_module_function("Vector3Box", "__index",    "Vector3Box");
-	env.load_module_function("Vector3Box", "__tostring", vector3box_tostring);
-
-	env.load_module_constructor("Vector3Box", vector3box_ctor);
-
-	env.load_module_function("Matrix4x4", "new",                         matrix4x4_new);
-	env.load_module_function("Matrix4x4", "from_quaternion",             matrix4x4_from_quaternion);
-	env.load_module_function("Matrix4x4", "from_translation",            matrix4x4_from_translation);
-	env.load_module_function("Matrix4x4", "from_quaternion_translation", matrix4x4_from_quaternion_translation);
-	env.load_module_function("Matrix4x4", "from_axes",                   matrix4x4_from_axes);
-	env.load_module_function("Matrix4x4", "copy",                        matrix4x4_copy);
-	env.load_module_function("Matrix4x4", "add",                         matrix4x4_add);
-	env.load_module_function("Matrix4x4", "subtract",                    matrix4x4_subtract);
-	env.load_module_function("Matrix4x4", "multiply",                    matrix4x4_multiply);
-	env.load_module_function("Matrix4x4", "transpose",                   matrix4x4_transpose);
-	env.load_module_function("Matrix4x4", "determinant",                 matrix4x4_determinant);
-	env.load_module_function("Matrix4x4", "invert",                      matrix4x4_invert);
-	env.load_module_function("Matrix4x4", "x",                           matrix4x4_x);
-	env.load_module_function("Matrix4x4", "y",                           matrix4x4_y);
-	env.load_module_function("Matrix4x4", "z",                           matrix4x4_z);
-	env.load_module_function("Matrix4x4", "set_x",                       matrix4x4_set_x);
-	env.load_module_function("Matrix4x4", "set_y",                       matrix4x4_set_y);
-	env.load_module_function("Matrix4x4", "set_z",                       matrix4x4_set_z);
-	env.load_module_function("Matrix4x4", "translation",                 matrix4x4_translation);
-	env.load_module_function("Matrix4x4", "set_translation",             matrix4x4_set_translation);
-	env.load_module_function("Matrix4x4", "rotation",                    matrix4x4_rotation);
-	env.load_module_function("Matrix4x4", "set_rotation",                matrix4x4_set_rotation);
-	env.load_module_function("Matrix4x4", "identity",                    matrix4x4_identity);
-	env.load_module_function("Matrix4x4", "transform",                   matrix4x4_transform);
-	env.load_module_function("Matrix4x4", "to_string",                   matrix4x4_to_string);
-
-	env.load_module_constructor("Matrix4x4", matrix4x4_ctor);
-
-	env.load_module_function("Matrix4x4Box", "new",        matrix4x4box_new);
-	env.load_module_function("Matrix4x4Box", "store",      matrix4x4box_store);
-	env.load_module_function("Matrix4x4Box", "unbox",      matrix4x4box_unbox);
-	env.load_module_function("Matrix4x4Box", "__index",    "Matrix4x4Box");
-	env.load_module_function("Matrix4x4Box", "__tostring", matrix4x4box_tostring);
-
-	env.load_module_constructor("Matrix4x4Box", matrix4x4box_ctor);
-
-	env.load_module_function("Quaternion", "new",                quaternion_new);
-	env.load_module_function("Quaternion", "negate",             quaternion_negate);
-	env.load_module_function("Quaternion", "identity",           quaternion_identity);
-	env.load_module_function("Quaternion", "multiply",           quaternion_multiply);
-	env.load_module_function("Quaternion", "multiply_by_scalar", quaternion_multiply_by_scalar);
-	env.load_module_function("Quaternion", "dot",                quaternion_dot);
-	env.load_module_function("Quaternion", "length",             quaternion_length);
-	env.load_module_function("Quaternion", "normalize",          quaternion_normalize);
-	env.load_module_function("Quaternion", "conjugate",          quaternion_conjugate);
-	env.load_module_function("Quaternion", "inverse",            quaternion_inverse);
-	env.load_module_function("Quaternion", "power",              quaternion_power);
-	env.load_module_function("Quaternion", "elements",           quaternion_elements);
-	env.load_module_function("Quaternion", "look",               quaternion_look);
-	env.load_module_function("Quaternion", "right",              quaternion_right);
-	env.load_module_function("Quaternion", "up",                 quaternion_up);
-	env.load_module_function("Quaternion", "forward",            quaternion_forward);
-	env.load_module_function("Quaternion", "lerp",               quaternion_lerp);
-	env.load_module_function("Quaternion", "to_string",          quaternion_to_string);
-
-	env.load_module_constructor("Quaternion", quaternion_ctor);
-
-	env.load_module_function("QuaternionBox", "new",        quaternionbox_new);
-	env.load_module_function("QuaternionBox", "store",      quaternionbox_store);
-	env.load_module_function("QuaternionBox", "unbox",      quaternionbox_unbox);
-	env.load_module_function("QuaternionBox", "__index",    "QuaternionBox");
-	env.load_module_function("QuaternionBox", "__tostring", quaternionbox_tostring);
-
-	env.load_module_constructor("QuaternionBox", quaternionbox_ctor);
-
-	env.load_module_function("Color4", "new",       color4_new);
-	env.load_module_function("Color4", "black",     color4_black);
-	env.load_module_function("Color4", "white",     color4_white);
-	env.load_module_function("Color4", "red",       color4_red);
-	env.load_module_function("Color4", "green",     color4_green);
-	env.load_module_function("Color4", "blue",      color4_blue);
-	env.load_module_function("Color4", "yellow",    color4_yellow);
-	env.load_module_function("Color4", "orange",    color4_orange);
-	env.load_module_function("Color4", "to_string", quaternion_to_string);
-
-	env.load_module_constructor("Color4",     color4_ctor);
-
-	env.load_module_function("Lightuserdata_mt", "__add",      lightuserdata_add);
-	env.load_module_function("Lightuserdata_mt", "__sub",      lightuserdata_sub);
-	env.load_module_function("Lightuserdata_mt", "__mul",      lightuserdata_mul);
-	env.load_module_function("Lightuserdata_mt", "__unm",      lightuserdata_unm);
-	env.load_module_function("Lightuserdata_mt", "__index",    lightuserdata_index);
-	env.load_module_function("Lightuserdata_mt", "__newindex", lightuserdata_newindex);
-
-	env.load_module_function("Keyboard", "name",         KEYBOARD_FN(name));
-	env.load_module_function("Keyboard", "connected",    KEYBOARD_FN(connected));
-	env.load_module_function("Keyboard", "num_buttons",  KEYBOARD_FN(num_buttons));
-	env.load_module_function("Keyboard", "num_axes",     KEYBOARD_FN(num_axes));
-	env.load_module_function("Keyboard", "pressed",      KEYBOARD_FN(pressed));
-	env.load_module_function("Keyboard", "released",     KEYBOARD_FN(released));
-	env.load_module_function("Keyboard", "any_pressed",  KEYBOARD_FN(any_pressed));
-	env.load_module_function("Keyboard", "any_released", KEYBOARD_FN(any_released));
-	env.load_module_function("Keyboard", "button_name",  KEYBOARD_FN(button_name));
-	env.load_module_function("Keyboard", "button_id",    KEYBOARD_FN(button_id));
-
-	env.load_module_function("Mouse", "name",         MOUSE_FN(name));
-	env.load_module_function("Mouse", "connected",    MOUSE_FN(connected));
-	env.load_module_function("Mouse", "num_buttons",  MOUSE_FN(num_buttons));
-	env.load_module_function("Mouse", "num_axes",     MOUSE_FN(num_axes));
-	env.load_module_function("Mouse", "pressed",      MOUSE_FN(pressed));
-	env.load_module_function("Mouse", "released",     MOUSE_FN(released));
-	env.load_module_function("Mouse", "any_pressed",  MOUSE_FN(any_pressed));
-	env.load_module_function("Mouse", "any_released", MOUSE_FN(any_released));
-	env.load_module_function("Mouse", "axis",         MOUSE_FN(axis));
-	env.load_module_function("Mouse", "button_name",  MOUSE_FN(button_name));
-	env.load_module_function("Mouse", "axis_name",    MOUSE_FN(axis_name));
-	env.load_module_function("Mouse", "button_id",    MOUSE_FN(button_id));
-	env.load_module_function("Mouse", "axis_id",      MOUSE_FN(axis_id));
-
-	env.load_module_function("Touch", "name",         TOUCH_FN(name));
-	env.load_module_function("Touch", "connected",    TOUCH_FN(connected));
-	env.load_module_function("Touch", "num_buttons",  TOUCH_FN(num_buttons));
-	env.load_module_function("Touch", "num_axes",     TOUCH_FN(num_axes));
-	env.load_module_function("Touch", "pressed",      TOUCH_FN(pressed));
-	env.load_module_function("Touch", "released",     TOUCH_FN(released));
-	env.load_module_function("Touch", "any_pressed",  TOUCH_FN(any_pressed));
-	env.load_module_function("Touch", "any_released", TOUCH_FN(any_released));
-	env.load_module_function("Touch", "axis",         TOUCH_FN(axis));
-	env.load_module_function("Touch", "button_name",  TOUCH_FN(button_name));
-	env.load_module_function("Touch", "axis_name",    TOUCH_FN(axis_name));
-	env.load_module_function("Touch", "button_id",    TOUCH_FN(button_id));
-	env.load_module_function("Touch", "axis_id",      TOUCH_FN(axis_id));
-
-	env.load_module_function("Pad1", "name",         JOYPAD_FN(0, name));
-	env.load_module_function("Pad1", "connected",    JOYPAD_FN(0, connected));
-	env.load_module_function("Pad1", "num_buttons",  JOYPAD_FN(0, num_buttons));
-	env.load_module_function("Pad1", "num_axes",     JOYPAD_FN(0, num_axes));
-	env.load_module_function("Pad1", "pressed",      JOYPAD_FN(0, pressed));
-	env.load_module_function("Pad1", "released",     JOYPAD_FN(0, released));
-	env.load_module_function("Pad1", "any_pressed",  JOYPAD_FN(0, any_pressed));
-	env.load_module_function("Pad1", "any_released", JOYPAD_FN(0, any_released));
-	env.load_module_function("Pad1", "axis",         JOYPAD_FN(0, axis));
-	env.load_module_function("Pad1", "button_name",  JOYPAD_FN(0, button_name));
-	env.load_module_function("Pad1", "axis_name",    JOYPAD_FN(0, axis_name));
-	env.load_module_function("Pad1", "button_id",    JOYPAD_FN(0, button_id));
-	env.load_module_function("Pad1", "axis_id",      JOYPAD_FN(0, axis_id));
-
-	env.load_module_function("Pad2", "name",         JOYPAD_FN(1, name));
-	env.load_module_function("Pad2", "connected",    JOYPAD_FN(1, connected));
-	env.load_module_function("Pad2", "num_buttons",  JOYPAD_FN(1, num_buttons));
-	env.load_module_function("Pad2", "num_axes",     JOYPAD_FN(1, num_axes));
-	env.load_module_function("Pad2", "pressed",      JOYPAD_FN(1, pressed));
-	env.load_module_function("Pad2", "released",     JOYPAD_FN(1, released));
-	env.load_module_function("Pad2", "any_pressed",  JOYPAD_FN(1, any_pressed));
-	env.load_module_function("Pad2", "any_released", JOYPAD_FN(1, any_released));
-	env.load_module_function("Pad2", "axis",         JOYPAD_FN(1, axis));
-	env.load_module_function("Pad2", "button_name",  JOYPAD_FN(1, button_name));
-	env.load_module_function("Pad2", "axis_name",    JOYPAD_FN(1, axis_name));
-	env.load_module_function("Pad2", "button_id",    JOYPAD_FN(1, button_id));
-	env.load_module_function("Pad2", "axis_id",      JOYPAD_FN(1, axis_id));
-
-	env.load_module_function("Pad3", "name",         JOYPAD_FN(2, name));
-	env.load_module_function("Pad3", "connected",    JOYPAD_FN(2, connected));
-	env.load_module_function("Pad3", "num_buttons",  JOYPAD_FN(2, num_buttons));
-	env.load_module_function("Pad3", "num_axes",     JOYPAD_FN(2, num_axes));
-	env.load_module_function("Pad3", "pressed",      JOYPAD_FN(2, pressed));
-	env.load_module_function("Pad3", "released",     JOYPAD_FN(2, released));
-	env.load_module_function("Pad3", "any_pressed",  JOYPAD_FN(2, any_pressed));
-	env.load_module_function("Pad3", "any_released", JOYPAD_FN(2, any_released));
-	env.load_module_function("Pad3", "axis",         JOYPAD_FN(2, axis));
-	env.load_module_function("Pad3", "button_name",  JOYPAD_FN(2, button_name));
-	env.load_module_function("Pad3", "axis_name",    JOYPAD_FN(2, axis_name));
-	env.load_module_function("Pad3", "button_id",    JOYPAD_FN(2, button_id));
-	env.load_module_function("Pad3", "axis_id",      JOYPAD_FN(2, axis_id));
-
-	env.load_module_function("Pad4", "name",         JOYPAD_FN(3, name));
-	env.load_module_function("Pad4", "connected",    JOYPAD_FN(3, connected));
-	env.load_module_function("Pad4", "num_buttons",  JOYPAD_FN(3, num_buttons));
-	env.load_module_function("Pad4", "num_axes",     JOYPAD_FN(3, num_axes));
-	env.load_module_function("Pad4", "pressed",      JOYPAD_FN(3, pressed));
-	env.load_module_function("Pad4", "released",     JOYPAD_FN(3, released));
-	env.load_module_function("Pad4", "any_pressed",  JOYPAD_FN(3, any_pressed));
-	env.load_module_function("Pad4", "any_released", JOYPAD_FN(3, any_released));
-	env.load_module_function("Pad4", "axis",         JOYPAD_FN(3, axis));
-	env.load_module_function("Pad4", "button_name",  JOYPAD_FN(3, button_name));
-	env.load_module_function("Pad4", "axis_name",    JOYPAD_FN(3, axis_name));
-	env.load_module_function("Pad4", "button_id",    JOYPAD_FN(3, button_id));
-	env.load_module_function("Pad4", "axis_id",      JOYPAD_FN(3, axis_id));
-
-	env.load_module_function("World", "spawn_unit",                      world_spawn_unit);
-	env.load_module_function("World", "destroy_unit",                    world_destroy_unit);
-	env.load_module_function("World", "num_units",                       world_num_units);
-	env.load_module_function("World", "units",                           world_units);
-	env.load_module_function("World", "camera",                          world_camera);
-	env.load_module_function("World", "set_camera_projection_type",      camera_set_projection_type);
-	env.load_module_function("World", "camera_projection_type",          camera_projection_type);
-	env.load_module_function("World", "camera_fov",                      camera_fov);
-	env.load_module_function("World", "set_camera_fov",                  camera_set_fov);
-	env.load_module_function("World", "camera_aspect",                   camera_aspect);
-	env.load_module_function("World", "set_camera_aspect",               camera_set_aspect);
-	env.load_module_function("World", "camera_near_clip_distance",       camera_near_clip_distance);
-	env.load_module_function("World", "set_camera_near_clip_distance",   camera_set_near_clip_distance);
-	env.load_module_function("World", "camera_far_clip_distance",        camera_far_clip_distance);
-	env.load_module_function("World", "set_camera_far_clip_distance",    camera_set_far_clip_distance);
-	env.load_module_function("World", "set_camera_orthographic_metrics", camera_set_orthographic_metrics);
-	env.load_module_function("World", "camera_screen_to_world",          camera_screen_to_world);
-	env.load_module_function("World", "camera_world_to_screen",          camera_world_to_screen);
-	env.load_module_function("World", "update_animations",               world_update_animations);
-	env.load_module_function("World", "update_scene",                    world_update_scene);
-	env.load_module_function("World", "update",                          world_update);
-	env.load_module_function("World", "play_sound",                      world_play_sound);
-	env.load_module_function("World", "stop_sound",                      world_stop_sound);
-	env.load_module_function("World", "link_sound",                      world_link_sound);
-	env.load_module_function("World", "set_listener_pose",               world_set_listener_pose);
-	env.load_module_function("World", "set_sound_position",              world_set_sound_position);
-	env.load_module_function("World", "set_sound_range",                 world_set_sound_range);
-	env.load_module_function("World", "set_sound_volume",                world_set_sound_volume);
-	env.load_module_function("World", "create_debug_line",               world_create_debug_line);
-	env.load_module_function("World", "destroy_debug_line",              world_destroy_debug_line);
-	env.load_module_function("World", "load_level",                      world_load_level);
-	env.load_module_function("World", "scene_graph",                     world_scene_graph);
-	env.load_module_function("World", "render_world",                    world_render_world);
-	env.load_module_function("World", "physics_world",                   world_physics_world);
-	env.load_module_function("World", "sound_world",                     world_sound_world);
-	env.load_module_function("World", "__index",                         "World");
-	env.load_module_function("World", "__tostring",                      world_tostring);
-
-	env.load_module_function("SceneGraph", "create",              scene_graph_create);
-	env.load_module_function("SceneGraph", "destroy",             scene_graph_destroy);
-	env.load_module_function("SceneGraph", "transform_instances", scene_graph_transform_instances);
-	env.load_module_function("SceneGraph", "local_position",      scene_graph_local_position);
-	env.load_module_function("SceneGraph", "local_rotation",      scene_graph_local_rotation);
-	env.load_module_function("SceneGraph", "local_scale",         scene_graph_local_scale);
-	env.load_module_function("SceneGraph", "local_pose",          scene_graph_local_pose);
-	env.load_module_function("SceneGraph", "world_position",      scene_graph_world_position);
-	env.load_module_function("SceneGraph", "world_rotation",      scene_graph_world_rotation);
-	env.load_module_function("SceneGraph", "world_pose",          scene_graph_world_pose);
-	env.load_module_function("SceneGraph", "set_local_position",  scene_graph_set_local_position);
-	env.load_module_function("SceneGraph", "set_local_rotation",  scene_graph_set_local_rotation);
-	env.load_module_function("SceneGraph", "set_local_scale",     scene_graph_set_local_scale);
-	env.load_module_function("SceneGraph", "set_local_pose",      scene_graph_set_local_pose);
-	env.load_module_function("SceneGraph", "link",                scene_graph_link);
-	env.load_module_function("SceneGraph", "unlink",              scene_graph_unlink);
-
-	env.load_module_function("UnitManager", "create", unit_manager_create);
-	env.load_module_function("UnitManager", "alive",  unit_manager_alive);
-
-	env.load_module_function("RenderWorld", "create_mesh",          render_world_create_mesh);
-	env.load_module_function("RenderWorld", "destroy_mesh",         render_world_destroy_mesh);
-	env.load_module_function("RenderWorld", "mesh_instances",       render_world_mesh_instances);
-	env.load_module_function("RenderWorld", "mesh_obb",             render_world_mesh_obb);
-	env.load_module_function("RenderWorld", "set_mesh_visible",     render_world_set_mesh_visible);
-	env.load_module_function("RenderWorld", "create_sprite",        render_world_create_sprite);
-	env.load_module_function("RenderWorld", "destroy_sprite",       render_world_destroy_sprite);
-	env.load_module_function("RenderWorld", "sprite_instances",     render_world_sprite_instances);
-	env.load_module_function("RenderWorld", "set_sprite_frame",     render_world_set_sprite_frame);
-	env.load_module_function("RenderWorld", "set_sprite_visible",   render_world_set_sprite_visible);
-	env.load_module_function("RenderWorld", "create_light",         render_world_create_light);
-	env.load_module_function("RenderWorld", "destroy_light",        render_world_destroy_light);
-	env.load_module_function("RenderWorld", "light_instances",      render_world_light_instances);
-	env.load_module_function("RenderWorld", "light_type",           render_world_light_type);
-	env.load_module_function("RenderWorld", "light_color",          render_world_light_color);
-	env.load_module_function("RenderWorld", "light_range",          render_world_light_range);
-	env.load_module_function("RenderWorld", "light_intensity",      render_world_light_intensity);
-	env.load_module_function("RenderWorld", "light_spot_angle",     render_world_light_spot_angle);
-	env.load_module_function("RenderWorld", "set_light_type",       render_world_set_light_type);
-	env.load_module_function("RenderWorld", "set_light_color",      render_world_set_light_color);
-	env.load_module_function("RenderWorld", "set_light_range",      render_world_set_light_range);
-	env.load_module_function("RenderWorld", "set_light_intensity",  render_world_set_light_intensity);
-	env.load_module_function("RenderWorld", "set_light_spot_angle", render_world_set_light_spot_angle);
-	env.load_module_function("RenderWorld", "enable_debug_drawing", render_world_enable_debug_drawing);
-
-	env.load_module_function("PhysicsWorld", "actor_instances",               physics_world_actor_instances);
-	env.load_module_function("PhysicsWorld", "actor_world_position",          physics_world_actor_world_position);
-	env.load_module_function("PhysicsWorld", "actor_world_rotation",          physics_world_actor_world_rotation);
-	env.load_module_function("PhysicsWorld", "actor_world_pose",              physics_world_actor_world_pose);
-	env.load_module_function("PhysicsWorld", "teleport_actor_world_position", physics_world_teleport_actor_world_position);
-	env.load_module_function("PhysicsWorld", "teleport_actor_world_rotation", physics_world_teleport_actor_world_rotation);
-	env.load_module_function("PhysicsWorld", "teleport_actor_world_pose",     physics_world_teleport_actor_world_pose);
-	env.load_module_function("PhysicsWorld", "actor_center_of_mass",          physics_world_actor_center_of_mass);
-	env.load_module_function("PhysicsWorld", "enable_actor_gravity",          physics_world_enable_actor_gravity);
-	env.load_module_function("PhysicsWorld", "disable_actor_gravity",         physics_world_disable_actor_gravity);
-	env.load_module_function("PhysicsWorld", "enable_actor_collision",        physics_world_enable_actor_collision);
-	env.load_module_function("PhysicsWorld", "disable_actor_collision",       physics_world_disable_actor_collision);
-	env.load_module_function("PhysicsWorld", "set_actor_collision_filter",    physics_world_set_actor_collision_filter);
-	env.load_module_function("PhysicsWorld", "set_actor_kinematic",           physics_world_set_actor_kinematic);
-	env.load_module_function("PhysicsWorld", "move_actor",                    physics_world_move_actor);
-	env.load_module_function("PhysicsWorld", "is_static",                     physics_world_is_static);
-	env.load_module_function("PhysicsWorld", "is_dynamic",                    physics_world_is_dynamic);
-	env.load_module_function("PhysicsWorld", "is_kinematic",                  physics_world_is_kinematic);
-	env.load_module_function("PhysicsWorld", "is_nonkinematic",               physics_world_is_nonkinematic);
-	env.load_module_function("PhysicsWorld", "actor_linear_damping",          physics_world_actor_linear_damping);
-	env.load_module_function("PhysicsWorld", "set_actor_linear_damping",      physics_world_set_actor_linear_damping);
-	env.load_module_function("PhysicsWorld", "actor_angular_damping",         physics_world_actor_angular_damping);
-	env.load_module_function("PhysicsWorld", "set_actor_angular_damping",     physics_world_set_actor_angular_damping);
-	env.load_module_function("PhysicsWorld", "actor_linear_velocity",         physics_world_actor_linear_velocity);
-	env.load_module_function("PhysicsWorld", "set_actor_linear_velocity",     physics_world_set_actor_linear_velocity);
-	env.load_module_function("PhysicsWorld", "actor_angular_velocity",        physics_world_actor_angular_velocity);
-	env.load_module_function("PhysicsWorld", "set_actor_angular_velocity",    physics_world_set_actor_angular_velocity);
-	env.load_module_function("PhysicsWorld", "add_actor_impulse",             physics_world_add_actor_impulse);
-	env.load_module_function("PhysicsWorld", "add_actor_impulse_at",          physics_world_add_actor_impulse_at);
-	env.load_module_function("PhysicsWorld", "add_actor_torque_impulse",      physics_world_add_actor_torque_impulse);
-	env.load_module_function("PhysicsWorld", "push_actor",                    physics_world_push_actor);
-	env.load_module_function("PhysicsWorld", "push_actor_at",                 physics_world_push_actor_at);
-	env.load_module_function("PhysicsWorld", "is_sleeping",                   physics_world_is_sleeping);
-	env.load_module_function("PhysicsWorld", "wake_up",                       physics_world_wake_up);
-	env.load_module_function("PhysicsWorld", "controller_instances",          physics_world_controller_instances);
-	env.load_module_function("PhysicsWorld", "move_controller",               physics_world_move_controller);
-	env.load_module_function("PhysicsWorld", "create_joint",                  physics_world_create_joint);
-	env.load_module_function("PhysicsWorld", "gravity",                       physics_world_gravity);
-	env.load_module_function("PhysicsWorld", "set_gravity",                   physics_world_set_gravity);
-	env.load_module_function("PhysicsWorld", "raycast",                       physics_world_raycast);
-	env.load_module_function("PhysicsWorld", "enable_debug_drawing",          physics_world_enable_debug_drawing);
-	env.load_module_function("PhysicsWorld", "__index",                       "PhysicsWorld");
-	env.load_module_function("PhysicsWorld", "__tostring",                    physics_world_tostring);
-
-	env.load_module_function("SoundWorld", "stop_all",   sound_world_stop_all);
-	env.load_module_function("SoundWorld", "pause_all",  sound_world_pause_all);
-	env.load_module_function("SoundWorld", "resume_all", sound_world_resume_all);
-	env.load_module_function("SoundWorld", "is_playing", sound_world_is_playing);
-	env.load_module_function("SoundWorld", "__index",    "SoundWorld");
-	env.load_module_function("SoundWorld", "__tostring", sound_world_tostring);
-
-	env.load_module_function("Device", "argv",                     device_argv);
-	env.load_module_function("Device", "platform",                 device_platform);
-	env.load_module_function("Device", "architecture",             device_architecture);
-	env.load_module_function("Device", "version",                  device_version);
-	env.load_module_function("Device", "last_delta_time",          device_last_delta_time);
-	env.load_module_function("Device", "quit",                     device_quit);
-	env.load_module_function("Device", "resolution",               device_resolution);
-	env.load_module_function("Device", "create_world",             device_create_world);
-	env.load_module_function("Device", "destroy_world",            device_destroy_world);
-	env.load_module_function("Device", "render",                   device_render);
-	env.load_module_function("Device", "create_resource_package",  device_create_resource_package);
-	env.load_module_function("Device", "destroy_resource_package", device_destroy_resource_package);
-	env.load_module_function("Device", "console_send",             device_console_send);
-	env.load_module_function("Device", "can_get",                  device_can_get);
-	env.load_module_function("Device", "enable_resource_autoload", device_enable_resource_autoload);
-
-	env.load_module_function("Profiler", "enter_scope", profiler_enter_scope);
-	env.load_module_function("Profiler", "leave_scope", profiler_leave_scope);
-	env.load_module_function("Profiler", "record",      profiler_record);
-
-	env.load_module_function("DebugLine", "add_line",   debug_line_add_line);
-	env.load_module_function("DebugLine", "add_axes",   debug_line_add_axes);
-	env.load_module_function("DebugLine", "add_circle", debug_line_add_circle);
-	env.load_module_function("DebugLine", "add_cone",   debug_line_add_cone);
-	env.load_module_function("DebugLine", "add_sphere", debug_line_add_sphere);
-	env.load_module_function("DebugLine", "add_obb",    debug_line_add_obb);
-	env.load_module_function("DebugLine", "reset",      debug_line_reset);
-	env.load_module_function("DebugLine", "submit",     debug_line_submit);
-	env.load_module_function("DebugLine", "__index",    "DebugLine");
-	env.load_module_function("DebugLine", "__tostring", debug_line_tostring);
-
-	env.load_module_function("ResourcePackage", "load",       resource_package_load);
-	env.load_module_function("ResourcePackage", "unload",     resource_package_unload);
-	env.load_module_function("ResourcePackage", "flush",      resource_package_flush);
-	env.load_module_function("ResourcePackage", "has_loaded", resource_package_has_loaded);
-	env.load_module_function("ResourcePackage", "__index",    "ResourcePackage");
-	env.load_module_function("ResourcePackage", "__tostring", resource_package_tostring);
-
-	env.load_module_function("Material", "set_float",   material_set_float);
-	env.load_module_function("Material", "set_vector2", material_set_vector2);
-	env.load_module_function("Material", "set_vector3", material_set_vector3);
-
-	env.load_module_function("Gui", "resolution",     gui_resolution);
-	env.load_module_function("Gui", "move",           gui_move);
-	env.load_module_function("Gui", "screen_to_gui",  gui_screen_to_gui);
-	env.load_module_function("Gui", "draw_rectangle", gui_draw_rectangle);
-	env.load_module_function("Gui", "draw_image",     gui_draw_image);
-	env.load_module_function("Gui", "draw_image_uv",  gui_draw_image_uv);
-	env.load_module_function("Gui", "draw_text",      gui_draw_text);
-
-	env.load_module_function("Display", "modes",    display_modes);
-	env.load_module_function("Display", "set_mode", display_set_mode);
-
-	env.load_module_function("Window", "show",        window_show);
-	env.load_module_function("Window", "hide",        window_hide);
-	env.load_module_function("Window", "resize",      window_resize);
-	env.load_module_function("Window", "move",        window_move);
-	env.load_module_function("Window", "minimize",    window_minimize);
-	env.load_module_function("Window", "restore",     window_restore);
-	env.load_module_function("Window", "title",       window_title);
-	env.load_module_function("Window", "set_title",   window_set_title);
-	env.load_module_function("Window", "show_cursor", window_show_cursor);
+	env.add_module_function("Math", "ray_plane_intersection",  math_ray_plane_intersection);
+	env.add_module_function("Math", "ray_disc_intersection",   math_ray_disc_intersection);
+	env.add_module_function("Math", "ray_sphere_intersection", math_ray_sphere_intersection);
+	env.add_module_function("Math", "ray_obb_intersection",    math_ray_obb_intersection);
+
+	env.add_module_function("Vector3", "new",              vector3_new);
+	env.add_module_function("Vector3", "x",                vector3_x);
+	env.add_module_function("Vector3", "y",                vector3_y);
+	env.add_module_function("Vector3", "z",                vector3_z);
+	env.add_module_function("Vector3", "set_x",            vector3_set_x);
+	env.add_module_function("Vector3", "set_y",            vector3_set_y);
+	env.add_module_function("Vector3", "set_z",            vector3_set_z);
+	env.add_module_function("Vector3", "elements",         vector3_elements);
+	env.add_module_function("Vector3", "add",              vector3_add);
+	env.add_module_function("Vector3", "subtract",         vector3_subtract);
+	env.add_module_function("Vector3", "multiply",         vector3_multiply);
+	env.add_module_function("Vector3", "dot",              vector3_dot);
+	env.add_module_function("Vector3", "cross",            vector3_cross);
+	env.add_module_function("Vector3", "equal",            vector3_equal);
+	env.add_module_function("Vector3", "length",           vector3_length);
+	env.add_module_function("Vector3", "length_squared",   vector3_length_squared);
+	env.add_module_function("Vector3", "set_length",       vector3_set_length);
+	env.add_module_function("Vector3", "normalize",        vector3_normalize);
+	env.add_module_function("Vector3", "distance",         vector3_distance);
+	env.add_module_function("Vector3", "distance_squared", vector3_distance_squared);
+	env.add_module_function("Vector3", "angle",            vector3_angle);
+	env.add_module_function("Vector3", "max",              vector3_max);
+	env.add_module_function("Vector3", "min",              vector3_min);
+	env.add_module_function("Vector3", "lerp",             vector3_lerp);
+	env.add_module_function("Vector3", "forward",          vector3_forward);
+	env.add_module_function("Vector3", "backward",         vector3_backward);
+	env.add_module_function("Vector3", "left",             vector3_left);
+	env.add_module_function("Vector3", "right",            vector3_right);
+	env.add_module_function("Vector3", "up",               vector3_up);
+	env.add_module_function("Vector3", "down",             vector3_down);
+	env.add_module_function("Vector3", "zero",             vector3_zero);
+	env.add_module_function("Vector3", "to_string",        vector3_to_string);
+
+	env.set_module_constructor("Vector3", vector3_ctor);
+
+	env.add_module_function("Vector2", "new",            vector2_new);
+	env.set_module_constructor("Vector2", vector2_ctor);
+
+	env.add_module_function("Vector3Box", "new",        vector3box_new);
+	env.add_module_function("Vector3Box", "store",      vector3box_store);
+	env.add_module_function("Vector3Box", "unbox",      vector3box_unbox);
+	env.add_module_function("Vector3Box", "__index",    "Vector3Box");
+	env.add_module_function("Vector3Box", "__tostring", vector3box_tostring);
+
+	env.set_module_constructor("Vector3Box", vector3box_ctor);
+
+	env.add_module_function("Matrix4x4", "new",                         matrix4x4_new);
+	env.add_module_function("Matrix4x4", "from_quaternion",             matrix4x4_from_quaternion);
+	env.add_module_function("Matrix4x4", "from_translation",            matrix4x4_from_translation);
+	env.add_module_function("Matrix4x4", "from_quaternion_translation", matrix4x4_from_quaternion_translation);
+	env.add_module_function("Matrix4x4", "from_axes",                   matrix4x4_from_axes);
+	env.add_module_function("Matrix4x4", "copy",                        matrix4x4_copy);
+	env.add_module_function("Matrix4x4", "add",                         matrix4x4_add);
+	env.add_module_function("Matrix4x4", "subtract",                    matrix4x4_subtract);
+	env.add_module_function("Matrix4x4", "multiply",                    matrix4x4_multiply);
+	env.add_module_function("Matrix4x4", "transpose",                   matrix4x4_transpose);
+	env.add_module_function("Matrix4x4", "determinant",                 matrix4x4_determinant);
+	env.add_module_function("Matrix4x4", "invert",                      matrix4x4_invert);
+	env.add_module_function("Matrix4x4", "x",                           matrix4x4_x);
+	env.add_module_function("Matrix4x4", "y",                           matrix4x4_y);
+	env.add_module_function("Matrix4x4", "z",                           matrix4x4_z);
+	env.add_module_function("Matrix4x4", "set_x",                       matrix4x4_set_x);
+	env.add_module_function("Matrix4x4", "set_y",                       matrix4x4_set_y);
+	env.add_module_function("Matrix4x4", "set_z",                       matrix4x4_set_z);
+	env.add_module_function("Matrix4x4", "translation",                 matrix4x4_translation);
+	env.add_module_function("Matrix4x4", "set_translation",             matrix4x4_set_translation);
+	env.add_module_function("Matrix4x4", "rotation",                    matrix4x4_rotation);
+	env.add_module_function("Matrix4x4", "set_rotation",                matrix4x4_set_rotation);
+	env.add_module_function("Matrix4x4", "identity",                    matrix4x4_identity);
+	env.add_module_function("Matrix4x4", "transform",                   matrix4x4_transform);
+	env.add_module_function("Matrix4x4", "to_string",                   matrix4x4_to_string);
+
+	env.set_module_constructor("Matrix4x4", matrix4x4_ctor);
+
+	env.add_module_function("Matrix4x4Box", "new",        matrix4x4box_new);
+	env.add_module_function("Matrix4x4Box", "store",      matrix4x4box_store);
+	env.add_module_function("Matrix4x4Box", "unbox",      matrix4x4box_unbox);
+	env.add_module_function("Matrix4x4Box", "__index",    "Matrix4x4Box");
+	env.add_module_function("Matrix4x4Box", "__tostring", matrix4x4box_tostring);
+
+	env.set_module_constructor("Matrix4x4Box", matrix4x4box_ctor);
+
+	env.add_module_function("Quaternion", "new",                quaternion_new);
+	env.add_module_function("Quaternion", "negate",             quaternion_negate);
+	env.add_module_function("Quaternion", "identity",           quaternion_identity);
+	env.add_module_function("Quaternion", "multiply",           quaternion_multiply);
+	env.add_module_function("Quaternion", "multiply_by_scalar", quaternion_multiply_by_scalar);
+	env.add_module_function("Quaternion", "dot",                quaternion_dot);
+	env.add_module_function("Quaternion", "length",             quaternion_length);
+	env.add_module_function("Quaternion", "normalize",          quaternion_normalize);
+	env.add_module_function("Quaternion", "conjugate",          quaternion_conjugate);
+	env.add_module_function("Quaternion", "inverse",            quaternion_inverse);
+	env.add_module_function("Quaternion", "power",              quaternion_power);
+	env.add_module_function("Quaternion", "elements",           quaternion_elements);
+	env.add_module_function("Quaternion", "look",               quaternion_look);
+	env.add_module_function("Quaternion", "right",              quaternion_right);
+	env.add_module_function("Quaternion", "up",                 quaternion_up);
+	env.add_module_function("Quaternion", "forward",            quaternion_forward);
+	env.add_module_function("Quaternion", "lerp",               quaternion_lerp);
+	env.add_module_function("Quaternion", "to_string",          quaternion_to_string);
+
+	env.set_module_constructor("Quaternion", quaternion_ctor);
+
+	env.add_module_function("QuaternionBox", "new",        quaternionbox_new);
+	env.add_module_function("QuaternionBox", "store",      quaternionbox_store);
+	env.add_module_function("QuaternionBox", "unbox",      quaternionbox_unbox);
+	env.add_module_function("QuaternionBox", "__index",    "QuaternionBox");
+	env.add_module_function("QuaternionBox", "__tostring", quaternionbox_tostring);
+
+	env.set_module_constructor("QuaternionBox", quaternionbox_ctor);
+
+	env.add_module_function("Color4", "new",       color4_new);
+	env.add_module_function("Color4", "black",     color4_black);
+	env.add_module_function("Color4", "white",     color4_white);
+	env.add_module_function("Color4", "red",       color4_red);
+	env.add_module_function("Color4", "green",     color4_green);
+	env.add_module_function("Color4", "blue",      color4_blue);
+	env.add_module_function("Color4", "yellow",    color4_yellow);
+	env.add_module_function("Color4", "orange",    color4_orange);
+	env.add_module_function("Color4", "to_string", quaternion_to_string);
+
+	env.set_module_constructor("Color4",     color4_ctor);
+
+	env.add_module_function("Lightuserdata_mt", "__add",      lightuserdata_add);
+	env.add_module_function("Lightuserdata_mt", "__sub",      lightuserdata_sub);
+	env.add_module_function("Lightuserdata_mt", "__mul",      lightuserdata_mul);
+	env.add_module_function("Lightuserdata_mt", "__unm",      lightuserdata_unm);
+	env.add_module_function("Lightuserdata_mt", "__index",    lightuserdata_index);
+	env.add_module_function("Lightuserdata_mt", "__newindex", lightuserdata_newindex);
+
+	env.add_module_function("Keyboard", "name",         KEYBOARD_FN(name));
+	env.add_module_function("Keyboard", "connected",    KEYBOARD_FN(connected));
+	env.add_module_function("Keyboard", "num_buttons",  KEYBOARD_FN(num_buttons));
+	env.add_module_function("Keyboard", "num_axes",     KEYBOARD_FN(num_axes));
+	env.add_module_function("Keyboard", "pressed",      KEYBOARD_FN(pressed));
+	env.add_module_function("Keyboard", "released",     KEYBOARD_FN(released));
+	env.add_module_function("Keyboard", "any_pressed",  KEYBOARD_FN(any_pressed));
+	env.add_module_function("Keyboard", "any_released", KEYBOARD_FN(any_released));
+	env.add_module_function("Keyboard", "button_name",  KEYBOARD_FN(button_name));
+	env.add_module_function("Keyboard", "button_id",    KEYBOARD_FN(button_id));
+
+	env.add_module_function("Mouse", "name",         MOUSE_FN(name));
+	env.add_module_function("Mouse", "connected",    MOUSE_FN(connected));
+	env.add_module_function("Mouse", "num_buttons",  MOUSE_FN(num_buttons));
+	env.add_module_function("Mouse", "num_axes",     MOUSE_FN(num_axes));
+	env.add_module_function("Mouse", "pressed",      MOUSE_FN(pressed));
+	env.add_module_function("Mouse", "released",     MOUSE_FN(released));
+	env.add_module_function("Mouse", "any_pressed",  MOUSE_FN(any_pressed));
+	env.add_module_function("Mouse", "any_released", MOUSE_FN(any_released));
+	env.add_module_function("Mouse", "axis",         MOUSE_FN(axis));
+	env.add_module_function("Mouse", "button_name",  MOUSE_FN(button_name));
+	env.add_module_function("Mouse", "axis_name",    MOUSE_FN(axis_name));
+	env.add_module_function("Mouse", "button_id",    MOUSE_FN(button_id));
+	env.add_module_function("Mouse", "axis_id",      MOUSE_FN(axis_id));
+
+	env.add_module_function("Touch", "name",         TOUCH_FN(name));
+	env.add_module_function("Touch", "connected",    TOUCH_FN(connected));
+	env.add_module_function("Touch", "num_buttons",  TOUCH_FN(num_buttons));
+	env.add_module_function("Touch", "num_axes",     TOUCH_FN(num_axes));
+	env.add_module_function("Touch", "pressed",      TOUCH_FN(pressed));
+	env.add_module_function("Touch", "released",     TOUCH_FN(released));
+	env.add_module_function("Touch", "any_pressed",  TOUCH_FN(any_pressed));
+	env.add_module_function("Touch", "any_released", TOUCH_FN(any_released));
+	env.add_module_function("Touch", "axis",         TOUCH_FN(axis));
+	env.add_module_function("Touch", "button_name",  TOUCH_FN(button_name));
+	env.add_module_function("Touch", "axis_name",    TOUCH_FN(axis_name));
+	env.add_module_function("Touch", "button_id",    TOUCH_FN(button_id));
+	env.add_module_function("Touch", "axis_id",      TOUCH_FN(axis_id));
+
+	env.add_module_function("Pad1", "name",         JOYPAD_FN(0, name));
+	env.add_module_function("Pad1", "connected",    JOYPAD_FN(0, connected));
+	env.add_module_function("Pad1", "num_buttons",  JOYPAD_FN(0, num_buttons));
+	env.add_module_function("Pad1", "num_axes",     JOYPAD_FN(0, num_axes));
+	env.add_module_function("Pad1", "pressed",      JOYPAD_FN(0, pressed));
+	env.add_module_function("Pad1", "released",     JOYPAD_FN(0, released));
+	env.add_module_function("Pad1", "any_pressed",  JOYPAD_FN(0, any_pressed));
+	env.add_module_function("Pad1", "any_released", JOYPAD_FN(0, any_released));
+	env.add_module_function("Pad1", "axis",         JOYPAD_FN(0, axis));
+	env.add_module_function("Pad1", "button_name",  JOYPAD_FN(0, button_name));
+	env.add_module_function("Pad1", "axis_name",    JOYPAD_FN(0, axis_name));
+	env.add_module_function("Pad1", "button_id",    JOYPAD_FN(0, button_id));
+	env.add_module_function("Pad1", "axis_id",      JOYPAD_FN(0, axis_id));
+
+	env.add_module_function("Pad2", "name",         JOYPAD_FN(1, name));
+	env.add_module_function("Pad2", "connected",    JOYPAD_FN(1, connected));
+	env.add_module_function("Pad2", "num_buttons",  JOYPAD_FN(1, num_buttons));
+	env.add_module_function("Pad2", "num_axes",     JOYPAD_FN(1, num_axes));
+	env.add_module_function("Pad2", "pressed",      JOYPAD_FN(1, pressed));
+	env.add_module_function("Pad2", "released",     JOYPAD_FN(1, released));
+	env.add_module_function("Pad2", "any_pressed",  JOYPAD_FN(1, any_pressed));
+	env.add_module_function("Pad2", "any_released", JOYPAD_FN(1, any_released));
+	env.add_module_function("Pad2", "axis",         JOYPAD_FN(1, axis));
+	env.add_module_function("Pad2", "button_name",  JOYPAD_FN(1, button_name));
+	env.add_module_function("Pad2", "axis_name",    JOYPAD_FN(1, axis_name));
+	env.add_module_function("Pad2", "button_id",    JOYPAD_FN(1, button_id));
+	env.add_module_function("Pad2", "axis_id",      JOYPAD_FN(1, axis_id));
+
+	env.add_module_function("Pad3", "name",         JOYPAD_FN(2, name));
+	env.add_module_function("Pad3", "connected",    JOYPAD_FN(2, connected));
+	env.add_module_function("Pad3", "num_buttons",  JOYPAD_FN(2, num_buttons));
+	env.add_module_function("Pad3", "num_axes",     JOYPAD_FN(2, num_axes));
+	env.add_module_function("Pad3", "pressed",      JOYPAD_FN(2, pressed));
+	env.add_module_function("Pad3", "released",     JOYPAD_FN(2, released));
+	env.add_module_function("Pad3", "any_pressed",  JOYPAD_FN(2, any_pressed));
+	env.add_module_function("Pad3", "any_released", JOYPAD_FN(2, any_released));
+	env.add_module_function("Pad3", "axis",         JOYPAD_FN(2, axis));
+	env.add_module_function("Pad3", "button_name",  JOYPAD_FN(2, button_name));
+	env.add_module_function("Pad3", "axis_name",    JOYPAD_FN(2, axis_name));
+	env.add_module_function("Pad3", "button_id",    JOYPAD_FN(2, button_id));
+	env.add_module_function("Pad3", "axis_id",      JOYPAD_FN(2, axis_id));
+
+	env.add_module_function("Pad4", "name",         JOYPAD_FN(3, name));
+	env.add_module_function("Pad4", "connected",    JOYPAD_FN(3, connected));
+	env.add_module_function("Pad4", "num_buttons",  JOYPAD_FN(3, num_buttons));
+	env.add_module_function("Pad4", "num_axes",     JOYPAD_FN(3, num_axes));
+	env.add_module_function("Pad4", "pressed",      JOYPAD_FN(3, pressed));
+	env.add_module_function("Pad4", "released",     JOYPAD_FN(3, released));
+	env.add_module_function("Pad4", "any_pressed",  JOYPAD_FN(3, any_pressed));
+	env.add_module_function("Pad4", "any_released", JOYPAD_FN(3, any_released));
+	env.add_module_function("Pad4", "axis",         JOYPAD_FN(3, axis));
+	env.add_module_function("Pad4", "button_name",  JOYPAD_FN(3, button_name));
+	env.add_module_function("Pad4", "axis_name",    JOYPAD_FN(3, axis_name));
+	env.add_module_function("Pad4", "button_id",    JOYPAD_FN(3, button_id));
+	env.add_module_function("Pad4", "axis_id",      JOYPAD_FN(3, axis_id));
+
+	env.add_module_function("World", "spawn_unit",                      world_spawn_unit);
+	env.add_module_function("World", "destroy_unit",                    world_destroy_unit);
+	env.add_module_function("World", "num_units",                       world_num_units);
+	env.add_module_function("World", "units",                           world_units);
+	env.add_module_function("World", "camera",                          world_camera);
+	env.add_module_function("World", "set_camera_projection_type",      camera_set_projection_type);
+	env.add_module_function("World", "camera_projection_type",          camera_projection_type);
+	env.add_module_function("World", "camera_fov",                      camera_fov);
+	env.add_module_function("World", "set_camera_fov",                  camera_set_fov);
+	env.add_module_function("World", "camera_aspect",                   camera_aspect);
+	env.add_module_function("World", "set_camera_aspect",               camera_set_aspect);
+	env.add_module_function("World", "camera_near_clip_distance",       camera_near_clip_distance);
+	env.add_module_function("World", "set_camera_near_clip_distance",   camera_set_near_clip_distance);
+	env.add_module_function("World", "camera_far_clip_distance",        camera_far_clip_distance);
+	env.add_module_function("World", "set_camera_far_clip_distance",    camera_set_far_clip_distance);
+	env.add_module_function("World", "set_camera_orthographic_metrics", camera_set_orthographic_metrics);
+	env.add_module_function("World", "camera_screen_to_world",          camera_screen_to_world);
+	env.add_module_function("World", "camera_world_to_screen",          camera_world_to_screen);
+	env.add_module_function("World", "update_animations",               world_update_animations);
+	env.add_module_function("World", "update_scene",                    world_update_scene);
+	env.add_module_function("World", "update",                          world_update);
+	env.add_module_function("World", "play_sound",                      world_play_sound);
+	env.add_module_function("World", "stop_sound",                      world_stop_sound);
+	env.add_module_function("World", "link_sound",                      world_link_sound);
+	env.add_module_function("World", "set_listener_pose",               world_set_listener_pose);
+	env.add_module_function("World", "set_sound_position",              world_set_sound_position);
+	env.add_module_function("World", "set_sound_range",                 world_set_sound_range);
+	env.add_module_function("World", "set_sound_volume",                world_set_sound_volume);
+	env.add_module_function("World", "create_debug_line",               world_create_debug_line);
+	env.add_module_function("World", "destroy_debug_line",              world_destroy_debug_line);
+	env.add_module_function("World", "load_level",                      world_load_level);
+	env.add_module_function("World", "scene_graph",                     world_scene_graph);
+	env.add_module_function("World", "render_world",                    world_render_world);
+	env.add_module_function("World", "physics_world",                   world_physics_world);
+	env.add_module_function("World", "sound_world",                     world_sound_world);
+	env.add_module_function("World", "__index",                         "World");
+	env.add_module_function("World", "__tostring",                      world_tostring);
+
+	env.add_module_function("SceneGraph", "create",              scene_graph_create);
+	env.add_module_function("SceneGraph", "destroy",             scene_graph_destroy);
+	env.add_module_function("SceneGraph", "transform_instances", scene_graph_transform_instances);
+	env.add_module_function("SceneGraph", "local_position",      scene_graph_local_position);
+	env.add_module_function("SceneGraph", "local_rotation",      scene_graph_local_rotation);
+	env.add_module_function("SceneGraph", "local_scale",         scene_graph_local_scale);
+	env.add_module_function("SceneGraph", "local_pose",          scene_graph_local_pose);
+	env.add_module_function("SceneGraph", "world_position",      scene_graph_world_position);
+	env.add_module_function("SceneGraph", "world_rotation",      scene_graph_world_rotation);
+	env.add_module_function("SceneGraph", "world_pose",          scene_graph_world_pose);
+	env.add_module_function("SceneGraph", "set_local_position",  scene_graph_set_local_position);
+	env.add_module_function("SceneGraph", "set_local_rotation",  scene_graph_set_local_rotation);
+	env.add_module_function("SceneGraph", "set_local_scale",     scene_graph_set_local_scale);
+	env.add_module_function("SceneGraph", "set_local_pose",      scene_graph_set_local_pose);
+	env.add_module_function("SceneGraph", "link",                scene_graph_link);
+	env.add_module_function("SceneGraph", "unlink",              scene_graph_unlink);
+
+	env.add_module_function("UnitManager", "create", unit_manager_create);
+	env.add_module_function("UnitManager", "alive",  unit_manager_alive);
+
+	env.add_module_function("RenderWorld", "create_mesh",          render_world_create_mesh);
+	env.add_module_function("RenderWorld", "destroy_mesh",         render_world_destroy_mesh);
+	env.add_module_function("RenderWorld", "mesh_instances",       render_world_mesh_instances);
+	env.add_module_function("RenderWorld", "mesh_obb",             render_world_mesh_obb);
+	env.add_module_function("RenderWorld", "set_mesh_visible",     render_world_set_mesh_visible);
+	env.add_module_function("RenderWorld", "create_sprite",        render_world_create_sprite);
+	env.add_module_function("RenderWorld", "destroy_sprite",       render_world_destroy_sprite);
+	env.add_module_function("RenderWorld", "sprite_instances",     render_world_sprite_instances);
+	env.add_module_function("RenderWorld", "set_sprite_frame",     render_world_set_sprite_frame);
+	env.add_module_function("RenderWorld", "set_sprite_visible",   render_world_set_sprite_visible);
+	env.add_module_function("RenderWorld", "create_light",         render_world_create_light);
+	env.add_module_function("RenderWorld", "destroy_light",        render_world_destroy_light);
+	env.add_module_function("RenderWorld", "light_instances",      render_world_light_instances);
+	env.add_module_function("RenderWorld", "light_type",           render_world_light_type);
+	env.add_module_function("RenderWorld", "light_color",          render_world_light_color);
+	env.add_module_function("RenderWorld", "light_range",          render_world_light_range);
+	env.add_module_function("RenderWorld", "light_intensity",      render_world_light_intensity);
+	env.add_module_function("RenderWorld", "light_spot_angle",     render_world_light_spot_angle);
+	env.add_module_function("RenderWorld", "set_light_type",       render_world_set_light_type);
+	env.add_module_function("RenderWorld", "set_light_color",      render_world_set_light_color);
+	env.add_module_function("RenderWorld", "set_light_range",      render_world_set_light_range);
+	env.add_module_function("RenderWorld", "set_light_intensity",  render_world_set_light_intensity);
+	env.add_module_function("RenderWorld", "set_light_spot_angle", render_world_set_light_spot_angle);
+	env.add_module_function("RenderWorld", "enable_debug_drawing", render_world_enable_debug_drawing);
+
+	env.add_module_function("PhysicsWorld", "actor_instances",               physics_world_actor_instances);
+	env.add_module_function("PhysicsWorld", "actor_world_position",          physics_world_actor_world_position);
+	env.add_module_function("PhysicsWorld", "actor_world_rotation",          physics_world_actor_world_rotation);
+	env.add_module_function("PhysicsWorld", "actor_world_pose",              physics_world_actor_world_pose);
+	env.add_module_function("PhysicsWorld", "teleport_actor_world_position", physics_world_teleport_actor_world_position);
+	env.add_module_function("PhysicsWorld", "teleport_actor_world_rotation", physics_world_teleport_actor_world_rotation);
+	env.add_module_function("PhysicsWorld", "teleport_actor_world_pose",     physics_world_teleport_actor_world_pose);
+	env.add_module_function("PhysicsWorld", "actor_center_of_mass",          physics_world_actor_center_of_mass);
+	env.add_module_function("PhysicsWorld", "enable_actor_gravity",          physics_world_enable_actor_gravity);
+	env.add_module_function("PhysicsWorld", "disable_actor_gravity",         physics_world_disable_actor_gravity);
+	env.add_module_function("PhysicsWorld", "enable_actor_collision",        physics_world_enable_actor_collision);
+	env.add_module_function("PhysicsWorld", "disable_actor_collision",       physics_world_disable_actor_collision);
+	env.add_module_function("PhysicsWorld", "set_actor_collision_filter",    physics_world_set_actor_collision_filter);
+	env.add_module_function("PhysicsWorld", "set_actor_kinematic",           physics_world_set_actor_kinematic);
+	env.add_module_function("PhysicsWorld", "move_actor",                    physics_world_move_actor);
+	env.add_module_function("PhysicsWorld", "is_static",                     physics_world_is_static);
+	env.add_module_function("PhysicsWorld", "is_dynamic",                    physics_world_is_dynamic);
+	env.add_module_function("PhysicsWorld", "is_kinematic",                  physics_world_is_kinematic);
+	env.add_module_function("PhysicsWorld", "is_nonkinematic",               physics_world_is_nonkinematic);
+	env.add_module_function("PhysicsWorld", "actor_linear_damping",          physics_world_actor_linear_damping);
+	env.add_module_function("PhysicsWorld", "set_actor_linear_damping",      physics_world_set_actor_linear_damping);
+	env.add_module_function("PhysicsWorld", "actor_angular_damping",         physics_world_actor_angular_damping);
+	env.add_module_function("PhysicsWorld", "set_actor_angular_damping",     physics_world_set_actor_angular_damping);
+	env.add_module_function("PhysicsWorld", "actor_linear_velocity",         physics_world_actor_linear_velocity);
+	env.add_module_function("PhysicsWorld", "set_actor_linear_velocity",     physics_world_set_actor_linear_velocity);
+	env.add_module_function("PhysicsWorld", "actor_angular_velocity",        physics_world_actor_angular_velocity);
+	env.add_module_function("PhysicsWorld", "set_actor_angular_velocity",    physics_world_set_actor_angular_velocity);
+	env.add_module_function("PhysicsWorld", "add_actor_impulse",             physics_world_add_actor_impulse);
+	env.add_module_function("PhysicsWorld", "add_actor_impulse_at",          physics_world_add_actor_impulse_at);
+	env.add_module_function("PhysicsWorld", "add_actor_torque_impulse",      physics_world_add_actor_torque_impulse);
+	env.add_module_function("PhysicsWorld", "push_actor",                    physics_world_push_actor);
+	env.add_module_function("PhysicsWorld", "push_actor_at",                 physics_world_push_actor_at);
+	env.add_module_function("PhysicsWorld", "is_sleeping",                   physics_world_is_sleeping);
+	env.add_module_function("PhysicsWorld", "wake_up",                       physics_world_wake_up);
+	env.add_module_function("PhysicsWorld", "controller_instances",          physics_world_controller_instances);
+	env.add_module_function("PhysicsWorld", "move_controller",               physics_world_move_controller);
+	env.add_module_function("PhysicsWorld", "create_joint",                  physics_world_create_joint);
+	env.add_module_function("PhysicsWorld", "gravity",                       physics_world_gravity);
+	env.add_module_function("PhysicsWorld", "set_gravity",                   physics_world_set_gravity);
+	env.add_module_function("PhysicsWorld", "raycast",                       physics_world_raycast);
+	env.add_module_function("PhysicsWorld", "enable_debug_drawing",          physics_world_enable_debug_drawing);
+	env.add_module_function("PhysicsWorld", "__index",                       "PhysicsWorld");
+	env.add_module_function("PhysicsWorld", "__tostring",                    physics_world_tostring);
+
+	env.add_module_function("SoundWorld", "stop_all",   sound_world_stop_all);
+	env.add_module_function("SoundWorld", "pause_all",  sound_world_pause_all);
+	env.add_module_function("SoundWorld", "resume_all", sound_world_resume_all);
+	env.add_module_function("SoundWorld", "is_playing", sound_world_is_playing);
+	env.add_module_function("SoundWorld", "__index",    "SoundWorld");
+	env.add_module_function("SoundWorld", "__tostring", sound_world_tostring);
+
+	env.add_module_function("Device", "argv",                     device_argv);
+	env.add_module_function("Device", "platform",                 device_platform);
+	env.add_module_function("Device", "architecture",             device_architecture);
+	env.add_module_function("Device", "version",                  device_version);
+	env.add_module_function("Device", "last_delta_time",          device_last_delta_time);
+	env.add_module_function("Device", "quit",                     device_quit);
+	env.add_module_function("Device", "resolution",               device_resolution);
+	env.add_module_function("Device", "create_world",             device_create_world);
+	env.add_module_function("Device", "destroy_world",            device_destroy_world);
+	env.add_module_function("Device", "render",                   device_render);
+	env.add_module_function("Device", "create_resource_package",  device_create_resource_package);
+	env.add_module_function("Device", "destroy_resource_package", device_destroy_resource_package);
+	env.add_module_function("Device", "console_send",             device_console_send);
+	env.add_module_function("Device", "can_get",                  device_can_get);
+	env.add_module_function("Device", "enable_resource_autoload", device_enable_resource_autoload);
+
+	env.add_module_function("Profiler", "enter_scope", profiler_enter_scope);
+	env.add_module_function("Profiler", "leave_scope", profiler_leave_scope);
+	env.add_module_function("Profiler", "record",      profiler_record);
+
+	env.add_module_function("DebugLine", "add_line",   debug_line_add_line);
+	env.add_module_function("DebugLine", "add_axes",   debug_line_add_axes);
+	env.add_module_function("DebugLine", "add_circle", debug_line_add_circle);
+	env.add_module_function("DebugLine", "add_cone",   debug_line_add_cone);
+	env.add_module_function("DebugLine", "add_sphere", debug_line_add_sphere);
+	env.add_module_function("DebugLine", "add_obb",    debug_line_add_obb);
+	env.add_module_function("DebugLine", "reset",      debug_line_reset);
+	env.add_module_function("DebugLine", "submit",     debug_line_submit);
+	env.add_module_function("DebugLine", "__index",    "DebugLine");
+	env.add_module_function("DebugLine", "__tostring", debug_line_tostring);
+
+	env.add_module_function("ResourcePackage", "load",       resource_package_load);
+	env.add_module_function("ResourcePackage", "unload",     resource_package_unload);
+	env.add_module_function("ResourcePackage", "flush",      resource_package_flush);
+	env.add_module_function("ResourcePackage", "has_loaded", resource_package_has_loaded);
+	env.add_module_function("ResourcePackage", "__index",    "ResourcePackage");
+	env.add_module_function("ResourcePackage", "__tostring", resource_package_tostring);
+
+	env.add_module_function("Material", "set_float",   material_set_float);
+	env.add_module_function("Material", "set_vector2", material_set_vector2);
+	env.add_module_function("Material", "set_vector3", material_set_vector3);
+
+	env.add_module_function("Gui", "resolution",     gui_resolution);
+	env.add_module_function("Gui", "move",           gui_move);
+	env.add_module_function("Gui", "screen_to_gui",  gui_screen_to_gui);
+	env.add_module_function("Gui", "draw_rectangle", gui_draw_rectangle);
+	env.add_module_function("Gui", "draw_image",     gui_draw_image);
+	env.add_module_function("Gui", "draw_image_uv",  gui_draw_image_uv);
+	env.add_module_function("Gui", "draw_text",      gui_draw_text);
+
+	env.add_module_function("Display", "modes",    display_modes);
+	env.add_module_function("Display", "set_mode", display_set_mode);
+
+	env.add_module_function("Window", "show",        window_show);
+	env.add_module_function("Window", "hide",        window_hide);
+	env.add_module_function("Window", "resize",      window_resize);
+	env.add_module_function("Window", "move",        window_move);
+	env.add_module_function("Window", "minimize",    window_minimize);
+	env.add_module_function("Window", "restore",     window_restore);
+	env.add_module_function("Window", "title",       window_title);
+	env.add_module_function("Window", "set_title",   window_set_title);
+	env.add_module_function("Window", "show_cursor", window_show_cursor);
 }
 
 } // namespace crown

+ 7 - 7
src/lua/lua_environment.cpp

@@ -127,7 +127,7 @@ void LuaEnvironment::execute_string(const char* s)
 	lua_pop(L, 1);
 }
 
-void LuaEnvironment::load_module_function(const char* module, const char* name, const lua_CFunction func)
+void LuaEnvironment::add_module_function(const char* module, const char* name, const lua_CFunction func)
 {
 	luaL_newmetatable(L, module);
 	luaL_Reg entry[2];
@@ -142,15 +142,15 @@ void LuaEnvironment::load_module_function(const char* module, const char* name,
 	lua_pop(L, -1);
 }
 
-void LuaEnvironment::load_module_function(const char* module, const char* name, const char* value)
+void LuaEnvironment::add_module_function(const char* module, const char* name, const char* func)
 {
 	luaL_newmetatable(L, module);
-	lua_getglobal(L, value);
+	lua_getglobal(L, func);
 	lua_setfield(L, -2, name);
 	lua_setglobal(L, module);
 }
 
-void LuaEnvironment::load_module_constructor(const char* module, const lua_CFunction func)
+void LuaEnvironment::set_module_constructor(const char* module, const lua_CFunction func)
 {
 	// Create dummy tables to be used as module's metatable
 	lua_createtable(L, 0, 1);
@@ -213,7 +213,7 @@ Quaternion* LuaEnvironment::next_quaternion(const Quaternion& q)
 Matrix4x4* LuaEnvironment::next_matrix4x4(const Matrix4x4& m)
 {
 	CE_ASSERT(_mat4_used < CROWN_MAX_LUA_MATRIX4X4, "Maximum number of Matrix4x4 reached");
-	return &(s_mat4_buffer[_mat4_used++] = m);
+	return &(_mat4_buffer[_mat4_used++] = m);
 }
 
 bool LuaEnvironment::is_vector3(const Vector3* p) const
@@ -230,8 +230,8 @@ bool LuaEnvironment::is_quaternion(const Quaternion* p) const
 
 bool LuaEnvironment::is_matrix4x4(const Matrix4x4* p) const
 {
-	return p >= &s_mat4_buffer[0]
-		&& p <= &s_mat4_buffer[CROWN_MAX_LUA_MATRIX4X4 - 1];
+	return p >= &_mat4_buffer[0]
+		&& p <= &_mat4_buffer[CROWN_MAX_LUA_MATRIX4X4 - 1];
 }
 
 void LuaEnvironment::reset_temporaries()

+ 13 - 7
src/lua/lua_environment.h

@@ -30,22 +30,28 @@ struct LuaEnvironment
 	u32 _quat_used;
 	Quaternion _quat_buffer[CROWN_MAX_LUA_QUATERNION];
 	u32 _mat4_used;
-	Matrix4x4 s_mat4_buffer[CROWN_MAX_LUA_MATRIX4X4];
+	Matrix4x4 _mat4_buffer[CROWN_MAX_LUA_MATRIX4X4];
 
 	LuaEnvironment();
 	~LuaEnvironment();
 
+	/// Loads lua libraries.
 	void load_libs();
 
+	/// Executes the lua resource @a lr.
 	void execute(const LuaResource* lr);
 
-	/// Loads and executes the given @a s lua string.
-	void execute_string(const char* s);
+	/// Executes the @a lua string.
+	void execute_string(const char* lua);
 
-	/// Loads the function with the given @a name and @a func into the table @a module.
-	void load_module_function(const char* module, const char* name, const lua_CFunction func);
-	void load_module_function(const char* module, const char* name, const char* value);
-	void load_module_constructor(const char* module, const lua_CFunction func);
+	/// Adds the function with the given @a name and @a func to the table @a module.
+	void add_module_function(const char* module, const char* name, const lua_CFunction func);
+
+	/// Adds the function with the given @a name and @a func to the table @a module.
+	void add_module_function(const char* module, const char* name, const char* func);
+
+	/// Sets the constructor for the table @a module to the given function.
+	void set_module_constructor(const char* module, const lua_CFunction func);
 
 	/// Calls the global function @a func with @a argc argument number.
 	/// Each argument is a pair (type, value).