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 | |
parent | 3d114213c9797cce0a80918d0771c2314202ef95 (diff) |
Missile worky worky
-rw-r--r-- | assets/missile.mtl | 12 | ||||
-rw-r--r-- | assets/missile.obj | 266 | ||||
-rw-r--r-- | src/assets.c | 3 | ||||
-rw-r--r-- | src/assets.h | 5 | ||||
-rw-r--r-- | src/entities/antifaShip.c | 1 | ||||
-rw-r--r-- | src/entities/guidedMissile.c | 2 | ||||
-rw-r--r-- | src/entities/missile.c | 46 | ||||
-rw-r--r-- | src/entities/missile.h | 17 | ||||
-rw-r--r-- | src/entities/mussolini.c | 29 | ||||
-rw-r--r-- | src/entities/mussolini.h | 2 | ||||
-rw-r--r-- | src/entitiesInclude.h | 1 | ||||
-rw-r--r-- | src/entity.c | 3 | ||||
-rw-r--r-- | src/entity.h | 5 | ||||
-rw-r--r-- | src/game.c | 2 |
14 files changed, 386 insertions, 8 deletions
diff --git a/assets/missile.mtl b/assets/missile.mtl new file mode 100644 index 0000000..f1d467d --- /dev/null +++ b/assets/missile.mtl @@ -0,0 +1,12 @@ +# Blender 3.5.1 MTL File: 'missile.blend' +# www.blender.org + +newmtl Material.002 +Ns 250.000000 +Ka 1.000000 1.000000 1.000000 +Kd 0.800000 0.800000 0.800000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.450000 +d 1.000000 +illum 2 diff --git a/assets/missile.obj b/assets/missile.obj new file mode 100644 index 0000000..beb706e --- /dev/null +++ b/assets/missile.obj @@ -0,0 +1,266 @@ +# Blender 3.5.1 +# www.blender.org +mtllib missile.mtl +o Cylinder +v 0.000000 0.630317 -0.630317 +v 0.000000 0.389599 3.000295 +v 0.445701 0.445701 -0.630317 +v 0.275488 0.275488 3.000295 +v 0.630317 -0.000000 -0.630317 +v 0.389599 0.000000 3.000295 +v 0.445701 -0.445701 -0.630317 +v 0.275488 -0.275488 3.000295 +v 0.000000 -0.630317 -0.630317 +v 0.000000 -0.389599 3.000295 +v -0.445701 -0.445701 -0.630317 +v -0.275488 -0.275488 3.000295 +v -0.630317 -0.000000 -0.630317 +v -0.389599 0.000000 3.000295 +v -0.445701 0.445701 -0.630317 +v -0.275488 0.275488 3.000295 +v 0.000000 0.000000 3.982579 +v 0.000000 0.558326 -0.792230 +v 0.394796 0.394796 -0.792230 +v 0.558326 -0.000000 -0.792230 +v 0.394796 -0.394796 -0.792230 +v 0.000000 -0.558326 -0.792230 +v -0.394796 -0.394796 -0.792230 +v -0.558326 -0.000000 -0.792230 +v -0.394796 0.394796 -0.792230 +v 0.000000 0.630317 -0.630317 +v 0.394796 0.394796 -0.792230 +v 0.000000 0.558326 -0.792230 +v 0.445701 0.445701 -0.630317 +v 0.945701 0.945701 -1.130317 +v 1.130317 0.500000 -1.130317 +v 0.894796 0.894796 -1.292230 +v 1.058326 0.500000 -1.292230 +v 1.130317 -0.500000 -1.130317 +v 0.945701 -0.945701 -1.130317 +v 1.058326 -0.500000 -1.292230 +v 0.894796 -0.894796 -1.292230 +v -1.130317 0.500000 -1.130317 +v -0.945701 0.945701 -1.130317 +v -1.058326 0.500000 -1.292230 +v -0.894796 0.894796 -1.292230 +v -0.945701 -0.945701 -1.130317 +v -1.130317 -0.500000 -1.130317 +v -0.894796 -0.894796 -1.292230 +v -1.058326 -0.500000 -1.292230 +vn 0.3820 0.9222 0.0611 +vn 0.9222 0.3820 0.0611 +vn 0.3820 -0.9222 0.0611 +vn -0.3820 -0.9222 0.0611 +vn -0.0000 -0.0000 1.0000 +vn -0.9222 0.3820 0.0611 +vn -0.3820 0.9222 0.0611 +vn 0.5615 -0.2326 0.7941 +vn 0.8675 0.3593 0.3441 +vn -0.3593 -0.8675 0.3441 +vn -0.3593 0.8675 0.3441 +vn 0.3593 -0.8675 0.3441 +vn -0.0000 -0.0000 -1.0000 +vn -0.5615 -0.2326 0.7941 +vn 0.3540 -0.8546 -0.3800 +vn -0.5518 -0.7971 -0.2453 +vn -0.7071 0.7071 -0.0000 +vn -0.3540 -0.8546 -0.3800 +vn -0.3540 0.8546 -0.3800 +vn -0.9222 -0.3820 0.0611 +vn 0.3540 0.8546 -0.3800 +vn 0.9222 -0.3820 0.0611 +vn 0.8546 0.3540 -0.3800 +vn -0.5615 -0.2326 -0.7941 +vn 0.5615 0.2326 0.7941 +vn 0.8546 -0.3540 -0.3800 +vn -0.7071 -0.7071 -0.0000 +vn -0.5615 0.2326 -0.7941 +vn -0.8546 0.3540 -0.3800 +vn 0.5615 -0.2326 -0.7941 +vn -0.5615 0.2326 0.7941 +vn 0.7071 0.7071 -0.0000 +vn -0.8546 -0.3540 -0.3800 +vn 0.7071 -0.0000 0.7071 +vn 0.7071 -0.7071 -0.0000 +vn 0.5615 0.2326 -0.7941 +vn 0.3593 0.8675 0.3441 +vn -0.8675 -0.3593 0.3441 +vn -0.8675 0.3593 0.3441 +vn 0.8675 -0.3593 0.3441 +vn -0.7070 -0.7072 -0.0000 +vn 0.9137 -0.0000 -0.4063 +vn -0.7071 -0.0000 -0.7071 +vn -0.7071 -0.0000 0.7071 +vn -0.9137 -0.0000 -0.4063 +vn 0.7071 -0.0000 -0.7071 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 0.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.875000 0.500000 +vt 0.000000 0.000000 +vt 0.875000 1.000000 +vt 0.750000 0.500000 +vt 0.000000 0.000000 +vt 0.625000 0.500000 +vt 0.625000 1.000000 +vt 0.500000 0.500000 +vt 0.500000 1.000000 +vt 0.375000 0.500000 +vt 0.375000 1.000000 +vt 0.250000 0.500000 +vt 0.000000 0.000000 +vt 0.250000 1.000000 +vt 0.125000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.490000 +vt 0.000000 0.500000 +vt 0.875000 0.500000 +vt 0.919706 0.419706 +vt 0.000000 0.000000 +vt 0.990000 0.250000 +vt 0.625000 0.500000 +vt 0.919706 0.080294 +vt 0.750000 0.010000 +vt 0.500000 0.500000 +vt 0.375000 0.500000 +vt 0.580294 0.080294 +vt 0.000000 0.000000 +vt 0.250000 0.500000 +vt 0.510000 0.250000 +vt 0.000000 0.000000 +vt 0.580294 0.419706 +vt 0.125000 0.500000 +vt 0.000000 0.000000 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 0.919706 0.419706 +vt 0.875000 0.500000 +vt 0.000000 0.000000 +vt 0.000000 0.500000 +vt 0.750000 0.490000 +vt 0.875000 0.500000 +vt 0.875000 0.500000 +vt 0.750000 0.500000 +vt 0.875000 0.500000 +vt 0.919706 0.419706 +vt 0.990000 0.250000 +vt 0.750000 0.500000 +vt 0.750000 0.500000 +vt 0.625000 0.500000 +vt 0.990000 0.250000 +vt 0.750000 0.500000 +vt 0.919706 0.080294 +vt 0.625000 0.500000 +vt 0.250000 0.500000 +vt 0.000000 0.000000 +vt 0.125000 0.500000 +vt 0.250000 0.500000 +vt 0.510000 0.250000 +vt 0.000000 0.000000 +vt 0.580294 0.419706 +vt 0.125000 0.500000 +vt 0.375000 0.500000 +vt 0.250000 0.500000 +vt 0.000000 0.000000 +vt 0.375000 0.500000 +vt 0.580294 0.080294 +vt 0.250000 0.500000 +vt 0.510000 0.250000 +vt 0.000000 0.000000 +s 0 +usemtl Material.002 +f 2/4/1 3/6/1 1/2/1 +f 6/10/2 3/6/2 4/7/2 +f 8/12/3 9/13/3 7/11/3 +f 10/14/4 11/15/4 9/13/4 +f 19/28/5 28/50/5 27/46/5 +f 14/18/6 15/20/6 13/17/6 +f 16/21/7 1/1/7 15/20/7 +f 7/11/8 34/58/8 5/9/8 +f 4/7/9 17/23/9 6/10/9 +f 17/24/10 12/16/10 10/14/10 +f 16/22/11 17/23/11 2/3/11 +f 8/12/12 17/24/12 10/14/12 +f 21/32/13 23/36/13 25/41/13 +f 11/15/14 43/73/14 42/72/14 +f 9/13/15 21/31/15 7/11/15 +f 24/38/16 38/64/16 40/67/16 +f 19/27/17 30/52/17 32/54/17 +f 11/15/18 22/34/18 9/13/18 +f 1/1/19 25/42/19 15/20/19 +f 18/26/5 26/45/5 28/49/5 +f 14/19/20 11/15/20 12/16/20 +f 27/47/21 26/45/21 29/51/21 +f 6/10/22 7/11/22 5/9/22 +f 1/2/5 29/51/5 26/44/5 +f 3/6/5 27/47/5 29/51/5 +f 31/53/23 32/54/23 30/52/23 +f 19/28/24 33/56/24 20/30/24 +f 3/6/25 31/53/25 30/52/25 +f 35/59/26 36/61/26 34/58/26 +f 21/31/27 35/59/27 7/11/27 +f 21/32/28 36/60/28 37/62/28 +f 39/66/29 40/67/29 38/64/29 +f 25/41/30 40/68/30 41/70/30 +f 15/20/31 38/64/31 13/17/31 +f 25/42/32 39/66/32 15/20/32 +f 43/73/33 44/75/33 42/72/33 +f 31/53/34 5/9/34 34/58/34 +f 23/35/35 42/72/35 44/75/35 +f 23/36/36 45/78/36 24/39/36 +f 4/7/37 2/3/37 17/23/37 +f 2/4/1 4/8/1 3/6/1 +f 6/10/2 5/9/2 3/6/2 +f 8/12/3 10/14/3 9/13/3 +f 10/14/4 12/16/4 11/15/4 +f 19/28/5 18/25/5 28/50/5 +f 14/18/6 16/22/6 15/20/6 +f 16/21/7 2/5/7 1/1/7 +f 7/11/8 35/59/8 34/58/8 +f 17/24/38 14/19/38 12/16/38 +f 16/22/39 14/18/39 17/23/39 +f 8/12/40 6/10/40 17/24/40 +f 25/41/13 18/25/13 19/28/13 +f 19/28/13 20/30/13 21/32/13 +f 21/32/13 22/33/13 23/36/13 +f 23/36/13 24/39/13 25/41/13 +f 25/41/13 19/28/13 21/32/13 +f 11/15/14 13/17/14 43/73/14 +f 9/13/15 22/34/15 21/31/15 +f 24/38/16 13/17/16 38/64/16 +f 19/27/17 3/6/17 30/52/17 +f 11/15/18 23/35/18 22/34/18 +f 1/1/19 18/26/19 25/42/19 +f 18/26/5 1/1/5 26/45/5 +f 14/19/20 13/17/20 11/15/20 +f 27/47/21 28/50/21 26/45/21 +f 6/10/22 8/12/22 7/11/22 +f 1/2/5 3/6/5 29/51/5 +f 3/6/5 19/27/5 27/47/5 +f 31/53/23 33/57/23 32/54/23 +f 19/28/24 32/55/24 33/56/24 +f 3/6/25 5/9/25 31/53/25 +f 35/59/26 37/63/26 36/61/26 +f 21/31/27 37/63/27 35/59/27 +f 21/32/28 20/30/28 36/60/28 +f 39/66/29 41/71/29 40/67/29 +f 25/41/30 24/39/30 40/68/30 +f 15/20/31 39/66/31 38/64/31 +f 25/42/32 41/71/32 39/66/32 +f 43/73/33 45/77/33 44/75/33 +f 23/35/35 11/15/35 42/72/35 +f 23/36/36 44/76/36 45/78/36 +f 23/37/41 19/29/5 27/48/32 +f 34/58/42 33/57/42 31/53/42 +f 36/61/43 20/30/43 33/57/43 +f 13/17/44 38/64/44 43/73/44 +f 38/65/45 45/79/45 43/74/45 +f 24/40/46 45/79/46 40/69/46 +f 23/37/13 25/43/13 19/29/13 +f 34/58/42 36/61/42 33/57/42 +f 38/65/45 40/69/45 45/79/45 diff --git a/src/assets.c b/src/assets.c index 94f2aa8..fd11707 100644 --- a/src/assets.c +++ b/src/assets.c @@ -14,7 +14,8 @@ const char modelAssetPaths[MODEL_ASSET_COUNT][ASSET_PATH_MAX] = { "/home/nathan/Documents/KillaFacsista/assets/maresciallo.obj", "/home/nathan/Documents/KillaFacsista/assets/generale.obj", "/home/nathan/Documents/KillaFacsista/assets/mussolini.obj", - "/home/nathan/Documents/KillaFacsista/assets/guidedMissile.obj" + "/home/nathan/Documents/KillaFacsista/assets/guidedMissile.obj", + "/home/nathan/Documents/KillaFacsista/assets/missile.obj" }; void LoadAssets(Assets * assets) { diff --git a/src/assets.h b/src/assets.h index 63839ee..ed842a6 100644 --- a/src/assets.h +++ b/src/assets.h @@ -6,7 +6,7 @@ #define ASSET_PATH_MAX 255 #define TEXTURE_ASSET_COUNT 3 -#define MODEL_ASSET_COUNT 8 +#define MODEL_ASSET_COUNT 9 // Paths to assets. extern const char textureAssetPaths[TEXTURE_ASSET_COUNT][ASSET_PATH_MAX]; @@ -30,7 +30,8 @@ enum { MARESCIALLO_ASSET, GENERALE_ASSET, MUSSOLINI_ASSET, - GUIDED_MISSILE_ASSET + GUIDED_MISSILE_ASSET, + MISSILE_ASSET }; typedef struct Assets { diff --git a/src/entities/antifaShip.c b/src/entities/antifaShip.c index f6a9ec9..fb307fb 100644 --- a/src/entities/antifaShip.c +++ b/src/entities/antifaShip.c @@ -2,6 +2,7 @@ #include "game.h" #include "settings.h" #include "bullets.h" +#include "assets.h" void initAntifaShip(Entity * entity, Game * game) { entity->model = &game->assets.models[ANTIFA_SHIP_ASSET]; diff --git a/src/entities/guidedMissile.c b/src/entities/guidedMissile.c index cd5bbe1..7780404 100644 --- a/src/entities/guidedMissile.c +++ b/src/entities/guidedMissile.c @@ -73,7 +73,7 @@ void guidedMissileGoBoomBoom(Game * game, Entity * entity) { // Get player distance and get the damage the missile will do. float distance = Vector3Distance(player->position, entity->position); - float damage = fabsf(GUIDED_MISSILE_DAMAGE - (distance * GUIDED_MISSILE_BOOM_DISTANCE_MOD)); + float damage = fabs(GUIDED_MISSILE_DAMAGE - (distance * GUIDED_MISSILE_BOOM_DISTANCE_MOD)); // Hurt this mother fucker. player->health -= damage; 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 + }; +} diff --git a/src/entities/missile.h b/src/entities/missile.h new file mode 100644 index 0000000..9c81b52 --- /dev/null +++ b/src/entities/missile.h @@ -0,0 +1,17 @@ +#include "gameCommon.h" +#include "entity.h" + +#ifndef MISSILE_H +#define MISSILE_H + +#define MISSILE_SPEED 100.0 + +void initMissile(Entity * entity, Game * game); +void closeMissile(Entity * entity); +void updateMissile(Game * game, Entity * entity); +void drawMissile(Game * game, Entity * entity); + +void aimMissileAtTarget(Entity * entity, Vector3 target); +void setMissileDirection(Entity * entity, Vector3 direction); + +#endif 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)); diff --git a/src/entities/mussolini.h b/src/entities/mussolini.h index 5238849..9ce453d 100644 --- a/src/entities/mussolini.h +++ b/src/entities/mussolini.h @@ -6,8 +6,10 @@ #define MUSSOLINI_H #define MUSSOLINI_TURN_SPEED 1.0 +#define MUSSOLINI_MISSILE_DOWN_COOL 3.0 typedef struct Mussolini { + double timeSinceLastMissile; } Mussolini; void initMussolini(Entity * entity, Game * game); diff --git a/src/entitiesInclude.h b/src/entitiesInclude.h index be4713c..e1d2cd5 100644 --- a/src/entitiesInclude.h +++ b/src/entitiesInclude.h @@ -6,5 +6,6 @@ #include "entities/generale.h" #include "entities/mussolini.h" #include "entities/guidedMissile.h" +#include "entities/missile.h" // Through the magic of this ugly file you can include all entities at once. diff --git a/src/entity.c b/src/entity.c index fb000a7..4197444 100644 --- a/src/entity.c +++ b/src/entity.c @@ -11,7 +11,8 @@ const EntityTypeInfo entityTypeInfo[ENTITY_TYPE_COUNT] = { (EntityTypeInfo){initMaresciallo, closeMaresciallo, updateMaresciallo, drawMaresciallo}, (EntityTypeInfo){initGenerale, closeGenerale, updateGenerale, drawGenerale}, (EntityTypeInfo){initMussolini, closeMussolini, updateMussolini, drawMussolini}, - (EntityTypeInfo){initGuidedMissile, closeGuidedMissile, updateGuidedMissile, drawGuidedMissile} + (EntityTypeInfo){initGuidedMissile, closeGuidedMissile, updateGuidedMissile, drawGuidedMissile}, + (EntityTypeInfo){initMissile, closeMissile, updateMissile, drawMissile} }; EntityVelocity entityVelocityIdentity() { diff --git a/src/entity.h b/src/entity.h index f67f091..d78f308 100644 --- a/src/entity.h +++ b/src/entity.h @@ -14,10 +14,11 @@ enum { ENTITY_MARESCIALLO, ENTITY_GENERALE, ENTITY_MUSSOLINI, - ENTITY_GUIDED_MISSILE + ENTITY_GUIDED_MISSILE, + ENTITY_MISSILE }; -#define ENTITY_TYPE_COUNT 8 +#define ENTITY_TYPE_COUNT 9 typedef int8_t EntityType; typedef int16_t EntityId; // Id in world. @@ -35,7 +35,7 @@ void initGame(Game * game) { WorldEntry entries[2] = { (WorldEntry){ENTITY_ANTIFA, (Vector3){0.0, 0.0, 0.0}, QuaternionIdentity()}, - (WorldEntry){ENTITY_GENERALE, (Vector3){0.0, 0.0, 10.0}, QuaternionIdentity()} + (WorldEntry){ENTITY_MUSSOLINI, (Vector3){0.0, 0.0, 150.0}, QuaternionIdentity()} }; addEntriesToWorld( |