Esempio n. 1
0
static void Widget_set_request (LIScrArgs* args)
{
	int internal = 0;
	int paddings[4];
	const char* text;
	const char* font_name;
	LIMatVector vector;
	LIWdgSize size = { -1, -1 };
	LIWdgSize size_tmp;
	LIWdgWidget* widget;

	widget = args->self;
	liscr_args_gets_bool (args, "internal", &internal);
	if (liscr_args_geti_vector (args, 0, &vector))
	{
		size.width = (int) vector.x;
		size.height = (int) vector.y;
	}
	else
	{
		if (!liscr_args_geti_int (args, 0, &size.width))
			liscr_args_gets_int (args, "width", &size.width);
		if (!liscr_args_geti_int (args, 1, &size.width))
			liscr_args_gets_int (args, "height", &size.height);
	}

	/* Calculate from text if given. */
	if (liscr_args_gets_string (args, "font", &font_name) &&
	    liscr_args_gets_string (args, "text", &text))
	{
		if (liren_render_measure_text (widget->manager->render, font_name, text, size.width, &size_tmp.width, &size_tmp.height))
		{
			if (size.width == -1)
				size.width = size_tmp.width;
			if (size.height == -1)
				size.height = size_tmp.height;
		}
	}

	/* Add paddings if given. */
	if (liscr_args_gets_intv (args, "paddings", 4, paddings) == 4)
	{
		size.width += paddings[1] + paddings[2];
		size.height += paddings[0] + paddings[3];
	}

	/* Set the request. */
	if (internal)
		liwdg_widget_set_request (args->self, 1, size.width, size.height);
	else
		liwdg_widget_set_request (args->self, 2, size.width, size.height);
}
Esempio n. 2
0
static void Sound_effect (LIScrArgs* args)
{
#ifndef LI_DISABLE_SOUND
	int tmp;
	int flags = 0;
	float pitch;
	float volume;
	const char* effect;
	LIEngObject* object;
	LIExtModule* module;
	LIMatVector velocity;
	LIScrData* data;
	LISndSource* source;

	if (liscr_args_gets_string (args, "effect", &effect) &&
	    liscr_args_gets_data (args, "object", LISCR_SCRIPT_OBJECT, &data))
	{
		if (liscr_args_gets_bool (args, "positional", &tmp) && !tmp)
			flags |= LIEXT_SOUND_FLAG_NONPOSITIONAL;
		if (liscr_args_gets_bool (args, "repeating", &tmp) && tmp)
			flags |= LIEXT_SOUND_FLAG_REPEAT;
		object = liscr_data_get_data (data);
		module = liscr_script_get_userdata (args->script, LIEXT_SCRIPT_SOUND);
		source = liext_sound_set_effect (module, object->id, effect, flags);
		if (source != NULL)
		{
			if (liscr_args_gets_float (args, "pitch", &pitch))
				lisnd_source_set_pitch (source, pitch);
			if (liscr_args_gets_float (args, "volume", &volume))
				lisnd_source_set_volume (source, volume);
			if (liscr_args_gets_vector (args, "velocity", &velocity))
				lisnd_source_set_velocity (source, &velocity);
		}
	}
#endif
}
Esempio n. 3
0
static void Widget_get_request (LIScrArgs* args)
{
	int internal = 0;
	LIWdgWidget* widget;

	widget = args->self;
	liscr_args_gets_bool (args, "internal", &internal);
	if (internal)
	{
		liscr_args_seti_int (args, widget->request[1].width);
		liscr_args_seti_int (args, widget->request[1].height);
	}
	else
	{
		if (widget->request[2].width >= 0)
			liscr_args_seti_int (args, widget->request[2].width);
		else
			liscr_args_seti_nil (args);
		if (widget->request[2].height >= 0)
			liscr_args_seti_int (args, widget->request[2].height);
	}
}
Esempio n. 4
0
static void Model_load (LIScrArgs* args)
{
	int mesh = 1;
	char* file;
	const char* name;
	const char* path;
	LIMdlModel* tmpmdl;
	LIMaiProgram* program;

	program = liscr_script_get_userdata (args->script, LISCR_SCRIPT_PROGRAM);
	if (!liscr_args_geti_string (args, 0, &name) &&
	    !liscr_args_gets_string (args, "file", &name))
		return;
	if (!liscr_args_geti_bool (args, 1, &mesh))
		liscr_args_gets_bool (args, "mesh", &mesh);

	/* Find the absolute path. */
	file = lisys_string_concat (name, ".lmdl");
	if (file == NULL)
		return;
	path = lipth_paths_find_file (program->paths, file);
	if (path == NULL)
	{
		lisys_free (file);
		return;
	}
	lisys_free (file);

	/* Load the new model data. */
	tmpmdl = limdl_model_new_from_file (path, mesh);
	if (tmpmdl == NULL)
		return;

	/* Replace the old model data. */
	if (limdl_model_replace (args->self, tmpmdl))
		liscr_args_seti_bool (args, 1);
	limdl_model_free (tmpmdl);
}
Esempio n. 5
0
static void Model_add_material (LIScrArgs* args)
{
	int cull;
	float diffuse[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
	float specular[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
	const char* shader;
	LIMdlBuilder* builder;
	LIMdlMaterial material;
	LIEngModel* model;

	/* Create a model builder. */
	model = args->self;
	builder = limdl_builder_new (model->model);
	if (builder == NULL)
		return;

	/* Read material properties. */
	/* TODO: Support more. */
	limdl_material_init (&material);
	if (liscr_args_gets_bool (args, "cull", &cull) && !cull)
		material.flags &= ~LIMDL_MATERIAL_FLAG_CULLFACE;
	if (liscr_args_gets_floatv (args, "diffuse", 4, diffuse))
		limdl_material_set_diffuse (&material, diffuse);
	if (liscr_args_gets_string (args, "shader", &shader))
		limdl_material_set_shader (&material, shader);
	if (liscr_args_gets_floatv (args, "specular", 4, specular))
		limdl_material_set_specular (&material, specular);

	/* Insert the material. */
	limdl_builder_insert_material (builder, &material);
	limdl_builder_finish (builder);

	/* Cleanup. */
	limdl_builder_free (builder);
	limdl_material_free (&material);
}