aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornathansmithsmith <nathansmith7@mailfence.com>2023-09-14 20:09:12 -0600
committernathansmithsmith <nathansmith7@mailfence.com>2023-09-14 20:09:12 -0600
commitc160543a7982a62062aae978da08e4f18ae1e712 (patch)
tree81c8e42af6e18d63dd78ed017cf92cd6d7746152
parent3d114213c9797cce0a80918d0771c2314202ef95 (diff)
Missile worky worky
-rw-r--r--assets/missile.mtl12
-rw-r--r--assets/missile.obj266
-rw-r--r--src/assets.c3
-rw-r--r--src/assets.h5
-rw-r--r--src/entities/antifaShip.c1
-rw-r--r--src/entities/guidedMissile.c2
-rw-r--r--src/entities/missile.c46
-rw-r--r--src/entities/missile.h17
-rw-r--r--src/entities/mussolini.c29
-rw-r--r--src/entities/mussolini.h2
-rw-r--r--src/entitiesInclude.h1
-rw-r--r--src/entity.c3
-rw-r--r--src/entity.h5
-rw-r--r--src/game.c2
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.
diff --git a/src/game.c b/src/game.c
index 0079e7f..8ee592b 100644
--- a/src/game.c
+++ b/src/game.c
@@ -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(