コード例 #1
0
ファイル: gui.c プロジェクト: NewCreature/Dot-to-Dot-Sweep
static void allegro_render_element(T3F_GUI * pp, int i, bool hover)
{
	int sx, sy;

	if(hover)
	{
		sx = -pp->element[i].sx * 2;
		sy = -pp->element[i].sy * 2;
	}
	else
	{
		sx = -pp->element[i].sx;
		sy = -pp->element[i].sy;
	}

	switch(pp->element[i].type)
	{
		case T3F_GUI_ELEMENT_TEXT:
		{
			if(pp->element[i].flags & T3F_GUI_ELEMENT_SHADOW)
			{
				if(!(pp->element[i].flags & T3F_GUI_ELEMENT_AUTOHIDE) || t3f_gui_check_hover_y(pp, i, t3f_gui_hover_y))
				{
					if(pp->element[i].flags & T3F_GUI_ELEMENT_CENTRE)
					{
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, al_map_rgba_f(0.0, 0.0, 0.0, 0.5), pp->ox + pp->element[i].ox, pp->oy + pp->element[i].oy, ALLEGRO_ALIGN_CENTRE, (char *)pp->element[i].data);
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, pp->element[i].color, pp->ox + pp->element[i].ox + sx, pp->oy + pp->element[i].oy + sy, ALLEGRO_ALIGN_CENTRE, (char *)pp->element[i].data);
					}
					else
					{
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, al_map_rgba_f(0.0, 0.0, 0.0, 0.5), pp->ox + pp->element[i].ox, pp->oy + pp->element[i].oy, 0, (char *)pp->element[i].data);
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, pp->element[i].color, pp->ox + pp->element[i].ox + sx, pp->oy + pp->element[i].oy + sy, 0, (char *)pp->element[i].data);
					}
				}
			}
			else
			{
				if(!(pp->element[i].flags & T3F_GUI_ELEMENT_AUTOHIDE) || t3f_gui_check_hover_y(pp, i, t3f_gui_hover_y))
				{
					if(pp->element[i].flags & T3F_GUI_ELEMENT_CENTRE)
					{
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, pp->element[i].color, pp->ox + pp->element[i].ox + sx, pp->oy + pp->element[i].oy + sy, ALLEGRO_ALIGN_CENTRE, (char *)pp->element[i].data);
					}
					else
					{
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, pp->element[i].color, pp->ox + pp->element[i].ox + sx, pp->oy + pp->element[i].oy + sy, 0, (char *)pp->element[i].data);
					}
				}
			}
			break;
		}
		case T3F_GUI_ELEMENT_IMAGE:
		{
			if(pp->element[i].flags & T3F_GUI_ELEMENT_SHADOW)
			{
				if(pp->element[i].flags & T3F_GUI_ELEMENT_CENTRE)
				{
					if(pp->element[i].data)
					{
						al_draw_tinted_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), al_map_rgba_f(0.0, 0.0, 0.0, 0.5), pp->ox + pp->element[i].ox - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2, pp->oy + pp->element[i].oy - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2, 0);
						al_draw_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), pp->ox + pp->element[i].ox - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2 + sx, pp->oy + pp->element[i].oy - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2 + sy, 0);
					}
				}
				else
				{
					if(pp->element[i].data)
					{
						al_draw_tinted_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), al_map_rgba_f(0.0, 0.0, 0.0, 0.5), pp->ox + pp->element[i].ox, pp->oy + pp->element[i].oy, 0);
						al_draw_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), pp->ox + pp->element[i].ox + sx, pp->oy + pp->element[i].oy + sy, 0);
					}
				}
			}
			else
			{
				if(pp->element[i].flags & T3F_GUI_ELEMENT_CENTRE)
				{
					if(pp->element[i].data)
					{
						al_draw_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), pp->ox + pp->element[i].ox - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2 + sx, pp->oy + pp->element[i].oy - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2 + sy, 0);
					}
				}
				else
				{
					if(pp->element[i].data)
					{
						al_draw_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), pp->ox + pp->element[i].ox + sx, pp->oy + pp->element[i].oy + sy, 0);
					}
				}
			}
			break;
		}
		default:
		{
			break;
		}
	}
}
コード例 #2
0
ファイル: render.cpp プロジェクト: adahera222/yogo-grenade
void Render::theme()
{
	al_clear_to_color(al_map_rgb(0, 65, 34));
	mapbg();
	if((int)gamedata->player.aim_x > 0)
		al_draw_scaled_rotated_bitmap(bitmaps[PLAYER],
						23, 2,
						GAME_WIDTH/2, GAME_HEIGHT/2,	
						-1, 1,
						0, 0);
	if((int)gamedata->player.aim_x <= 0)
		al_draw_scaled_rotated_bitmap(bitmaps[PLAYER],
						13, 2,
						GAME_WIDTH/2, GAME_HEIGHT/2,	
						1, 1,
						0, 0);

	double angle = atan2(-gamedata->player.aim_y, gamedata->player.aim_x);

	if((int)gamedata->player.aim_x > 0)
		al_draw_scaled_rotated_bitmap(bitmaps[GUN],
				21, 19,
				GAME_WIDTH/2 + 2, GAME_HEIGHT/2 + 17,	
				-1, 1,
				-angle, 0);

	if((int)gamedata->player.aim_x <= 0)
		al_draw_scaled_rotated_bitmap(bitmaps[GUN],
				21, 19,
				GAME_WIDTH/2 + 8, GAME_HEIGHT/2 + 17,	
				1, 1,
				-angle + 3.14159, 0);


	// draw bullets
	
	for(unsigned int i = 0; i < gamedata->player.bullets.size(); i++)
	{
		al_draw_scaled_rotated_bitmap(bitmaps[BULLET],
				0, 0,
				- gamedata->player.x+GAME_WIDTH/2+gamedata->player.bullets[i].x,
				floor(-gamedata->player.y)+GAME_HEIGHT/2+gamedata->player.bullets[i].y,	
				1, 1,
				gamedata->player.bullets[i].angle + 3.14159, 0);
	} // for i

		

	// draw bunnies
	for(unsigned int i = 0; i < gamedata->bunnies.size(); i++)
		if(gamedata->bunnies[i].is_alive != false)
		{
			if(gamedata->bunnies[i].direction >= 0)
				al_draw_scaled_rotated_bitmap(bitmaps[BUNNY],
					0, 0,
					- gamedata->player.x+GAME_WIDTH/2+gamedata->bunnies[i].x-1,
					floor(-gamedata->player.y)+GAME_HEIGHT/2+gamedata->bunnies[i].y-1,
					1, 1,
					0, 0);
			else
				al_draw_scaled_rotated_bitmap(bitmaps[BUNNY],
					10, 0,
					- gamedata->player.x+GAME_WIDTH/2+gamedata->bunnies[i].x-1,
					floor(-gamedata->player.y)+GAME_HEIGHT/2+gamedata->bunnies[i].y-1,
					-1, 1,
					0, 0);
		} // if bunny alive

	if(gamedata->player.grenade->is_alive)
		al_draw_scaled_rotated_bitmap(bitmaps[GRENADE],
				4, 6,
				- gamedata->player.x+GAME_WIDTH/2+gamedata->player.grenade->x+4,
				floor(-gamedata->player.y)+GAME_HEIGHT/2+gamedata->player.grenade->y+4,
				1, 1,
				0, 0);



	//font

	sprintf(string1, "%d", gamedata->player.health);
	al_draw_text(font24, al_map_rgb(10, 10, 0), 50, 525, 0, string1);

	unsigned int tempy = gamedata->bunnies.size();
	unsigned int tempy2 = gamedata->numBunnies;
	sprintf(string1, "%d yet to feel thy wrath. %d shall commeth.",
		tempy, tempy2);
	al_draw_text(font16, al_map_rgb(10, 10, 0), 50, 25, 0, string1);

	tempy = gamedata->player.killed;
	sprintf(string1, "%d snuffed.", tempy);
	al_draw_text(font24, al_map_rgb(10, 10, 0), 75, 50, 0, string1);

	if(gamedata->player.has_grenade)
		al_draw_text(font24, al_map_rgb(10, 10, 0), 325, 525, 0,
			"You have only 1 Holy Hand Grenades.");
	else
		al_draw_text(font24, al_map_rgb(10, 10, 0), 325, 525, 0,
			"You have 0 Holy Hand Grenades.");



	// whiteout
	if(gamedata->player.grenade->is_alive)
	{
		double temp = 1.0 - gamedata->player.grenade->death_timer/300.0;
		al_draw_tinted_bitmap(bitmaps[WHITE],
			al_map_rgba_f(temp, temp, temp, 0),
		   0, 0, 0);
	}

	al_flip_display();
} // theme()
コード例 #3
0
ファイル: ex_draw_bitmap.c プロジェクト: liballeg/allegro5
static void redraw(void)
{
   int w = al_get_display_width(example.display);
   int h = al_get_display_height(example.display);
   int i;
   int f1, f2;
   int fh = al_get_font_line_height(example.font);
   char const *info[] = {"textures", "memory buffers"};
   char const *binfo[] = {"alpha", "additive", "tinted", "solid", "alpha test"};
   ALLEGRO_COLOR tint = example.white;

   if (example.blending == 0) {
      al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA);
      tint = example.half_white;
   }
   else if (example.blending == 1) {
      al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE);
      tint = example.dark;
   }
   else if (example.blending == 2) {
      al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO);
      tint = example.red;
   }
   else if (example.blending == 3) {
      al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO);
   }

   if (example.blending == 4) {
      al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA);
      al_set_render_state(ALLEGRO_ALPHA_TEST, true);
      al_set_render_state(ALLEGRO_ALPHA_FUNCTION, ALLEGRO_RENDER_GREATER);
      al_set_render_state(ALLEGRO_ALPHA_TEST_VALUE, 128);
   }
   else {
      al_set_render_state(ALLEGRO_ALPHA_TEST, false);
   }

   if (example.hold_bitmap_drawing) {
      al_hold_bitmap_drawing(true);
   }
   for (i = 0; i < example.sprite_count; i++) {
      Sprite *s = example.sprites + i;
      al_draw_tinted_bitmap(example.bitmap, tint, s->x, s->y, 0);
   }
   if (example.hold_bitmap_drawing) {
      al_hold_bitmap_drawing(false);
   }

   al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA);
   if (example.show_help) {
      int dh = fh * 3.5;
      for (i = 5; i >= 0; i--) {
         al_draw_text(example.font, example.white, 0, h - dh, 0, text[i]);
         dh += fh * 6;
      }
   }

   al_draw_textf(example.font, example.white, 0, 0, 0, "count: %d",
      example.sprite_count);
   al_draw_textf(example.font, example.white, 0, fh, 0, "size: %d",
      example.bitmap_size);
   al_draw_textf(example.font, example.white, 0, fh * 2, 0, "%s",
      info[example.use_memory_bitmaps]);
   al_draw_textf(example.font, example.white, 0, fh * 3, 0, "%s",
      binfo[example.blending]);

   get_fps(&f1, &f2);
   al_draw_textf(example.font, example.white, w, 0, ALLEGRO_ALIGN_RIGHT, "FPS: %4d +- %-4d",
      f1, f2);
   al_draw_textf(example.font, example.white, w, fh, ALLEGRO_ALIGN_RIGHT, "%4d / sec",
      (int)(1.0 / example.direct_speed_measure));
   
}
コード例 #4
0
int main(void)
{
   ALLEGRO_DISPLAY *display;
   ALLEGRO_TIMER *timer;
   ALLEGRO_EVENT_QUEUE *queue;
   ALLEGRO_BITMAP *bmp;
   ALLEGRO_BITMAP *mem_bmp;
   ALLEGRO_BITMAP *disp_bmp;
   ALLEGRO_FONT *font;
   char *text;
   bool done = false;
   bool redraw = true;

   if (!al_init()) {
      abort_example("Failed to init Allegro.\n");
      return 1;
   }

   if (!al_init_image_addon()) {
      abort_example("Failed to init IIO addon.\n");
      return 1;
   }

   al_init_font_addon();

   display = al_create_display(640, 480);
   if (!display) {
      abort_example("Error creating display.\n");
      return 1;
   }

   if (!al_install_keyboard()) {
      abort_example("Error installing keyboard.\n");
      return 1;
   }

   font = al_load_font("data/fixed_font.tga", 0, 0);
   if (!font) {
      abort_example("Error loading data/fixed_font.tga\n");
      return 1;
   }

   bmp = disp_bmp = al_load_bitmap("data/mysha.pcx");
   if (!bmp) {
      abort_example("Error loading data/mysha.pcx\n");
      return 1;
   }
   text = "Display bitmap (space to change)";

   al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
   mem_bmp = al_load_bitmap("data/mysha.pcx");
   if (!bmp) {
      abort_example("Error loading data/mysha.pcx\n");
      return 1;
   }


   timer = al_create_timer(INTERVAL);

   queue = al_create_event_queue();
   al_register_event_source(queue, al_get_keyboard_event_source());
   al_register_event_source(queue, al_get_timer_event_source(timer));
   al_register_event_source(queue, al_get_display_event_source(display));

   al_start_timer(timer);

   al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA);

   while (!done) {
      ALLEGRO_EVENT event;

      if (redraw && al_is_event_queue_empty(queue)) {
         update(bmp);
         al_clear_to_color(al_map_rgb_f(0, 0, 0));
         al_draw_tinted_bitmap(bmp, al_map_rgba_f(1, 1, 1, 0.5),
            bmp_x, bmp_y, bmp_flag);
         al_draw_text(font, al_map_rgba_f(1, 1, 1, 0.5), 0, 0, 0, text);
         al_flip_display();
         redraw = false;
      }

      al_wait_for_event(queue, &event);
      switch (event.type) {
         case ALLEGRO_EVENT_KEY_DOWN:
            if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
               done = true;
            else if (event.keyboard.keycode == ALLEGRO_KEY_SPACE) {
               if (bmp == mem_bmp) {
                  bmp = disp_bmp;
                  text = "Display bitmap (space to change)";
               }
               else {
                  bmp = mem_bmp;
                  text = "Memory bitmap (space to change)";
               }
            }
               
            break;

         case ALLEGRO_EVENT_DISPLAY_CLOSE:
            done = true;
            break;

         case ALLEGRO_EVENT_TIMER:
            redraw = true;
            break;
      }
   }

   al_destroy_bitmap(bmp);

   return 0;
}
コード例 #5
0
ファイル: Bitmap.hpp プロジェクト: arvidsson/ALX
 /**
     Draws this bitmap onto the target bitmap tinted by the given color.
     @param color color.
     @param dx target horizontal position.
     @param dy target vertical position.
     @param flags flags.
  */
 void drawTinted(const ALLEGRO_COLOR &color, float dx, float dy, int flags = 0) const {
     al_draw_tinted_bitmap(get(), color, dx, dy, flags);
 }
コード例 #6
0
static void allegro_render_element(HYPERLINK_PAGE * pp, int i, bool hover)
{
	int sx, sy;
	
	if(hover)
	{
		sx = -4;
		sy = -4;
	}
	else
	{
		sx = -2;
		sy = -2;
	}
	
	switch(pp->element[i].type)
	{
		case HYPERLINK_ELEMENT_TYPE_TEXT:
		{
			if(pp->element[i].flags & HYPERLINK_ELEMENT_FLAG_SHADOW)
			{
				if(!(pp->element[i].flags & HYPERLINK_ELEMENT_FLAG_AUTOHIDE) || hyperlink_check_hover_y(pp, i))
				{
					if(pp->element[i].flags & HYPERLINK_ELEMENT_FLAG_CENTER)
					{
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, al_map_rgba_f(0.0, 0.0, 0.0, 0.5), pp->ox + pp->element[i].ox, pp->oy + pp->element[i].oy, ALLEGRO_ALIGN_CENTRE, (char *)pp->element[i].data);
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, pp->element[i].color, pp->ox + pp->element[i].ox + sx, pp->oy + pp->element[i].oy + sy, ALLEGRO_ALIGN_CENTRE, (char *)pp->element[i].data);
					}
					else
					{
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, al_map_rgba_f(0.0, 0.0, 0.0, 0.5), pp->ox + pp->element[i].ox, pp->oy + pp->element[i].oy, 0, (char *)pp->element[i].data);
						al_draw_text((ALLEGRO_FONT *)pp->element[i].aux_data, pp->element[i].color, pp->ox + pp->element[i].ox + sx, pp->oy + pp->element[i].oy + sy, 0, (char *)pp->element[i].data);
					}
				}
			}
			else
			{
			}
			break;
		}
		case HYPERLINK_ELEMENT_TYPE_IMAGE:
		{
			if(pp->element[i].flags & HYPERLINK_ELEMENT_FLAG_SHADOW)
			{
				if(pp->element[i].flags & HYPERLINK_ELEMENT_FLAG_CENTER)
				{
					if(pp->element[i].data)
					{
						al_draw_tinted_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), al_map_rgba_f(0.0, 0.0, 0.0, 0.5), pp->ox + pp->element[i].ox - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2, pp->oy + pp->element[i].oy - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2, 0);
						al_draw_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), pp->ox + pp->element[i].ox - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2 - sx, pp->oy + pp->element[i].oy - al_get_bitmap_width(((ALLEGRO_BITMAP *)(pp->element[i].data))) / 2 - sy, 0);
					}
				}
				else
				{
					if(pp->element[i].data)
					{
						al_draw_tinted_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), al_map_rgba_f(0.0, 0.0, 0.0, 0.5), pp->ox + pp->element[i].ox, pp->oy + pp->element[i].oy, 0);
						al_draw_bitmap((ALLEGRO_BITMAP *)(pp->element[i].data), pp->ox + pp->element[i].ox - sx, pp->oy + pp->element[i].oy - sy, 0);
					}
				}
			}
			break;
		}
		default:
		{
			break;
		}
	}
}
コード例 #7
0
ファイル: PlayerCommon.cpp プロジェクト: tsanio/mbciPlayer
 void drawTintedPicture(ALLEGRO_BITMAP *img, ALLEGRO_COLOR color, float x, float y, int flags) {
     al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE); // Nice tint
         al_draw_tinted_bitmap(img, color, x, y, flags);
     al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA); // No tint for other drawing..
 }
コード例 #8
0
ファイル: allegro-raw.c プロジェクト: chrra/allegro-raw
/* {{{ Bitmap: */
void al_draw_tinted_bitmap_w(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR *tint, float dx, float dy, int flags)
{
	return al_draw_tinted_bitmap(bitmap, *tint, dx, dy, flags);
}