feat(player): player now implements physics entity

This commit is contained in:
Sara 2023-11-24 21:16:28 +01:00
parent a70658bab6
commit 333ada2752
2 changed files with 52 additions and 0 deletions

View file

@ -3,6 +3,7 @@
#include "debug.h"
#include "game_world.h"
#include "input_axis.h"
#include "physics_world.h"
const Vector PLAYER_SPEED = MakeVector(1.0f, 0.70f);
@ -25,6 +26,13 @@ Player* MakePlayer() {
*self = (Player) {
.transform = IdentityTransform,
.rigidbody = NULL,
.collisionShape = shape_new((Vector[]){
MakeVector(-0.5, -0.25),
MakeVector( 0.5, -0.25),
MakeVector( 0.5, 0.25),
MakeVector(-0.5, 0.25)
}, 4),
.playerInput = playerinput_new(self, -1),
.moveInput = ZeroVector,
.attackInput = 0,
@ -35,6 +43,9 @@ Player* MakePlayer() {
.jab_b = NULL,
.animationStateMachine = NULL,
};
self->rigidbody = rigidbody_make(Player_as_Transformable(self));
sprite_set_origin(self->sprite, MakeVector(0.45f, 1.f));
self->idle = animation_sprite_new(self->sprite, spritesheet_load("assets/Player_Idle.png", IVectorFrom(512)), 1.5f, LoopMode_Loop);
@ -50,7 +61,10 @@ Player* MakePlayer() {
Player* SpawnPlayer(Vector location) {
Player* self = MakePlayer();
self->transform.position = location;
game_world_add_entity(Player_as_BehaviourEntity(self));
physics_world_add_entity(Player_as_PhysicsEntity(self));
Internal_PlayerInitInput(self);
return self;
}
@ -84,3 +98,18 @@ void PlayerUpdate(Player* self, float deltaTime) {
void PlayerDraw(Player* self) {
animation_sprite_draw(self->currentAnimation, &self->transform);
}
Transform* PlayerGetTransform(Player* self) {
return &self->transform;
}
RigidBody* PlayerGetRigidBody(Player* self) {
return self->rigidbody;
}
Shape* PlayerGetCollisionShape(Player* self) {
return self->collisionShape;
}
void PlayerOnCollision(Player* self, Collision collision) {}
void PlayerOnOverlap(Player* self, PhysicsEntity other) {}

View file

@ -9,12 +9,17 @@
#include "vmath.h"
#include "transform.h"
#include "player_input.h"
#include "rigidbody.h"
#include "shape.h"
extern const Vector PLAYER_SPEED;
typedef struct Player {
Transform transform;
RigidBody* rigidbody;
Shape* collisionShape;
PlayerInput* playerInput;
Vector moveInput;
@ -44,6 +49,13 @@ void PlayerStart(Player* self);
void PlayerUpdate(Player* self, float deltaTime);
void PlayerDraw(Player* self);
Transform* PlayerGetTransform(Player* self);
RigidBody* PlayerGetRigidBody(Player* self);
Shape* PlayerGetCollisionShape(Player* self);
void PlayerOnCollision(Player* self, Collision collision);
void PlayerOnOverlap(Player* self, PhysicsEntity other);
impl_Drop_for(Player,
DestroyPlayer
)
@ -54,4 +66,15 @@ impl_BehaviourEntity_for(Player,
PlayerDraw
)
impl_Transformable_for(Player,
PlayerGetTransform
)
impl_PhysicsEntity_for(Player,
PlayerGetRigidBody,
PlayerGetCollisionShape,
PlayerOnCollision,
PlayerOnOverlap
)
#endif // !FIGHT_PLAYER_H