コード例 #1
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void Camera_get_viewport (LIScrArgs* args)
{
	LIExtCamera* camera;

	camera = args->self;
	liscr_args_set_output (args, LISCR_ARGS_OUTPUT_TABLE);
	liscr_args_seti_float (args, camera->view.viewport[0]);
	liscr_args_seti_float (args, camera->view.viewport[1]);
	liscr_args_seti_float (args, camera->view.viewport[2]);
	liscr_args_seti_float (args, camera->view.viewport[3]);
}
コード例 #2
0
static void Sound_get_music_offset (LIScrArgs* args)
{
#ifndef LI_DISABLE_SOUND
	LIExtModule* module;

	module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_SOUND);
	if (module->music != NULL)
		liscr_args_seti_float (args, lisnd_source_get_offset (module->music));
	else
		liscr_args_seti_float (args, 0.0f);
#else
	liscr_args_seti_float (args, 0.0f);
#endif
}
コード例 #3
0
ファイル: ext-widget.c プロジェクト: bsmr-games/lipsofsuna
static void Widget_get_y (LIScrArgs* args)
{
	LIWdgRect rect;

	liwdg_widget_get_allocation (args->self, &rect);
	liscr_args_seti_float (args, rect.y);
}
コード例 #4
0
ファイル: ext-script.c プロジェクト: bsmr-games/lipsofsuna
static void Animation_get_duration (LIScrArgs* args)
{
	LIMdlAnimation* self;

	self = args->self;
	liscr_args_seti_float (args, limdl_animation_get_duration (self));
}
コード例 #5
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void FirFilter_get (LIScrArgs* args)
{
	float output;

	output = liext_fir_filter_get (args->self);
	liscr_args_seti_float (args, output);
}
コード例 #6
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void Terrain_cast_sphere (LIScrArgs* args)
{
	float radius;
	LIExtTerrain* self;
	LIMatVector src;
	LIMatVector dst;
	LIExtTerrainCollision result;

	/* Get the arguments. */
	self = args->self;
	if (!liscr_args_geti_vector (args, 0, &src))
		return;
	if (!liscr_args_geti_vector (args, 1, &dst))
		return;
	if (!liscr_args_geti_float (args, 2, &radius))
		return;
	if (radius <= LIMAT_EPSILON)
		return;

	/* Convert into grid coordinates. */
	src.x /= self->grid_size;
	src.z /= self->grid_size;
	dst.x /= self->grid_size;
	dst.z /= self->grid_size;
	radius /= self->grid_size;

	/* Cast the sphere. */
	if (!liext_terrain_cast_sphere (self, &src, &dst, radius, &result))
		return;
	liscr_args_seti_float (args, result.fraction);
}
コード例 #7
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void Camera_get_rotation_smoothing (LIScrArgs* args)
{
	float pos;
	float rot;

	liext_camera_get_smoothing (args->self, &pos, &rot);
	liscr_args_seti_float (args, rot);
}
コード例 #8
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void Terrain_get_stick (LIScrArgs* args)
{
	int grid_x;
	int grid_z;
	float y;
	float ref_y;
	LIExtTerrainColumn* column;
	LIExtTerrainStick* stick;

	/* Get the arguments. */
	if (!liscr_args_geti_int (args, 0, &grid_x) || grid_x < 0)
		return;
	if (!liscr_args_geti_int (args, 1, &grid_z) || grid_z < 0)
		return;
	if (!liscr_args_geti_float (args, 2, &ref_y))
		return;

	/* Get the column. */
	column = liext_terrain_get_column (args->self, grid_x, grid_z);
	if (column == NULL)
		return;

	/* Find the stick. */
	y = 0.0f;
	for (stick = column->sticks ; stick != NULL ; stick = stick->next)
	{
		if (ref_y < y + stick->height)
		{
			liscr_args_seti_float (args, y);
			liscr_args_seti_float (args, stick->height);
			liscr_args_seti_int (args, stick->material);
			return;
		}
		y += stick->height;
	}

	/* Return the infinite end stick. */
	liscr_args_seti_float (args, y);
	liscr_args_seti_float (args, 1000000.0f);
	liscr_args_seti_int (args, 0);
}
コード例 #9
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void Camera_get_projection (LIScrArgs* args)
{
	int i;
	LIExtCamera* camera;
	LIMatMatrix matrix;

	camera = args->self;
	liext_camera_get_projection (camera, &matrix);
	liscr_args_set_output (args, LISCR_ARGS_OUTPUT_TABLE);
	for (i = 0 ; i < 16 ; i++)
		liscr_args_seti_float (args, matrix.m[i]);
}
コード例 #10
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void Terrain_cast_ray (LIScrArgs* args)
{
	int grid_x;
	int grid_z;
	float fraction;
	LIMatVector src;
	LIMatVector dst;
	LIMatVector point;
	LIMatVector normal;

	/* Get the arguments. */
	if (!liscr_args_geti_vector (args, 0, &src))
		return;
	if (!liscr_args_geti_vector (args, 1, &dst))
		return;

	if (!liext_terrain_intersect_ray (args->self, &src, &dst, &grid_x, &grid_z, &point, &normal, &fraction))
		return;
	liscr_args_seti_int (args, grid_x);
	liscr_args_seti_int (args, grid_z);
	liscr_args_seti_float (args, point.x);
	liscr_args_seti_float (args, point.y);
	liscr_args_seti_float (args, point.z);
	liscr_args_seti_float (args, normal.x);
	liscr_args_seti_float (args, normal.y);
	liscr_args_seti_float (args, normal.z);
}
コード例 #11
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void Heightmap_get_height (LIScrArgs* args)
{
	int clamp = 1;
	float height;
	LIMatVector vector;

	if (!liscr_args_geti_vector (args, 0, &vector))
		return;
	liscr_args_geti_bool (args, 1, &clamp);

	if (liext_heightmap_get_height (args->self, vector.x, vector.z, clamp, &height))
		liscr_args_seti_float (args, height);
}
コード例 #12
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void Terrain_find_nearest_empty_stick (LIScrArgs* args)
{
	int grid_x;
	int grid_z;
	float y;
	float min_height;

	/* Get the arguments. */
	if (!liscr_args_geti_int (args, 0, &grid_x) || grid_x < 0 ||
	    !liscr_args_geti_int (args, 1, &grid_z) || grid_z < 0)
	{
		liscr_args_seti_float (args, 1000000000.0f);
		return;
	}
	if (!liscr_args_geti_float (args, 2, &y))
		return;
	if (!liscr_args_geti_float (args, 3, &min_height))
		min_height = 0.0f;

	/* Find the stick. */
	y = liext_terrain_find_nearest_empty_stick (args->self, grid_x, grid_z, y, min_height);
	liscr_args_seti_float (args, y);
}
コード例 #13
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
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, &center.position))
		return;
	if (!liscr_args_geti_quaternion (args, 1, &center.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, &center, distance, radius, group, mask);
	liscr_args_seti_float (args, result);
}
コード例 #14
0
ファイル: script.c プロジェクト: bsmr-games/lipsofsuna
static void Camera_get_fov (LIScrArgs* args)
{
	liscr_args_seti_float (args, liext_camera_get_fov (args->self));
}