aboutsummaryrefslogtreecommitdiff
path: root/src/GameLoop.cpp
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2021-09-11 22:10:08 +0700
committerNguyễn Gia Phong <mcsinyx@disroot.org>2021-09-11 22:10:08 +0700
commit4c574fd772e6976752ee03dd489cb41bcd2de0d3 (patch)
tree74d4af3b25553e82b9aaba6a420c5d7718b072b8 /src/GameLoop.cpp
parent51c370654dff1ab6cc8bae91676ae2d6a8ada848 (diff)
downloadblackshades-4c574fd772e6976752ee03dd489cb41bcd2de0d3.tar.gz
Move keyboard toggles to event-based
Diffstat (limited to 'src/GameLoop.cpp')
-rw-r--r--src/GameLoop.cpp139
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);
- }
}