예제 #1
0
/** Applies a rotation transformation to the current transformation. */
void cbeTransformRotate(CBEnchanted *cb) {
	float angle = (cb->popValue().toFloat() / 180.0f) * M_PI;

	ALLEGRO_TRANSFORM t;
	al_identity_transform(&t);
	al_rotate_transform(&t, angle);
	al_use_transform(&t);
	cb->pushValue(0);
}
예제 #2
0
void m_draw_tinted_bitmap_identity_view(MBITMAP *bmp, MCOLOR tint, int x, int y, int flags)
{
	ALLEGRO_TRANSFORM backup, t;
	al_copy_transform(&backup, al_get_current_transform());
	al_identity_transform(&t);
	al_use_transform(&t);
	m_draw_tinted_bitmap(bmp, tint, x, y, flags);
	al_use_transform(&backup);
}
예제 #3
0
void mapper_replace_tiles(ALLEGRO_BITMAP * bp)
{
	int i, j;
	T3F_ANIMATION * ap = NULL;
	ALLEGRO_BITMAP * newbp = NULL;
	ALLEGRO_STATE old_state;
	ALLEGRO_TRANSFORM identity;
	int current_tile = mapper_current_tile;

	al_store_state(&old_state, ALLEGRO_STATE_TARGET_BITMAP | ALLEGRO_STATE_BLENDER | ALLEGRO_STATE_TRANSFORM);
	al_identity_transform(&identity);
	al_use_transform(&identity);
	for(i = 0; i < al_get_bitmap_height(bp) / mapper_tile_height; i++)
	{
		for(j = 0; j < al_get_bitmap_width(bp) / mapper_tile_width; j++)
		{
			if(current_tile < mapper_tileset->tiles)
			{
				ap = t3f_create_animation();
				if(ap)
				{
					newbp = al_create_bitmap(mapper_tile_width, mapper_tile_height);
					if(newbp)
					{
						al_set_target_bitmap(newbp);
						al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO);
						al_draw_bitmap(bp, -j * mapper_tile_width, -i * mapper_tile_height, 0);
						t3f_animation_add_bitmap(ap, newbp);
						t3f_animation_add_frame(ap, 0, 0, 0, 0, mapper_tile_width, mapper_tile_height, 0, 1, 0);
						t3f_destroy_animation(mapper_tileset->tile[current_tile]->ap);
						mapper_tileset->tile[current_tile]->ap = ap;
					}
				}
				current_tile++;
			}
			else
			{
				ap = t3f_create_animation();
				if(ap)
				{
					newbp = al_create_bitmap(mapper_tile_width, mapper_tile_height);
					if(newbp)
					{
						al_set_target_bitmap(newbp);
						al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO);
						al_draw_bitmap(bp, -j * mapper_tile_width, -i * mapper_tile_height, 0);
						t3f_animation_add_bitmap(ap, newbp);
						t3f_animation_add_frame(ap, 0, 0, 0, 0, mapper_tile_width, mapper_tile_height, 0, 1, 0);
						t3f_add_tile(mapper_tileset, ap);
					}
				}
			}
		}
	}
	al_restore_state(&old_state);
}
예제 #4
0
/* Function: al_create_sub_bitmap
 */
ALLEGRO_BITMAP *al_create_sub_bitmap(ALLEGRO_BITMAP *parent,
   int x, int y, int w, int h)
{
   ALLEGRO_BITMAP *bitmap;

   if (parent->parent) {
      x += parent->xofs;
      y += parent->yofs;
      parent = parent->parent;
   }
   
   bitmap = al_calloc(1, sizeof *bitmap);
   bitmap->vt = parent->vt;

   /* Sub-bitmap inherits these from the parent.
    * Leave these unchanged so they can be detected if improperly accessed
    * directly. */
   bitmap->_format = 0;
   bitmap->_flags = 0;
   bitmap->_display = (ALLEGRO_DISPLAY*)0x1;

   bitmap->w = w;
   bitmap->h = h;
   bitmap->locked = false;
   bitmap->cl = bitmap->ct = 0;
   bitmap->cr_excl = w;
   bitmap->cb_excl = h;
   al_identity_transform(&bitmap->transform);
   al_identity_transform(&bitmap->inverse_transform);
   bitmap->inverse_transform_dirty = false;
   al_identity_transform(&bitmap->proj_transform);
   al_orthographic_transform(&bitmap->proj_transform, 0, 0, -1.0, w, h, 1.0);
   bitmap->shader = NULL;
   bitmap->parent = parent;
   bitmap->xofs = x;
   bitmap->yofs = y;
   bitmap->memory = NULL;

   _al_register_destructor(_al_dtor_list, "sub_bitmap", bitmap,
      (void (*)(void *))al_destroy_bitmap);

   return bitmap;
}
예제 #5
0
	void reverse_position_transform(ALLEGRO_TRANSFORM *t)
	{
		// note: this is EXACTLY the same as position transform, except the
		// order of transformations is reversed, and the values are negated
		al_identity_transform(t);

		al_rotate_transform_3d(t, 0, 1, 0, spin);
		al_rotate_transform_3d(t, 1, 0, 0, tilt);
		al_translate_transform_3d(t, -stepout.x, -stepout.y, -stepout.z);
	}
예제 #6
0
/** Applies a translate transformation to the current transformation. */
void cbeTransformTranslate(CBEnchanted *cb) {
	float transY = cb->popValue().toFloat();
	float transX = cb->popValue().toFloat();

	ALLEGRO_TRANSFORM t;
	al_identity_transform(&t);
	al_translate_transform(&t, transX, transY);
	al_use_transform(&t);
	cb->pushValue(0);
}
예제 #7
0
/** Applies a scale transformation to the current transformation. */
void cbeTransformScale(CBEnchanted *cb) {
	float scaleY = cb->popValue().toFloat();
	float scaleX = cb->popValue().toFloat();

	ALLEGRO_TRANSFORM t;
	al_identity_transform(&t);
	al_scale_transform(&t, scaleX, scaleY);
	al_use_transform(&t);
	cb->pushValue(0);
}
예제 #8
0
  void draw(vec3d camera_position, vec3d light_position)
  {
		ALLEGRO_STATE previous_state;
		ALLEGRO_TRANSFORM transform;

		
		if (shader && shader_applies_transform)
		{
			// construct our entity's transform
			place.build_transform(&transform);

			// Now apply it to the shader
			shader->use();
			Shader::set_vec3("camera_position", camera_position);
			Shader::set_vec3("light_position", light_position);
			Shader::set_mat4("position_transform", &transform);

			Shader::set_bool("reflecting", cube_map_reflecting);

			Shader::set_sampler("diffuse_texture", diffuse_texture, 2);
			Shader::set_sampler("specular_texture", specular_texture, 3);
			Shader::set_sampler("normal_texture", normal_texture, 4);
			Shader::set_sampler_cube("cube_map_A", cube_map_A, 5);
			Shader::set_sampler_cube("cube_map_B", cube_map_B, 6);
		}
		else
		{
			// when not using the shader, we'll need to 
			// apply the transform directly here
			al_store_state(&previous_state, ALLEGRO_STATE_TRANSFORM);
			al_identity_transform(&transform);
			al_use_transform(&transform);
			place.start_transform();

			// also, we set the texture on this model directly
			if (diffuse_texture) model->set_texture(diffuse_texture);
		}



		// actually draw our model here
		if (model) model->draw();



		if (shader && shader_applies_transform)
		{
			Shader::stop();
		}
		else
		{
			place.restore_transform();
			al_restore_state(&previous_state);
		}
  }
void mw2_Rect::Draw(mw2_Camera* camera)
{
	float x = WorldPosition()->x - camera->WorldPosition()->x;
	float y = WorldPosition()->y - camera->WorldPosition()->y;
	float teta = - camera->WorldRotation() * (float) PI / 180;

	float finalAngle = WorldRotation() - camera->WorldRotation();
	float finalX = (x * (float) cos(teta) - y * (float) sin(teta))
					+ mw2_Application::Settings::width / 2;
	float finalY = (x * (float) sin(teta) + y * (float) cos(teta))
					+ mw2_Application::Settings::height / 2;

	ALLEGRO_TRANSFORM T;
	al_identity_transform(&T);
	al_rotate_transform(&T, finalAngle * (float) PI / 180);
	al_translate_transform(&T, finalX, finalY);
	al_use_transform(&T);

	ALLEGRO_COLOR color = al_map_rgba(mColor->x, mColor->y, mColor->z, mColor->t);

	switch (mStyle)
	{
		case FILL:
			al_draw_filled_rectangle(
				- mSize->x /2, - mSize->y /2,
				mSize->x /2, mSize->y /2,
				color
			);
			break;
		case LINE:
			al_draw_rectangle(
				- mSize->x /2, - mSize->y /2,
				mSize->x /2, mSize->y /2,
				color,
				1
			);
			break;
	}

	al_identity_transform(&T);
	al_use_transform(&T);
}
예제 #10
0
/* set up a transformation such that anything drawn will be as if its 'z'
 * coordinate was at the specified 'z' */
void t3f_3d_transform_z(float z)
{
	float scale = t3f_3d_project_x(1.0, z) - t3f_3d_project_x(0.0, z);
	float offset_x = t3f_3d_project_x(0.0, z);
	float offset_y = t3f_3d_project_y(0.0, z);
	al_identity_transform(&t3f_3d_transform);
	al_scale_transform(&t3f_3d_transform, scale, scale);
	al_translate_transform(&t3f_3d_transform, offset_x, offset_y);
//	al_transform_transform(&t3f_3d_transform, &t3f_current_transform);
	al_use_transform(&t3f_3d_transform);
}
예제 #11
0
void spaceship_draw(Spaceship *s) {
  ALLEGRO_TRANSFORM transform;
  if(s->gone == DEAD) return;
  al_identity_transform(&transform);
  al_rotate_transform(&transform, DEGREES(s->heading));
  al_translate_transform(&transform, s->sx, s->sy);
  al_use_transform(&transform);
  al_draw_line(-8, 9, 0, -11, s->color, 3.0f);
  al_draw_line(0, -11, 8, 9, s->color, 3.0f);
  al_draw_line(-6, 4, -1, 4, s->color, 3.0f);
  al_draw_line(6, 4, 1, 4, s->color, 3.0f);
}
예제 #12
0
파일: game.c 프로젝트: sergot/asteroids
void draw_shoots(game *g) {
    ALLEGRO_TRANSFORM trans;
    al_identity_transform(&trans);
    al_use_transform(&trans);
    
    shoot *pt;
    pt = first_s;
    while(pt != NULL) {
        al_draw_pixel(pt->position->x, pt->position->y, SHOOT_COLOR);
        pt = pt->next;
    }
}
예제 #13
0
int main(void)
{
	al_init();

	ALLEGRO_DISPLAY *d = al_create_display(W, H);

	ALLEGRO_VERTEX v[POINTS];
	ALLEGRO_COLOR c;

	v[0].x = 0;
	v[0].y = 0;
	c = al_map_rgb(rand()%256, rand()%256, rand()%256);
	v[0].color = al_get_prim_color(c);
	v[1].x = 0+R;
	v[1].y = 0;
	c = al_map_rgb(rand()%256, rand()%256, rand()%256);
	v[1].color = al_get_prim_color(c);

	float a = 0;
	float r = R;
	int i;

	for (i = 2; i < POINTS; i++) {
		v[i].x = 0+cos(a)*r;
		v[i].y = 0+sin(a)*r;
		a += 0.3f;
		r -= 1.5f;
		c = al_map_rgb(rand()%256, rand()%256, rand()%256);
		v[i].color = al_get_prim_color(c);
	}

	int frames = 0;
	ALLEGRO_TRANSFORM t;

	while (true) {
		al_clear_to_color(al_map_rgb(0, 0, 0));
		al_identity_transform(&t);
		al_rotate_transform(&t, frames*0.1f);
		al_translate_transform(&t, W/2, H/2);
		al_use_transform(&t);
		al_draw_prim(v, NULL, 0, POINTS, ALLEGRO_PRIM_TRIANGLE_FAN);
		al_flip_display();
		/* GP2X Wiz is locked to 60FPS using OpenGL */
		frames++;
		if (frames > 400)
			break;
	}

	al_uninstall_system();

	return 0;
}
예제 #14
0
/** Applies a scale, rotate and translate transformation to all future drawing operations. */
void cbeTransformBuild(CBEnchanted *cb) {
	float angle = (cb->popValue().toFloat() / 180.0f) * M_PI;
	float scaleY = cb->popValue().toFloat();
	float scaleX = cb->popValue().toFloat();
	float transY = cb->popValue().toFloat();
	float transX = cb->popValue().toFloat();

	ALLEGRO_TRANSFORM t;
	al_identity_transform(&t);
	al_build_transform(&t, transX, transY, scaleX, scaleY, angle);
	al_use_transform(&t);
	cb->pushValue(0);
}
예제 #15
0
파일: spaceship.c 프로젝트: ooonak/cmess
/* Draw ship */
void draw_ship(Spaceship *s)
{
  ALLEGRO_TRANSFORM transform;
  al_identity_transform(&transform);
  al_rotate_transform(&transform, 0);
  al_rotate_transform(&transform, (s->heading * (M_PI/180)));
  al_translate_transform(&transform, s->sx, s->sy);
  al_use_transform(&transform);
  al_draw_line(-8, 9, 0, -11, s->color, 3.0f);
  al_draw_line(0, -11, 8, 9, s->color, 3.0f);
  al_draw_line(-6, 4, -1, 4, s->color, 3.0f);
  al_draw_line(6, 4, 1, 4, s->color, 3.0f);
}
예제 #16
0
파일: memblit.c 프로젝트: MrStamina/project
static void _al_draw_transformed_scaled_bitmap_memory(
    ALLEGRO_BITMAP *src, ALLEGRO_COLOR tint,
    int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, int flags)
{
    ALLEGRO_TRANSFORM local_trans;

    al_identity_transform(&local_trans);
    al_translate_transform(&local_trans, dx, dy);
    al_compose_transform(&local_trans, al_get_current_transform());

    _al_draw_transformed_bitmap_memory(src, tint, sx, sy, sw, sh, dw, dh,
                                       &local_trans, flags);
}
예제 #17
0
/* Function: al_store_state
 */
void al_store_state(ALLEGRO_STATE *state, int flags)
{
   thread_local_state *tls;
   INTERNAL_STATE *stored;

   if ((tls = tls_get()) == NULL)
      return;

   stored = (void *)state;
   stored->flags = flags;

   if (flags & ALLEGRO_STATE_NEW_DISPLAY_PARAMETERS) {
      _STORE(new_display_flags);
      _STORE(new_display_refresh_rate);
      _STORE(new_display_adapter);
      _STORE(new_window_x);
      _STORE(new_window_y);
      _STORE(new_display_settings);
   }
   
   if (flags & ALLEGRO_STATE_NEW_BITMAP_PARAMETERS) {
      _STORE(new_bitmap_format);
      _STORE(new_bitmap_flags);
   }
   
   if (flags & ALLEGRO_STATE_DISPLAY) {
      _STORE(current_display);
   }

   if (flags & ALLEGRO_STATE_TARGET_BITMAP) {
      _STORE(target_bitmap);
   }

   if (flags & ALLEGRO_STATE_BLENDER) {
      stored->stored_blender = tls->current_blender;
   }

   if (flags & ALLEGRO_STATE_NEW_FILE_INTERFACE) {
      _STORE(new_file_interface);
      _STORE(fs_interface);
   }
   
   if (flags & ALLEGRO_STATE_TRANSFORM) {
      ALLEGRO_BITMAP *target = al_get_target_bitmap();
      if (!target)
         al_identity_transform(&stored->stored_transform);
      else
         stored->stored_transform = target->transform;
   }
}
예제 #18
0
파일: game.c 프로젝트: sergot/asteroids
void draw_menu(game *g) {
    ALLEGRO_TRANSFORM trans;
    al_identity_transform(&trans);
    al_use_transform(&trans);
    
    int x, y;
    x = (g->Size->x - 60) / 2;
    y = 0;
    al_draw_text(ttf_font, al_map_rgb(200, 200, 200), x, y, ALLEGRO_ALIGN_LEFT, "MENU");
    
    
    char *msg;
    
    if(g->status == Win || g->status == Lose) {
        x = (g->Size->x - 250) / 2;
        y = 50;
        msg = g->status == Win ? "YOU WON!! GAME OVER" : "YOU LOST. GAME OVER";
        al_draw_text(ttf_font, al_map_rgb(200, 200, 200), x, y, ALLEGRO_ALIGN_LEFT, msg);
    }
    
    msg = "'c' to configure";
    x = (g->Size->x - 640+100) / 2;
    y = (g->Size->y + 5) / 2;
    al_draw_text(ttf_font, al_map_rgb(200, 200, 200), x, y,
                 ALLEGRO_ALIGN_LEFT, msg);
    
    msg = "Enter to play";
    x = (g->Size->x - 640+100) / 2;
    y = (g->Size->y + 50) / 2;
    al_draw_text(ttf_font, al_map_rgb(200, 200, 200), x, y,
                 ALLEGRO_ALIGN_LEFT, msg);
    
    msg = "Escape to exit";
    x = (g->Size->x - 640+100) / 2;
    y = (g->Size->y + 100) / 2;
    al_draw_text(ttf_font, al_map_rgb(200, 200, 200), x, y,
                 ALLEGRO_ALIGN_LEFT, msg);
    
    msg = "Use the arrow keys to move and space to shoot";
    y = g->Size->y - 130;
    x = (g->Size->x - 640+100)/2;
    al_draw_text(ttf_font, al_map_rgb(200, 200, 200), x, y,
                 ALLEGRO_ALIGN_LEFT, msg);
    
    msg = "If your ship is bold, you cannot be destroyed";
    y = g->Size->y - 80;
    x = (g->Size->x - 640+100)/2;
    al_draw_text(ttf_font, al_map_rgb(200, 200, 200), x, y,
                 ALLEGRO_ALIGN_LEFT, msg);
}
예제 #19
0
void prepareForScreenGrab1()
{
	prepareForScreenGrabBackupBitmap = al_get_target_bitmap();
	int dx, dy, dw, dh;
	get_screen_offset_size(&dx, &dy, &dw, &dh);
	m_set_target_bitmap(tmpbuffer);
	ALLEGRO_TRANSFORM t;
	al_copy_transform(&prepareForScreenGrabBackup, al_get_current_transform());
	al_identity_transform(&t);
	al_scale_transform(&t, screenScaleX, screenScaleY);
	al_translate_transform(&t, dx, dy);
	al_use_transform(&t);
	preparingForScreenGrab = true;
}
예제 #20
0
void RenderTarget::useWorldCoords(bool t) {
	if (t != worldCoordsEnabled || pixelPreciseWorldCoordsEnabled) {
		setAsCurrent();
		if (t) {
			al_use_transform(CBEnchanted::instance()->cameraInterface->getWorldTransform());
		}
		else {
			ALLEGRO_TRANSFORM t;
			al_identity_transform(&t);
			al_use_transform(&t);
		}
		worldCoordsEnabled = t;
		pixelPreciseWorldCoordsEnabled = false;
	}
}
예제 #21
0
파일: game.c 프로젝트: sergot/asteroids
void draw_ship(game *game) {
    ALLEGRO_TRANSFORM trans;
    al_identity_transform(&trans);
    al_rotate_transform(&trans, game->Ship->angle);
    al_translate_transform(&trans,
                           (int)game->Ship->position->x,
                           (int)game->Ship->position->y);
    al_use_transform(&trans);
    
    float w = game->Ship->time >= 0 ? 1 : 4;
    
    al_draw_line(-8, 20, 0, 0, SHIP_COLOR, w);
    al_draw_line(8, 20, 0, 0, SHIP_COLOR, w);
    al_draw_line(-6, 15, -1, 15, SHIP_COLOR, w);
    al_draw_line(6, 15, 1, 15, SHIP_COLOR, w);
}
예제 #22
0
   void draw_scene()
   {
      // setup the render settings
      al_set_render_state(ALLEGRO_DEPTH_TEST, 1);
      al_set_render_state(ALLEGRO_WRITE_MASK, ALLEGRO_MASK_DEPTH | ALLEGRO_MASK_RGBA);
      al_clear_depth_buffer(1);

      ALLEGRO_TRANSFORM t;
      Entity3D *camera = static_cast<Entity3D *>(scene_root.find_first("name", "camera"));
      if (camera) camera->place.build_reverse_transform(&t);
      else al_identity_transform(&t);
      set_projection(backbuffer_sub_bitmap, &t);

      // draw our scene
      scene_root._draw();
   }
예제 #23
0
void start_text()
{
	if (!text_draw_on) {
		text_draw_on = true;
		int dx, dy, dw, dh;
		get_screen_offset_size(&dx, &dy, &dw, &dh);
		al_copy_transform(&old_view, al_get_current_transform());
		ALLEGRO_TRANSFORM v;
		al_identity_transform(&v);
		al_scale_transform(&v, textScaleX, textScaleY);
		if (al_get_bitmap_width(al_get_target_bitmap()) == al_get_display_width(display) && al_get_bitmap_height(al_get_target_bitmap()) == al_get_display_height(display)) {
			al_translate_transform(&v, dx, dy);
		}
		al_use_transform(&v);
	}
}
예제 #24
0
/* Function: al_create_sub_bitmap
 */
ALLEGRO_BITMAP *al_create_sub_bitmap(ALLEGRO_BITMAP *parent,
   int x, int y, int w, int h)
{
   ALLEGRO_BITMAP *bitmap;

   if (parent->parent) {
      x += parent->xofs;
      y += parent->yofs;
      parent = parent->parent;
   }

   if (parent->display && parent->display->vt &&
         parent->display->vt->create_sub_bitmap)
   {
      bitmap = parent->display->vt->create_sub_bitmap(
         parent->display, parent, x, y, w, h);
   }
   else {
      bitmap = al_calloc(1, sizeof *bitmap);
      bitmap->size = sizeof *bitmap;
      bitmap->vt = parent->vt;
   }

   bitmap->format = parent->format;
   bitmap->flags = parent->flags;

   bitmap->w = w;
   bitmap->h = h;
   bitmap->display = parent->display;
   bitmap->locked = false;
   bitmap->cl = bitmap->ct = 0;
   bitmap->cr_excl = w;
   bitmap->cb_excl = h;
   al_identity_transform(&bitmap->transform);
   bitmap->parent = parent;
   bitmap->xofs = x;
   bitmap->yofs = y;
   bitmap->memory = NULL;

   if (bitmap->display) {
      ALLEGRO_BITMAP **back;
      back = _al_vector_alloc_back(&bitmap->display->bitmaps);
      *back = bitmap;
   }

   return bitmap;
}
예제 #25
0
void m_draw_tinted_scaled_bitmap_identity_view(
	MBITMAP *bmp, MCOLOR tint, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, int flags
)
{
	ALLEGRO_TRANSFORM backup, t;
	al_copy_transform(&backup, al_get_current_transform());
	al_identity_transform(&t);
	al_use_transform(&t);
	al_draw_tinted_scaled_bitmap(
		bmp->bitmap,
		tint,
		sx, sy, sw, sh,
		dx, dy, dw, dh,
		0
	);
	al_use_transform(&backup);
}
예제 #26
0
static void dot_game_create_score_effect(void * data, float x, float y, int number)
{
	APP_INSTANCE * app = (APP_INSTANCE *)data;
	ALLEGRO_STATE old_state;
	ALLEGRO_TRANSFORM identity;
	char buf[16] = {0};
	int i, j;
	ALLEGRO_COLOR c;
	unsigned char r, g, b, a;
	float ox;
	float w, h;

	al_store_state(&old_state, ALLEGRO_STATE_TARGET_BITMAP | ALLEGRO_STATE_TRANSFORM);
	al_set_target_bitmap(app->bitmap[DOT_BITMAP_SCRATCH]);
	al_identity_transform(&identity);
	al_use_transform(&identity);
	al_clear_to_color(al_map_rgba_f(0.0, 0.0, 0.0, 0.0));
	sprintf(buf, "%d", number);
	al_set_clipping_rectangle(0, 0, 512, 512);
	al_draw_text(app->font[DOT_FONT_16], t3f_color_white, 0, 0, 0, buf);
	t3f_set_clipping_rectangle(0, 0, 0, 0);
	al_restore_state(&old_state);
	al_lock_bitmap(app->bitmap[DOT_BITMAP_SCRATCH], ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READONLY);
	ox = al_get_text_width(app->font[DOT_FONT_16], buf) / 2;
	w = al_get_text_width(app->font[DOT_FONT_16], buf);
	h = al_get_font_line_height(app->font[DOT_FONT_16]);
	for(i = 0; i < w; i++)
	{
		for(j = 0; j < h; j++)
		{
			c = al_get_pixel(app->bitmap[DOT_BITMAP_SCRATCH], i, j);
			al_unmap_rgba(c, &r, &g, &b, &a);
			if(a > 0)
			{
				dot_create_particle(&app->particle[app->current_particle], x + (float)i - ox, y + j, 0.0, dot_spread_effect_particle(i, w, strlen(buf) * 2.5), dot_spread_effect_particle(j, h, 4.0), -10.0, 0.0, 3.0, 45, app->bitmap[DOT_BITMAP_PARTICLE], c);
				app->current_particle++;
				if(app->current_particle >= DOT_MAX_PARTICLES)
				{
					app->current_particle = 0;
				}
			}
		}
	}
	al_unlock_bitmap(app->bitmap[DOT_BITMAP_SCRATCH]);
}
예제 #27
0
파일: engine.c 프로젝트: eliasYFGM/Luna2
// Updates the aspect ratio when going full-screen or windowed
static void
aspect_ratio_transform(void)
{
  int window_w = al_get_display_width(engine.display);
  int window_h = al_get_display_height(engine.display);

  float sw = (window_w / (float) GAME_W);
  float sh = (window_h / (float) GAME_H);
  float scale = (sw < sh ? sw : sh);

  float scale_w = ((float) GAME_W * scale);
  float scale_h = ((float) GAME_H * scale);
  int scale_x_pos = (window_w - scale_w) / 2;
  int scale_y_pos = (window_h - scale_h) / 2;

  ALLEGRO_TRANSFORM trans;
  al_identity_transform(&trans);
  al_build_transform(&trans, scale_x_pos, scale_y_pos, scale, scale, 0);
  al_use_transform(&trans);
}
예제 #28
0
파일: blast.c 프로젝트: pasoev/blasteroids
void draw_blast(Blast *blast) {
    ALLEGRO_TRANSFORM transform;

    if(al_get_current_transform() == NULL) {
        fprintf(stderr, "no target bitmap.");
    }

    al_identity_transform(&transform);
    al_rotate_transform(&transform, 1.58525 + head2theta(blast->heading));
    al_translate_transform(&transform, blast->sx, blast->sy);
    al_use_transform(&transform);

    /* many small lines will eventually create a dashed line */
    al_draw_line(0, 0, 0, -10, blast->color, 3.0f);
    al_draw_line(0, -15, 0, -25, blast->color, 3.0f);
    al_draw_line(0, -30, 0, -40, blast->color, 3.0f);
    al_draw_line(0, -45, 0, -60, blast->color, 3.0f);
    al_draw_line(0, -65, 0, -80, blast->color, 3.0f);
    al_draw_line(0, -85, 0, -100, blast->color, 3.0f);
    al_draw_line(0, -105, 0, -120, blast->color, 3.0f);
}
예제 #29
0
파일: asteroid.c 프로젝트: ooonak/cmess
/* Transform asteroid */
static void draw_roid(Asteroid *roid)
{
  ALLEGRO_TRANSFORM transform;
  al_identity_transform(&transform);
  al_rotate_transform(&transform, (roid->twist * (M_PI/180)));
  al_scale_transform(&transform, roid->scale, roid->scale);
  al_translate_transform(&transform, roid->sx, roid->sy);
  al_use_transform(&transform);
  al_draw_line(-22, 20, -18, 4, roid->color, 2.0f);
  al_draw_line(-18, 4, -18, -10, roid->color, 2.0f);
  al_draw_line(-18, -10, -5, -10, roid->color, 2.0f);
  al_draw_line(-5, -10, -10, -22, roid->color, 2.0f);
  al_draw_line(-10, -22, 4, -22, roid->color, 2.0f);
  al_draw_line(4, -22, 20, -10, roid->color, 2.0f);
  al_draw_line(20, -10, 20, -5, roid->color, 2.0f);
  al_draw_line(20, -5, 0, 0, roid->color, 2.0f);
  al_draw_line(0, 0, 20, 10, roid->color, 2.0f);
  al_draw_line(20, 10, 10, 20, roid->color, 2.0f);
  al_draw_line(10, 20, 0, 15, roid->color, 2.0f);
  al_draw_line(0, 15, -22, 20, roid->color, 2.0f);
}
예제 #30
0
bool DisplayResource::load(void)
{
#ifdef ALLEGRO_IPHONE
   int flags = ALLEGRO_FULLSCREEN_WINDOW;
   al_set_new_display_option(ALLEGRO_SUPPORTED_ORIENTATIONS, ALLEGRO_DISPLAY_ORIENTATION_LANDSCAPE, ALLEGRO_REQUIRE);
#else
   int flags = useFullScreenMode ? ALLEGRO_FULLSCREEN : ALLEGRO_WINDOWED;
#endif
   al_set_new_display_flags(flags);
   display = al_create_display(BB_W, BB_H);
   if (!display)
       return false;

#ifndef ALLEGRO_IPHONE
   ALLEGRO_BITMAP *bmp = al_load_bitmap(getResource("gfx/icon48.png"));
   al_set_display_icon(display, bmp);
   al_destroy_bitmap(bmp);
#endif

   BB_W = al_get_display_width(display);
   BB_H = al_get_display_height(display);
   
#ifdef ALLEGRO_IPHONE
   if (BB_W < 960) {
	BB_W *= 2;
	BB_H *= 2;
	ALLEGRO_TRANSFORM t;
	al_identity_transform(&t);
	al_scale_transform(&t, 0.5, 0.5);
	al_use_transform(&t);
   }
#endif
      
   events = al_create_event_queue();
   al_register_event_source(events, al_get_display_event_source(display));

   return true;
}