static void Camera_set_target_rotation (LIScrArgs* args) { LIExtCamera* camera; LIMatTransform transform; camera = args->self; transform = limat_transform_identity (); liext_camera_get_center (camera, &transform); liscr_args_geti_quaternion (args, 0, &transform.rotation); liext_camera_set_center (camera, &transform); }
static void Sound_set_listener_rotation (LIScrArgs* args) { LIExtModule* module; LIMatQuaternion value; if (liscr_args_geti_quaternion (args, 0, &value)) { module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_SOUND); module->listener_rotation = value; } }
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); }
static void Camera_calculate_3rd_person_clipped_distance (LIScrArgs* args) { int group = 0xFFFF; int mask = 0xFFFF; float distance; float radius; float result; LIMatTransform center; 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; if (!liscr_args_geti_float (args, 3, &radius)) radius = 0.0f; liscr_args_geti_int (args, 4, &group); liscr_args_geti_int (args, 5, &mask); result = liext_camera_calculate_3rd_person_clipped_distance ( args->self, ¢er, distance, radius, group, mask); liscr_args_seti_float (args, result); }