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>
struct Entity * collisionDetect(int objYpos, int objXpos){
struct CollisionEvent collisionDetect(int objYpos, int objXpos){
int i;
for(i=1; i<MAX_ENTITIES; i++){
if(allEntities[i].isAlive){
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>
struct Entity * collisionDetect();
struct CollisionEvent collisionDetect();
#endif

@ -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);

@ -1,9 +1,9 @@
#include <events.h>
#include <structs.h>
#include <world.h>
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;i<MAX_ITEMS;i++){
if(!allItems[i].isAlive){

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

@ -92,11 +92,12 @@ void gameLoop(){
default:
if (ch != ERR) {lastPressed=ch;};
break;
}
struct Entity * hitEntity = (struct Entity *)collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos);
if(hitEntity){
if(!strcmp(hitEntity->type,"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();
}

@ -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();

@ -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

@ -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;

Loading…
Cancel
Save