Hella optimized the game + fixed bug with dying animation (now dying snake is more stagnant)
This commit is contained in:
parent
07c0b10280
commit
ebbdb67f1f
@ -69,6 +69,7 @@ typedef enum {
|
||||
} waiting_reason_t;
|
||||
|
||||
struct Snake {
|
||||
bool i_require_redraw;
|
||||
bool is_space_pressed;
|
||||
bool is_shift_pressed;
|
||||
game_screen_t game_screen;
|
||||
@ -108,6 +109,7 @@ struct Snake {
|
||||
} snake = {1};
|
||||
|
||||
void init_snake() {
|
||||
snake.i_require_redraw = false;
|
||||
snake.is_space_pressed = false;
|
||||
snake.is_shift_pressed = false;
|
||||
snake.game_screen = game_screen_pause;
|
||||
@ -554,6 +556,7 @@ void draw_frame() {
|
||||
void handle_gaming_keycode(uint8_t keycode) {
|
||||
if (keycode == KEYCODE_ESCAPE) {
|
||||
snake.game_screen = game_screen_pause;
|
||||
snake.i_require_redraw = true;
|
||||
}
|
||||
if (!snake.is_dying) {
|
||||
if (is_keycode_for_press_left(keycode) &&
|
||||
@ -574,6 +577,9 @@ void handle_gaming_keycode(uint8_t keycode) {
|
||||
|
||||
/* return 1 if we are quitting */
|
||||
int handle_incoming_keycode_after_halt(uint8_t keycode) {
|
||||
/* All keypresses force a redraw */
|
||||
snake.i_require_redraw = true;
|
||||
|
||||
if (keycode == KEYCODE_SPACE) {
|
||||
snake.is_space_pressed = true;
|
||||
} else if (keycode == (KEYCODE_SPACE | 0x80)) {
|
||||
@ -655,6 +661,8 @@ void handle_time_difference(uint32_t time_diff) {
|
||||
}
|
||||
if (snake.waiting_time > target_required_time) {
|
||||
snake.waiting_time -= target_required_time;
|
||||
snake.i_require_redraw = true;
|
||||
|
||||
if (snake.waiting_reason == waiting_reason_step) {
|
||||
ivec2 tile_pos_ahead = world_walk_direction(
|
||||
snake.snake_head, snake.new_snake_direction);
|
||||
@ -690,7 +698,10 @@ void handle_time_difference(uint32_t time_diff) {
|
||||
construct_snake_tile(
|
||||
get_opposite_direction(snake.cur_snake_direction),
|
||||
snake.new_snake_direction));
|
||||
snake.cur_snake_direction = snake.new_snake_direction;
|
||||
if (!snake.is_dying) {
|
||||
// Don't think about it
|
||||
snake.cur_snake_direction = snake.new_snake_direction;
|
||||
}
|
||||
|
||||
/* Steps 3... */
|
||||
if (is_tile_pupa(get_tile(snake.snake_tail))) {
|
||||
@ -769,8 +780,10 @@ void handle_time_difference(uint32_t time_diff) {
|
||||
void after_awake_action(uint32_t time_diff) {
|
||||
handle_time_difference(time_diff);
|
||||
snake.animation_speed_boost = 0;
|
||||
draw_frame();
|
||||
syscall(SYS_swap_frame, (uintptr_t)frame);
|
||||
if (snake.i_require_redraw) {
|
||||
draw_frame();
|
||||
syscall(SYS_swap_frame, (uintptr_t)frame);
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user