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;
|
} waiting_reason_t;
|
||||||
|
|
||||||
struct Snake {
|
struct Snake {
|
||||||
|
bool i_require_redraw;
|
||||||
bool is_space_pressed;
|
bool is_space_pressed;
|
||||||
bool is_shift_pressed;
|
bool is_shift_pressed;
|
||||||
game_screen_t game_screen;
|
game_screen_t game_screen;
|
||||||
@ -108,6 +109,7 @@ struct Snake {
|
|||||||
} snake = {1};
|
} snake = {1};
|
||||||
|
|
||||||
void init_snake() {
|
void init_snake() {
|
||||||
|
snake.i_require_redraw = false;
|
||||||
snake.is_space_pressed = false;
|
snake.is_space_pressed = false;
|
||||||
snake.is_shift_pressed = false;
|
snake.is_shift_pressed = false;
|
||||||
snake.game_screen = game_screen_pause;
|
snake.game_screen = game_screen_pause;
|
||||||
@ -554,6 +556,7 @@ void draw_frame() {
|
|||||||
void handle_gaming_keycode(uint8_t keycode) {
|
void handle_gaming_keycode(uint8_t keycode) {
|
||||||
if (keycode == KEYCODE_ESCAPE) {
|
if (keycode == KEYCODE_ESCAPE) {
|
||||||
snake.game_screen = game_screen_pause;
|
snake.game_screen = game_screen_pause;
|
||||||
|
snake.i_require_redraw = true;
|
||||||
}
|
}
|
||||||
if (!snake.is_dying) {
|
if (!snake.is_dying) {
|
||||||
if (is_keycode_for_press_left(keycode) &&
|
if (is_keycode_for_press_left(keycode) &&
|
||||||
@ -574,6 +577,9 @@ void handle_gaming_keycode(uint8_t keycode) {
|
|||||||
|
|
||||||
/* return 1 if we are quitting */
|
/* return 1 if we are quitting */
|
||||||
int handle_incoming_keycode_after_halt(uint8_t keycode) {
|
int handle_incoming_keycode_after_halt(uint8_t keycode) {
|
||||||
|
/* All keypresses force a redraw */
|
||||||
|
snake.i_require_redraw = true;
|
||||||
|
|
||||||
if (keycode == KEYCODE_SPACE) {
|
if (keycode == KEYCODE_SPACE) {
|
||||||
snake.is_space_pressed = true;
|
snake.is_space_pressed = true;
|
||||||
} else if (keycode == (KEYCODE_SPACE | 0x80)) {
|
} 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) {
|
if (snake.waiting_time > target_required_time) {
|
||||||
snake.waiting_time -= target_required_time;
|
snake.waiting_time -= target_required_time;
|
||||||
|
snake.i_require_redraw = true;
|
||||||
|
|
||||||
if (snake.waiting_reason == waiting_reason_step) {
|
if (snake.waiting_reason == waiting_reason_step) {
|
||||||
ivec2 tile_pos_ahead = world_walk_direction(
|
ivec2 tile_pos_ahead = world_walk_direction(
|
||||||
snake.snake_head, snake.new_snake_direction);
|
snake.snake_head, snake.new_snake_direction);
|
||||||
@ -690,7 +698,10 @@ void handle_time_difference(uint32_t time_diff) {
|
|||||||
construct_snake_tile(
|
construct_snake_tile(
|
||||||
get_opposite_direction(snake.cur_snake_direction),
|
get_opposite_direction(snake.cur_snake_direction),
|
||||||
snake.new_snake_direction));
|
snake.new_snake_direction));
|
||||||
|
if (!snake.is_dying) {
|
||||||
|
// Don't think about it
|
||||||
snake.cur_snake_direction = snake.new_snake_direction;
|
snake.cur_snake_direction = snake.new_snake_direction;
|
||||||
|
}
|
||||||
|
|
||||||
/* Steps 3... */
|
/* Steps 3... */
|
||||||
if (is_tile_pupa(get_tile(snake.snake_tail))) {
|
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) {
|
void after_awake_action(uint32_t time_diff) {
|
||||||
handle_time_difference(time_diff);
|
handle_time_difference(time_diff);
|
||||||
snake.animation_speed_boost = 0;
|
snake.animation_speed_boost = 0;
|
||||||
|
if (snake.i_require_redraw) {
|
||||||
draw_frame();
|
draw_frame();
|
||||||
syscall(SYS_swap_frame, (uintptr_t)frame);
|
syscall(SYS_swap_frame, (uintptr_t)frame);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user