From c136bc1494e68e5a4e9a1cc84087d42009fe56d9 Mon Sep 17 00:00:00 2001
From: Sara <sara@saragerretsen.nl>
Date: Sat, 7 Oct 2023 18:42:09 +0200
Subject: [PATCH] implemented basic player struct with impl for behaviour
 physics and transformable

---
 src/player.c | 33 +++++++++++++++++++++++++++++++++
 src/player.h | 45 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+)
 create mode 100644 src/player.c
 create mode 100644 src/player.h

diff --git a/src/player.c b/src/player.c
new file mode 100644
index 0000000..ba359e2
--- /dev/null
+++ b/src/player.c
@@ -0,0 +1,33 @@
+#include "player.h"
+
+void player_spawn(Player* self, Vector at) {
+    self->transform.position = at;
+}
+
+void player_start(Player* self) {
+    self->transform = IdentityTransform;
+}
+
+Transform* player_get_transform(Player* self) {
+    return &self->transform;
+}
+
+RigidBody* player_get_rigidbody(Player* self) {
+    return self->rigidbody;
+}
+
+Shape* player_get_shape(Player* self) {
+    return self->shape;
+}
+
+Vector* player_get_position(Player* self) {
+    return &self->transform.position;
+}
+
+Vector* player_get_scale(Player* self) {
+    return &self->transform.scale;
+}
+
+float* player_get_rotation(Player* self) {
+    return &self->transform.rotation;
+}
diff --git a/src/player.h b/src/player.h
new file mode 100644
index 0000000..eb1715c
--- /dev/null
+++ b/src/player.h
@@ -0,0 +1,45 @@
+#ifndef _fencer_player_h
+#define _fencer_player_h
+
+#include "physics_entity.h"
+#include "update_entity.h"
+#include "transformable.h"
+#include "sprite.h"
+
+typedef struct Player {
+    Transform transform;
+    RigidBody* rigidbody;
+    Shape* shape;
+
+    Sprite* sprite;
+} Player;
+
+extern void player_spawn(Player* self, Vector at);
+extern void player_start(Player* self);
+extern void player_update(Player* self, float dt);
+
+extern Transform* player_get_transform(Player* self);
+extern RigidBody* player_get_rigidbody(Player* self);
+extern Shape* player_get_shape(Player* self);
+
+extern Vector* player_get_position(Player* self);
+extern Vector* player_get_scale(Player* self);
+extern float* player_get_rotation(Player* self);
+
+impl_Transformable_for(Player,
+    player_get_transform,
+    player_get_position,
+    player_get_scale,
+    player_get_rotation
+)
+impl_PhysicsEntity_for(Player,
+    player_get_rigidbody,
+    player_get_shape
+)
+impl_BehaviourEntity_for(Player,
+    player_start,
+    player_update,
+    player_spawn
+)
+
+#endif // !_fencer_player_h