Created Shooting Logic class and refactored to use it

master
j 2024-04-28 02:31:44 -04:00
parent 0df30cce57
commit c5743a4a79
4 changed files with 62 additions and 43 deletions

View File

@ -531,43 +531,6 @@ class GameFlow {
// Logic for traversing the mountains, may affect gameState // Logic for traversing the mountains, may affect gameState
} }
// Shooting word variations
private shootingWordVariations: string[] = [
"BANG", "BLAM", "POW", "WHAM", "BOOM", "ZAP", "PEW", "BAM", "CRACK", "POP",
"BOFF", "SMACK", "KABOOM", "ZOOM", "WHOOSH", "BLOOP", "SPLAT", "SPLASH", "CRASH", "BANG!"
];
// Simulating the shooting subroutine
handleShooting(userInput?: string): string {
let responseMessage = ''
if (!userInput) {
// Select a random shooting word
const shootingWordSelector = Math.floor(Math.random() * this.shootingWordVariations.length);
this.gameState.shootingWordSelector = this.shootingWordVariations[shootingWordSelector];
this.gameState.clockTimeAtStartOfBang = Math.floor(new Date().getTime() / 1000);
//prompt the user to type !!Oregon shootingWord
responseMessage += `\nQuick! TYPE !!Oregon ${this.gameState.shootingWordSelector} within the next few minutes. Hurry, time is ticking!\n\n`;
return responseMessage;
} else {
// Check user input against shooting word
if (userInput.toUpperCase() === this.gameState.shootingWordSelector) {
const clockTimeAtEndOfBang = this.gameState.comment.created_utc;
let actualResponseTimeForBang = ((clockTimeAtEndOfBang - this.gameState.clockTimeAtStartOfBang) / 60000);
actualResponseTimeForBang += (this.gameState.shootingExpertiseLevelChoice - 1)
if (actualResponseTimeForBang < 0) {
actualResponseTimeForBang = 0;
}
// Update the game state with the actual response time
this.gameState.shootResponseTime = actualResponseTimeForBang;
} else {
responseMessage += `Your Word was ${this.gameState.shootingWordSelector}. Better luck next time!\n\n`
this.gameState.shootResponseTime = 9; // Set a high time to indicate a miss
}
return responseMessage;
}
}
private handleDoctor(): string { private handleDoctor(): string {
let responseMessage: string = "" let responseMessage: string = ""

View File

@ -1,5 +1,6 @@
import GameState, { PHASE_ENUM } from '../gameState'; import GameState, { PHASE_ENUM } from '../gameState';
import GameFlow from '../gameFlow'; import GameFlow from '../gameFlow';
import { HandleShooting } from './shooting';
export class HuntPhase { export class HuntPhase {
static async handleHunt(gameState: GameState, gameFlow: GameFlow, userInput?: string): Promise<void> { static async handleHunt(gameState: GameState, gameFlow: GameFlow, userInput?: string): Promise<void> {
@ -22,7 +23,7 @@ export class HuntPhase {
static async initialLogic(gameState: GameState, gameFlow: GameFlow,): Promise<void> { static async initialLogic(gameState: GameState, gameFlow: GameFlow,): Promise<void> {
let responseMessage = ''; let responseMessage = '';
responseMessage += gameFlow.handleShooting(); responseMessage += HandleShooting.handleShooting(gameState);
gameState.subPhase = 1; gameState.subPhase = 1;
gameState.lastPrompt = responseMessage; gameState.lastPrompt = responseMessage;
await gameFlow.statusUpdate(responseMessage); await gameFlow.statusUpdate(responseMessage);
@ -42,7 +43,7 @@ export class HuntPhase {
await gameFlow.statusUpdate(responseMessage); await gameFlow.statusUpdate(responseMessage);
return; return;
} }
responseMessage += gameFlow.handleShooting(userInput.toString()); responseMessage += HandleShooting.handleShooting(gameState, userInput.toString());
gameState.lastPrompt = responseMessage; gameState.lastPrompt = responseMessage;
gameState.subPhase = 2; gameState.subPhase = 2;
await gameState.save(); await gameState.save();

View File

@ -1,5 +1,7 @@
import GameState, { PHASE_ENUM } from '../gameState'; import GameState, { PHASE_ENUM } from '../gameState';
import GameFlow from '../gameFlow'; import GameFlow from '../gameFlow';
import { HandleShooting } from './shooting';
export class RidersPhase { export class RidersPhase {
static async handleRidersAttack(gameState: GameState, gameFlow: GameFlow, userInput?: string): Promise<void> { static async handleRidersAttack(gameState: GameState, gameFlow: GameFlow, userInput?: string): Promise<void> {
let responseMessage = ''; let responseMessage = '';
@ -13,7 +15,7 @@ export class RidersPhase {
break; break;
case 2: //Fight Logic case 2: //Fight Logic
responseMessage = gameState.lastPrompt responseMessage = gameState.lastPrompt
responseMessage += gameFlow.handleShooting() responseMessage += HandleShooting.handleShooting(gameState);
gameState.lastPrompt = responseMessage gameState.lastPrompt = responseMessage
gameState.subPhase = 3 gameState.subPhase = 3
await gameFlow.statusUpdate(responseMessage) await gameFlow.statusUpdate(responseMessage)
@ -26,7 +28,7 @@ export class RidersPhase {
await gameFlow.statusUpdate(responseMessage) await gameFlow.statusUpdate(responseMessage)
return; return;
} }
responseMessage += gameFlow.handleShooting(userInput.toString()); responseMessage += HandleShooting.handleShooting(gameState, userInput.toString());
if (gameState.shootResponseTime <= 1) { if (gameState.shootResponseTime <= 1) {
responseMessage += `NICE SHOOTING---YOU DROVE THEM OFF!!!\n\n` responseMessage += `NICE SHOOTING---YOU DROVE THEM OFF!!!\n\n`
await gameFlow.statusUpdate(responseMessage) await gameFlow.statusUpdate(responseMessage)
@ -44,7 +46,7 @@ export class RidersPhase {
return; return;
case 4: // wagon fight logic case 4: // wagon fight logic
responseMessage = gameState.lastPrompt responseMessage = gameState.lastPrompt
responseMessage += gameFlow.handleShooting() responseMessage += HandleShooting.handleShooting(gameState);
gameState.lastPrompt = responseMessage gameState.lastPrompt = responseMessage
gameState.subPhase = 5 gameState.subPhase = 5
await gameFlow.statusUpdate(responseMessage) await gameFlow.statusUpdate(responseMessage)
@ -57,7 +59,7 @@ export class RidersPhase {
await gameFlow.statusUpdate(responseMessage) await gameFlow.statusUpdate(responseMessage)
return; return;
} }
responseMessage += gameFlow.handleShooting(userInput.toString()); responseMessage += HandleShooting.handleShooting(gameState, userInput.toString());
gameState.amountSpentOnAmmunition -= gameState.shootResponseTime * 30 - 80 gameState.amountSpentOnAmmunition -= gameState.shootResponseTime * 30 - 80
gameState.totalMileageWholeTrip -= 25 gameState.totalMileageWholeTrip -= 25
gameState.lastPrompt = responseMessage; gameState.lastPrompt = responseMessage;

View File

@ -0,0 +1,53 @@
import GameState from '../gameState';
import GameFlow from '../gameFlow';
export class HandleShooting {
private static shootingWordVariations: string[] = [
"BANG", "BLAM", "POW", "WHAM", "BOOM", "ZAP", "PEW", "BAM", "CRACK", "POP",
"BOFF", "SMACK", "KABOOM", "ZOOM", "WHOOSH", "BLOOP", "SPLAT", "SPLASH", "CRASH", "BANG!"
];
static async handleShooting(gameState: GameState, userInput?: string): Promise<string> {
if (!gameState.shootingWordSelector) {
return await HandleShooting.initialLogic(gameState);
} else {
return await HandleShooting.shootingLogic(gameState, userInput);
}
}
private static async initialLogic(gameState: GameState): Promise<string> {
const shootingWordSelector = Math.floor(Math.random() * HandleShooting.shootingWordVariations.length);
gameState.shootingWordSelector = HandleShooting.shootingWordVariations[shootingWordSelector];
gameState.clockTimeAtStartOfBang = Math.floor(new Date().getTime() / 1000);
const responseMessage = `\nQuick! TYPE !!Oregon ${gameState.shootingWordSelector} within the next few minutes. Hurry, time is ticking!\n\n`;
await gameState.save();
return responseMessage;
}
private static async shootingLogic(gameState: GameState, userInput?: string): Promise<string> {
let responseMessage = '';
if (!userInput) {
responseMessage = "Invalid input.\n\n";
responseMessage += `Quick! TYPE !!Oregon ${gameState.shootingWordSelector} within the next few minutes. Hurry, time is ticking!\n\n`;
return responseMessage;
}
if (userInput.toUpperCase() === gameState.shootingWordSelector.toUpperCase()) {
const clockTimeAtEndOfBang = gameState.comment.created_utc;
let actualResponseTimeForBang = ((clockTimeAtEndOfBang - gameState.clockTimeAtStartOfBang) / 60000);
actualResponseTimeForBang += (gameState.shootingExpertiseLevelChoice - 1);
if (actualResponseTimeForBang < 0) {
actualResponseTimeForBang = 0;
}
gameState.shootResponseTime = actualResponseTimeForBang;
} else {
responseMessage += `Your Word was ${gameState.shootingWordSelector}. Better luck next time!\n\n`;
gameState.shootResponseTime = 9; // Set a high time to indicate a miss
}
gameState.shootingWordSelector = ''; // Reset the shooting word selector
await gameState.save();
return responseMessage;
}
}