diff --git a/collisionDetection.c b/collisionDetection.c index 113384c..bdb7366 100644 --- a/collisionDetection.c +++ b/collisionDetection.c @@ -72,10 +72,26 @@ void checkPlayerCollision(){ addMagazine(&allEntities[0].weapons[1]); collisionEvent.collidedWithItem->isAlive=0; } - else{ + else if(!allEntities[0].weapons[1].isAlive){ allEntities[0].weapons[1].isAlive=1; allEntities[0].weapons[1].curCapacity=allEntities[0].weapons[1].maxCapacity; - allEntities[0].curWeapon=1; + if(allEntities[0].curWeapon==0){ + allEntities[0].curWeapon=1; + } + collisionEvent.collidedWithItem->isAlive=0; + } + } + if(!strcmp(collisionEvent.collidedWithItem->type,"Shotgun")){ + if(allEntities[0].weapons[2].isAlive){ + addMagazine(&allEntities[0].weapons[2]); + collisionEvent.collidedWithItem->isAlive=0; + } + else if(!allEntities[0].weapons[2].isAlive){ + allEntities[0].weapons[2].isAlive=1; + allEntities[0].weapons[2].curCapacity=allEntities[0].weapons[2].maxCapacity; + if(allEntities[0].curWeapon==0){ + allEntities[0].curWeapon=2; + } collisionEvent.collidedWithItem->isAlive=0; } } diff --git a/drawWindows.c b/drawWindows.c index 7078e48..8bf4109 100644 --- a/drawWindows.c +++ b/drawWindows.c @@ -95,8 +95,15 @@ void updateInfoWin(){ mvwaddch(infoWin, 2, 31, ACS_VLINE); mvwaddch(infoWin, 3, 31, ACS_LLCORNER); mvwaddch(infoWin, 1, 32, ACS_HLINE); - if(allEntities[0].weapons[2].type && !strcmp(allEntities[0].weapons[2].type,"Shotgun")){ - mvwprintw(infoWin, 2, 32, "2"); + if(!strcmp(allEntities[0].weapons[2].type,"Shotgun") && allEntities[0].weapons[2].isAlive){ + if(allEntities[0].curWeapon==2){ + wattron(infoWin,A_BOLD); + mvwprintw(infoWin, 2, 32, "2" ); + wattroff(infoWin,A_BOLD); + } + else{ + mvwprintw(infoWin, 2, 32, "2" ); + } } mvwaddch(infoWin, 3, 32, ACS_HLINE); mvwaddch(infoWin, 1, 33, ACS_URCORNER); diff --git a/events.c b/events.c index 21298ae..7e5b451 100644 --- a/events.c +++ b/events.c @@ -17,16 +17,48 @@ void addItem(char *type, int yPos, int xPos){ } } } + if(!strcmp(type,"Shotgun")){ + struct Item shotgunItem = {.type="Shotgun", .symbol='s', .isAlive=1, .curXpos=xPos, .curYpos=yPos}; + int i; + for (i=0;i 0 || allEntities[0].weapons[2].curMags > 0){ + if(allEntities[0].weapons[2].isAlive){ allEntities[0].curWeapon=2; } break; } case '3':{ - if(allEntities[0].weapons[3].curCapacity > 0 || allEntities[0].weapons[3].curMags > 0){ + if(allEntities[0].weapons[3].isAlive){ allEntities[0].curWeapon=3; } break; } case '4':{ - if(allEntities[0].weapons[4].curCapacity > 0 || allEntities[0].weapons[4].curMags > 0){ + if(allEntities[0].weapons[4].isAlive){ allEntities[0].curWeapon=4; } break; diff --git a/initializeWorld.c b/initializeWorld.c index 46fbe43..63c531d 100644 --- a/initializeWorld.c +++ b/initializeWorld.c @@ -22,9 +22,9 @@ void initializeWorld() { itemModifier=0; struct Entity player = {.type="player", .symbol='@', .isAlive=1}; - struct Weapon fists = {.type="Fists", .isAlive=1, .projectileRange=2, .maxCapacity=0, .curCapacity=0, .symbols="-\\|/-\\|/", .projectileSpeed=.03}; - struct Weapon pistol = {.type="Pistol", .isAlive=1, .projectileRange=10, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/", .projectileSpeed=.02}; - + struct Weapon fists = {.type="Fists", .isAlive=1, .projectileRange=1, .maxCapacity=0, .curCapacity=0, .symbols="-\\|/-\\|/", .projectileSpeed=.03}; + struct Weapon pistol = {.type="Pistol", .isAlive=0, .projectileRange=10, .maxCapacity=12, .curCapacity=12, .symbols="-\\|/-\\|/", .projectileSpeed=.03}; + struct Weapon shotgun = {.type="Shotgun", .isAlive=0, .projectileRange=1, .maxCapacity=5, .curCapacity=5, .symbols="-\\|/-\\|/", .projectileSpeed=.05}; passableChars="#"; unpassableChars="+"; @@ -52,6 +52,7 @@ void initializeWorld() { allEntities[0].prevXpos=allEntities[0].curXpos; allEntities[0].weapons[0]=fists; allEntities[0].weapons[1]=pistol; + allEntities[0].weapons[2]=shotgun; allEntities[0].curWeapon=0; updateInfoWin(); diff --git a/weaponsSystem.c b/weaponsSystem.c index 89c7654..9a9516d 100644 --- a/weaponsSystem.c +++ b/weaponsSystem.c @@ -52,18 +52,22 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){ if(allEntities[0].curWeapon==0){ if(!strcmp(direction,"up")){ projectile.direction='w'; + projectile.curYpos--; projectile.symbol=weaponRef->symbols[2]; } if(!strcmp(direction,"left")){ projectile.direction='a'; + projectile.curXpos--; projectile.symbol=weaponRef->symbols[0]; } if(!strcmp(direction,"down")){ projectile.direction='s'; + projectile.curYpos++; projectile.symbol=weaponRef->symbols[6]; } if(!strcmp(direction,"right")){ projectile.direction='d'; + projectile.curXpos++; projectile.symbol=weaponRef->symbols[4]; } int i; @@ -74,6 +78,224 @@ void fireWeapon(struct Weapon *weaponRef, char *direction){ } } } + else if(allEntities[0].curWeapon==2){ + if(!strcmp(direction,"up")){ + projectile.direction='w'; + projectile.curYpos--; + projectile.symbol=weaponRef->symbols[2]; + } + if(!strcmp(direction,"left")){ + projectile.direction='a'; + projectile.curXpos--; + projectile.symbol=weaponRef->symbols[0]; + } + if(!strcmp(direction,"down")){ + projectile.direction='s'; + projectile.curYpos++; + projectile.symbol=weaponRef->symbols[6]; + } + if(!strcmp(direction,"right")){ + projectile.direction='d'; + projectile.curXpos++; + projectile.symbol=weaponRef->symbols[4]; + } + int i; + for(i=0;i