void userCannonFire() { bool allProjectilesAreFiring = true; int freeProjectileNumber = 0; for(int i = 0; i < cannonProjectiles.size(); i++) { if (!cannonProjectiles[i]->isFiring()) { allProjectilesAreFiring = false; freeProjectileNumber = i; break; } } if (cannon->isRecoiling() || allProjectilesAreFiring) return; fireCannonFlashCounter = 0; // starts the light 'flash' process Sound::playCannonFire(); cannon->recoilBegin(_cannonCam->getCamX(), _cannonCam->getCamY(), _cannonCam->getCamZ()); Projectile * projectileToFire = cannonProjectiles[freeProjectileNumber]; float cannonPosX = cannon->getPosition()[0]; float cannonPosY = cannon->getPosition()[1]; float cannonPosZ = cannon->getPosition()[2]; projectileToFire->fireBegin(_cannonCam->getHAngle(), _cannonCam->getVAngle(), cannonPosX, cannonPosY, cannonPosZ); }