ChooserGUI_Addition_Guide - UQdeco2800/2021-ext-studio-2 GitHub Wiki

Guide

The following guide deals with adding background selection functionality for a particular screen.

Prerequisites: Produce two or more background music files for the screen in question. Lets assume that two music files have been produced for the AchievementsScreen. These are placed by the designers in sounds/customBgm folder as can be seen in the codebase. The files are named: bgmAchievements1.mp3 and bgmAchievements2.mp3.

Step 1: Create an entry in JSON config.

Location of backgroundMusic.json config: Location

Add an entry in the JSON config like so: A mapping of screen name Achievements and track name paths. Note that the files should only be placed in sounds/customBgm folder, so that the track name can be rendered properly since the said path is replaced with an empty string.

{
  "music": {
    "class": "java.util.LinkedHashMap",
    // ...
    "Achievements": [
      "sounds/customBgm/bgmAchievements1.mp3",
      "sounds/customBgm/bgmAchievements2.mp3"
    ],
    // ...
  }
}

Step 2: In the Screen's class, attach the background music components

Prerequisies: The AchievementsScreen has been fully implemented and is awaiting the addition of background music. The components that have to be attached to each screen's lifecycle are:

screenEntity.addComponent(new BackgroundSelectionComponent("Achievements", "br"))
            .addComponent(new BackgroundSoundComponent(BackgroundMusic.getSelectedMusic("Achievements"), 0.5f))

To the BackgroundSoundComponent, volume and looping props can be passed as well.

Note that the screen name Achievements maps to the Achievements key in the JSON config in Step 1. Passing the property br to the BackgroundSelectionComponent positions it in the bottom right side of the screen. Similarly, tr, tl and bl props can be passed. More information about this component can be found here.

Note: Do not forget to dispose the entity in the dispose function, otherwise the sound keeps playing when the user exists the screen.