diff options
Diffstat (limited to 'src/GameLoop.cpp')
-rw-r--r-- | src/GameLoop.cpp | 139 |
1 files changed, 105 insertions, 34 deletions
diff --git a/src/GameLoop.cpp b/src/GameLoop.cpp index 9e42b88..1ef1c9f 100644 --- a/src/GameLoop.cpp +++ b/src/GameLoop.cpp @@ -22,6 +22,7 @@ #include "Game.h" extern float multiplier; +extern int thirdperson; extern int visions; extern unsigned int gSourceID[100]; extern unsigned int gSampleSet[100]; @@ -30,27 +31,120 @@ extern float rad2deg; extern Fog fog; extern int environment; extern int slomo; +extern int aimkey; +extern int psychicaimkey; +extern int psychickey; void keyCallback(Game* game, int key, int action, int mods) { - if (game->mainmenu || action != GLFW_PRESS) + if (action != GLFW_PRESS) return; + if (game->mainmenu) { + if (key == GLFW_KEY_SPACE) + game->mainmenu = 0; + return; + } + + auto& player = game->person[0]; + if (key == GLFW_KEY_ESCAPE) { + alSourcePause(gSourceID[rainsound]); + game->mainmenu = 1; + alSourcePlay(gSourceID[souloutsound]); + game->flashamount = 1.0f; + game->flashr = game->flashg = game->flashb = 1.0f; + alSourceStop(gSourceID[visionsound]); + game->whichsong = mainmenusong; + alSourceStop(gSourceID[knifesong]); + alSourceStop(gSourceID[shootsong]); + alSourceStop(gSourceID[zombiesong]); + alSourceStop(gSourceID[mainmenusong]); + alSourcef(gSourceID[knifesong], AL_MIN_GAIN, 0); + alSourcef(gSourceID[shootsong], AL_MIN_GAIN, 0); + alSourcef(gSourceID[zombiesong], AL_MIN_GAIN, 0); + alSourcef(gSourceID[mainmenusong], AL_MIN_GAIN, 0); + alSourcePlay(gSourceID[game->whichsong]); + alSourcef(gSourceID[game->whichsong], AL_MIN_GAIN, 1); + } else if (key == GLFW_KEY_L) { + game->lasersight ^= 1; + } else if (key == GLFW_KEY_SPACE) { + if (player.playerrotation == player.playerlowrotation + && player.targetanimation == joganim + && player.currentanimation == joganim + && !player.backwardsanim && !visions) { + player.targetanimation = diveanim; + player.targetframe = player.target = 0; + player.aimamount = 0; + } + } else if (key == GLFW_KEY_R) { + if (player.reloads[player.whichgun] > 0 + && player.reloading <= 0) + player.ammo = -1; + } else if (key == aimkey) { + player.aiming ^= 1; + } else if (key == psychicaimkey) { + game->flashamount = 0.5; + game->flashr = 1; + game->flashg = game->flashb = 0; + alSourcePlay(gSourceID[souloutsound]); + + slomo = 2; + game->score -= 20; + + alSourcef(gSourceID[knifesong], AL_PITCH, 0.5f); + alSourcef(gSourceID[shootsong], AL_PITCH, 0.5f); + alSourcef(gSourceID[zombiesong], AL_PITCH, 0.5f); + } else if (key == psychickey) { + if (visions ^= 1) { + game->flashamount = game->flashr = 1; + game->flashg = game->flashb = 0; + alSourceStop(gSourceID[visionsound]); + alSourcePlay(gSourceID[souloutsound]); + + alSourcef(gSourceID[knifesong], AL_PITCH, 0.5f); + alSourcef(gSourceID[shootsong], AL_PITCH, 0.5f); + alSourcef(gSourceID[zombiesong], AL_PITCH, 0.5f); + alSourcePlay(gSourceID[visionsound]); + game->bodycoords = player.oldplayercoords; + } else { + game->flashamount = 1; + game->flashr = game->flashg = game->flashb = 1; + alSourceStop(gSourceID[visionsound]); + alSourcePlay(gSourceID[soulinsound]); + + alSourcef(gSourceID[knifesong], AL_PITCH, 1.0f); + alSourcef(gSourceID[shootsong], AL_PITCH, 1.0f); + alSourcef(gSourceID[zombiesong], AL_PITCH, 1.0f); + + XYZ towards = player.playercoords - game->bodycoords; + if (towards.x || towards.z) { + Normalise(&towards); + camera.rotation = RadiansToDegrees(asin(towards.x)); + if (towards.z > 0) + camera.rotation = 180 - camera.rotation; + + camera.visrotation = camera.rotation; + camera.oldrotation = camera.rotation; + } + + player.playercoords = game->bodycoords; + player.oldplayercoords = game->bodycoords; + player.velocity = 0; + } + } - auto shift = mods & GLFW_MOD_SHIFT; - auto player = game->person[0]; + if (!game->debug) + return; + const auto shift = mods & GLFW_MOD_SHIFT; XYZ facing; switch(key) { - case GLFW_KEY_L: - game->lasersight ^= 1; + case GLFW_KEY_TAB: + thirdperson = (thirdperson == 2) ? 0 : (thirdperson + 1); break; case GLFW_KEY_K: - if (game->debug) - game->timeremaining = 0; + game->timeremaining = 0; break; case GLFW_KEY_B: - if (!game->debug) - break; alSourcePlay(gSourceID[soulinsound]); if (shift) { game->paused = 1 - game->paused; @@ -62,13 +156,10 @@ void keyCallback(Game* game, int key, int action, int mods) } break; case GLFW_KEY_F: - if (!game->debug) - break; - alSourcePlay(gSourceID[souloutsound]); - facing = {0, 0, -1}; facing = DoRotation(facing, -camera.rotation2, 0, 0); facing = DoRotation(facing, 0, 0 - camera.rotation, 0); + alSourcePlay(gSourceID[souloutsound]); for (int i = 1; i < game->numpeople; i++) { auto& person = game->person[i]; @@ -95,7 +186,7 @@ void keyCallback(Game* game, int key, int action, int mods) } break; case GLFW_KEY_X: - if (!game->debug || !shift || player.grenphase) + if (!shift || player.grenphase) break; player.ammo = -1; player.whichgun++; @@ -139,24 +230,4 @@ void eventLoop(Game* game) multiplier /= 5; if (game->paused) multiplier = 0; - - if (IsKeyDown(GLFW_KEY_ESCAPE)) { - alSourcePause(gSourceID[rainsound]); - game->mainmenu = 1; - alSourcePlay(gSourceID[souloutsound]); - game->flashamount = 1.0f; - game->flashr = game->flashg = game->flashb = 1.0f; - alSourceStop(gSourceID[visionsound]); - game->whichsong = mainmenusong; - alSourceStop(gSourceID[knifesong]); - alSourceStop(gSourceID[shootsong]); - alSourceStop(gSourceID[zombiesong]); - alSourceStop(gSourceID[mainmenusong]); - alSourcef(gSourceID[knifesong], AL_MIN_GAIN, 0); - alSourcef(gSourceID[shootsong], AL_MIN_GAIN, 0); - alSourcef(gSourceID[zombiesong], AL_MIN_GAIN, 0); - alSourcef(gSourceID[mainmenusong], AL_MIN_GAIN, 0); - alSourcePlay(gSourceID[game->whichsong]); - alSourcef(gSourceID[game->whichsong], AL_MIN_GAIN, 1); - } } |