You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.4 KiB
104 lines
3.4 KiB
#include <world.h>
|
|
#include <string.h>
|
|
#include <drawWindows.h>
|
|
#include <weaponsSystem.h>
|
|
#include <unistd.h>
|
|
|
|
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 || (objYpos==allEntities[i].prevYpos && objXpos==allEntities[i].prevXpos && mvwinch(viewportWin,objYpos,objXpos)==allEntities[i].symbol)){
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
for(i=0; i<strlen(unpassableChars); i++){
|
|
if (mvwinch(viewportWin,objYpos,objXpos)==unpassableChars[i]){
|
|
struct CollisionEvent collisionEvent = {.collidedWithUnPassableChar=1};
|
|
return collisionEvent;
|
|
}
|
|
}
|
|
|
|
if((objYpos < 1 || objYpos > viewportWinRows-2) || (objXpos < 1 || objXpos > viewportWinCols-2)){
|
|
struct CollisionEvent collisionEvent = {.collidedWithBoundary=1};
|
|
return collisionEvent;
|
|
}
|
|
|
|
struct CollisionEvent collisionEvent = {.collidedWithItem=0,.collidedWithEntity=0,.collidedWithUnPassableChar=0,.collidedWithBoundary=0};
|
|
return collisionEvent;
|
|
}
|
|
|
|
void checkProjectileCollision(struct Projectile *projectileRef ){
|
|
struct CollisionEvent collisionEvent = collisionDetect(projectileRef->curYpos, projectileRef->curXpos);
|
|
if(collisionEvent.collidedWithEntity){
|
|
if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){
|
|
projectileRef->isAlive=0;
|
|
collisionEvent.collidedWithEntity->isAlive=0;
|
|
allEntities[0].killCount++;
|
|
allEntities[0].hitCount++;
|
|
if (allEntities[0].killCount != 0 && allEntities[0].killCount%5==0){
|
|
itemModifier++;
|
|
if(zombieModifier>5){
|
|
zombieModifier-=5;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if(collisionEvent.collidedWithUnPassableChar==1 || collisionEvent.collidedWithBoundary==1){
|
|
projectileRef->isAlive=0;
|
|
}
|
|
}
|
|
|
|
void checkPlayerCollision(){
|
|
struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos, allEntities[0].curXpos);
|
|
if(collisionEvent.collidedWithEntity){
|
|
if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){
|
|
allEntities[0].isAlive=0;
|
|
updateViewportWin();
|
|
sleep(1);
|
|
drawGameOverWin();
|
|
}
|
|
}
|
|
if(collisionEvent.collidedWithItem){
|
|
if(!strcmp(collisionEvent.collidedWithItem->type,"Pistol")){
|
|
if(allEntities[0].weapons[1].isAlive){
|
|
addMagazine(&allEntities[0].weapons[1]);
|
|
collisionEvent.collidedWithItem->isAlive=0;
|
|
}
|
|
else if(!allEntities[0].weapons[1].isAlive){
|
|
allEntities[0].weapons[1].isAlive=1;
|
|
allEntities[0].weapons[1].curCapacity=allEntities[0].weapons[1].maxCapacity;
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|