#include "player.h" #include "tomcat/util/util_time.h" #include "tomcat/input.h" #include "tomcat/util/util.h" #define MAX_MOVEMENT_SPEED 10 #define MAX_ROTATION_SPEED 100 #define GRAVITY -15 #define JUMP_POWER 7 static void jump(Player *player) { player->verticalSpeed = JUMP_POWER; } static void check_input(Player *player) { if(Input_isKeyPressed(SDL_SCANCODE_W)) { player->speed = MAX_MOVEMENT_SPEED; } else if(Input_isKeyPressed(SDL_SCANCODE_S)) { player->speed = -MAX_MOVEMENT_SPEED; } else { player->speed = 0.0f; } if(Input_isKeyPressed(SDL_SCANCODE_A)) { player->turnSpeed = MAX_ROTATION_SPEED; } else if(Input_isKeyPressed(SDL_SCANCODE_D)) { player->turnSpeed = -MAX_ROTATION_SPEED; } else { player->turnSpeed = 0.0f; } if(Input_isKeyPressed(SDL_SCANCODE_SPACE)) { jump(player); } } void Player_Init(Player *player) { Entity *e = &player->entity; memset(player, 0, sizeof(Player)); e->position = (Vec3){ 0.0f, 35.0f, 0.0f }; e->scale[0] = 1.0f; e->scale[1] = 1.0f; e->scale[2] = 1.0f; } void Player_Update(Player *player, Terrain *terrain) { check_input(player); player->entity.rotY += player->turnSpeed * Time_GetFrameTime(); player->entity.position.x += SDL_sinf(toRadians(player->entity.rotY)) * player->speed * Time_GetFrameTime(); player->entity.position.z += SDL_cosf(toRadians(player->entity.rotY)) * player->speed * Time_GetFrameTime(); /* player->verticalSpeed += GRAVITY * Time_GetFrameTime(); player->entity.position.y += player->verticalSpeed * Time_GetFrameTime(); */ GLfloat terrainHeight = Terrain_GetHeightOfTerrain(terrain, player->entity.position.x, player->entity.position.z); if(player->entity.position.y - 1.0f < terrainHeight) { //player->entity.position.y = terrainHeight + 1.0f; //player->verticalSpeed = 0.0f; } }