Change collisionDetect to return a Collison Event

main
Jerry Aldrich 11 years ago
parent d0ed16db04
commit beea215edf
  1. 13
      collisionDetection.c
  2. 3
      collisionDetection.h
  3. 2
      drawWindows.c
  4. 6
      events.c
  5. 2
      events.h
  6. 11
      gameLoop.c
  7. 2
      initializeWorld.c
  8. 10
      structs.h
  9. 12
      weaponsSystem.c

@ -1,10 +1,19 @@
#include <world.h> #include <world.h>
struct Entity * collisionDetect(int objYpos, int objXpos){ struct CollisionEvent collisionDetect(int objYpos, int objXpos){
int i; int i;
for(i=1; i<MAX_ENTITIES; i++){ for(i=1; i<MAX_ENTITIES; i++){
if(allEntities[i].isAlive){ if(allEntities[i].isAlive){
if(objYpos==allEntities[i].curYpos && objXpos==allEntities[i].curXpos){ if(objYpos==allEntities[i].curYpos && objXpos==allEntities[i].curXpos){
return &allEntities[i]; struct CollisionEvent collisionEvent = {.collidedWithEntity=&allEntities[i]};
return collisionEvent;
}
}
}
for(i=0; i<MAX_ITEMS; i++){
if(allItems[i].isAlive){
if(objYpos==allItems[i].curYpos && objXpos==allItems[i].curXpos){
struct CollisionEvent collisionEvent = {.collidedWithItem=&allItems[i]};
return collisionEvent;
} }
} }
} }

@ -3,5 +3,6 @@
#include <world.h> #include <world.h>
struct Entity * collisionDetect(); struct CollisionEvent collisionDetect();
#endif #endif

@ -5,7 +5,7 @@
void drawScore(){ void drawScore(){
werase(scoreWin); werase(scoreWin);
box(scoreWin, 0, 0); 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, 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,3,1,"Zombies Killed: %d",allEntities[0].killCount);
mvwprintw(scoreWin,4,1,"Projectiles Fired: %d",allEntities[0].projectilesFired); mvwprintw(scoreWin,4,1,"Projectiles Fired: %d",allEntities[0].projectilesFired);

@ -1,9 +1,9 @@
#include <events.h> #include <events.h>
#include <structs.h> #include <structs.h>
#include <world.h> #include <world.h>
void addItem(char *name, int yPos, int xPos){ void addItem(char *type, int yPos, int xPos){
if(!strcmp(name,"Pistol Magazine")){ if(!strcmp(type,"Pistol Magazine")){
struct Item pistolMag = {.name="Pistol Magazine", .symbol='=', .isAlive=1, .curXpos=xPos, .curYpos=yPos}; struct Item pistolMag = {.type="Pistol Magazine", .symbol='=', .isAlive=1, .curXpos=xPos, .curYpos=yPos};
int i; int i;
for (i=0;i<MAX_ITEMS;i++){ for (i=0;i<MAX_ITEMS;i++){
if(!allItems[i].isAlive){ if(!allItems[i].isAlive){

@ -1,6 +1,6 @@
#ifndef _EVENTS #ifndef _EVENTS
#define _EVENTS #define _EVENTS
void addItem(char *name, int yPos, int xPos); void addItem(char *type, int yPos, int xPos);
#endif #endif

@ -92,11 +92,12 @@ void gameLoop(){
default: default:
if (ch != ERR) {lastPressed=ch;}; if (ch != ERR) {lastPressed=ch;};
break; break;
} }
struct Entity * hitEntity = (struct Entity *)collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos); struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos);
if(hitEntity){ if(collisionEvent.collidedWithEntity){
if(!strcmp(hitEntity->type,"zombie")){ mvwprintw(scoreWin,6,10,"%i",collisionEvent.collidedWithEntity);
allEntities[0].isAlive=0; if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){
collisionEvent.collidedWithEntity->isAlive=0;
mvwaddch(viewportWin, allEntities[0].curYpos, allEntities[0].curXpos, ' '); mvwaddch(viewportWin, allEntities[0].curYpos, allEntities[0].curXpos, ' ');
drawGameOverWin(); drawGameOverWin();
} }

@ -6,7 +6,7 @@
void initializeWorld() { void initializeWorld() {
struct Entity player = {.type="player",.symbol='@', .curYpos=1, .curXpos=1, .nextYpos=1, .nextXpos=1 ,.isAlive=1}; 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)); srand(time(NULL));
initscr(); initscr();

@ -2,7 +2,7 @@
#define _STRUCTS #define _STRUCTS
struct Weapon{ struct Weapon{
char *name; char *type;
int range; int range;
int maxCapacity; int maxCapacity;
int curCapacity; int curCapacity;
@ -26,7 +26,7 @@ struct Entity {
}; };
struct Item{ struct Item{
char *name; char *type;
char symbol; char symbol;
int isAlive; int isAlive;
int curYpos; int curYpos;
@ -47,4 +47,10 @@ struct Projectile{
int distanceTraveled; int distanceTraveled;
}; };
struct CollisionEvent{
struct Entity * collidedWithEntity;
struct Item * collidedWithItem;
};
#endif #endif

@ -32,13 +32,13 @@ void moveProjectiles(){
} }
projectiles[i].distanceTraveled++; projectiles[i].distanceTraveled++;
mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, projectiles[i].symbol); mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, projectiles[i].symbol);
struct Entity * hitEntity = collisionDetect(projectiles[i].curYpos, projectiles[i].curXpos); struct CollisionEvent collisionEvent = collisionDetect(projectiles[i].curYpos, projectiles[i].curXpos);
if(hitEntity){ if(collisionEvent.collidedWithEntity){
if(!strcmp(hitEntity->type,"zombie")){ if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){
projectiles[i].isAlive=0; projectiles[i].isAlive=0;
hitEntity->isAlive=0; collisionEvent.collidedWithEntity->isAlive=0;
allEntities[0].killCount++; 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){ 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){ void fireWeapon(struct Weapon *weaponRef, char *direction){
struct Projectile projectile; struct Projectile projectile;
if (!strcmp(weaponRef->name,"Pistol")){ if (!strcmp(weaponRef->type,"Pistol")){
projectile.range=20; projectile.range=20;
} }
projectile.isAlive=1; projectile.isAlive=1;

Loading…
Cancel
Save