Change dashing end state

master
En Yi 2020-03-07 14:46:59 +08:00
parent e8dbdc68b3
commit b031b26ed8
4 changed files with 32 additions and 27 deletions

View File

@ -126,4 +126,5 @@ struct player_obj init_player_obj();
void player_input_check(struct player_obj *player);
//Debug stuff, debug.c
void state_string(char *str, enum PLAYER_STATE state);
void state_string(char *str, enum PLAYER_STATE state);
void display_input(char *dir);

8
main.c
View File

@ -17,6 +17,11 @@
*
********************************************************************************************/
/* Issues:
Playing with a USB keyboard: Cannot handle simultaneous key input. I think this is more
of a GLFW issue.
*/
#include "header.h"
extern struct kinematic_obj_node *kinematic_HEAD;
int PLAYER_ACCEL = 1500;
@ -31,6 +36,7 @@ int main()
const int screenHeight = 450;
char current_state[20];
char current_spd[50];
//char dir[7];
InitWindow(screenWidth, screenHeight, "raylib");
@ -104,6 +110,8 @@ int main()
DrawFPS(0,0);
state_string(current_state, player.state);
DrawText(current_state, 250, 0, 12, BLACK);
//display_input(dir);
//DrawText(dir, 0, 50, 12, BLACK);
sprintf(current_spd, "Velocity: {%.2f,%.2f}", player.kinematic.velocity.x,player.kinematic.velocity.y);
DrawText(current_spd, 350, 0, 12, BLACK);
EndMode2D();

View File

@ -27,7 +27,7 @@ static Vector2 dash_vec = (Vector2){0.0, 0.0};
const unsigned int run_start_frames = 10;
const unsigned int jump_squat_frames = 4;
const unsigned int land_lag_frames = 6;
const unsigned int land_lag_frames = 2;
const unsigned int dash_time_frames = 8;
const unsigned int afterimage_frames = 10;
@ -126,9 +126,6 @@ void player_input_check(struct player_obj *player){
}
}
}
break;
case TURN_AROUND:
break;
case JUMP_SQUAT:
player->kinematic.set_dim_reduction[1] = 10;
@ -188,29 +185,24 @@ void player_input_check(struct player_obj *player){
else
player->state = IDLE;
}
break;
case DASH_START:
break;
case DASHING:
player->kinematic.velocity.x = dash_vec.x;
player->kinematic.velocity.y = dash_vec.y;
++frame_counter;
if (frame_counter > dash_time_frames){
player->kinematic.velocity.x *= 0.7;
player->kinematic.velocity.y *= 0.7;
if (!place_meeting(&player->kinematic, (Vector2){0,1})){
player->kinematic.velocity.x *= 0.8;
player->kinematic.velocity.y *= 0.8;
if (!on_ground){
player->state = JUMPING;
}
else{
player->state = FALLING;
player->state = RUNNING;
dash_count = 1;
jumps = 1;
}
}
break;
case DASH_END:
break;
}
// This accounts for player leaving the ground without jumping (dashing or falling)
@ -235,25 +227,19 @@ void player_input_check(struct player_obj *player){
// Air friction is less than ground friction
if (on_ground == true)
accel.x -= player->kinematic.velocity.x * 7.0;
accel.x -= player->kinematic.velocity.x * 6.0;
else
accel.x -= player->kinematic.velocity.x * 1.0;
accel.x -= player->kinematic.velocity.x * 3.0;
// Handle wall jumping
// TODO: define the wall jump values
if (IsKeyPressed(JUMP)){
if (on_ground == false){
if (place_meeting(&player->kinematic, (Vector2){-8,0})){
bool left_check = place_meeting(&player->kinematic, (Vector2){-8,0});
bool right_check = place_meeting(&player->kinematic, (Vector2){8,0});
if (left_check || right_check){
player->kinematic.velocity.y = -350;
player->kinematic.velocity.x = 400;
player->state = JUMPING;
afterimage_fcounter = 5;
afterimage_c.r = 128;
afterimage_c.g = 128;
afterimage_c.b = 128;
}else if (place_meeting(&player->kinematic, (Vector2){8, 0})){
player->kinematic.velocity.y = -350;
player->kinematic.velocity.x = -400;
player->kinematic.velocity.x = left_check? 400 : -400;
player->state = JUMPING;
afterimage_fcounter = 5;
afterimage_c.r = 128;
@ -281,6 +267,8 @@ void player_input_check(struct player_obj *player){
// Default a direction
if (dash_vec.x == 0 && dash_vec.y == 0){
dash_vec.x = sign(player->kinematic.velocity.x);
if (place_meeting(&player->kinematic, (Vector2){dash_vec.x,0}))
dash_vec.y = -1;
}
// Apply the scalar value, normalised to the unit direction
@ -296,6 +284,7 @@ void player_input_check(struct player_obj *player){
player->state = DASHING;
}
// All velocity modification must be done before calling the move function
move(&player->kinematic, accel);
// Handle jumping

View File

@ -15,4 +15,11 @@ void state_string(char *str, enum PLAYER_STATE state){
case RUN_END: sprintf(str, "%s", "RUN_END");break;
case TURN_AROUND: sprintf(str, "%s", "TURN_AROUND");break;
}
}
void display_input(char *dir){
sprintf(dir, " %c \n%c%c%c", IsKeyDown(UP)? '|':' ',
IsKeyDown(LEFT)? '-':' ',
IsKeyDown(DOWN)? '|':' ',
IsKeyDown(RIGHT)? '-':' ');
}