static void on_key_pressed(struct controller_observer *observer, enum controller_key key) { struct hall_of_fame_phase *self = b6_cast_of( observer, struct hall_of_fame_phase, controller_observer); if (self->quit) return; if (!self->entry) { quit_phase(self); return; } if (key == CTRLK_RETURN || key == CTRLK_ENTER || key == CTRLK_ESCAPE) { quit_phase(self); return; } if (key != CTRLK_DELETE && key != CTRLK_BACKSPACE) return; if (b6_utf8_is_empty(&self->name.utf8)) return; b6_assert(self->cursor_base); move_renderer_base(self->cursor_base, self->cursor_base->x - 16, self->cursor_base->y); self->name.utf8.nchars -= 1; // FIXME: add crop API self->name.utf8.nbytes -= 1; // FIXME: add crop API alter_hall_of_fame_entry(self->entry, &self->name.utf8); setup_label(self, self->rank, self->entry); }
static void move_shadow(struct menu_renderer_image *self) { unsigned long int a = (self->linear.time % 2097152) / 4096; float dx = sinqf(2 * a) * 3 - 2; float dy = cosqf(a) * 3 + 6; move_renderer_base(self->tile[1]->parent, dx, dy); }
static void on_text_input(struct controller_observer *observer, unsigned short int unicode) { struct hall_of_fame_phase *self = b6_cast_of( observer, struct hall_of_fame_phase, controller_observer); if (self->quit) return; if (!self->entry) { quit_phase(self); return; } if (unicode < 32) return; if (unicode > 127) return; if (self->name.utf8.nchars >= 16) return; b6_append_utf8_string(&self->name, unicode); b6_assert(self->cursor_base); move_renderer_base(self->cursor_base, self->cursor_base->x + 16, self->cursor_base->y); alter_hall_of_fame_entry(self->entry, &self->name.utf8); setup_label(self, self->rank, self->entry); }