From beea215edf215499f642e101ca5f59b4d0578611 Mon Sep 17 00:00:00 2001 From: Jerry Aldrich Date: Mon, 6 Apr 2015 20:43:42 -0500 Subject: [PATCH] Change collisionDetect to return a Collison Event --- collisionDetection.c | 13 +++++++++++-- collisionDetection.h | 3 ++- drawWindows.c | 2 +- events.c | 6 +++--- events.h | 2 +- gameLoop.c | 11 ++++++----- initializeWorld.c | 2 +- structs.h | 10 ++++++++-- weaponsSystem.c | 12 ++++++------ 9 files changed, 39 insertions(+), 22 deletions(-) diff --git a/collisionDetection.c b/collisionDetection.c index aae27cf..47ea24b 100644 --- a/collisionDetection.c +++ b/collisionDetection.c @@ -1,10 +1,19 @@ #include -struct Entity * collisionDetect(int objYpos, int objXpos){ +struct CollisionEvent collisionDetect(int objYpos, int objXpos){ int i; for(i=1; i -struct Entity * collisionDetect(); +struct CollisionEvent collisionDetect(); + #endif diff --git a/drawWindows.c b/drawWindows.c index 8fe8831..1624474 100644 --- a/drawWindows.c +++ b/drawWindows.c @@ -5,7 +5,7 @@ void drawScore(){ werase(scoreWin); box(scoreWin, 0, 0); - mvwprintw(scoreWin, 1, 1, "Current Weapon: %s",allEntities[0].weapons[allEntities[0].curWeapon].name); + mvwprintw(scoreWin, 1, 1, "Current Weapon: %s",allEntities[0].weapons[allEntities[0].curWeapon].type); mvwprintw(scoreWin, 2, 1, "Ammo: %d/%d",allEntities[0].weapons[allEntities[0].curWeapon].curCapacity,allEntities[0].weapons[allEntities[0].curWeapon].maxCapacity); mvwprintw(scoreWin,3,1,"Zombies Killed: %d",allEntities[0].killCount); mvwprintw(scoreWin,4,1,"Projectiles Fired: %d",allEntities[0].projectilesFired); diff --git a/events.c b/events.c index 04fe2d8..6cb6e5e 100644 --- a/events.c +++ b/events.c @@ -1,9 +1,9 @@ #include #include #include -void addItem(char *name, int yPos, int xPos){ - if(!strcmp(name,"Pistol Magazine")){ - struct Item pistolMag = {.name="Pistol Magazine", .symbol='=', .isAlive=1, .curXpos=xPos, .curYpos=yPos}; +void addItem(char *type, int yPos, int xPos){ + if(!strcmp(type,"Pistol Magazine")){ + struct Item pistolMag = {.type="Pistol Magazine", .symbol='=', .isAlive=1, .curXpos=xPos, .curYpos=yPos}; int i; for (i=0;itype,"zombie")){ - allEntities[0].isAlive=0; + } + struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos); + if(collisionEvent.collidedWithEntity){ + mvwprintw(scoreWin,6,10,"%i",collisionEvent.collidedWithEntity); + if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){ + collisionEvent.collidedWithEntity->isAlive=0; mvwaddch(viewportWin, allEntities[0].curYpos, allEntities[0].curXpos, ' '); drawGameOverWin(); } diff --git a/initializeWorld.c b/initializeWorld.c index b5452ba..fda3b6e 100644 --- a/initializeWorld.c +++ b/initializeWorld.c @@ -6,7 +6,7 @@ void initializeWorld() { struct Entity player = {.type="player",.symbol='@', .curYpos=1, .curXpos=1, .nextYpos=1, .nextXpos=1 ,.isAlive=1}; - struct Weapon pistol = {.name="Pistol", .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"}; + struct Weapon pistol = {.type="Pistol", .range=3, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/"}; srand(time(NULL)); initscr(); diff --git a/structs.h b/structs.h index 8b18015..eb3c5ff 100644 --- a/structs.h +++ b/structs.h @@ -2,7 +2,7 @@ #define _STRUCTS struct Weapon{ - char *name; + char *type; int range; int maxCapacity; int curCapacity; @@ -26,7 +26,7 @@ struct Entity { }; struct Item{ - char *name; + char *type; char symbol; int isAlive; int curYpos; @@ -47,4 +47,10 @@ struct Projectile{ int distanceTraveled; }; +struct CollisionEvent{ + struct Entity * collidedWithEntity; + struct Item * collidedWithItem; + +}; + #endif diff --git a/weaponsSystem.c b/weaponsSystem.c index 46a688e..110f189 100644 --- a/weaponsSystem.c +++ b/weaponsSystem.c @@ -32,13 +32,13 @@ void moveProjectiles(){ } projectiles[i].distanceTraveled++; mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, projectiles[i].symbol); - struct Entity * hitEntity = collisionDetect(projectiles[i].curYpos, projectiles[i].curXpos); - if(hitEntity){ - if(!strcmp(hitEntity->type,"zombie")){ + struct CollisionEvent collisionEvent = collisionDetect(projectiles[i].curYpos, projectiles[i].curXpos); + if(collisionEvent.collidedWithEntity){ + if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){ projectiles[i].isAlive=0; - hitEntity->isAlive=0; + collisionEvent.collidedWithEntity->isAlive=0; allEntities[0].killCount++; - mvwaddch(viewportWin, allEntities[i].curYpos, allEntities[i].curXpos, ' '); + mvwaddch(viewportWin, collisionEvent.collidedWithEntity->curYpos, collisionEvent.collidedWithEntity->curXpos, ' '); } } if(mvwinch(viewportWin,projectiles[i].prevYpos, projectiles[i].prevXpos)==projectiles[i].symbol){ @@ -58,7 +58,7 @@ void moveProjectiles(){ void fireWeapon(struct Weapon *weaponRef, char *direction){ struct Projectile projectile; - if (!strcmp(weaponRef->name,"Pistol")){ + if (!strcmp(weaponRef->type,"Pistol")){ projectile.range=20; } projectile.isAlive=1;