summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/barrel.c7
-rw-r--r--src/game.c19
-rw-r--r--src/physics.c21
-rw-r--r--src/player.c17
4 files changed, 52 insertions, 12 deletions
diff --git a/src/barrel.c b/src/barrel.c
index b0ce9a7..df1e29e 100644
--- a/src/barrel.c
+++ b/src/barrel.c
@@ -28,9 +28,12 @@ void AddBarrel(float xpos, float ypos) {
AddSpriteToEntity(&barrel, barrelSprite);
barrel.physicsCollider = physicsCollider;
+ barrel.hurtBoxes[0] = physicsCollider;
+ barrel.numHurtBoxes = 1;
#ifdef BEATEMUP_DEBUG
barrel.physicsColliderColor = RED;
+ barrel.hurtboxColors[0] = BLUE;
#endif
AddEntity(&barrel);
@@ -39,3 +42,7 @@ void AddBarrel(float xpos, float ypos) {
void UpdateBarrel(float dt) {
UNUSED(dt);
}
+
+void BarrelHandleCollision(Entity* barrel) {
+ barrel->flags &= !ENTITY_ALLOCATED;
+}
diff --git a/src/game.c b/src/game.c
index 88f6405..6e72b97 100644
--- a/src/game.c
+++ b/src/game.c
@@ -11,6 +11,8 @@
#include <math.h>
#include "utils.h"
+#include "barrel.h"
+
Game game;
int compare(const void* a, const void* b) {
@@ -63,14 +65,14 @@ void UpdateEntity(Entity* e, float deltaTime) {
}
}
-static bool IsHitting(const Entity* a, const Entity* b) {
+static bool IsBeingHit(const Entity* a, const Entity* b) {
if (!PhysicsEnabled(a) || !PhysicsEnabled(b))
return false;
- for (int i = 0; i < a->numHitBoxes; i++) {
- for (int j = 0; j < b->numHurtBoxes; j++) {
- Rectangle hitbox = GetEntityHitboxGlobal(a, i);
- Rectangle hurtbox = GetEntityHurtboxGlobal(b, j);
+ for (int i = 0; i < a->numHurtBoxes; i++) {
+ for (int j = 0; j < b->numHitBoxes; j++) {
+ Rectangle hitbox = GetEntityHurtboxGlobal(a, i);
+ Rectangle hurtbox = GetEntityHitboxGlobal(b, j);
if (CheckCollisionRecs(hitbox, hurtbox))
return true;
@@ -82,6 +84,9 @@ static bool IsHitting(const Entity* a, const Entity* b) {
void EntityHandleHit(Entity* a, Entity* b) {
switch(a->type) {
+ case Barrel_Entity:
+ BarrelHandleCollision(a);
+ break;
default:
break;
@@ -94,10 +99,10 @@ void HandleHitboxInteractions() {
Entity* a = &game.entities[i];
Entity* b = &game.entities[j];
- if (IsHitting(a, b))
+ if (IsBeingHit(a, b))
EntityHandleHit(a, b);
- if (IsHitting(b, a))
+ if (IsBeingHit(b, a))
EntityHandleHit(b, a);
}
}
diff --git a/src/physics.c b/src/physics.c
index 6781c41..72d9410 100644
--- a/src/physics.c
+++ b/src/physics.c
@@ -1,6 +1,7 @@
#include "physics.h"
#include "game.h"
#include "utils.h"
+#include "constants.h"
extern Game game;
@@ -54,8 +55,24 @@ void DebugHighlights(const Entity* e) {
Rectangle dstRect = GetPhysicsColliderGlobal(e);
Color colliderDrawColor = e->physicsColliderColor;
- colliderDrawColor.a = 170;
+ colliderDrawColor.a = COLLIDER_ALPHA;
- DrawRectangle(dstRect.x, dstRect.y, dstRect.width, dstRect.height, colliderDrawColor);
+ DrawRectangleRec(dstRect, colliderDrawColor);
+
+ for (int i = 0; i < e->numHitBoxes; i++) {
+ Color hitboxDrawColor = e->hitboxColors[i];
+ hitboxDrawColor.a = COLLIDER_ALPHA;
+
+ Rectangle dstRect = GetEntityHitboxGlobal(e, i);
+ DrawRectangleRec(dstRect, hitboxDrawColor);
+ }
+
+ for (int i = 0; i < e->numHurtBoxes; i++) {
+ Color hurtboxDrawColor = e->hurtboxColors[i];
+ hurtboxDrawColor.a = COLLIDER_ALPHA;
+
+ Rectangle dstRect = GetEntityHurtboxGlobal(e, i);
+ DrawRectangleRec(dstRect, hurtboxDrawColor);
+ }
}
#endif
diff --git a/src/player.c b/src/player.c
index 05d3546..7d41b57 100644
--- a/src/player.c
+++ b/src/player.c
@@ -80,6 +80,7 @@ void HandleAttack(Entity* player) {
}
Sprite* bodySprite = &player->sprites[player->bodySpriteIndex];
+ player->numHitBoxes = 1;
if (bodySprite->animations[PLAYER_ATTACK].isComplete) {
player->state = PLAYER_IDLE;
@@ -110,9 +111,16 @@ void FlipBody(Entity* player) {
Sprite* bodySprite = &player->sprites[player->bodySpriteIndex];
if (player->velocity.x < 0) {
+
bodySprite->flipX = true;
+ player->hitBoxes[0].x = HITBOX_XPOS_FLIPPED;
+
+
} else if (player->velocity.x > 0) {
+
bodySprite->flipX = false;
+ player->hitBoxes[0].x = HITBOX_XPOS;
+
}
}
@@ -135,10 +143,13 @@ void AddPlayer(float xpos, float ypos) {
player.flags |= (ENTITY_PHYSICS_ACTIVE | ENTITY_VISIBLE);
player.physicsCollider = physicsCollider;
+ player.hitBoxes[0] = punchHitBox;
+ player.numHitBoxes = 1;
- #ifdef BEATEMUP_DEBUG
- player.physicsColliderColor = RED;
- #endif
+#ifdef BEATEMUP_DEBUG
+ player.physicsColliderColor = RED;
+ player.hitboxColors[0] = BLUE;
+#endif
AddPlayerSprites(&player);
AddEntity(&player);