summaryrefslogtreecommitdiff
path: root/src/player.c
blob: dd758a0b317c600e103cf695962c7c67613157c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <raylib.h>
#include <raymath.h>
#include "physics.h"
#include "player.h"

#define TOP_SPEEDX 100
#define TOP_SPEEDY 100
#define ACCEL_X 40

void add_player(float xpos, float ypos) {
  struct entity player = {
    .flags = (ENTITY_ACTIVE | ENTITY_VISIBLE),
    .type = Player_Entity,

    .position = (Vector2) {xpos, ypos},
    .texture = LoadTexture("assets/Graphics/spritesheet-characters-double.png"),

    .sprite_source_rect = (Rectangle) {
      .x = 0,
      .y = 0,
      .width = 257,
      .height = 257
    },
    .sprite_dest_rect = (Rectangle) {
      .x = -50,
      .y = -50,
      .width = 100,
      .height = 100
    }
  };

  add_entity(&player);
}

float get_x_acceleration_direction() {
  if (IsKeyDown(KEY_A)) {
    return -1.0;
  } else if (IsKeyDown(KEY_D)) {
    return 1.0;
  }

  return 0.0;
}

void handle_movement(struct entity* player, float dt) {
  Vector2 accel = {
    .x = get_x_acceleration_direction() * ACCEL_X,
    .y = GRAVITY
  };

  player->velocity =
    Vector2Add(player->velocity, Vector2Scale(accel, dt * 0.5));
  move_and_collide(player, dt);
  player->velocity =
    Vector2Add(player->velocity, Vector2Scale(accel, dt * 0.5));
}

void handle_input(struct entity* player) {

}

void update_player(struct entity* player, float dt) {
  handle_movement(player, dt);
  handle_input(player);
}