Exemplo n.º 1
0
static void reset_edge_overlay()
{
    if (smbuf != NULL)
    {
        free(smbuf);
        smbuf = NULL;
    }

    if (edgebuf != NULL)
    {
        draw_restore();     // Refresh display to restore Canon OSD
        bv_free(edgebuf);
        edgebuf = NULL;
    }

    fsm_state = EDGE_LIVE;
    slice = 0;
}
static void key_assigner_draw(
	void* d, 
	mFloat x, 
	mFloat y, 
	mFloat w, 
	mFloat h,
	mFloat delta)
{
	#define DELTA_X 5
	#define DELTA_Y 5
	#define GRAY    0.5	

	key_assigner_t* key = (key_assigner_t*)d;
	wchar_t buffer[MAX_BUFFER];
	drawState state;
	mFloat dy;
	int i;
	mFloat sy = y;

	(void)h;
	(void)delta;

	x += DELTA_X;
	y += 2 * DELTA_Y;
	
	draw_color_rgb(GRAY, GRAY, GRAY);
	
	swprintf(
		buffer,
		MAX_BUFFER,
		WC_FORMAT,
		key_assign.translated);

	dy = print_message(buffer, x, &y);
	y += dy;

	if(key->assigned == NOT_READY)
	{
		draw_color_rgb(GRAY, GRAY, GRAY);
		
		swprintf(
			buffer,
			MAX_BUFFER,
			WC_FORMAT,
			no_player.translated);

		dy = print_message(buffer, x, &y);
		y += dy;

		draw_save(&state);
		draw_color_rgb(GRAY, GRAY, GRAY);
		
		draw_translate(10, y - sy);
		draw_rectangle((unsigned int)((w - 20) * key->timer / ACTIVATION_TIME), 5);
		
		draw_restore(&state);

		key->selection = 0;
		
		return;
	}

	draw_color_rgb(GRAY, GRAY, GRAY);
	
	swprintf(
		buffer, 
		MAX_BUFFER, 
		WC_FORMAT L":", 
		player_tr.translated);
	
	print_message(buffer, x, &y);

	swprintf(
		buffer, 
		MAX_BUFFER, 
		L"P%d", 
		key->player_nb);
	
	dy = print_message(buffer, x + DELTA_X, &y);
	y += dy;
	
	swprintf(
		buffer, 
		MAX_BUFFER, 
		WC_FORMAT L":", 
		input.translated);
	
	print_message(buffer, x, &y);
	
	if(key->type == KEYBOARD)
	{
		swprintf(
			buffer, 
			MAX_BUFFER, 
			WC_FORMAT, 
			keyboard_tr.translated);
	}
	else if(key->type == MOUSE)
	{
		swprintf(
			buffer, 
			MAX_BUFFER, 
			WC_FORMAT, 
			mouse_tr.translated);
	}
	else
	{
		swprintf(
			buffer, 
			MAX_BUFFER, 
			WC_FORMAT, 
			joystick_tr.translated);
	}

	dy = print_message(buffer, x + DELTA_X, &y);
	y += dy;

	for(i = 0 ; i < KEY_NB ; i++)
	{
		const wchar_t* msgs[] =
		{
			jump.translated ,
			left.translated ,
			use.translated  ,
			right.translated,
		};

		if(key->selection == i)
			draw_color_rgb(1.0, 1.0, 1.0);
		else
			draw_color_rgb(GRAY, GRAY, GRAY);
	
		if(key->type != MOUSE)
		{
			swprintf(
				buffer, 
				MAX_BUFFER, 
				WC_FORMAT L": %d", 
				msgs[i], 
				player_array[key->player_nb].input.key[i]);
		}
		else
		{
			swprintf(
				buffer, 
				MAX_BUFFER, 
				WC_FORMAT L": N/A", 
				msgs[i]);
		}

		dy = print_message(buffer, x, &y);
	}

	y += dy;

	if(key->assigned == CHOOSE)
	{
		int j;
		int lower, upper;
	
		draw_color_rgb(GRAY, GRAY, GRAY);
		
		swprintf(
			buffer, 
			MAX_BUFFER, 
			WC_FORMAT, 
			choose_tr.translated);
		
		print_message(buffer, x, &y);
		y += dy;

		lower = (int)(key->selected_character - MODELS_TO_SHOW / 2);
		upper = (int)(key->selected_character + MODELS_TO_SHOW / 2);

		if(model_nb_filenames > 0)
		{
			for(j = lower; j <= upper; j++)
			{
				if(j < 0 || j >= (int)model_nb_filenames)
					y += dy; // Don't print anything.
				else
				{
					if(j == (int)key->selected_character)
						draw_color_rgb(1.0, 1.0, 1.0);
					else
						draw_color_rgb(GRAY, GRAY, GRAY);

					swprintf(
						buffer, 
						MAX_BUFFER, 
						MB_FORMAT, 
						model_filenames[j]);

					print_message(buffer, x, &y);
				}
			}
		
			y += dy;
		
			swprintf(
				buffer, 
				MAX_BUFFER, 
				WC_FORMAT, 
				accept_tr.translated);
		
			draw_color_rgb(GRAY, GRAY, GRAY);
			print_message(buffer, x, &y);
		
			y += dy;
	
			draw_save(&state);
			draw_color_rgb(GRAY, GRAY, GRAY);
		
			draw_translate(10, y - sy);
			draw_rectangle((unsigned int)((w - 20) * key->timer_ready / ACTIVATION_TIME), 5);
		
			draw_restore(&state);
		
			y += dy;
		}
		else
		{
			swprintf(
				buffer, 
				MAX_BUFFER, 
				WC_FORMAT, 
				no_model_tr.translated);

			print_message(buffer, x, &y);
			y += dy * MODELS_TO_SHOW;
		}
		
		swprintf(
			buffer, 
			MAX_BUFFER, 
			WC_FORMAT, 
			unassign.translated);
		
		print_message(buffer, x, &y);
		
		y += dy;
		
		draw_save(&state);
		draw_color_rgb(GRAY, GRAY, GRAY);
		
		draw_translate(10, y - sy);
		draw_rectangle((unsigned int)((w - 20) * key->timer_unassign / ACTIVATION_TIME), 5);
		
		draw_restore(&state);
	}
	else if(key->assigned == READY)
	{
		oBody* body;
		loaded_texture_t** textures; 
		
		draw_color_rgb(1.0, 1.0, 1.0);
		
		swprintf(
			buffer, 
			MAX_BUFFER, 
			WC_FORMAT, 
			unassign.translated);

		print_message(buffer, x, &y);
		y += dy;

		draw_save(&state);
		draw_color_rgb(GRAY, GRAY, GRAY);
		
		draw_translate(10, y - sy);
		draw_rectangle((unsigned int)((w - 20) * key->timer_unassign / ACTIVATION_TIME), 5);
		
		draw_restore(&state);
	
		body = player_array[key->player_nb].model->model->body;
		
		textures = (loaded_texture_t**)oBodyGetData(
			body,
			"Walk",
			&key->nb_frames,
			&key->frame_time);

		// Make sure 'frame_nb' is in the right range.
		key->frame_nb %= key->nb_frames;
		
		draw_save(&state);

		draw_translate(
			(w - textures[key->frame_nb]->texture.width) / 2, 
			y - window_border_y / window_zoom);

		draw_texture(textures[key->frame_nb]);
		
		draw_restore(&state);
	}
}