Vergessene Dinge eingecheckt.
[hackover2013-badge-firmware.git] / badge / jumpnrun / game_state.c
1 #include "game_state.h"
2
3 void jumpnrun_game_state_init(jumpnrun_game_state *state, jumpnrun_level const *lv) {
4 memset(state, 0, sizeof(*state));
5 jumpnrun_player_spawn(&state->player, lv->start_pos, 99);
6 }
7
8 void jumpnrun_game_state_respawn(jumpnrun_game_state *state, jumpnrun_level const *lv) {
9 jumpnrun_player_respawn(&state->player, lv->start_pos);
10 state->flags = 0;
11 state->screen_left = 0;
12 memset(state->shots, 0, sizeof(state->shots));
13
14 for(size_t i = 0; i < lv->header.enemy_count; ++i) {
15 jumpnrun_enemy_reset(&lv->enemies[i]);
16 }
17 }
18
19 void jumpnrun_shot_spawn(jumpnrun_shot *shot, jumpnrun_game_state const *state) {
20 static vec2d const shot_spawn_inertia = { FIXED_POINT_I(0, 800), FIXED_POINT_I(0, -800) };
21
22 shot->tick = 0;
23 shot->inertia = shot_spawn_inertia;
24
25 if(jumpnrun_moveable_mirrored(&state->player.base)) {
26 shot->current_box = rectangle_new((vec2d) { fixed_point_sub(rectangle_left(&state->player.base.hitbox), FIXED_INT(JUMPNRUN_SHOT_EXTENT)), rectangle_top(&state->player.base.hitbox) },
27 (vec2d) { FIXED_INT(JUMPNRUN_SHOT_EXTENT), FIXED_INT(JUMPNRUN_SHOT_EXTENT) });
28 shot->inertia.x = fixed_point_neg(shot->inertia.x);
29 } else {
30 shot->current_box = rectangle_new((vec2d) { rectangle_right(&state->player.base.hitbox), rectangle_top(&state->player.base.hitbox) },
31 (vec2d) { FIXED_INT(JUMPNRUN_SHOT_EXTENT), FIXED_INT(JUMPNRUN_SHOT_EXTENT) });
32 }
33
34 shot->old_box = shot->current_box;
35 shot->inertia = vec2d_add(shot->inertia, state->player.base.inertia);
36 }
This page took 0.055029 seconds and 5 git commands to generate.