feat(player): player now implements physics entity
This commit is contained in:
parent
a70658bab6
commit
333ada2752
|
@ -3,6 +3,7 @@
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "game_world.h"
|
#include "game_world.h"
|
||||||
#include "input_axis.h"
|
#include "input_axis.h"
|
||||||
|
#include "physics_world.h"
|
||||||
|
|
||||||
const Vector PLAYER_SPEED = MakeVector(1.0f, 0.70f);
|
const Vector PLAYER_SPEED = MakeVector(1.0f, 0.70f);
|
||||||
|
|
||||||
|
@ -25,6 +26,13 @@ Player* MakePlayer() {
|
||||||
|
|
||||||
*self = (Player) {
|
*self = (Player) {
|
||||||
.transform = IdentityTransform,
|
.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),
|
.playerInput = playerinput_new(self, -1),
|
||||||
.moveInput = ZeroVector,
|
.moveInput = ZeroVector,
|
||||||
.attackInput = 0,
|
.attackInput = 0,
|
||||||
|
@ -35,6 +43,9 @@ Player* MakePlayer() {
|
||||||
.jab_b = NULL,
|
.jab_b = NULL,
|
||||||
.animationStateMachine = NULL,
|
.animationStateMachine = NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self->rigidbody = rigidbody_make(Player_as_Transformable(self));
|
||||||
|
|
||||||
sprite_set_origin(self->sprite, MakeVector(0.45f, 1.f));
|
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);
|
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* SpawnPlayer(Vector location) {
|
||||||
Player* self = MakePlayer();
|
Player* self = MakePlayer();
|
||||||
self->transform.position = location;
|
self->transform.position = location;
|
||||||
|
|
||||||
game_world_add_entity(Player_as_BehaviourEntity(self));
|
game_world_add_entity(Player_as_BehaviourEntity(self));
|
||||||
|
physics_world_add_entity(Player_as_PhysicsEntity(self));
|
||||||
|
|
||||||
Internal_PlayerInitInput(self);
|
Internal_PlayerInitInput(self);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -84,3 +98,18 @@ void PlayerUpdate(Player* self, float deltaTime) {
|
||||||
void PlayerDraw(Player* self) {
|
void PlayerDraw(Player* self) {
|
||||||
animation_sprite_draw(self->currentAnimation, &self->transform);
|
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) {}
|
||||||
|
|
|
@ -9,12 +9,17 @@
|
||||||
#include "vmath.h"
|
#include "vmath.h"
|
||||||
#include "transform.h"
|
#include "transform.h"
|
||||||
#include "player_input.h"
|
#include "player_input.h"
|
||||||
|
#include "rigidbody.h"
|
||||||
|
#include "shape.h"
|
||||||
|
|
||||||
extern const Vector PLAYER_SPEED;
|
extern const Vector PLAYER_SPEED;
|
||||||
|
|
||||||
typedef struct Player {
|
typedef struct Player {
|
||||||
Transform transform;
|
Transform transform;
|
||||||
|
|
||||||
|
RigidBody* rigidbody;
|
||||||
|
Shape* collisionShape;
|
||||||
|
|
||||||
PlayerInput* playerInput;
|
PlayerInput* playerInput;
|
||||||
|
|
||||||
Vector moveInput;
|
Vector moveInput;
|
||||||
|
@ -44,6 +49,13 @@ void PlayerStart(Player* self);
|
||||||
void PlayerUpdate(Player* self, float deltaTime);
|
void PlayerUpdate(Player* self, float deltaTime);
|
||||||
void PlayerDraw(Player* self);
|
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,
|
impl_Drop_for(Player,
|
||||||
DestroyPlayer
|
DestroyPlayer
|
||||||
)
|
)
|
||||||
|
@ -54,4 +66,15 @@ impl_BehaviourEntity_for(Player,
|
||||||
PlayerDraw
|
PlayerDraw
|
||||||
)
|
)
|
||||||
|
|
||||||
|
impl_Transformable_for(Player,
|
||||||
|
PlayerGetTransform
|
||||||
|
)
|
||||||
|
|
||||||
|
impl_PhysicsEntity_for(Player,
|
||||||
|
PlayerGetRigidBody,
|
||||||
|
PlayerGetCollisionShape,
|
||||||
|
PlayerOnCollision,
|
||||||
|
PlayerOnOverlap
|
||||||
|
)
|
||||||
|
|
||||||
#endif // !FIGHT_PLAYER_H
|
#endif // !FIGHT_PLAYER_H
|
||||||
|
|
Loading…
Reference in a new issue