/* * sprite_anim_stop — остановить кадровую анимацию. frame ≥ 0 — какой * кадр останется на экране (индекс вдоль оси ленты, ≤127); -1 — * замереть на текущем. Ось кадра считается циклом сложений (стоп — * редкий вызов, __mulint не тянем). Валидна после sprite_anim * (an_step/ось настроены им); SPR_ANIM_DONE не трогает. */ #include "../_bgi.h" #include void sprite_anim_stop(sprite_t *s, int8_t frame) { s->an_flags &= (uint8_t)~(SPR_ANIM_ON | _SPR_ANIM_BACK); if (frame >= 0 && (uint8_t)frame != s->an_frame) { int off = 0; uint8_t i; for (i = 0; i < (uint8_t)frame; i++) off += s->an_step; s->an_frame = (uint8_t)frame; if (s->an_flags & _SPR_ANIM_HORZ) sprite_frame(s, off, s->sy); else sprite_frame(s, s->sx, off); } }