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.
342 lines
9.6 KiB
342 lines
9.6 KiB
#include <world.h>
|
|
#include <collisionDetection.h>
|
|
#include <weaponsSystem.h>
|
|
#include <string.h>
|
|
|
|
void moveProjectiles(){
|
|
int i;
|
|
for(i=0; i<MAX_PROJECTILES; i++){
|
|
if(allProjectiles[i].isAlive && ((float)(clock() - allProjectiles[i].lastMoveClock)/CLOCKS_PER_SEC) > allProjectiles[i].speed){
|
|
allProjectiles[i].prevYpos=allProjectiles[i].curYpos;
|
|
allProjectiles[i].prevXpos=allProjectiles[i].curXpos;
|
|
checkProjectileCollision(&allProjectiles[i]);
|
|
switch(allProjectiles[i].direction){
|
|
case 'w':{
|
|
allProjectiles[i].curYpos--;
|
|
break;
|
|
}
|
|
|
|
case 'a':{
|
|
allProjectiles[i].curXpos--;
|
|
break;
|
|
}
|
|
|
|
case 's':{
|
|
allProjectiles[i].curYpos++;
|
|
break;
|
|
}
|
|
|
|
case 'd':{
|
|
allProjectiles[i].curXpos++;
|
|
break;
|
|
}
|
|
|
|
}
|
|
allProjectiles[i].distanceTraveled++;
|
|
checkProjectileCollision(&allProjectiles[i]);
|
|
if(allProjectiles[i].distanceTraveled>=allProjectiles[i].range){
|
|
allProjectiles[i].isAlive=0;
|
|
}
|
|
allProjectiles[i].lastMoveClock = clock();
|
|
}
|
|
}
|
|
}
|
|
|
|
void fireWeapon(struct Weapon *weaponRef, char *direction){
|
|
struct Projectile projectile;
|
|
projectile.range=weaponRef->projectileRange;
|
|
projectile.speed=weaponRef->projectileSpeed;
|
|
projectile.isAlive=1;
|
|
projectile.distanceTraveled=0;
|
|
projectile.curYpos=allEntities[0].curYpos;
|
|
projectile.curXpos=allEntities[0].curXpos;
|
|
projectile.lastMoveClock=clock();
|
|
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;
|
|
for(i=0;i<MAX_PROJECTILES;i++){
|
|
if(!allProjectiles[i].isAlive && !allProjectiles[i+1].isAlive){
|
|
allProjectiles[i]=projectile;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
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<MAX_PROJECTILES;i++){
|
|
if(!allProjectiles[i].isAlive && !allProjectiles[i+1].isAlive){
|
|
allEntities[0].projectilesFired++;
|
|
int x;
|
|
for(x=0;x<15;x++){
|
|
if(!allProjectiles[i+x].isAlive){
|
|
allProjectiles[i+x]=projectile;
|
|
}
|
|
if(x==1){
|
|
if(projectile.direction=='w'){
|
|
allProjectiles[i+x].curYpos--;
|
|
allProjectiles[i+x].curXpos--;
|
|
allProjectiles[i+x].symbol='\\';
|
|
}
|
|
if(projectile.direction=='a'){
|
|
allProjectiles[i+x].curYpos--;
|
|
allProjectiles[i+x].curXpos--;
|
|
allProjectiles[i+x].symbol='\\';
|
|
}
|
|
if(projectile.direction=='s'){
|
|
allProjectiles[i+x].curYpos++;
|
|
allProjectiles[i+x].curXpos--;
|
|
allProjectiles[i+x].symbol='/';
|
|
}
|
|
if(projectile.direction=='d'){
|
|
allProjectiles[i+x].curYpos--;
|
|
allProjectiles[i+x].curXpos++;
|
|
allProjectiles[i+x].symbol='/';
|
|
}
|
|
}
|
|
if(x==2){
|
|
if(projectile.direction=='w'){
|
|
allProjectiles[i+x].curYpos--;
|
|
allProjectiles[i+x].symbol='|';
|
|
}
|
|
if(projectile.direction=='a'){
|
|
allProjectiles[i+x].curXpos--;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
if(projectile.direction=='s'){
|
|
allProjectiles[i+x].curYpos++;
|
|
allProjectiles[i+x].symbol='|';
|
|
}
|
|
if(projectile.direction=='d'){
|
|
allProjectiles[i+x].curXpos++;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
}
|
|
if(x==3){
|
|
if(projectile.direction=='w'){
|
|
allProjectiles[i+x].curYpos--;
|
|
allProjectiles[i+x].curXpos++;
|
|
allProjectiles[i+x].symbol='/';
|
|
}
|
|
if(projectile.direction=='a'){
|
|
allProjectiles[i+x].curXpos--;
|
|
allProjectiles[i+x].curYpos++;
|
|
allProjectiles[i+x].symbol='/';
|
|
}
|
|
if(projectile.direction=='s'){
|
|
allProjectiles[i+x].curYpos++;
|
|
allProjectiles[i+x].curXpos++;
|
|
allProjectiles[i+x].symbol='\\';
|
|
}
|
|
if(projectile.direction=='d'){
|
|
allProjectiles[i+x].curYpos++;
|
|
allProjectiles[i+x].curXpos++;
|
|
allProjectiles[i+x].symbol='\\';
|
|
}
|
|
}
|
|
if(x==4){
|
|
if(projectile.direction=='w'){
|
|
allProjectiles[i+x].curYpos-=2;
|
|
allProjectiles[i+x].curXpos-=2;
|
|
allProjectiles[i+x].symbol='\\';
|
|
}
|
|
if(projectile.direction=='a'){
|
|
allProjectiles[i+x].curXpos-=2;
|
|
allProjectiles[i+x].curYpos--;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
if(projectile.direction=='s'){
|
|
allProjectiles[i+x].curYpos+=2;
|
|
allProjectiles[i+x].curXpos-=2;
|
|
allProjectiles[i+x].symbol='/';
|
|
}
|
|
if(projectile.direction=='d'){
|
|
allProjectiles[i+x].curYpos--;
|
|
allProjectiles[i+x].curXpos+=2;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
}
|
|
if(x==5){
|
|
if(projectile.direction=='w'){
|
|
allProjectiles[i+x].curYpos-=2;
|
|
allProjectiles[i+x].curXpos--;
|
|
allProjectiles[i+x].symbol='|';
|
|
}
|
|
if(projectile.direction=='a'){
|
|
allProjectiles[i+x].curXpos-=2;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
if(projectile.direction=='s'){
|
|
allProjectiles[i+x].curYpos+=2;
|
|
allProjectiles[i+x].curXpos--;
|
|
allProjectiles[i+x].symbol='|';
|
|
}
|
|
if(projectile.direction=='d'){
|
|
allProjectiles[i+x].curXpos+=2;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
}
|
|
if(x==6){
|
|
if(projectile.direction=='w'){
|
|
allProjectiles[i+x].curYpos-=2;
|
|
allProjectiles[i+x].symbol='|';
|
|
}
|
|
if(projectile.direction=='a'){
|
|
allProjectiles[i+x].curXpos-=2;
|
|
allProjectiles[i+x].curYpos++;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
if(projectile.direction=='s'){
|
|
allProjectiles[i+x].curYpos+=2;
|
|
allProjectiles[i+x].symbol='|';
|
|
}
|
|
if(projectile.direction=='d'){
|
|
allProjectiles[i+x].curXpos+=2;
|
|
allProjectiles[i+x].curYpos++;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
}
|
|
if(x==7){
|
|
if(projectile.direction=='w'){
|
|
allProjectiles[i+x].curYpos-=2;
|
|
allProjectiles[i+x].curXpos++;
|
|
allProjectiles[i+x].symbol='|';
|
|
}
|
|
if(projectile.direction=='a'){
|
|
allProjectiles[i+x].curXpos-=3;
|
|
allProjectiles[i+x].curYpos--;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
if(projectile.direction=='s'){
|
|
allProjectiles[i+x].curYpos+=2;
|
|
allProjectiles[i+x].curXpos++;
|
|
allProjectiles[i+x].symbol='|';
|
|
}
|
|
if(projectile.direction=='d'){
|
|
allProjectiles[i+x].curXpos+=3;
|
|
allProjectiles[i+x].curYpos--;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
}
|
|
if(x==8){
|
|
if(projectile.direction=='w'){
|
|
allProjectiles[i+x].curYpos-=2;
|
|
allProjectiles[i+x].curXpos+=2;
|
|
allProjectiles[i+x].symbol='/';
|
|
}
|
|
if(projectile.direction=='a'){
|
|
allProjectiles[i+x].curXpos-=3;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
if(projectile.direction=='s'){
|
|
allProjectiles[i+x].curYpos+=2;
|
|
allProjectiles[i+x].curXpos+=2;
|
|
allProjectiles[i+x].symbol='\\';
|
|
}
|
|
if(projectile.direction=='d'){
|
|
allProjectiles[i+x].curXpos+=3;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
}
|
|
if(x==9){
|
|
if(projectile.direction=='a'){
|
|
allProjectiles[i+x].curYpos++;
|
|
allProjectiles[i+x].curXpos-=3;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
if(projectile.direction=='d'){
|
|
allProjectiles[i+x].curXpos+=3;
|
|
allProjectiles[i+x].curYpos++;
|
|
allProjectiles[i+x].symbol='-';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
allEntities[0].weapons[allEntities[0].curWeapon].curCapacity--;
|
|
allEntities[0].projectilesFired++;
|
|
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity==0 && allEntities[0].weapons[allEntities[0].curWeapon].curMags==0){
|
|
allEntities[0].weapons[allEntities[0].curWeapon].isAlive=0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else{
|
|
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(!allProjectiles[i].isAlive && !allProjectiles[i+1].isAlive){
|
|
allEntities[0].projectilesFired++;
|
|
allProjectiles[i]=projectile;
|
|
allEntities[0].weapons[allEntities[0].curWeapon].curCapacity--;
|
|
if(allEntities[0].weapons[allEntities[0].curWeapon].curCapacity==0 && allEntities[0].weapons[allEntities[0].curWeapon].curMags==0){
|
|
allEntities[0].weapons[allEntities[0].curWeapon].isAlive=0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void addMagazine(struct Weapon *weaponRef){
|
|
weaponRef->curMags++;
|
|
}
|
|
|
|
void reload(struct Weapon *weaponRef){
|
|
weaponRef->curMags--;
|
|
weaponRef->curCapacity=weaponRef->maxCapacity;
|
|
}
|
|
|