Tweak player's movement and jump code
This commit is contained in:
		
							
								
								
									
										33
									
								
								player.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								player.c
									
									
									
									
									
								
							| @@ -13,11 +13,12 @@ | |||||||
|  |  | ||||||
| void    get_player_controls(Player *player); | void    get_player_controls(Player *player); | ||||||
| void    set_x_movement     (Player *player); | void    set_x_movement     (Player *player); | ||||||
|  | void    player_move        (Player *player); | ||||||
| void    player_dash        (Player *player); | void    player_dash        (Player *player); | ||||||
| void    player_jump        (Player *player); | void    player_jump        (Player *player); | ||||||
| void    player_fall        (Player *player); | void    player_fall        (Player *player); | ||||||
| int32_t player_gravity     (Player *player); |  | ||||||
| bool    player_on_ground   (Player *player); | bool    player_on_ground   (Player *player); | ||||||
|  | int32_t player_gravity     (Player *player); | ||||||
| State   *update_state      (Player *player, uint32_t state); | State   *update_state      (Player *player, uint32_t state); | ||||||
| State   *idle_state        (StateMachine *sm, Player *player); | State   *idle_state        (StateMachine *sm, Player *player); | ||||||
| State   *walk_state        (StateMachine *sm, Player *player); | State   *walk_state        (StateMachine *sm, Player *player); | ||||||
| @@ -41,7 +42,7 @@ void player_init(Player *player, SDL_Renderer *renderer, SDL_Rect position) { | |||||||
| 	player->animations[PLAYER_STATE_JUMP] =  | 	player->animations[PLAYER_STATE_JUMP] =  | ||||||
| 			ap_init(renderer, "knight_player/Jump_KG_2.png",    100, SPRITE_WIDTH, SPRITE_HEIGHT, false); | 			ap_init(renderer, "knight_player/Jump_KG_2.png",    100, SPRITE_WIDTH, SPRITE_HEIGHT, false); | ||||||
| 	player->animations[PLAYER_STATE_FALL] =  | 	player->animations[PLAYER_STATE_FALL] =  | ||||||
| 			ap_init(renderer, "knight_player/Fall_KG_2.png",     80, SPRITE_WIDTH, SPRITE_HEIGHT, false); | 			ap_init(renderer, "knight_player/Fall_KG_2.png",     50, SPRITE_WIDTH, SPRITE_HEIGHT, false); | ||||||
|  |  | ||||||
| 	player->states[PLAYER_STATE_IDLE] = (State){ .state_func = (StateFunc *)idle_state }; | 	player->states[PLAYER_STATE_IDLE] = (State){ .state_func = (StateFunc *)idle_state }; | ||||||
| 	player->states[PLAYER_STATE_WALK] = (State){ .state_func = (StateFunc *)walk_state }; | 	player->states[PLAYER_STATE_WALK] = (State){ .state_func = (StateFunc *)walk_state }; | ||||||
| @@ -57,13 +58,7 @@ void player_init(Player *player, SDL_Renderer *renderer, SDL_Rect position) { | |||||||
| void player_update(Player *player, uint32_t ticks) { | void player_update(Player *player, uint32_t ticks) { | ||||||
| 	get_player_controls(player); | 	get_player_controls(player); | ||||||
| 	sm_run(&(player->state_machine), (void *)player); | 	sm_run(&(player->state_machine), (void *)player); | ||||||
|  | 	player_move(player); | ||||||
| 	player->position.x += player->movement.x; |  | ||||||
| 	player->position.y += player->movement.y; |  | ||||||
| 	if (player->position.y > player->base_y) { |  | ||||||
| 		player->position.y = player->base_y; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ap_update(&(player->animations[player->current_state]), ticks); | 	ap_update(&(player->animations[player->current_state]), ticks); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -98,24 +93,36 @@ void set_x_movement(Player *player) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void player_move(Player *player) { | ||||||
|  | 	player->position.x += player->movement.x; | ||||||
|  | 	player->position.y += player->movement.y; | ||||||
|  | 	if (player->position.y > player->base_y) { | ||||||
|  | 		player->position.y = player->base_y; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| void player_dash(Player *player) { | void player_dash(Player *player) { | ||||||
| 	player->movement.x = player->x_direction * player->velocity * 2; | 	player->movement.x = player->x_direction * player->velocity * 2; | ||||||
| } | } | ||||||
|  |  | ||||||
| void player_jump(Player *player) { | void player_jump(Player *player) { | ||||||
| 	player->movement.y = player->velocity * 6 * -1; | 	player->movement.y = player->velocity * 7 * -1; | ||||||
| } | } | ||||||
|  |  | ||||||
| void player_fall(Player *player) { | void player_fall(Player *player) { | ||||||
| 	player->movement.y = player->velocity * 6; | 	player->movement.y = player->velocity * 6; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | bool player_on_ground(Player *player) { | ||||||
|  | 	return player->position.y == player->base_y; | ||||||
|  | } | ||||||
|  |  | ||||||
| int32_t player_gravity(Player *player) { | int32_t player_gravity(Player *player) { | ||||||
| 	return player->velocity * 0.5; | 	return player->velocity * 0.5; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool player_on_ground(Player *player) { | bool player_falling(Player *player) { | ||||||
| 	return player->position.y == player->base_y; | 	return player->movement.y > 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| State *update_state(Player *player, uint32_t state) { | State *update_state(Player *player, uint32_t state) { | ||||||
| @@ -221,7 +228,7 @@ State *fall_state(StateMachine *sm, Player *player) { | |||||||
| 	bool reset     = false; | 	bool reset     = false; | ||||||
| 	uint32_t state = PLAYER_STATE_FALL; | 	uint32_t state = PLAYER_STATE_FALL; | ||||||
|  |  | ||||||
| 	if (player->animations[PLAYER_STATE_FALL].finished || player_on_ground(player)) { | 	if (player->animations[PLAYER_STATE_FALL].finished && player_on_ground(player)) { | ||||||
| 		player->movement.y = 0; | 		player->movement.y = 0; | ||||||
| 		reset              = true; | 		reset              = true; | ||||||
| 		state              = PLAYER_STATE_IDLE; | 		state              = PLAYER_STATE_IDLE; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user