Skip to content

Game: Temporary page

Tiffany Chong edited this page Jul 29, 2020 · 23 revisions

Managers

Action Manager

Manager Type: Special

Description

Process all actions given the list of action Ids, which means (1) Retrieve the corresponding GameAction object from State Manager (2) determine whether or not condition to play those actions are satisfied. (3) If all satisfied, execute these actions. The manager also saves the game after a series of actions are executed.

Methods

Game Loop Methods Description Usage
fastForwardGameActions Executes all actions in order of action ids. Called by GameManager at the start to replay all State-Change that occurred when student last played this game.
processGameActions Executes all actions if the condition to execute them is satisfied, and saves the game afterwards. Called by GameManager to play Game Start Actions, Checkpoint Complete Actions, and Location Actions; called by Dialogue Manager to play in-dialogue actions; and called by Explore mode to have Object/ Bounding Box actions.
Helper Methods
processGameAction Executes 1 action if the condition to execute them is satisfied. Called by processGameActions repeatedly to process all actions
checkCanPlayAction Determines whether an action can play. Firstly, the action conditions have to all be satisfied. Secondly, the action has to be either triggered for the first time, or a repeatable action Called by processGameAction
Condition Methods
checkAllConditionsSatisfied Checks all the condition objects if each condition is satisfied Called by checkCanPlayAction
checkConditionSatisfied Checks whether 1 condition is satisfied. If the condition is on userstate, then it can be stubbed by story writers. If the condition is on game state, then we look into the Checkpoint Objectives to see if they are satisfied. Called by ActionConditionChecker.checkAllConditionsSatisfied repeatedly to check if all conditions are satisfied
Execute Action Methods
executeGameAction Plays 1 action by checking the action type to call the correct manager and passing in the action params Called by fastForwardGameActions and processGameActions

Awards Manager (WIP)

Manager Type: IGameUI

Description

Given the Awards Mapping from Source Academy Game's Award Mapping object, and the list of awards obtained from User State Manager, be able to render the award, the keys, and the descriptions of each award.

private uiContainer: Phaser.GameObjects.Container | undefined; private previewContainer: Phaser.GameObjects.Container | undefined;

Properties

Property Name Description Rationale
activePageNumber The page number that is active for each type of Award page Keep track of active page for each type of Award page (collectible/achievement)
currActivePage Either the Collectible page or Achievement page
itemsContainer
pageChosenContainer
previewContainer
scene Reference to the phaser scene since different scenes can call this Access the scene's base managers - input, phase, layer manager
uiContainer

Methods

UI Methods Description Usage
activateUI Activates the award Menu. Called by scenes when Tab key is pressed.
deactivateUI Deactivates the award Menu. Called by scenes when Tab key is pressed again.

Background Manager

Manager Type: Layer Renderer

Description

Render the background in a Game Location onto Background Layer as specified by assetKey of the Location in State Manager's game map

Methods

Game Loop Methods Description Usage
renderBackgroundLayerContainer Obtains all asset key for a location and renders background image on entire screen Called by GameManager on location render, and on change_background action
Helper Methods
renderBackgroundImage Render background image based on asset given key Called by renderBackgroundLayerContainer to render GameLocation's background image

Bounding Box Manager

Manager Type: Layer Renderer, State Observer

Description

Render all rectangular bounding boxes in a Game Location onto the BBox Layer as specified by BBoxProperty in State Manager's game map

Properties

Property Name Description Rationale
bboxes Mapping between bbox ID and activatable bounding boxes that are present on screen right now. Indexed by bbox ID so that when updates need to be called on certain bboxes, we can easily rerender/remove this bounding box from screen.

Methods

Game Loop Methods Description Usage
renderBBoxLayerContainer Obtains all bbox IDs present in a Game Location and renders each bbox based on BBoxProperty specification Called by GameManager on location render.
Helper Methods
createBBox Render 1 rectangular bbox by its bbox id specifications provided by BBoxProperty Called by renderBBoxLayerContainer repeatedly to render all bboxes individually
State Observer Methods
handleAdd Renders 1 bbox Called by State Manager on add_item action
handleDelete Deletes 1 on-screen bbox sprite Called by State Manager on remove_item action
handleMutate Replaces 1 on-screen bbox sprite with the same character with another property Called by State Manager on setBBoxProperty action

Character Manager

Manager Type: Layer Renderer, State Observer

Description

Render all characters in a Game Location onto the Character Layer as specified by Character object in State Manager's game map

Properties

Property Name Description Rationale
characterSpriteMap Mapping between character ID and sprites of Characters that are present on screen right now. Indexed by character ID so that when updates need to be called on certain characters, we can easily rerender/remove this character

Methods

Game Loop Methods Description Usage
renderCharacterLayerContainer Obtains all character IDs present in a Game Location and renders each character based on Character specification Called by GameManager on location render.
Helper Methods
createCharacterSprite(id) Render 1 character by its character id using default expression and position of the character. Called by renderCharacterLayerContainer repeatedly to render all characters individually
createCharacterSprite(id, expression, position) Renders 1 character with a different expression (based on the different asset keys stored in Character data type) and different position (based on Character constants) Called by DialogueSpeakerRenderer to render speaker avatars
State Observer Methods
handleAdd Renders 1 character Called by State Manager on add_item action
handleDelete Deletes 1 on-screen character sprite Called by State Manager on remove_item action
handleMutate Replaces 1 on-screen character sprite with the same character id but with another property Called by State Manager on move_character and update_character action

Dialogue Manager

Manager Type: Layer Renderer

Description

Renders dialogues as specified by Dialogue object retrieved from State Manager's game map

Properties

Property Name Description Usage
dialogueGenerator Class which holds a pointer to the current part and line in the Dialogue object, it keeps track of the lines that should play next Called by Dialogue Manager on line change
dialogueRenderer Renderer that displays the green box and flashes text using the typewriter effect Called by Dialogue Manager on line change
speakerRenderer Manager which renders the speaker box speaker avatar Called by Dialogue Manager on line change

Methods

Game Loop Methods Description Usage
showDialogue Plays out an entire dialogue, orchestrating the change in speakers, lines and in-dialogue actions. Called in Talk mode and during show_dialogue action.
Helper Methods
playWholeDialogue Starts a promise to play the entire dialogue. Attaches listener to green dialogue box, so that when clicked, it can show the next line. Main function called by showDialogue
showNextLine Renders one dialogue line, by generating line using dialogueGenerator, rendering the text using dialogueRenderer, changing the speaker using speakerRenderer and processing actions using Action Manager's processActions. If no more lines, it resolves the promise and ends the dialogue. Called by playWholeDialogue on start of dialogue and whenever dialogue box is clicked

Escape Manager (WIP)

Manager Type: IGameUI

Description

  • Renders the Escape Menu, which provides options for changing user settings and going back to Main Menu.
  • Implements Game UI as EscapeMenu is one of the possible game phases.

Properties

Property Name Description Rationale
bgmVolumeRadioButtons
scene Reference to the phaser scene since different scenes can call this IGameUI Access the scene's base managers - input, phase, layer manager
sfxVolumeRadioButtons

Methods

UI Methods Description Usage
activateUI Activates the Escape Menu in the scene. Called by scenes when Esc key is pressed.
deactivateUI Deactivates the Escape Menu in the scene. Called by scenes when Esc key is pressed again.

Input Manager

Manager Type: Base Scene Manager

Description

Manages all listeners in the scene. Activates/deactivates these listeners during phase transitions, and destroys all of them at the end of each scene.

Properties

Property Name Description Rationale
eventListeners List of all mouse event listeners So that all mouse listeners can be temporarily deactivated during transition, and destroyed when scene is done.
keyboardListeners List of all mouse keyboard listeners So that all keyboard listeners can be temporarily deactivated during transition, and destroyed when scene is done.
scene Reference to the phaser scene to access the scene's input property Access different Phaser.Scene's input property

Methods

Game Loop Methods Description Usage
clearListeners List of all mouse event listeners So that all mouse listeners can be temporarily deactivated during transition, and destroyed when scene is done.
enableKeyboardInput List of all mouse keyboard listeners So that all keyboard listeners can be temporarily deactivated during transition, and destroyed when scene is done.
enableMouseInput List of all mouse event listeners So that all mouse listeners can be temporarily deactivated during transition, and destroyed when scene is done.
registerEventListener Reference to the phaser scene to access the scene's input property Access different Phaser.Scene's input property
registerKeyboardListener Reference to the phaser scene to access the scene's input property Access different Phaser.Scene's input property

Layer Manager

Manager Type: Base Scene Manager

Description

Keeps a default ordering of layers (e.g Background > ... > Objects > BBox > Characters > ... Effects), and corresponding Phaser Container for each layer. This enables other managers to add game objects to their desired layer.

Properties

Property Name Description Usage
layers Mapping between layer name and layer container We store layers by ID so that other managers can easily put game objects to chosen layer
Game Loop Methods Description Usage
addToLayer Adds a game object to a specific layer specified by layer name. Called by many managers to add desired object into specific layer by name.
clearLayerContents Clears all game objects in 1 layer Called by many managers to clear a layer so that they can add new game objects to that layer.
clearSeveralLayers Clears all game objects in several layer Called by managers to clear several layers at once
clearSeveralLayers Clears all game objects in all layers Used to cleanup the scene
Extra Methods
fadeInLayer Fades a layer in As and when effect is needed
fadeOutLayer Fades a layer out As and when effect is needed
showLayer Makes layer visible As and when effect is needed
hideLayer Makes layer invisible As and when effect is needed

Object Manager

Manager Type: Layer Renderer, State Observer

Description

Render all sprites of objects in a Game Location onto the Objects Layer as specified by ObjectProperty in State Manager's game map

Properties

Property Name Description Rationale
objects Mapping between object ID and activatable objects that are present on screen right now. Indexed by object ID so that when updates need to be called on certain objects, we can easily rerender/remove this object from screen.

Methods

Game Loop Methods Description Usage
renderObjectsLayerContainer Obtains all object IDs present in a Game Location and renders each object based on ObjectProperty specification Called by GameManager on location render.
Helper Methods
createObject Render 1 object image sprite by its object id ObjectProperty. Called by renderObjectsLayerContainer repeatedly to render all objects individually
State Observer Methods
handleAdd Renders 1 object Called by State Manager on add_item action
handleDelete Deletes 1 on-screen object sprite Called by State Manager on remove_item action
handleMutate Replaces 1 on-screen object sprite with another property Called by State Manager on setObjProperty action
Action Methods
makeObjectGlow Makes one object glow by calling the Glowing Image's glow functions, which makes a yellow tint overlay blink Called on make_object_glow action
makeObjectBlink Makes one object blink by calling the Glowing Image's blink functions, which makes the image blink Called on make_object_blink action

Phase Manager

Manager Type: Base Scene Manager

Description

Performs state transitions by activating and deactivating modes. Also keeps track of history of previous active states using a stack, so that we can revisit previous active states if needed.

Game Phase Transition Management

We use Finite State Machine (FSM) model to manage the game phases.

Phases here refers to:

Phase In-game Description
Menu the phase when player can choose between modes, commonly Talk, Explore, or Move
Explore the phase when 'Explore' mode is active
Talk the phase where 'Talk' mode is active
Move the phase where 'Move' mode is active
EscapeMenu escape screen, where player can changes their settings and return to main menu
AwardsMenu award screen, where player can browse their awards
Sequence other phase in game, includes bringing up notification and dialogue

Internally, we keep a stack of phases to keep track the game phases. Similar to a normal stack, we can perform pop() and push(), with the additional operation of swap() which replace the top element of the stack with the new element.

Pop Up Manager

Manager Type: Layer Renderer

Description

Renders popups for a specified amount of time

Methods

Game Loop Methods Description Usage
displayPopup Display a popup image on the screen, given an object ID, position, duration and size.
Helper Methods
destroyPopUp Destroys the current popup Called by renderBackgroundLayerContainer to render GameLocation's background image

Save Manager

Manager Type: Global

Description

Loads user data at the start of entire game, saves game data and saves settings to backend

User Progress Loading and Saving

Normally, game engine stores various game states as 'snapshot' to represent game progress. However within this game action, we are at a unique position as actions are the only way that allow for mutation on the game state (adding/removing/mutating item/state).

This allow us to make space optimisation on how we represent player's progress: a series of completed action's ID.

This leads to the following:

Type Method
Progress Loading Simulate all completed actions on the initial checkpoint object, which should bring the state to the same as last player's progress
Progress Saving Store a series of completed action ID

During simulation of completed actions, we skip actions that does not mutate the state, e.g. bring up a dialogue.

Interaction Diagram

The following is a diagram of when and how loading and saving occurs.

Save Manager

Methods

Game Loop Methods Description Usage
loadLastSaveState Loads the last save state from backend into Save Manager's fullSaveState Called by Entry Scene at start of game
saveGame Updates the fullSaveState with information from State Managers and Game Managers, and then sends fullSaveState over to backend. Called by Action Manager after series of actions are performed.
saveSettings Updates the settings in fullSaveState, and sends the fullSaveState over to backend Called by GameManager on location render.
saveChapterComplete Updates fullSaveState's biggestChapterCompleted, and then sends the fullSaveState over to backend Called by Checkpoint Tranisition to mark that a player has completed a chapter.
getter methods Obtains a particular field in fullSaveState Called throughout game to retrieve information from last save state

Sound Manager (WIP)

Manager Type: Global

  • Plays and pauses plays background music throughout the game with the volume specified in user settings
  • Plays sound effects with volume specified in user settings

State Manager

Manager Type: State Manager

Description

Manages user progression throughout the game by keeping track of SSOT - game map which contains dynamic information about the objects, characters and other entities in each location. Also keeps track of user progression throughout the game by updating checkpoint objectives completed, full set of interactions triggered by user, and array of triggered state-change actions.

Properties

Property Name Description Rationale
checkpointObjective List of objectives in the game, mapped to a boolean of whether or not they've been completed by user. Keep track of how far user has completed all the objectives for the checkpoint.
gameMap Contains dynamic information about entities (objects, characters, modes, etc.) in each location. GameMap Keep track of game map as single source of truth about entities the game
subscribers Mapping between game item type ID and manager that handles this item. Be able to easily contact the managers to rerender particular objects on add_item, remove_item or mutate actions.
triggeredInteractions Map of interactions and whether or not they have been triggered Marks talk topics, objects, etc items as having been interacted with, so we can show the tick mark in Talk/Explore mode.
triggeredStateChangeActions Ordered array of state-change actions. State-Change actions are those that permanently change the state of the game map. Keep track of entire list of state-change actions user has triggered so that whenever we load the game, we can replay these actions and fast-forward to the newest state of the game map.
updatedLocations Set of locations which need to have the notification because they have updates. Note: All locations have notifications at start of game. Keep set of updated locations to notify players that location has been updated. (Players see this as the green notif with location's name when visiting an updated location)

State Updating

This is how state-change actions occur in the game.

State-Change actions (2)

The following is what happens when state-change actions occur:

Firstly, the game map has to be updated because any state-update involve a permanent mutation to the game map. Thus, we need to update the SSOT, which is State Manager's gameMap for rendering of locations later on.

Next, we see if the state-change involves the current location. If it does, then we need to be able to respond to the change instantaneously. That is why we contact the State Observers to handle the addition/removal/mutation of a particular entity.

If on the other hand, the state-change involves a location other than the current one, then we simply note that the location has been updated. If so, we can show the users the updated-location notification later on when he visits this location.

Lastly, because we have triggered a state-change action, we have to note the action id down, so that these actions can be replayed whenever player revisits this checkpoint.

User State Manager (WIP)

Manager Type: Global, State Manager

Description

Manages states related to the player, available regardless of which checkpoint player is at. Stores achievements, collectibles, and assessments completed by the user.

User State and Game State Management

Within the game engine, we differentiate two states: User State and Game State. Specifically,

Type Description Manager
User State States unrelated to the checkpoint, and exclusive to the player e.g. players' collectible and achievements User State Manager
Game State States related to the checkpoint, and exclusive to the checkpoint e.g. triggered actions, mapping between ID and properties, players' progress State Manager

The two manager acts as single source of truth (SSOT) within the game engine.

As the user state is independent of the checkpoint object and only need to be loaded in once, we load it within the Entry scene into the User State Manager. Meanwhile, State Manager is only loaded once checkpoint object is loaded.

NOTE: In implementation, State Manager stores the GameMap directly and mutate it as checkpoint story progresses. This is because GameMap already provides the functionality needed to mutate its properties, and we do not want to replicate the functionality at the State Manager. However, having State Manager storing the GameMap causes many explanation to be difficult to get across. Hence for the sake of simplicity, the explanation within this guide will treat the GameMap and State Manager to be separate.

Clone this wiki locally