/* pop_cutscene — порядок событий, точная семантика WAIT и прерывание. */ #include #include "tcheck.h" #include "pop_cutscene.h" static const pop_cs_cmd_t script[] = { { POP_CS_PALETTE, 1 }, { POP_CS_SHOW, 7 }, { POP_CS_WAIT, 2 }, { POP_CS_FLASH, 3 }, { POP_CS_WAIT, 1 }, { POP_CS_FADE_OUT, 0 }, { POP_CS_END, 0 } }; TC_TEST(script_events_and_waits) { pop_cutscene_t cs; uint16_t arg; pop_cutscene_begin(&cs, script); TC_EQ(pop_cutscene_tick(&cs, &arg), POP_CS_EVENT_PALETTE); TC_EQ(arg, 1); TC_EQ(pop_cutscene_tick(&cs, &arg), POP_CS_EVENT_SHOW); TC_EQ(arg, 7); TC_EQ(pop_cutscene_tick(&cs, &arg), POP_CS_EVENT_NONE); TC_EQ(pop_cutscene_tick(&cs, &arg), POP_CS_EVENT_NONE); TC_EQ(pop_cutscene_tick(&cs, &arg), POP_CS_EVENT_FLASH); TC_EQ(arg, 3); TC_EQ(pop_cutscene_tick(&cs, &arg), POP_CS_EVENT_NONE); TC_EQ(pop_cutscene_tick(&cs, &arg), POP_CS_EVENT_FADE_OUT); TC_EQ(pop_cutscene_tick(&cs, &arg), POP_CS_EVENT_END); } TC_TEST(skip_aborts_at_any_wait) { pop_cutscene_t cs; uint16_t arg; pop_cutscene_begin(&cs, script); pop_cutscene_tick(&cs, &arg); pop_cutscene_tick(&cs, &arg); pop_cutscene_tick(&cs, &arg); /* WAIT(2), ещё есть один кадр */ pop_cutscene_abort(&cs); TC_EQ(pop_cutscene_tick(&cs, &arg), POP_CS_EVENT_END); TC_EQ(cs.ended, 1); } void main(void) { TC_RUN(script_events_and_waits); TC_RUN(skip_aborts_at_any_wait); }