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.
95 lines
2.8 KiB
95 lines
2.8 KiB
#include <screen.h>
|
|
#include <world.h>
|
|
#include <collisionDetection.h>
|
|
void moveProjectiles(){
|
|
int i;
|
|
for(i=0; i<MAX_PROJECTILES; i++){
|
|
if(projectiles[i].isAlive){
|
|
projectiles[i].prevYpos=projectiles[i].curYpos;
|
|
projectiles[i].prevXpos=projectiles[i].curXpos;
|
|
|
|
switch(projectiles[i].direction){
|
|
case 'w':{
|
|
projectiles[i].curYpos--;
|
|
break;
|
|
}
|
|
|
|
case 'a':{
|
|
projectiles[i].curXpos--;
|
|
break;
|
|
}
|
|
|
|
case 's':{
|
|
projectiles[i].curYpos++;
|
|
break;
|
|
}
|
|
|
|
case 'd':{
|
|
projectiles[i].curXpos++;
|
|
break;
|
|
}
|
|
|
|
}
|
|
projectiles[i].distanceTraveled++;
|
|
mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, projectiles[i].symbol);
|
|
struct CollisionEvent collisionEvent = collisionDetect(projectiles[i].curYpos, projectiles[i].curXpos);
|
|
if(collisionEvent.collidedWithEntity){
|
|
if(!strcmp(collisionEvent.collidedWithEntity->type,"zombie")){
|
|
projectiles[i].isAlive=0;
|
|
collisionEvent.collidedWithEntity->isAlive=0;
|
|
allEntities[0].killCount++;
|
|
mvwaddch(viewportWin, collisionEvent.collidedWithEntity->curYpos, collisionEvent.collidedWithEntity->curXpos, ' ');
|
|
}
|
|
}
|
|
if(mvwinch(viewportWin,projectiles[i].prevYpos, projectiles[i].prevXpos)==projectiles[i].symbol){
|
|
mvwaddch(viewportWin, projectiles[i].prevYpos, projectiles[i].prevXpos, ' ');
|
|
}
|
|
if(projectiles[i].distanceTraveled>=projectiles[i].range || projectiles[i].curYpos > viewportWinRows || projectiles[i].curYpos < 0 || projectiles[i].curXpos > viewportWinCols || projectiles[i].curXpos < 0){
|
|
projectiles[i].isAlive=0;
|
|
mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, ' ');
|
|
}
|
|
}
|
|
else{
|
|
mvwaddch(viewportWin, projectiles[i].curYpos, projectiles[i].curXpos, ' ');
|
|
}
|
|
}
|
|
usleep(30000);
|
|
}
|
|
|
|
void fireWeapon(struct Weapon *weaponRef, char *direction){
|
|
struct Projectile projectile;
|
|
if (!strcmp(weaponRef->type,"Pistol")){
|
|
projectile.range=20;
|
|
}
|
|
projectile.isAlive=1;
|
|
projectile.distanceTraveled=0;
|
|
projectile.curYpos=allEntities[0].curYpos;
|
|
projectile.curXpos=allEntities[0].curXpos;
|
|
if(!strcmp(direction,"up")){
|
|
projectile.range*=.4;
|
|
projectile.direction='w';
|
|
projectile.symbol=weaponRef->symbols[2];
|
|
}
|
|
if(!strcmp(direction,"left")){
|
|
projectile.direction='a';
|
|
projectile.symbol=weaponRef->symbols[0];
|
|
}
|
|
if(!strcmp(direction,"down")){
|
|
projectile.range*=.4;
|
|
projectile.direction='s';
|
|
projectile.symbol=weaponRef->symbols[6];
|
|
}
|
|
if(!strcmp(direction,"right")){
|
|
projectile.direction='d';
|
|
projectile.symbol=weaponRef->symbols[4];
|
|
}
|
|
int i;
|
|
for(i=0;i<MAX_PROJECTILES;i++){
|
|
if(!projectiles[i].isAlive && !projectiles[i+1].isAlive){
|
|
allEntities[0].projectilesFired++;
|
|
projectiles[i]=projectile;
|
|
allEntities[0].weapons[allEntities[0].curWeapon].curCapacity--;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|