aboutsummaryrefslogtreecommitdiff
path: root/src/entities/missile.c
diff options
context:
space:
mode:
authornathansmithsmith <nathansmith7@mailfence.com>2023-09-14 20:09:12 -0600
committernathansmithsmith <nathansmith7@mailfence.com>2023-09-14 20:09:12 -0600
commitc160543a7982a62062aae978da08e4f18ae1e712 (patch)
tree81c8e42af6e18d63dd78ed017cf92cd6d7746152 /src/entities/missile.c
parent3d114213c9797cce0a80918d0771c2314202ef95 (diff)
Missile worky worky
Diffstat (limited to 'src/entities/missile.c')
-rw-r--r--src/entities/missile.c46
1 files changed, 46 insertions, 0 deletions
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
+ };
+}