One of my first programming projects. I tried to learn C and use curses...it is quite embarrassing looking back at it now :D
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

#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;
}
}
}
}