/** * @brief Blits a sprite interpolating, position is relative to the player. * * Since position is in "game coordinates" it is subject to all * sorts of position transformations. * * Interpolation is: sa*inter + sb*1.-inter) * * @param sa Sprite A to blit. * @param sb Sprite B to blit. * @param inter Amount to interpolate. * @param bx X position of the texture relative to the player. * @param by Y position of the texture relative to the player. * @param sx X position of the sprite to use. * @param sy Y position of the sprite to use. * @param c Colour to use (modifies texture colour). */ void gl_blitSpriteInterpolateScale( const glTexture* sa, const glTexture *sb, double inter, const double bx, const double by, double scalew, double scaleh, const int sx, const int sy, const glColour *c ) { double x,y, w,h, tx,ty, z; /* Translate coords. */ gl_gameToScreenCoords( &x, &y, bx - scalew * sa->sw/2., by - scaleh * sa->sh/2. ); /* Scaled sprite dimensions. */ z = cam_getZoom(); w = sa->sw*z*scalew; h = sa->sh*z*scaleh; /* check if inbounds */ if ((x < -w) || (x > SCREEN_W+w) || (y < -h) || (y > SCREEN_H+h)) return; /* texture coords */ tx = sa->sw*(double)(sx)/sa->rw; ty = sa->sh*(sa->sy-(double)sy-1)/sa->rh; gl_blitTextureInterpolate( sa, sb, inter, x, y, w, h, tx, ty, sa->srw, sa->srh, c ); }
/** * @brief Blits a sprite interpolating, position is relative to the player. * * Since position is in "game coordinates" it is subject to all * sorts of position transformations. * * Interpolation is: sa*inter + sb*1.-inter) * * @param sa Sprite A to blit. * @param sb Sprite B to blit. * @param inter Amount to interpolate. * @param bx X position of the texture relative to the player. * @param by Y position of the texture relative to the player. * @param sx X position of the sprite to use. * @param sy Y position of the sprite to use. * @param c Colour to use (modifies texture colour). */ void gl_blitSpriteInterpolate( const glTexture* sa, const glTexture *sb, double inter, const double bx, const double by, const int sx, const int sy, const glColour *c ) { double x,y, w,h, tx,ty, cx,cy, gx,gy; /* Get parameters. */ gl_cameraGet( &cx, &cy ); gui_getOffset( &gx, &gy ); /* calculate position - we'll use relative coords to player */ x = (bx - cx - sa->sw/2. + gx) * gl_cameraZ; y = (by - cy - sa->sh/2. + gy) * gl_cameraZ; /* Scaled sprite dimensions. */ w = sa->sw*gl_cameraZ; h = sa->sh*gl_cameraZ; /* check if inbounds */ if ((fabs(x) > SCREEN_W/2 + w) || (fabs(y) > SCREEN_H/2 + h) ) return; /* texture coords */ tx = sa->sw*(double)(sx)/sa->rw; ty = sa->sh*(sa->sy-(double)sy-1)/sa->rh; gl_blitTextureInterpolate( sa, sb, inter, x, y, w, h, tx, ty, sa->srw, sa->srh, c ); }