void EnemyRender( Enemy* enemy ) { AnimationUpdate( &(enemy->ship_ani) ); int pos_x = (int)roundf(enemy->pos.x-16); int pos_y = (int)roundf(enemy->pos.y-16); TextureRender( enemy->sprite_texture, enemy->runner->render, pos_x, pos_y, &(enemy->ship_ani.rect) ); }
void PicRender( const Pic *p, SDL_Renderer *r, const struct vec2i pos, const color_t mask, const double radians, const struct vec2 scale) { Rect2i dest = Rect2iNew(pos, p->size); // Apply scale to render dest // TODO: render with anchor at centre by default? if (!svec2_is_equal(scale, svec2_one())) { dest.Pos.x -= (mint_t)MROUND((scale.x - 1) * p->size.x / 2); dest.Pos.y -= (mint_t)MROUND((scale.y - 1) * p->size.y / 2); dest.Size.x = (mint_t)MROUND(p->size.x * scale.x); dest.Size.y = (mint_t)MROUND(p->size.y * scale.y); } const double angle = ToDegrees(radians); TextureRender(p->Tex, r, dest, mask, angle); }
void AnimatedSpriteRender(SDL_Renderer* renderer, AnimatedSprite* aSprite, int x, int y) { int nextPos; if(aSprite->autom && SDL_GetTicks() - aSprite->t0 >= aSprite->duration) { switch(aSprite->animMode) { case ANIM_VERTICAL: nextPos = aSprite->currentPos + aSprite->rectAnimation.h*aSprite->direction; if(nextPos >= (int)aSprite->texture->h || nextPos < 0) { aSprite->direction *= -1; nextPos = aSprite->currentPos + aSprite->rectAnimation.h*aSprite->direction; } aSprite->currentPos = nextPos; aSprite->rectAnimation.y = aSprite->currentPos; break; case ANIM_HORIZONTAL: nextPos = aSprite->currentPos + aSprite->rectAnimation.w*aSprite->direction; if(nextPos >= (int)aSprite->texture->w || nextPos < 0) { aSprite->direction *= -1; nextPos = aSprite->currentPos + aSprite->rectAnimation.w*aSprite->direction; } aSprite->currentPos = nextPos; aSprite->rectAnimation.x = aSprite->currentPos; break; default: break; } aSprite->t0 = SDL_GetTicks(); } TextureRender(renderer, aSprite->texture, x, y, &aSprite->rectAnimation); }