aboutsummaryrefslogtreecommitdiff
path: root/src/entities
diff options
context:
space:
mode:
authornathansmithsmith <nathansmith7@mailfence.com>2023-09-11 22:00:33 -0600
committernathansmithsmith <nathansmith7@mailfence.com>2023-09-11 22:00:33 -0600
commitc759231e1e8570ffe5fdda2f1eb5d011b1c6a29f (patch)
tree698f507b15e4fcb7dc25aa61c445ffbc3b604ac5 /src/entities
parentdc23e1b7eafb595808ba161a4b91c8ce49af279f (diff)
Guided missile somewhat worky
Diffstat (limited to 'src/entities')
-rw-r--r--src/entities/antifaShip.c2
-rw-r--r--src/entities/guidedMissile.c48
-rw-r--r--src/entities/guidedMissile.h12
3 files changed, 57 insertions, 5 deletions
diff --git a/src/entities/antifaShip.c b/src/entities/antifaShip.c
index 6e8c239..f6a9ec9 100644
--- a/src/entities/antifaShip.c
+++ b/src/entities/antifaShip.c
@@ -99,7 +99,7 @@ void controlAntifaShipKeyboardAndMouse(Game * game, Entity * entity) {
mouseStick.z = -mouseStick.y;
mouseStick.y = 0.0;
}
-
+
entityJoystickControl(entity, mouseStick, data->forwardSpeed);
}
diff --git a/src/entities/guidedMissile.c b/src/entities/guidedMissile.c
index 744e1cb..53cbaf8 100644
--- a/src/entities/guidedMissile.c
+++ b/src/entities/guidedMissile.c
@@ -3,10 +3,28 @@
#include "game.h"
void initGuidedMissile(Entity * entity, Game * game) {
- entity->model = &game->assets.models[MARESCIALLO_ASSET];
+ entity->model = &game->assets.models[GUIDED_MISSILE_ASSET];
entity->collisionModel = entityCreateCollisionModel(*entity->model);
entity->transformedCollisionModel = entityCreateCollisionModel(*entity->model);
setEntityRadius(entity);
+
+ // Allocate data.
+ entity->data = KF_MALLOC(sizeof(GuidedMissile));
+
+ if (entity->data == NULL) {
+ ALLOCATION_ERROR;
+ return;
+ }
+
+ GuidedMissile * data = (GuidedMissile*)entity->data;
+
+ data->flyToPoint = (EntityFlyToPointInfo){
+ .controller.bangbang.speed = 80,
+ .controller.bangbang.stopAt = 0.0,
+ .controlType = ENTITY_FLY_TO_POINT_BANG_BANG,
+ .rotationSpeed = 20.0,
+ .applyRotation = true
+ };
}
void closeGuidedMissile(Entity * entity) {
@@ -19,11 +37,35 @@ void closeGuidedMissile(Entity * entity) {
void updateGuidedMissile(Game * game, Entity * entity) {
entityUpdateLastValues(entity);
- // hi
+
+ Entity * player = getEntityFromWorld(game->world, 0);
+ GuidedMissile * data = (GuidedMissile*)entity->data;
+
+ entityFlyToPoint(entity, player->position, &data->flyToPoint);
+
+ // boom boom time
+ if (Vector3Distance(player->position, entity->position) <= GUIDED_MISSILE_BOOM_BOOM_AT)
+ guidedMissileGoBoomBoom(game, entity);
entityCheckTransformedCollisionModel(entity);
}
void drawGuidedMissile(Game * game, Entity * entity) {
entityDraw(entity);
-} \ No newline at end of file
+}
+
+void guidedMissileGoBoomBoom(Game * game, Entity * entity) {
+ Entity * player = getEntityFromWorld(game->world, 0);
+
+ // Get player distance and get the damage the missile will do.
+ float distance = Vector3Distance(player->position, entity->position);
+ float damage = distance * GUIDED_MISSILE_DAMAGE;
+
+ // Hurt this mother fucker.
+ player->health -= damage;
+
+ // Remove its self from the world. I have thought of doing the same for years ):
+ entity->health = 0.0;
+
+ printf("This fucker did %f damage\n", damage);
+}
diff --git a/src/entities/guidedMissile.h b/src/entities/guidedMissile.h
index edf3fce..b184775 100644
--- a/src/entities/guidedMissile.h
+++ b/src/entities/guidedMissile.h
@@ -1,10 +1,17 @@
#include "gameCommon.h"
#include "entity.h"
+// This mother fucker follows the player and goes fucking boom boom!!!
+// btw I wrote some of this on 9/11
+
#ifndef GUIDED_MISSILE_H
#define GUIDED_MISSILE_H
+#define GUIDED_MISSILE_DAMAGE 2.0
+#define GUIDED_MISSILE_BOOM_BOOM_AT 5.0
+
typedef struct GuidedMissile {
+ EntityFlyToPointInfo flyToPoint;
} GuidedMissile;
void initGuidedMissile(Entity * entity, Game * game);
@@ -12,4 +19,7 @@ void closeGuidedMissile(Entity * entity);
void updateGuidedMissile(Game * game, Entity * entity);
void drawGuidedMissile(Game * game, Entity * entity);
-#endif \ No newline at end of file
+// Boom boom like a poop poop
+void guidedMissileGoBoomBoom(Game * game, Entity * entity);
+
+#endif