Пример #1
0
void *op_slider(t_brick *brick)
{
	void *data = brick->plug_intern.data;
	t_data_type type = brick->plug_intern.data_type;
	switch( brick->state_pressed)
	{
		case BRICK_LEFT:
			switch( type)
			{
				case dt_int: 	set_int( data, drf_int( data) - 1); break;
				case dt_float:	set_float( data, drf_float( data) - .1); break;
				default: break;
			}
			break;

		case BRICK_RIGHT:
			switch( type)
			{
				case dt_int: 	set_int( data, drf_int( data) + 1); break;
				case dt_float:	set_float( data, drf_float( data) + .1); break;
				default: break;
			}
			break;
		default:
			break;

	}
	return NULL;
}
Пример #2
0
void __cls_plug_flow_trigger(t_plug_mode mode,t_plug *plug,t_plug *src_plug)
{
	if(src_plug)
	{
	t_brick *brick=plug->brick;

	if(src_plug)
	{
		t_data_type src_type=src_plug->data_type;

		int data;

		switch(src_type)
		{
			case(dt_int):

				data=drf_int(src_plug->data);
				if(data == 1)
					brick->action(brick);
				break;
				
			default:
				plug_warning(plug,src_plug);
				break;
		}
	}
	}
}
Пример #3
0
void __cls_plug_flow_int(t_plug_mode mode,t_plug *plug,t_plug *src_plug)
{
	if(src_plug)
	{
		t_data_type src_type=src_plug->data_type;

		int *data=plug->data;

		float increment=plug->brick->var.increment;

		switch(src_type)
		{
			case dt_int:

				*data=drf_int(src_plug->data);
				break;

			case dt_float:

				*data=(int)drf_float(src_plug->data);
				break;
			case dt_lst:
				break;

			default:
				plug_warning(plug,src_plug);
				break;
		}

		if(increment) *data=*data * increment;  
	}
}
Пример #4
0
Файл: vlst.c Проект: rvba/minuit
void vlst_float_add(t_vlst *vlst,t_data_type type,void *data)
{
	int count=vlst->count;
	int length=vlst->length; 
	int i,j;

	float *data_dst=vlst->data;

	for(i=0;i<count;i++)
	{
		for(j=0;j<length;j++)
		{
			switch(type)
			{
				case(dt_int): *data_dst += (float)drf_int(data); break;
				case(dt_float): *data_dst += drf_float(data); break;
				default:printf("? ? !!\n");
			}

			data_dst++;
		}
	}
}
Пример #5
0
void __cls_plug_flow_operator_get(t_plug_mode mode,t_plug *plug,t_plug *plug_src)
{
	t_brick *brick = plug->brick;

	t_block *block = brick->block;

	t_brick *brick_indice = block_brick_get(block,"indice");
	t_brick *brick_result = block_brick_get(block,"result");

	t_plug *plug_result = &brick_result->plug_intern;
	t_plug *plug_indice = &brick_indice->plug_intern;

	t_lst *lst;
	t_vlst *vlst;

	// IN
	if(plug_src && mode == mode_in)
	{
		switch(plug_src->data_type)
		{
			// + LST
			case (dt_lst):
				
				// get lst
				lst = plug_src->data;

				// if lst
				if(lst)
				{
					if(!lst->current)
					{
						// set first
						if(lst->first)
						{
							lst->current = lst->first;
						}
					}
					else
					{
						t_link *link = lst->current;

						if(link->next)
						{
							lst->current = link->next;
						}
						else
						{
							//
						}

						//XXX change type

						plug_result->data_type=dt_camera;
						t_camera *camera=link->data;
						plug_result->data=camera;

					}
				}

				break;

			// +VLST

			case(dt_vlst):
				
				// get vlst
				vlst = plug_src->data;

				if(vlst)
				{
					t_plug _plug;
					_plug.data_type = dt_vector;

					// change type to vector
					if(brick_result->plug_intern.data_type != dt_vector)
						brick_type_change(brick_result,&_plug);

					// get indice
					int i = drf_int(plug_indice->data);

					// if < indice
					if(i < vlst->count)
					{
						t_vector *vector = plug_result->data;

						// get pointer
						float *ptr = vlst->data;
						// do pointer arithmetic
						vector->data = ptr + (vlst->length * i);

					}
					else
					{
						t_vector *vector = plug_result->data;
						set_int(plug_indice->data,vlst->count-1);
						float *ptr = vlst->data;
						vector->data = ptr + (vlst->length * (vlst->count-1));
					}

					t_plug *plug_result_out = &brick_result->plug_out;

					//XXX
					// open vector
					if(plug_result_out->is_connected)
					{
						t_plug *plug_vector = plug_get_dst(plug_result);

						if(plug_vector->data_type == dt_vector)
						{
							t_brick *brick_vector = plug_vector->brick;
							t_plug *plug_vector_in = &brick_vector->plug_in;

							// FLOW IN
							plug_vector_in->flow_in=1;

							t_block *block_vector = brick_vector->block;

							t_brick *brick_x = block_brick_get(block_vector,"x");
							t_brick *brick_y = block_brick_get(block_vector,"y");
							t_brick *brick_z = block_brick_get(block_vector,"z");

							brick_x->state.draw_value=1;
							brick_y->state.draw_value=1;
							brick_z->state.draw_value=1;

							brick_x->action = op_slider;
							brick_y->action = op_slider;
							brick_z->action = op_slider;
						}
					}
				}

				break;
				

			default:
				printf(">> %s\n",data_name_get(plug_src->data_type));
				break;
		}
	}
}