invoking comment added to gamestate initalizer

master
j 2024-03-31 23:25:11 -04:00
parent 94cb64f37a
commit 5b97b4b219
1 changed files with 15 additions and 9 deletions

View File

@ -1,4 +1,5 @@
import { DatabaseService } from "../db/services/Database"; import { DatabaseService } from "../db/services/Database";
import { Comment } from "../rdrama/models/Comment";
/** /**
* Represents the state of a game session for an Oregon Trail-style game. * Represents the state of a game session for an Oregon Trail-style game.
@ -6,7 +7,9 @@ import { DatabaseService } from "../db/services/Database";
* to load from and save to a database. * to load from and save to a database.
*/ */
class GameState { class GameState {
authorId: number = 0; comment: Comment;
authorId: number;
authorName: string;
amountSpentOnAnimals: number = 0; amountSpentOnAnimals: number = 0;
amountSpentOnAmmunition: number = 0; amountSpentOnAmmunition: number = 0;
actualResponseTimeForBang: number = 0; actualResponseTimeForBang: number = 0;
@ -16,7 +19,7 @@ class GameState {
yesNoResponseToQuestions: string = ''; yesNoResponseToQuestions: string = '';
eventCounter: number = 0; eventCounter: number = 0;
turnNumberForSettingDate: number = 0; turnNumberForSettingDate: number = 0;
currentDate: string = ''; currentDate: string = 'MONDAY MARCH 29 1847';
shootingExpertiseLevelChoice: number = 0; shootingExpertiseLevelChoice: number = 0;
eatingChoice: number = 0; eatingChoice: number = 0;
amountSpentOnFood: number = 0; amountSpentOnFood: number = 0;
@ -43,8 +46,10 @@ class GameState {
phase: PHASE_ENUM = PHASE_ENUM.SETUP; phase: PHASE_ENUM = PHASE_ENUM.SETUP;
subPhase: number = 0; subPhase: number = 0;
private constructor(authorId: number, state?: Partial<GameState>) { private constructor(comment: Comment, state?: Partial<GameState>) {
this.authorId = authorId; this.comment = comment
this.authorId = comment.author_id;
this.authorName = comment.author_name;
Object.assign(this, state); // Initialize with loaded state or undefined Object.assign(this, state); // Initialize with loaded state or undefined
} }
@ -57,20 +62,21 @@ class GameState {
/** /**
* Loads an existing game state from the database or creates a new one if it doesn't exist. * Loads an existing game state from the database or creates a new one if it doesn't exist.
* @param {number} authorId - The ID of the author/player. * @param {Comment} comment - The invoking comment of the author/player.
* @returns {Promise<GameState>} - The loaded or newly created game state. * @returns {Promise<GameState>} - The loaded or newly created game state.
*/ */
public static async load(authorId: number): Promise<GameState> { public static async load(comment: Comment): Promise<GameState> {
const loadedState = await DatabaseService.loadGameState(authorId); const loadedState = await DatabaseService.loadGameState(comment.author_id);
if (loadedState) { if (loadedState) {
return new GameState(authorId, loadedState); return new GameState(comment, loadedState);
} else { } else {
// Create a new GameState with default values // Create a new GameState with default values
const newState = new GameState(authorId); const newState = new GameState(comment);
await newState.save(); // Optionally save the new state to the database await newState.save(); // Optionally save the new state to the database
return newState; return newState;
} }
} }
} }
export default GameState export default GameState