static void Model_get_bounding_box (LIScrArgs* args) { LIMatVector min; LIMatVector max; LIMdlModel* self; self = args->self; min = self->bounds.min; max = self->bounds.max; liscr_args_seti_vector (args, &min); liscr_args_seti_vector (args, &max); }
static void Sound_get_listener_position (LIScrArgs* args) { LIExtModule* module; module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_SOUND); liscr_args_seti_vector (args, &module->listener_position); }
static void Ai_solve_path (LIScrArgs* args) { int i; LIAiPath* path; LIExtModule* module; LIMatVector point; LIMatVector start; LIMatVector end; module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_AI); if (!liscr_args_gets_vector (args, "start", &start)) return; if (!liscr_args_gets_vector (args, "start", &start) || !liscr_args_gets_vector (args, "target", &end)) return; /* Solve the path. */ path = liai_manager_solve_path (module->ai, &start, &end); if (path == NULL) return; /* Store the path to a table. */ liscr_args_set_output (args, LISCR_ARGS_OUTPUT_TABLE_FORCE); for (i = 0 ; i < liai_path_get_length (path) ; i++) { liai_path_get_point (path, i, &point); liscr_args_seti_vector (args, &point); } liai_path_free (path); }
static void Camera_calculate_1st_person_transform (LIScrArgs* args) { LIMatTransform result; liext_camera_calculate_1st_person_transform (args->self, &result); liscr_args_seti_vector (args, &result.position); liscr_args_seti_quaternion (args, &result.rotation); }
static void Camera_get_target_position (LIScrArgs* args) { LIExtCamera* camera; LIMatTransform transform; camera = args->self; liext_camera_get_center (camera, &transform); liscr_args_seti_vector (args, &transform.position); }
static void Model_get_center_offset (LIScrArgs* args) { LIMatVector ctr; LIMdlModel* self; self = args->self; ctr = limat_vector_add (self->bounds.min, self->bounds.max); ctr = limat_vector_multiply (ctr, 0.5f); liscr_args_seti_vector (args, &ctr); }
static void Widget_get_offset (LIScrArgs* args) { int x; int y; LIMatVector v; liwdg_widget_get_offset (args->self, &x, &y); v = limat_vector_init (x, y, 0.0f); liscr_args_seti_vector (args, &v); }
static void Camera_picking_ray (LIScrArgs* args) { float fardist = 50.0f; float neardist = 0.0f; LIMatVector cursor; LIMatVector dir; LIMatVector ray0; LIMatVector ray1; LIExtCamera* self = args->self; /* Handle arguments. */ liscr_args_gets_float (args, "far", &fardist); liscr_args_gets_float (args, "near", &neardist); if (!liscr_args_gets_vector (args, "cursor", &cursor)) { cursor.x = self->view.viewport[0] + self->view.viewport[2] / 2.0f; cursor.y = self->view.viewport[1] + self->view.viewport[3] / 2.0f; } else cursor.y = self->view.viewport[3] - cursor.y - 1; /* Calculate ray vector. */ cursor.z = 0.0f; if (!liext_camera_unproject (self, &cursor, &ray0)) return; cursor.z = 1.0f; if (!liext_camera_unproject (self, &cursor, &ray1)) return; dir = limat_vector_subtract (ray1, ray0); dir = limat_vector_normalize (dir); /* Apply near and far distances specified by the user. */ ray1 = limat_vector_add (ray0, limat_vector_multiply (dir, fardist)); ray0 = limat_vector_add (ray0, limat_vector_multiply (dir, neardist)); liscr_args_seti_vector (args, &ray0); liscr_args_seti_vector (args, &ray1); }
static void Camera_calculate_3rd_person_transform (LIScrArgs* args) { float distance; LIMatTransform center; LIMatTransform result; if (!liscr_args_geti_vector (args, 0, ¢er.position)) return; if (!liscr_args_geti_quaternion (args, 1, ¢er.rotation)) return; if (!liscr_args_geti_float (args, 2, &distance)) return; liext_camera_calculate_3rd_person_transform ( args->self, ¢er, distance, &result); liscr_args_seti_vector (args, &result.position); liscr_args_seti_quaternion (args, &result.rotation); }
static void Camera_calculate_smoothed_transform (LIScrArgs* args) { float position_smoothing = 1.0f; float rotation_smoothing = 1.0f; LIMatTransform target; LIMatTransform result; if (!liscr_args_geti_vector (args, 0, &target.position)) return; if (!liscr_args_geti_quaternion (args, 1, &target.rotation)) return; liscr_args_geti_float (args, 2, &position_smoothing); liscr_args_geti_float (args, 3, &rotation_smoothing); liext_camera_calculate_smoothed_transform ( args->self, &target, position_smoothing, rotation_smoothing, &result); liscr_args_seti_vector (args, &result.position); liscr_args_seti_quaternion (args, &result.rotation); }