示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
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);
}