Changed SDL_DrawLine to SDL_DrawLineF in physics_entity_debug_draw and added input to player

This commit is contained in:
Sara 2023-11-22 15:13:38 +01:00
parent 36d378ec37
commit 2b1aa6236f
3 changed files with 43 additions and 7 deletions

View file

@ -18,11 +18,11 @@ void physics_entity_debug_draw(PhysicsEntity self) {
lhs = camera_world_to_pixel_point(&g_camera, lhs); lhs = camera_world_to_pixel_point(&g_camera, lhs);
rhs = camera_world_to_pixel_point(&g_camera, rhs); rhs = camera_world_to_pixel_point(&g_camera, rhs);
SDL_SetRenderDrawColor(g_renderer, 0, 255, 0, 255); SDL_SetRenderDrawColor(g_renderer, 0, 255, 0, 255);
SDL_RenderDrawLine(g_renderer, lhs.x, lhs.y, rhs.x, rhs.y); SDL_RenderDrawLineF(g_renderer, lhs.x, lhs.y, rhs.x, rhs.y);
rhs = camera_world_to_pixel_point(&g_camera, vaddf(transform->position, rigidbody_get_force(body))); rhs = camera_world_to_pixel_point(&g_camera, vaddf(transform->position, rigidbody_get_force(body)));
SDL_SetRenderDrawColor(g_renderer, 0, 255, 255, 255); SDL_SetRenderDrawColor(g_renderer, 0, 255, 255, 255);
SDL_RenderDrawLine(g_renderer, lhs.x, lhs.y, rhs.x, rhs.y); SDL_RenderDrawLineF(g_renderer, lhs.x, lhs.y, rhs.x, rhs.y);
} }
static inline static inline
Vector _internal_calculate_contact_force(RigidBody* self, Contact* contact) { Vector _internal_calculate_contact_force(RigidBody* self, Contact* contact) {

View file

@ -2,6 +2,23 @@
#include "debug.h" #include "debug.h"
#include "game_world.h" #include "game_world.h"
static inline
void InternalPlayerInitInput(Player* self) {
// HORIZONTAL
playerinput_add(self->input, CompositeAxis1D_as_InputAxis(compositeaxis1d_new(
KeyBind_as_InputAxis(keybind_new(SDL_SCANCODE_A)),
KeyBind_as_InputAxis(keybind_new(SDL_SCANCODE_D)),
InputEvent_Float
)), (InputDelegateFn)PlayerInputHorizontal);
// VERTICAL
playerinput_add(self->input, CompositeAxis1D_as_InputAxis(compositeaxis1d_new(
KeyBind_as_InputAxis(keybind_new(SDL_SCANCODE_S)),
KeyBind_as_InputAxis(keybind_new(SDL_SCANCODE_W)),
InputEvent_Float
)), (InputDelegateFn)PlayerInputVertical);
}
Player* MakePlayer() { Player* MakePlayer() {
Player* self = malloc(sizeof(Player)); Player* self = malloc(sizeof(Player));
ASSERT_RETURN(self != NULL, NULL, "Could not allocate enough space for Player instance"); ASSERT_RETURN(self != NULL, NULL, "Could not allocate enough space for Player instance");
@ -11,14 +28,21 @@ Player* MakePlayer() {
*self = (Player){ *self = (Player){
.transform = IdentityTransform, .transform = IdentityTransform,
.input = playerinput_new(self, -1),
.input_direction = ZeroVector,
.faceDirection = 0, .faceDirection = 0,
.animationStateMachine = state_machine_init(self, PlayerIdle()), .animationStateMachine = state_machine_init(self, PlayerIdle()),
.animFrame = 0, .animFrame = 0,
.sprite = sprite_from_spritesheet(walk, 0), .animFrameInterval = 1.0f / 4.0f,
.animFrameTimer = 0.0f,
.stand = idle, .stand = idle,
.walk = walk, .walk = walk,
.animFrameInterval = 1.0f/4.0f,
.animFrameTimer = 0.0f, .sprite = sprite_from_spritesheet(walk, 0),
}; };
return self; return self;
@ -51,6 +75,10 @@ void PlayerDraw(Player* self) {
sprite_entity_draw(Player_as_SpriteEntity(self)); sprite_entity_draw(Player_as_SpriteEntity(self));
} }
void PlayerInputHorizontal(Player* self, InputEvent event) {}
void PlayerInputVertical(Player* self, InputEvent event) {}
Sprite* PlayerGetSprite(Player* self) { Sprite* PlayerGetSprite(Player* self) {
return self->sprite; return self->sprite;
} }
@ -64,7 +92,8 @@ const State* PlayerAnimationUpdate(Player* self, float deltaTime) {
if (self->animFrameTimer > self->animFrameInterval) { if (self->animFrameTimer > self->animFrameInterval) {
self->animFrameTimer = 0.f; self->animFrameTimer = 0.f;
size_t nextFrame = self->animFrame + 8; ++self->animFrame;
size_t nextFrame = self->animFrame * 8 + self->faceDirection;
sprite_set_tile(self->sprite, nextFrame); sprite_set_tile(self->sprite, nextFrame);
if (nextFrame > spritesheet_get_tile_count(sprite_get_spritesheet(self->sprite))) { if (nextFrame > spritesheet_get_tile_count(sprite_get_spritesheet(self->sprite))) {

View file

@ -8,10 +8,14 @@
#include "behaviour_entity.h" #include "behaviour_entity.h"
#include "state_machine.h" #include "state_machine.h"
#include "transformable.h" #include "transformable.h"
#include "player_input.h"
typedef struct Player { typedef struct Player {
Transform transform; Transform transform;
PlayerInput* input;
Vector input_direction;
unsigned short faceDirection; unsigned short faceDirection;
StateMachine* animationStateMachine; StateMachine* animationStateMachine;
@ -33,6 +37,9 @@ extern void PlayerStart(Player* self);
extern void PlayerDestroy(Player* self); extern void PlayerDestroy(Player* self);
extern void PlayerDraw(Player* self); extern void PlayerDraw(Player* self);
extern void PlayerInputHorizontal(Player* self, InputEvent event);
extern void PlayerInputVertical(Player* self, InputEvent event);
extern Sprite* PlayerGetSprite(Player* self); extern Sprite* PlayerGetSprite(Player* self);
extern Transform* PlayerGetTransform(Player* self); extern Transform* PlayerGetTransform(Player* self);