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.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/entities/mussolini.c b/src/entities/mussolini.c
index ed6d182..9f56aa3 100644
--- a/src/entities/mussolini.c
+++ b/src/entities/mussolini.c
@@ -5,19 +5,10 @@
void initMussolini(Entity * entity, Game * game) {
entity->model = &game->assets.models[MUSSOLINI_ASSET];
+ entity->collisionModel = entityCreateCollisionModel(*entity->model);
+ entity->transformedCollisionModel = entityCreateCollisionModel(*entity->model);
setEntityRadius(entity);
- // PID configs.
- PIDConfig stickPIDConfig = {
- .kP = 0.5,
- .kI = 0.0,
- .kD = 0.0,
- .angleMode = false,
- .doClamp = false,
- .min = 0.0,
- .max = 0.0
- };
-
// Allocate data.
entity->data = KF_MALLOC(sizeof(Mussolini));
@@ -27,9 +18,6 @@ void initMussolini(Entity * entity, Game * game) {
}
Mussolini * data = (Mussolini*)entity->data;
- data->xStickPID = createPID(stickPIDConfig);
- data->yStickPID = createPID(stickPIDConfig);
- data->zStickPID = createPID(stickPIDConfig);
}
void closeMussolini(Entity * entity) {
@@ -38,8 +26,18 @@ void closeMussolini(Entity * entity) {
}
void updateMussolini(Game * game, Entity * entity) {
- Entity * ship = getEntityFromWorld(game->world, 0);
+ entityUpdateLastValues(entity);
+
+ float t = GetFrameTime();
+ Entity * player = getEntityFromWorld(game->world, 0);
Mussolini * data = (Mussolini*)entity->data;
+
+ // Look at player.
+ Matrix matrix = MatrixLookAt(player->position, entity->position, (Vector3){0.0, 1.0, 0.0});
+ Quaternion rotation = QuaternionInvert(QuaternionFromMatrix(matrix));
+ entity->rotation = QuaternionSlerp(entity->rotation, rotation, t * MUSSOLINI_TURN_SPEED);
+
+ entityCheckTransformedCollisionModel(entity);
}
void drawMussolini(Game * game, Entity * entity) {