Beispiel #1
0
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);
}
Beispiel #2
0
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);
}
Beispiel #3
0
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);
}
Beispiel #4
0
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);
}
Beispiel #5
0
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);
}
Beispiel #6
0
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);
}
Beispiel #7
0
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);
}
Beispiel #8
0
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);
}
Beispiel #9
0
static void Camera_calculate_3rd_person_transform (LIScrArgs* args)
{
	float distance;
	LIMatTransform center;
	LIMatTransform result;

	if (!liscr_args_geti_vector (args, 0, &center.position))
		return;
	if (!liscr_args_geti_quaternion (args, 1, &center.rotation))
		return;
	if (!liscr_args_geti_float (args, 2, &distance))
		return;

	liext_camera_calculate_3rd_person_transform (
		args->self, &center, distance, &result);
	liscr_args_seti_vector (args, &result.position);
	liscr_args_seti_quaternion (args, &result.rotation);
}
Beispiel #10
0
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);
}