Esempio n. 1
0
void draw_sprite_tiled_ext(int spr, int subimg, gs_scalar x, gs_scalar y, gs_scalar xscale, gs_scalar yscale, int color, gs_scalar alpha)
{
    get_spritev(spr2d,spr);
    const int usi = subimg >= 0 ? (subimg % spr2d->subcount) : int(((enigma::object_graphics*)enigma::instance_event_iterator->inst)->image_index) % spr2d->subcount;

    const float
    tbx  = spr2d->texbordxarray[usi], tby  = spr2d->texbordyarray[usi],
    width_scaled = spr2d->width*xscale, height_scaled = spr2d->height*yscale,
    xoff = fmod(spr2d->xoffset*xscale+x,width_scaled)-width_scaled, yoff = fmod(spr2d->yoffset*yscale+y,height_scaled)-height_scaled;

    const int
    hortil = int(ceil((view_enabled ? int(view_xview[view_current] + view_wview[view_current]) : room_width) / (width_scaled*tbx))) + 1,
    vertil = int(ceil((view_enabled ? int(view_yview[view_current] + view_hview[view_current]) : room_height) / (height_scaled*tby))) + 1;

    float xvert1 = xoff, xvert2 = xvert1 + width_scaled, yvert1, yvert2;
    for (int i=0; i<hortil; i++)
    {
        yvert1 = yoff; yvert2 = yvert1 + height_scaled;
        for (int c=0; c<vertil; c++)
        {
			draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);
			draw_vertex_texture_color(xvert1,yvert1,0,0,color,alpha);
			draw_vertex_texture_color(xvert2,yvert1,tbx,0,color,alpha);
			draw_vertex_texture_color(xvert1,yvert2,0,tby,color,alpha);
			draw_vertex_texture_color(xvert2,yvert2,tbx,tby,color,alpha);
			draw_primitive_end();
            yvert1 = yvert2;
            yvert2 += height_scaled;
       }
       xvert1 = xvert2;
       xvert2 += width_scaled;
    }
}
Esempio n. 2
0
void draw_background_ext(int back, gs_scalar x, gs_scalar y, gs_scalar xscale, gs_scalar yscale, double rot, int color, gs_scalar alpha)
{
    alpha=clamp_alpha(alpha);
    get_background(bck2d,back);

  rot *= M_PI/180;

  const gs_scalar tbw = bck2d->texturew, tbh = bck2d->textureh,
                  tbx = bck2d->texturex, tby = bck2d->texturey,
                  w = bck2d->width*xscale, h = bck2d->height*yscale,
                  wsinrot = w*sin(rot), wcosrot = w*cos(rot);

  draw_primitive_begin_texture(pr_trianglestrip, bck2d->texture);

  gs_scalar ulcx = x + xscale * cos(M_PI+rot) + yscale * cos(M_PI/2+rot),
            ulcy = y - yscale * sin(M_PI+rot) - yscale * sin(M_PI/2+rot);

	draw_vertex_texture_color(ulcx, ulcy, tbx, tby,color,alpha);
	draw_vertex_texture_color(ulcx + wcosrot, ulcy - wsinrot, tbx+tbw, tby,color,alpha);

  const double mpr = 3*M_PI/2 + rot;
  ulcx += h * cos(mpr);
  ulcy -= h * sin(mpr);

	draw_vertex_texture_color(ulcx, ulcy, tbx, tby+tbh,color,alpha);
	draw_vertex_texture_color(ulcx + wcosrot, ulcy - wsinrot, tbx+tbw, tby+tbh,color,alpha);
  draw_primitive_end();
}
Esempio n. 3
0
void draw_sprite_tiled(int spr, int subimg, gs_scalar x, gs_scalar y, int color, gs_scalar alpha)
{
    get_spritev(spr2d,spr);
    const int usi = subimg >= 0 ? (subimg % spr2d->subcount) : int(((enigma::object_graphics*)enigma::instance_event_iterator->inst)->image_index) % spr2d->subcount;

    x = ((spr2d->xoffset+x)<0?0:spr2d->width)-fmod(spr2d->xoffset+x,spr2d->width);
    y = ((spr2d->yoffset+y)<0?0:spr2d->height)-fmod(spr2d->yoffset+y,spr2d->height);

    const gs_scalar tbx  = spr2d->texbordxarray[usi], tby  = spr2d->texbordyarray[usi];

    const int
    hortil = int(ceil((view_enabled ? (gs_scalar)(view_xview[view_current] + view_wview[view_current]) : (gs_scalar)room_width) / ((gs_scalar)spr2d->width))) + 1,
    vertil = int(ceil((view_enabled ? (gs_scalar)(view_yview[view_current] + view_hview[view_current]) : (gs_scalar)room_height) / ((gs_scalar)spr2d->height))) + 1;

    gs_scalar xvert1 = -x, xvert2 = xvert1 + spr2d->width, yvert1, yvert2;
    for (int i=0; i<hortil; ++i)
    {
        yvert1 = -y; yvert2 = yvert1 + spr2d->height;
        for (int c=0; c<vertil; ++c)
        {
			draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);
			draw_vertex_texture_color(xvert1,yvert1,0,0,color,alpha);
			draw_vertex_texture_color(xvert2,yvert1,tbx,0,color,alpha);
			draw_vertex_texture_color(xvert1,yvert2,0,tby,color,alpha);
			draw_vertex_texture_color(xvert2,yvert2,tbx,tby,color,alpha);
			draw_primitive_end();
            yvert1 = yvert2;
            yvert2 += spr2d->height;
        }
        xvert1 = xvert2;
        xvert2 += spr2d->width;
    }
}
Esempio n. 4
0
void draw_background_tiled(int back, gs_scalar x, gs_scalar y, int color, gs_scalar alpha)
{
    alpha=clamp_alpha(alpha);
    get_background(bck2d,back);
    x = (x<0?0:bck2d->width)-fmod(x,bck2d->width);
    y = (y<0?0:bck2d->height)-fmod(y,bck2d->height);

  const gs_scalar tbx = bck2d->texturex, tby = bck2d->texturey,
                  tbw = bck2d->texturew, tbh = bck2d->textureh;

  const int hortil = int (ceil((gs_scalar)room_width/((gs_scalar)bck2d->width))) + 1,
            vertil = int (ceil((gs_scalar)room_height/((gs_scalar)bck2d->height))) + 1;

  gs_scalar xvert1 = -x, xvert2 = xvert1 + bck2d->width, yvert1, yvert2;
  for (int i=0; i<hortil; ++i)
  {
    yvert1 = -y; yvert2 = yvert1 + bck2d->height;
    for (int c=0; c<vertil; ++c)
    {
      draw_primitive_begin_texture(pr_trianglestrip, bck2d->texture);
      draw_vertex_texture_color(xvert1,yvert1,tbx,tby,color,alpha);
      draw_vertex_texture_color(xvert2,yvert1,tbx+tbw,tby,color,alpha);
      draw_vertex_texture_color(xvert1,yvert2,tbx,tby+tbh,color,alpha);
      draw_vertex_texture_color(xvert2,yvert2,tbx+tbw,tby+tbh,color,alpha);
      draw_primitive_end();
      yvert1 = yvert2;
      yvert2 += bck2d->height;
    }
    xvert1 = xvert2;
    xvert2 += bck2d->width;
  }
}
Esempio n. 5
0
void draw_sprite_ext(int spr, int subimg, gs_scalar x, gs_scalar y, gs_scalar xscale, gs_scalar yscale, double rot, int color, gs_scalar alpha)
{
    get_spritev(spr2d,spr);
    const int usi = subimg >= 0 ? (subimg % spr2d->subcount) : int(((enigma::object_graphics*)enigma::instance_event_iterator->inst)->image_index) % spr2d->subcount;

	rot *= M_PI/180;

    const float
    w = spr2d->width*xscale, h = spr2d->height*yscale,
    tbx = spr2d->texbordxarray[usi], tby = spr2d->texbordyarray[usi],
    wsinrot = w*sin(rot), wcosrot = w*cos(rot);

	draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);
	float
		ulcx = x - xscale * spr2d->xoffset * cos(rot) + yscale * spr2d->yoffset * cos(M_PI/2+rot),
		ulcy = y + xscale * spr2d->xoffset * sin(rot) - yscale * spr2d->yoffset * sin(M_PI/2+rot);
	draw_vertex_texture_color(ulcx,ulcy, 0,0, color, alpha);
	draw_vertex_texture_color(ulcx + wcosrot, ulcy - wsinrot, tbx, 0, color, alpha);
	const double mpr = 3*M_PI/2 + rot;
    ulcx += h * cos(mpr);
    ulcy -= h * sin(mpr);
	draw_vertex_texture_color(ulcx,ulcy, 0,tby, color, alpha);
	draw_vertex_texture_color(ulcx + wcosrot, ulcy - wsinrot, tbx,tby, color, alpha);
	draw_primitive_end();
}
Esempio n. 6
0
void draw_background_general(int back, gs_scalar left, gs_scalar top, gs_scalar width, gs_scalar height, gs_scalar x, gs_scalar y, gs_scalar xscale, gs_scalar yscale, double rot, int c1, int c2, int c3, int c4, gs_scalar alpha)
{
  alpha=clamp_alpha(alpha);
	get_background(bck2d, back);
  const gs_scalar tbx = bck2d->texturex,  tby = bck2d->texturey,
                  tbw = bck2d->texturew,  tbh = bck2d->textureh,
                  ttbw = bck2d->width/tbw, ttbh = bck2d->height/tbh,
                  tbx1 = tbx+left/ttbw, tby1 = tby+top/ttbh,
                  tbx2 = tbx+(left+width)/ttbw, tby2 = tby+(top+height)/ttbh,
                  w = width*xscale, h = height*yscale;

  rot *= M_PI/180;
  const gs_scalar wcosrot = w*cos(rot), wsinrot = w*sin(rot);

  gs_scalar ulcx = x + xscale * cos(M_PI+rot) + yscale * cos(M_PI/2+rot),
            ulcy = y - yscale * sin(M_PI+rot) - yscale * sin(M_PI/2+rot);

  draw_primitive_begin_texture(pr_trianglestrip, bck2d->texture);
	draw_vertex_texture_color(ulcx, ulcy, tbx1, tby1,c1,alpha);
	draw_vertex_texture_color((ulcx + wcosrot), (ulcy - wsinrot), tbx2,tby1, c2, alpha);

	ulcx += h * cos(3*M_PI/2 + rot);
	ulcy -= h * sin(3*M_PI/2 + rot);

	draw_vertex_texture_color(ulcx, ulcy, tbx1, tby2,c3,alpha);
	draw_vertex_texture_color((ulcx + wcosrot), (ulcy - wsinrot), tbx2, tby2,c4,alpha);
  draw_primitive_end();
}
Esempio n. 7
0
void draw_sprite_general(int spr, int subimg, gs_scalar left, gs_scalar top, gs_scalar width, gs_scalar height, gs_scalar x, gs_scalar y, gs_scalar xscale, gs_scalar yscale, double rot, int c1, int c2, int c3, int c4, gs_scalar alpha)
{
    get_spritev(spr2d,spr);
    const int usi = subimg >= 0 ? (subimg % spr2d->subcount) : int(((enigma::object_graphics*)enigma::instance_event_iterator->inst)->image_index) % spr2d->subcount;

	const float
	  tbx = spr2d->texbordxarray[usi],  tby = spr2d->texbordyarray[usi],
	  tbw = spr2d->width/tbx, tbh = spr2d->height/tby,
	  w = width*xscale, h = height*yscale;

    rot *= M_PI/180;
    const float wcosrot = w*cos(rot), wsinrot = w*sin(rot);

    draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);

    float
    ulcx = x + xscale * cos(M_PI+rot) + yscale * cos(M_PI/2+rot),
    ulcy = y - yscale * sin(M_PI+rot) - yscale * sin(M_PI/2+rot);

	draw_vertex_texture_color(ulcx, ulcy, left/tbw, top/tbh, c1, alpha);
	draw_vertex_texture_color((ulcx + wcosrot), (ulcy - wsinrot), (left+width)/tbw, top/tbh, c2, alpha);

    ulcx += h * cos(3*M_PI/2 + rot);
    ulcy -= h * sin(3*M_PI/2 + rot);

	draw_vertex_texture_color((ulcx + wcosrot), (ulcy - wsinrot), (left+width)/tbw, (top+height)/tbh, c4, alpha);
	draw_vertex_texture_color(ulcx, ulcy, left/tbw, (top+height)/tbh, c3, alpha);

    draw_primitive_end();
}
Esempio n. 8
0
void draw_surface_stretched_ext(int id, gs_scalar x, gs_scalar y, gs_scalar w, gs_scalar h, int color, gs_scalar alpha)
{
	draw_primitive_begin_texture(pr_trianglestrip, surface_get_texture(id));
	draw_vertex_texture_color(x,y,0,0,color,alpha);
	draw_vertex_texture_color(x+w,y,1,0,color,alpha);
	draw_vertex_texture_color(x,y+h,0,1,color,alpha);
	draw_vertex_texture_color(x+w,y+h,1,1,color,alpha);
	draw_primitive_end();
}
Esempio n. 9
0
void draw_surface_part_ext(int id, gs_scalar left, gs_scalar top, gs_scalar w, gs_scalar h, gs_scalar x, gs_scalar y, gs_scalar xscale, gs_scalar yscale,int color, gs_scalar alpha)
{
	const gs_scalar tbw = surface_get_width(id), tbh = surface_get_height(id);
	draw_primitive_begin_texture(pr_trianglestrip, surface_get_texture(id));
	draw_vertex_texture_color(x,y,left/tbw,top/tbh,color,alpha);
	draw_vertex_texture_color(x+w*xscale,y,(left+w)/tbw,top/tbh,color,alpha);
	draw_vertex_texture_color(x,y+h*yscale,left/tbw,(top+h)/tbh,color,alpha);
	draw_vertex_texture_color(x+w*xscale,y+h*yscale,(left+w)/tbw,(top+h)/tbh,color,alpha);
	draw_primitive_end();
}
Esempio n. 10
0
void draw_surface(int id, gs_scalar x, gs_scalar y, int color, gs_scalar alpha)
{
	int w=surface_get_width(id);
	int h=surface_get_height(id);
  
	draw_primitive_begin_texture(pr_trianglestrip, surface_get_texture(id));
	draw_vertex_texture_color(x,y,0,0,color,alpha);
	draw_vertex_texture_color(x+w,y,1,0,color,alpha);
	draw_vertex_texture_color(x,y+h,0,1,color,alpha);
	draw_vertex_texture_color(x+w,y+h,1,1,color,alpha);
	draw_primitive_end();
}
Esempio n. 11
0
void d3d_draw_background(int back, gs_scalar x, gs_scalar y, gs_scalar z)
{
	get_background(bck2d,back);

	const gs_scalar tbx=bck2d->texturex,tby=bck2d->texturey,
                  tbw=bck2d->texturew,tbh=bck2d->textureh;
	draw_primitive_begin_texture(pr_trianglestrip, bck2d->texture);
	d3d_vertex_texture(x,y,z,tbx,tby);
	d3d_vertex_texture(x+bck2d->width,y,z,tbx+tbw,tby);
	d3d_vertex_texture(x,y+bck2d->height,z, tbx,tby+tbh);
	d3d_vertex_texture(x+bck2d->width,y+bck2d->height,z, tbx+tbw,tby+tbh);
	draw_primitive_end();
}
Esempio n. 12
0
void draw_sprite_pos(int spr, int subimg, gs_scalar x1, gs_scalar y1, gs_scalar x2, gs_scalar y2, gs_scalar x3, gs_scalar y3, gs_scalar x4, gs_scalar y4, gs_scalar alpha)
{
    get_spritev(spr2d,spr);
    const int usi = subimg >= 0 ? (subimg % spr2d->subcount) : int(((enigma::object_graphics*)enigma::instance_event_iterator->inst)->image_index) % spr2d->subcount;

    const float tbx = spr2d->texbordxarray[usi], tby = spr2d->texbordyarray[usi];

	draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);
	draw_vertex_texture_color(x1,y1,0,0,draw_get_color(),alpha);
	draw_vertex_texture_color(x2,y1,tbx,0,draw_get_color(),alpha);
	draw_vertex_texture_color(x1,y2,0,tby,draw_get_color(),alpha);
	draw_vertex_texture_color(x2,y2,tbx,tby,draw_get_color(),alpha);
	draw_primitive_end();
}
Esempio n. 13
0
void draw_background_stretched(int back, gs_scalar x, gs_scalar y, gs_scalar width, gs_scalar height, int color, gs_scalar alpha)
{
  alpha=clamp_alpha(alpha);
	get_background(bck2d, back);

	const gs_scalar tbx=bck2d->texturex,tby=bck2d->texturey,
                  tbw=bck2d->texturew,tbh=bck2d->textureh;
	draw_primitive_begin_texture(pr_trianglestrip, bck2d->texture);
	draw_vertex_texture_color(x,y,tbx,tby,color,alpha);
	draw_vertex_texture_color(x+width,y,tbx+tbw,tby,color,alpha);
	draw_vertex_texture_color(x,y+height, tbx,tby+tbh,color,alpha);
	draw_vertex_texture_color(x+width,y+height, tbx+tbw,tby+tbh,color,alpha);
	draw_primitive_end();
}
Esempio n. 14
0
void draw_sprite_part(int spr, int subimg, gs_scalar left, gs_scalar top, gs_scalar width, gs_scalar height, gs_scalar x, gs_scalar y, int color, gs_scalar alpha)
{
    get_spritev(spr2d,spr);
    const int usi = subimg >= 0 ? (subimg % spr2d->subcount) : int(((enigma::object_graphics*)enigma::instance_event_iterator->inst)->image_index) % spr2d->subcount;

	float tbw = spr2d->width/(float)spr2d->texbordxarray[usi], tbh = spr2d->height/(float)spr2d->texbordyarray[usi],
	  tbx1 = left/tbw, tbx2 = tbx1 + width/tbw,
	  tby1 = top/tbh, tby2 = tby1 + height/tbh;

	draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);
	draw_vertex_texture_color(x,y,tbx1,tby1,color,alpha);
	draw_vertex_texture_color(x+width,y,tbx2,tby1,color,alpha);
	draw_vertex_texture_color(x,y+height,tbx1,tby2,color,alpha);
	draw_vertex_texture_color(x+width,y+height,tbx2,tby2,color,alpha);
	draw_primitive_end();
}
Esempio n. 15
0
void draw_sprite(int spr,int subimg, gs_scalar x, gs_scalar y, int color, gs_scalar alpha)
{
    get_spritev(spr2d,spr);
    const int usi = subimg >= 0 ? (subimg % spr2d->subcount) : int(((enigma::object_graphics*)enigma::instance_event_iterator->inst)->image_index) % spr2d->subcount;

	const float tbx = spr2d->texbordxarray[usi], tby = spr2d->texbordyarray[usi],
			xvert1 = x-spr2d->xoffset, xvert2 = xvert1 + spr2d->width,
			yvert1 = y-spr2d->yoffset, yvert2 = yvert1 + spr2d->height;

	draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);
	draw_vertex_texture_color(xvert1,yvert1,0,0,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbx,0,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2, 0,tby,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2, tbx,tby,color,alpha);
	draw_primitive_end();
}
Esempio n. 16
0
void draw_background_tiled_area_ext(int back, gs_scalar x, gs_scalar y, gs_scalar x1, gs_scalar y1, gs_scalar x2, gs_scalar y2, gs_scalar xscale, gs_scalar yscale, int color, gs_scalar alpha)
{
  alpha=clamp_alpha(alpha);
	get_background(bck2d,back);

  const gs_scalar tbx=bck2d->texturex,tby=bck2d->texturey,
                  tbw=bck2d->texturew,tbh=bck2d->textureh;

  gs_scalar sw,sh,i,j,jj,left,top,width,height,X,Y, tbx1, tbx2, tby1, tby2;
  sw = bck2d->width*xscale;
  sh = bck2d->height*yscale;

  i = x1-(fmod(x1,sw) - fmod(x,sw)) - sw*(fmod(x1,sw)<fmod(x,sw));
  j = y1-(fmod(y1,sh) - fmod(y,sh)) - sh*(fmod(y1,sh)<fmod(y,sh));
  jj = j;

  for(; i<=x2; i+=sw)
  {
    for(; j<=y2; j+=sh)
    {
      if(i <= x1) left = x1-i;
      else left = 0;
      X = i+left;

      if(j <= y1) top = y1-j;
      else top = 0;
      Y = j+top;

      if(x2 <= i+sw) width = ((sw)-(i+sw-x2)+1)-left;
      else width = sw-left;

      if(y2 <= j+sh) height = ((sh)-(j+sh-y2)+1)-top;
      else height = sh-top;

      tbx1 = tbx+left/sw*tbw, tby1 = tby+top/sh*tbh,
      tbx2 = tbx+(left+width)/sw*tbw, tby2 = tby+(top+height)/sh*tbh;

      draw_primitive_begin_texture(pr_trianglestrip, bck2d->texture);
      draw_vertex_texture_color(X,Y,tbx1,tby1,color,alpha);
      draw_vertex_texture_color(X+width,Y,tbx2,tby1,color,alpha);
      draw_vertex_texture_color(X,Y+height,tbx1,tby2,color,alpha);
          draw_vertex_texture_color(X+width,Y+height,tbx2,tby2,color,alpha);
      draw_primitive_end();
    }
    j = jj;
  }
}
Esempio n. 17
0
void draw_background_part(int back, gs_scalar left, gs_scalar top, gs_scalar width, gs_scalar height, gs_scalar x, gs_scalar y, int color, gs_scalar alpha)
{
  alpha=clamp_alpha(alpha);
	get_background(bck2d, back);

	const gs_scalar tbw = bck2d->width/(gs_scalar)bck2d->texturew, tbh = bck2d->height/(gs_scalar)bck2d->textureh,
            tbx = bck2d->texturex,tby = bck2d->texturey,
            tbx1 = tbx + left/tbw, tbx2 = tbx + tbx1 + width/tbw,
            tby1 = tby + top/tbh, tby2 = tby + tby1 + height/tbh;

	draw_primitive_begin_texture(pr_trianglestrip, bck2d->texture);
	draw_vertex_texture_color(x,y,tbx1,tby1,color,alpha);
	draw_vertex_texture_color(x+width,y,tbx2,tby1,color,alpha);
	draw_vertex_texture_color(x,y+height,tbx1,tby2,color,alpha);
	draw_vertex_texture_color(x+width,y+height,tbx2,tby2,color,alpha);
	draw_primitive_end();
}
Esempio n. 18
0
void draw_surface_ext(int id,gs_scalar x, gs_scalar y,gs_scalar xscale, gs_scalar yscale,double rot,int color,gs_scalar alpha)
{
    const gs_scalar w=surface_get_width(id)*xscale, h=surface_get_height(id)*yscale;
    rot *= M_PI/180;

    gs_scalar ulcx = x + xscale * cos(M_PI+rot) + yscale * cos(M_PI/2+rot),
          ulcy = y - yscale * sin(M_PI+rot) - yscale * sin(M_PI/2+rot);

	draw_primitive_begin_texture(pr_trianglestrip, surface_get_texture(id));
	draw_vertex_texture_color(ulcx,ulcy,0,0,color,alpha);
	draw_vertex_texture_color(ulcx + w*cos(rot), ulcy - w*sin(rot),1,0,color,alpha);
	ulcx += h * cos(3*M_PI/2 + rot);
	ulcy -= h * sin(3*M_PI/2 + rot);
	draw_vertex_texture_color(ulcx,ulcy,0,1,color,alpha);
	draw_vertex_texture_color(ulcx + w*cos(rot), ulcy - w*sin(rot),1,1,color,alpha);
	draw_primitive_end();
}
Esempio n. 19
0
void draw_background_tiled_ext(int back, gs_scalar x, gs_scalar y, gs_scalar xscale, gs_scalar yscale, int color, gs_scalar alpha, bool htiled, bool vtiled)
{
  alpha=clamp_alpha(alpha);
	get_background(bck2d,back);

	const gs_scalar tbx = bck2d->texturex, tby = bck2d->texturey,
                  tbw = bck2d->texturew, tbh = bck2d->textureh,
                  width_scaled = bck2d->width*xscale, height_scaled = bck2d->height*yscale;

  int hortil, vertil;
	if (htiled) {
		hortil = int(ceil((gs_scalar)room_width/((gs_scalar)width_scaled*tbw))) + 1;
		x = -((x<0?0:width_scaled)-fmod(x,width_scaled));
	} else {
		hortil = 1;
	}
	if (vtiled) {
		vertil = int(ceil((gs_scalar)room_height/((gs_scalar)height_scaled*tbh))) + 1;
		y = -((y<0?0:height_scaled)-fmod(y,height_scaled));
	} else {
		vertil = 1;
	}

  gs_scalar xvert1 = x, xvert2 = xvert1 + width_scaled, yvert1, yvert2;
  for (int i=0; i<hortil; ++i)
  {
    yvert1 = y; yvert2 = yvert1 + height_scaled;
    for (int c=0; c<vertil; ++c)
    {
      draw_primitive_begin_texture(pr_trianglestrip, bck2d->texture);
      draw_vertex_texture_color(xvert1,yvert1,tbx,tby,color,alpha);
      draw_vertex_texture_color(xvert2,yvert1,tbx+tbw,tby,color,alpha);
      draw_vertex_texture_color(xvert1,yvert2,tbx,tby+tbh,color,alpha);
      draw_vertex_texture_color(xvert2,yvert2,tbx+tbw,tby+tbh,color,alpha);
      draw_primitive_end();
      yvert1 = yvert2;
      yvert2 += height_scaled;
    }
    xvert1 = xvert2;
    xvert2 += width_scaled;
  }
}
Esempio n. 20
0
void draw_surface_tiled_ext(int id, gs_scalar x, gs_scalar y, gs_scalar xscale, gs_scalar yscale, int color, gs_scalar alpha)
{
    const gs_scalar w=surface_get_width(id)*xscale, h=surface_get_height(id)*yscale;
    const int hortil= int (ceil(room_width/(surface_get_width(id)))),
        vertil= int (ceil(room_height/(surface_get_height(id))));
    x=w-fmod(x,w);
    y=h-fmod(y,h);
 
    for (int i=0; i<hortil; i++)
    {
      for (int c=0; c<vertil; c++)
      {		  
		draw_primitive_begin_texture(pr_trianglestrip, surface_get_texture(id));
		draw_vertex_texture_color(i*w-x,c*h-y,0,0,color,alpha);
		draw_vertex_texture_color((i+1)*w-x,c*h-y,1,0,color,alpha);
		draw_vertex_texture_color(i*w-x,(c+1)*h-y,0,1,color,alpha);
		draw_vertex_texture_color((i+1)*w-x,(c+1)*h-y,1,1,color,alpha);
		draw_primitive_end();
      }
    }
}
Esempio n. 21
0
void draw_surface_general(int id, gs_scalar left, gs_scalar top, gs_scalar width, gs_scalar height, gs_scalar x, gs_scalar y, gs_scalar xscale, gs_scalar yscale, double rot, int c1, int c2, int c3, int c4, gs_scalar alpha)
{
	const gs_scalar tbw = surface_get_width(id), tbh = surface_get_height(id),
	  w = width*xscale, h = height*yscale;

    rot *= M_PI/180;

    gs_scalar ulcx = x + xscale * cos(M_PI+rot) + yscale * cos(M_PI/2+rot),
          ulcy = y - yscale * sin(M_PI+rot) - yscale * sin(M_PI/2+rot);

    draw_primitive_begin_texture(pr_trianglestrip, surface_get_texture(id));
	draw_vertex_texture_color(ulcx,ulcy,left/tbw,top/tbh,c1,alpha);
	draw_vertex_texture_color((ulcx + w*cos(rot)), (ulcy - w*sin(rot)), (left+width)/tbw,top/tbh, c2, alpha);
		
      ulcx += h * cos(3*M_PI/2 + rot);
      ulcy -= h * sin(3*M_PI/2 + rot);
	  
	draw_vertex_texture_color((ulcx + w*cos(rot)), (ulcy - w*sin(rot)), (left+width)/tbw,(top+height)/tbh, c4, alpha);
	draw_vertex_texture_color(ulcx, ulcy, left/tbw, (top+height)/tbh, c3, alpha);
    draw_primitive_end();
}
Esempio n. 22
0
void draw_surface_tiled(int id, gs_scalar x, gs_scalar y, int color, gs_scalar alpha)
{
	const gs_scalar tbw = surface_get_width(id), tbh = surface_get_height(id);
	x=surface_get_width(id)-fmod(x,surface_get_width(id));
	y=surface_get_height(id)-fmod(y,surface_get_height(id));
	const int hortil= int (ceil(room_width/(surface_get_width(id)))),
			  vertil= int (ceil(room_height/(surface_get_height(id))));

    
	for (int i=0; i<hortil; i++)
	{
		for (int c=0; c<vertil; c++)
		{
			draw_primitive_begin_texture(pr_trianglestrip, surface_get_texture(id));
			draw_vertex_texture_color(i*tbw-x,c*tbh-y,0,0,color,alpha);
			draw_vertex_texture_color((i+1)*tbw-x,c*tbh-y,1,0,color,alpha);
			draw_vertex_texture_color(i*tbw-x,(c+1)*tbh-y,0,1,color,alpha);
			draw_vertex_texture_color((i+1)*tbw-x,(c+1)*tbh-y,1,1,color,alpha);
			draw_primitive_end();
		}
	}
}
Esempio n. 23
0
void draw_surface_tiled_area_ext(int id, gs_scalar x, gs_scalar y, gs_scalar x1, gs_scalar y1, gs_scalar x2, gs_scalar y2, gs_scalar xscale, gs_scalar yscale, int color, gs_scalar alpha)
{
    gs_scalar sw,sh,i,j,jj,left,top,width,height,X,Y;
    sw = surface_get_width(id)*xscale;
    sh = surface_get_height(id)*yscale;

    i = x1-(fmod(x1,sw) - fmod(x,sw)) - sw*(fmod(x1,sw)<fmod(x,sw));
    j = y1-(fmod(y1,sh) - fmod(y,sh)) - sh*(fmod(y1,sh)<fmod(y,sh));
    jj = j;

    for(; i<=x2; i+=sw)
    {
      for(; j<=y2; j+=sh)
      {
        if(i <= x1) left = x1-i;
        else left = 0;
        X = i+left;

        if(j <= y1) top = y1-j;
        else top = 0;
        Y = j+top;

        if(x2 <= i+sw) width = ((sw)-(i+sw-x2)+1)-left;
        else width = sw-left;

        if(y2 <= j+sh) height = ((sh)-(j+sh-y2)+1)-top;
        else height = sh-top;
		  
		draw_primitive_begin_texture(pr_trianglestrip, surface_get_texture(id));
		draw_vertex_texture_color(X,Y,left/sw,top/sh,color,alpha);
		draw_vertex_texture_color(X+width,Y,(left+width)/sw,top/sh,color,alpha);
		draw_vertex_texture_color(X,Y+height,left/sw,(top+height)/sh,color,alpha);
		draw_vertex_texture_color(X+width,Y+height,(left+width)/sw,(top+height)/sh,color,alpha);
		draw_primitive_end();
      }
      j = jj;
    }
}
Esempio n. 24
0
void d3d_primitive_begin_texture(int kind, int texId, int format)
{
  draw_primitive_begin_texture(kind, texId, format);
}
Esempio n. 25
0
//Draw padded
void draw_sprite_padded(int spr, int subimg, gs_scalar left, gs_scalar top, gs_scalar right, gs_scalar bottom, gs_scalar x1, gs_scalar y1, gs_scalar x2, gs_scalar y2, int color, gs_scalar alpha)
{
  get_spritev(spr2d,spr);
  const int usi = subimg >= 0 ? (subimg % spr2d->subcount) : int(((enigma::object_graphics*)enigma::instance_event_iterator->inst)->image_index) % spr2d->subcount;

	//Order x1,y1,x2,y2 correctly
	if (x1>x2) {gs_scalar tx = x2; x2 = x1, x1 = tx;}
	if (y1>y2) {gs_scalar ty = y2; y2 = y1, y1 = ty;}

	//Minimum w = left+right and minimum h = top+bottom
	gs_scalar w = x2-x1, h = y2-y1;
	if (w<left+right) x2 = x1+left+right, w = x2-x1;
	if (h<top+bottom) y2 = y1+top+bottom, h = y2-y1;

	const gs_scalar midw = w-left-right, midh = h-top-bottom;
	const gs_scalar midtw = spr2d->width-left-right, midth = spr2d->height-bottom-top;
	const gs_scalar tbw = spr2d->width/(gs_scalar)spr2d->texbordxarray[usi], tbh = spr2d->height/(gs_scalar)spr2d->texbordyarray[usi];
	const gs_scalar tbl = left/tbw, tbt = top/tbh, tbr = right/tbw, tbb = bottom/tbh, tbmw = midtw/tbw, tbmh = midth/tbh;

  //Draw top-left corner
	gs_scalar xvert1 = x1, xvert2 = xvert1 + left,
	          yvert1 = y1, yvert2 = yvert1 + top;

	draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);
	draw_vertex_texture_color(xvert1,yvert1,0.0,0.0,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbl,0.0,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2,0.0,tbt,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2,tbl,tbt,color,alpha);

	//Draw left side
	xvert1 = x1, xvert2 = xvert1 + left,
	yvert1 = y1 + top, yvert2 = yvert1 + midh;

	draw_vertex_texture_color(xvert1,yvert1,0.0,tbt,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbl,tbt,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2,0.0,tbt+tbmh,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2,tbl,tbt+tbmh,color,alpha);

	//Draw bottom-left corner
	xvert1 = x1, xvert2 = xvert1 + left,
	yvert1 = y1 + top + midh, yvert2 = yvert1 + bottom;

	draw_vertex_texture_color(xvert1,yvert1,0.0,tbt+tbmh,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbl,tbt+tbmh,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2,0.0,tbt+tbmh+tbb,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2,tbl,tbt+tbmh+tbb,color,alpha);
	draw_primitive_end();

	//Draw top
  xvert1 = x1 + left, xvert2 = xvert1 + midw,
  yvert1 = y1, yvert2 = yvert1 + top;

	draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);
	draw_vertex_texture_color(xvert1,yvert1,tbl,0.0,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbl+tbmw,0.0,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2,tbl,tbt,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2,tbl+tbmw,tbt,color,alpha);

  //Draw middle
  xvert1 = x1 + left, xvert2 = xvert1 + midw,
  yvert1 = y1 + top, yvert2 = yvert1 + midh;

	draw_vertex_texture_color(xvert1,yvert1,tbl,tbt,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbl+tbmw,tbt,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2,tbl,tbt+tbmh,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2,tbl+tbmw,tbt+tbmh,color,alpha);

	//Draw bottom
  xvert1 = x1 + left, xvert2 = xvert1 + midw,
  yvert1 = y1 + midh + top, yvert2 = yvert1 + bottom;

	draw_vertex_texture_color(xvert1,yvert1,tbl,tbt+tbmh,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbl+tbmw,tbt+tbmh,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2,tbl,tbt+tbmh+tbb,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2,tbl+tbmw,tbt+tbmh+tbb,color,alpha);
	draw_primitive_end();

	//Draw top-right corner
  xvert1 = x1 + midw + left, xvert2 = xvert1 + right,
  yvert1 = y1, yvert2 = yvert1 + top;

	draw_primitive_begin_texture(pr_trianglestrip, spr2d->texturearray[usi]);
	draw_vertex_texture_color(xvert1,yvert1,tbl+tbmw,0.0,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbl+tbmw+tbr,0.0,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2,tbl+tbmw,tbt,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2,tbl+tbmw+tbr,tbt,color,alpha);

	//Draw right side
	xvert1 = x1 + midw + left, xvert2 = xvert1 + right,
	yvert1 = y1 + top, yvert2 = yvert1 + midh;

	draw_vertex_texture_color(xvert1,yvert1,tbl+tbmw,tbt,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbl+tbmw+tbr,tbt,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2,tbl+tbmw,tbt+tbmh,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2,tbl+tbmw+tbr,tbt+tbmh,color,alpha);

	//Draw bottom-right corner
    xvert1 = x1 + midw + left, xvert2 = xvert1 + right,
    yvert1 = y1 + top + midh, yvert2 = yvert1 + bottom;

	draw_vertex_texture_color(xvert1,yvert1,tbl+tbmw,tbt+tbmh,color,alpha);
	draw_vertex_texture_color(xvert2,yvert1,tbl+tbmw+tbr,tbt+tbmh,color,alpha);
	draw_vertex_texture_color(xvert1,yvert2,tbl+tbmw,tbt+tbmh+tbb,color,alpha);
	draw_vertex_texture_color(xvert2,yvert2,tbl+tbmw+tbr,tbt+tbmh+tbb,color,alpha);
	draw_primitive_end();
}