aboutsummaryrefslogtreecommitdiff
path: root/src/entities/mussolini.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/entities/mussolini.c')
-rw-r--r--src/entities/mussolini.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/entities/mussolini.c b/src/entities/mussolini.c
index 9f56aa3..151e050 100644
--- a/src/entities/mussolini.c
+++ b/src/entities/mussolini.c
@@ -2,6 +2,9 @@
#include "assets.h"
#include "game.h"
#include "util.h"
+#include "missile.h"
+#include "world.h"
+#include "entity.h"
void initMussolini(Entity * entity, Game * game) {
entity->model = &game->assets.models[MUSSOLINI_ASSET];
@@ -18,11 +21,35 @@ void initMussolini(Entity * entity, Game * game) {
}
Mussolini * data = (Mussolini*)entity->data;
+
+ data->timeSinceLastMissile = GetTime();
}
void closeMussolini(Entity * entity) {
if (entity->data != NULL)
KF_FREE(entity->data);
+
+ entityFreeCollisionModel(entity->collisionModel);
+ entityFreeCollisionModel(entity->transformedCollisionModel);
+}
+
+void updateMussoliniGuns(Game * game, Entity * entity) {
+ double t = GetTime();
+ Entity * player = getEntityFromWorld(game->world, 0);
+ Mussolini * data = (Mussolini*)entity->data;
+
+ if (t - data->timeSinceLastMissile < MUSSOLINI_MISSILE_DOWN_COOL)
+ return;
+
+ // Shoot missile.
+ Entity missile = createEntity(ENTITY_MISSILE, game);
+ missile.position = entity->position;
+ aimMissileAtTarget(&missile, player->position);
+ scheduleEntityToAdd(&game->world, missile);
+
+ puts("shoot shoot");
+
+ data->timeSinceLastMissile = t;
}
void updateMussolini(Game * game, Entity * entity) {
@@ -32,6 +59,8 @@ void updateMussolini(Game * game, Entity * entity) {
Entity * player = getEntityFromWorld(game->world, 0);
Mussolini * data = (Mussolini*)entity->data;
+ updateMussoliniGuns(game, entity);
+
// Look at player.
Matrix matrix = MatrixLookAt(player->position, entity->position, (Vector3){0.0, 1.0, 0.0});
Quaternion rotation = QuaternionInvert(QuaternionFromMatrix(matrix));