summary refs log tree commit diff
path: root/src/GameLoop.cpp
diff options
context:
space:
mode:
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);
-	}
 }