diff options
author | nathansmithsmith <nathansmith7@mailfence.com> | 2023-09-14 20:09:12 -0600 |
---|---|---|
committer | nathansmithsmith <nathansmith7@mailfence.com> | 2023-09-14 20:09:12 -0600 |
commit | c160543a7982a62062aae978da08e4f18ae1e712 (patch) | |
tree | 81c8e42af6e18d63dd78ed017cf92cd6d7746152 /src/entities/missile.c | |
parent | 3d114213c9797cce0a80918d0771c2314202ef95 (diff) |
Missile worky worky
Diffstat (limited to 'src/entities/missile.c')
-rw-r--r-- | src/entities/missile.c | 46 |
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 + }; +} |