diff options
Diffstat (limited to 'src/entities/mussolini.c')
-rw-r--r-- | src/entities/mussolini.c | 28 |
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) { |