/* SPDX-License-Identifier: GPL-3.0-or-later */ /* Copyright (C) 2021 KikooDX */ #include "input.h" #include "levelselection.h" #include "pack_count.h" #include "util.h" /* Return 1 if game state should change. * Return -1 to return to main menu. */ int levelselection_update(struct LevelSelection *restrict levelselection, struct Input input) { /* decrease selected pack id */ if (input.keystates[K_LEFT] == KS_PRESS && levelselection->pack_cursor > 0) { levelselection->pack_cursor -= 1; levelselection->visual_target = (float)levelselection->pack_cursor; } /* increase selected pack id */ if (input.keystates[K_RIGHT] == KS_PRESS && levelselection->pack_cursor < PACK_COUNT - 1) { levelselection->pack_cursor += 1; levelselection->visual_target = (float)levelselection->pack_cursor; } if (input.keystates[K_START] == KS_PRESS) { levelselection->visual_cursor = (float)levelselection->pack_cursor; levelselection->visual_target = levelselection->visual_cursor; return -1; } else if (input.keystates[K_A] == KS_PRESS) { levelselection->visual_cursor = (float)levelselection->pack_cursor; levelselection->visual_target = levelselection->visual_cursor; return 1; } /* lerp visual cursor to visual target */ levelselection->visual_cursor += PACKBOX_TRANSITION_SPEED * (levelselection->visual_target - levelselection->visual_cursor); return 0; }