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.
139 lines
4.1 KiB
139 lines
4.1 KiB
#include <world.h>
|
|
#include <collisionDetection.h>
|
|
#include <events.h>
|
|
#include <getPos.h>
|
|
#include <weaponsSystem.h>
|
|
#include <zombies.h>
|
|
#include <drawWindows.h>
|
|
|
|
void gameLoop(){
|
|
while(1) {
|
|
secsElapsed = (float)(clock() - startTime)/CLOCKS_PER_SEC;
|
|
moveProjectiles();
|
|
updateViewportWin();
|
|
if((float)(clock() - timerStart)/CLOCKS_PER_SEC > 1){
|
|
tryRandomEvent();
|
|
timerStart=clock();
|
|
}
|
|
if((int)secsElapsed%10){
|
|
zombieModifier++;
|
|
}
|
|
moveZombies();
|
|
updateViewportWin();
|
|
updateInfoWin();
|
|
doupdate();
|
|
int ch;
|
|
ch = getch();
|
|
switch(ch){
|
|
case 'w':
|
|
case 'W':{
|
|
struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos-1,allEntities[0].curXpos);
|
|
if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){
|
|
allEntities[0].prevXpos=allEntities[0].curXpos;
|
|
allEntities[0].prevYpos=allEntities[0].curYpos;
|
|
allEntities[0].curYpos--;
|
|
};
|
|
break;
|
|
}
|
|
case 's':
|
|
case 'S':{
|
|
struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos+1,allEntities[0].curXpos);
|
|
if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){
|
|
allEntities[0].prevXpos=allEntities[0].curXpos;
|
|
allEntities[0].prevYpos=allEntities[0].curYpos;
|
|
allEntities[0].curYpos++;
|
|
};
|
|
break;
|
|
}
|
|
case 'a':
|
|
case 'A':{
|
|
struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos,allEntities[0].curXpos-1);
|
|
if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){
|
|
allEntities[0].prevYpos=allEntities[0].curYpos;
|
|
allEntities[0].prevXpos=allEntities[0].curXpos;
|
|
allEntities[0].curXpos--;
|
|
};
|
|
break;
|
|
}
|
|
case 'd':
|
|
case 'D':{
|
|
struct CollisionEvent collisionEvent = collisionDetect(allEntities[0].curYpos,allEntities[0].curXpos+1);
|
|
if(!collisionEvent.collidedWithUnPassableChar && !collisionEvent.collidedWithBoundary){
|
|
allEntities[0].prevYpos=allEntities[0].curYpos;
|
|
allEntities[0].prevXpos=allEntities[0].curXpos;
|
|
allEntities[0].curXpos++;
|
|
};
|
|
break;
|
|
}
|
|
case KEY_UP:{
|
|
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0 || allEntities[0].curWeapon == 0){
|
|
fireWeapon(&allEntities[0].weapons[allEntities[0].curWeapon], "up");
|
|
}
|
|
break;
|
|
}
|
|
case KEY_LEFT:{
|
|
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0 || allEntities[0].curWeapon == 0){
|
|
fireWeapon(&allEntities[0].weapons[allEntities[0].curWeapon], "left");
|
|
}
|
|
break;
|
|
}
|
|
case KEY_DOWN:{
|
|
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0 || allEntities[0].curWeapon == 0){
|
|
fireWeapon(&allEntities[0].weapons[allEntities[0].curWeapon], "down");
|
|
}
|
|
break;
|
|
}
|
|
case KEY_RIGHT:{
|
|
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity>0 || allEntities[0].curWeapon == 0){
|
|
fireWeapon(&allEntities[0].weapons[allEntities[0].curWeapon], "right");
|
|
}
|
|
break;
|
|
}
|
|
case 'r':
|
|
case 'R':{
|
|
if(allEntities[0].weapons[allEntities[0].curWeapon].curMags > 0 && allEntities[0].weapons[allEntities[0].curWeapon].curCapacity < allEntities[0].weapons[allEntities[0].curWeapon].maxCapacity ){
|
|
reload(&allEntities[0].weapons[allEntities[0].curWeapon]);
|
|
}
|
|
break;
|
|
}
|
|
case '0':{
|
|
allEntities[0].curWeapon=0;
|
|
break;
|
|
}
|
|
case '1':{
|
|
if(allEntities[0].weapons[1].isAlive){
|
|
allEntities[0].curWeapon=1;
|
|
}
|
|
break;
|
|
}
|
|
case '2':{
|
|
if(allEntities[0].weapons[2].isAlive){
|
|
allEntities[0].curWeapon=2;
|
|
}
|
|
break;
|
|
}
|
|
case '3':{
|
|
if(allEntities[0].weapons[3].isAlive){
|
|
allEntities[0].curWeapon=3;
|
|
}
|
|
break;
|
|
}
|
|
case '4':{
|
|
if(allEntities[0].weapons[4].isAlive){
|
|
allEntities[0].curWeapon=4;
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
allEntities[0].prevYpos=allEntities[0].curYpos;
|
|
allEntities[0].prevXpos=allEntities[0].curXpos;
|
|
break;
|
|
}
|
|
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity==0 && allEntities[0].weapons[allEntities[0].curWeapon].curMags==0){
|
|
allEntities[0].curWeapon=0;
|
|
}
|
|
updateViewportWin();
|
|
checkPlayerCollision();
|
|
updateViewportWin();
|
|
}
|
|
}
|
|
|