From c160543a7982a62062aae978da08e4f18ae1e712 Mon Sep 17 00:00:00 2001
From: nathansmithsmith <nathansmith7@mailfence.com>
Date: Thu, 14 Sep 2023 20:09:12 -0600
Subject: Missile worky worky

---
 src/entities/missile.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 src/entities/missile.c

(limited to 'src/entities/missile.c')

diff --git a/src/entities/missile.c b/src/entities/missile.c
new file mode 100644
index 0000000..c8e22ea
--- /dev/null
+++ b/src/entities/missile.c
@@ -0,0 +1,46 @@
+#include "missile.h"
+#include "game.h"
+#include "assets.h"
+
+// I luv deadly weapons (:
+
+void initMissile(Entity * entity, Game * game) {
+    entity->model = &game->assets.models[MISSILE_ASSET];
+	entity->collisionModel = entityCreateCollisionModel(*entity->model);
+	entity->transformedCollisionModel = entityCreateCollisionModel(*entity->model);
+	setEntityRadius(entity);
+}
+
+void closeMissile(Entity * entity) {
+	entityFreeCollisionModel(entity->collisionModel);
+	entityFreeCollisionModel(entity->transformedCollisionModel);
+}
+
+void updateMissile(Game * game, Entity * entity) {
+    entityUpdateLastValues(entity);
+
+    entityUpdatePosition(entity);
+
+    entityCheckTransformedCollisionModel(entity);
+}
+
+void drawMissile(Game * game, Entity * entity) {
+    entityDraw(entity);
+}
+
+void aimMissileAtTarget(Entity * entity, Vector3 target) {
+    setMissileDirection(entity, Vector3Normalize(Vector3Subtract(entity->position, target)));
+}
+
+void setMissileDirection(Entity * entity, Vector3 direction) {
+    // Get look at matrix and rotation.
+    Matrix matrix = MatrixLookAt(Vector3Zero(), direction, (Vector3){0.0, 1.0, 0.0});
+	entity->rotation = QuaternionInvert(QuaternionFromMatrix(matrix));
+
+    // Set velocity.
+    entity->velocity.velocity = (Vector3){
+        matrix.m2 * MISSILE_SPEED,
+		matrix.m6 * MISSILE_SPEED,
+		matrix.m10 * MISSILE_SPEED
+    };
+}
-- 
cgit v1.2.3