#ifndef _fencer_player_h #define _fencer_player_h #include "drop.h" #include "physics_entity.h" #include "behaviour_entity.h" #include "transformable.h" #include "collision.h" #include "sprite.h" #include "sprite_entity.h" #include "player_input.h" typedef struct Player { Transform transform; RigidBody* rigidbody; Shape* shape; Vector directional; Sprite* sprite; int is_grounded; PlayerInput* player_input; } Player; extern Player* player_new(); extern void player_spawn(Player* self, Vector at); extern void player_start(Player* self); extern void player_update(Player* self, float dt); extern void player_draw(Player* self); extern void player_free(Player* self); extern void player_collision(Player* self, Collision hit); extern Sprite* player_get_sprite(Player* sprite); extern Transform* player_get_transform(Player* self); extern Transform* player_get_rigidbody_transform(Player* self); extern RigidBody* player_get_rigidbody(Player* self); extern Shape* player_get_shape(Player* self); extern void player_collision_solver(Player* self, List* contacts); impl_Transformable_for(Player, player_get_transform ) impl_SpriteEntity_for(Player, player_get_sprite ) impl_PhysicsEntity_for(Player, player_get_rigidbody, player_get_shape, player_collision, player_collision_solver ) impl_Drop_for(Player, player_free ) impl_BehaviourEntity_for(Player, player_start, player_update, player_spawn, player_draw ) #endif // !_fencer_player_h