|
|
@ -21,6 +21,7 @@ |
|
|
|
#include <string.h> |
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
|
|
static void player_on_mousebutton_released(const struct Event* event); |
|
|
|
static void player_on_mousebutton_released(const struct Event* event); |
|
|
|
|
|
|
|
static void player_on_input_map_released(const struct Event* event); |
|
|
|
|
|
|
|
|
|
|
|
void player_init(struct Player* player, struct Scene* scene) |
|
|
|
void player_init(struct Player* player, struct Scene* scene) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -41,6 +42,7 @@ void player_init(struct Player* player, struct Scene* scene) |
|
|
|
player->min_downward_distance = hashmap_float_get(config, "player_min_downward_distance"); |
|
|
|
player->min_downward_distance = hashmap_float_get(config, "player_min_downward_distance"); |
|
|
|
player->min_forward_distance = hashmap_float_get(config, "player_min_forward_distance"); |
|
|
|
player->min_forward_distance = hashmap_float_get(config, "player_min_forward_distance"); |
|
|
|
player->grounded = true; |
|
|
|
player->grounded = true; |
|
|
|
|
|
|
|
player->can_jump = true; |
|
|
|
player->health = 100; |
|
|
|
player->health = 100; |
|
|
|
player->key_mask = 0; |
|
|
|
player->key_mask = 0; |
|
|
|
|
|
|
|
|
|
|
@ -89,11 +91,13 @@ void player_init(struct Player* player, struct Scene* scene) |
|
|
|
sound_listener_update(game_state->sound); |
|
|
|
sound_listener_update(game_state->sound); |
|
|
|
|
|
|
|
|
|
|
|
event_manager_subscribe(game_state->event_manager, EVT_MOUSEBUTTON_RELEASED, &player_on_mousebutton_released); |
|
|
|
event_manager_subscribe(game_state->event_manager, EVT_MOUSEBUTTON_RELEASED, &player_on_mousebutton_released); |
|
|
|
|
|
|
|
event_manager_subscribe(game_state->event_manager, EVT_INPUT_MAP_RELEASED, &player_on_input_map_released); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void player_destroy(struct Player* player) |
|
|
|
void player_destroy(struct Player* player) |
|
|
|
{ |
|
|
|
{ |
|
|
|
event_manager_unsubscribe(game_state_get()->event_manager, EVT_MOUSEBUTTON_RELEASED, &player_on_mousebutton_released); |
|
|
|
event_manager_unsubscribe(game_state_get()->event_manager, EVT_MOUSEBUTTON_RELEASED, &player_on_mousebutton_released); |
|
|
|
|
|
|
|
event_manager_unsubscribe(game_state_get()->event_manager, EVT_INPUT_MAP_RELEASED, &player_on_input_map_released); |
|
|
|
entity_reset(player, player->base.id); |
|
|
|
entity_reset(player, player->base.id); |
|
|
|
scene_entity_base_remove(game_state_get()->scene, &player->base); |
|
|
|
scene_entity_base_remove(game_state_get()->scene, &player->base); |
|
|
|
player->base.flags = EF_NONE; |
|
|
|
player->base.flags = EF_NONE; |
|
|
@ -165,11 +169,16 @@ void player_update_physics(struct Player* player, struct Scene* scene, float fix |
|
|
|
if(input_map_state_get("Move_Right", KS_PRESSED)) move_direction.x += 1.f; |
|
|
|
if(input_map_state_get("Move_Right", KS_PRESSED)) move_direction.x += 1.f; |
|
|
|
if(input_map_state_get("Jump", KS_PRESSED)) |
|
|
|
if(input_map_state_get("Jump", KS_PRESSED)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if(player->grounded) |
|
|
|
if(player->grounded && player->can_jump) |
|
|
|
{ |
|
|
|
{ |
|
|
|
move_speed_vertical += player->jump_speed; |
|
|
|
move_speed_vertical += player->jump_speed; |
|
|
|
jumping = true; |
|
|
|
jumping = true; |
|
|
|
player->grounded = false; |
|
|
|
player->grounded = false; |
|
|
|
|
|
|
|
player->can_jump = false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
player->can_jump = false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -293,6 +302,17 @@ void player_update_physics(struct Player* player, struct Scene* scene, float fix |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debug_vars_show_bool("Grounded", player->grounded); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void player_on_input_map_released(const struct Event* event) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
struct Game_State* game_state = game_state_get(); |
|
|
|
|
|
|
|
if(strncmp("Jump", event->input_map.name, HASH_MAX_KEY_LEN) == 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
struct Player* player = &game_state->scene->player; |
|
|
|
|
|
|
|
player->can_jump = true; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void player_on_mousebutton_released(const struct Event* event) |
|
|
|
void player_on_mousebutton_released(const struct Event* event) |
|
|
|