410 lines
19 KiB
Markdown
410 lines
19 KiB
Markdown
---
|
|
sidebar_position: 5
|
|
---
|
|
|
|
# Main Scene
|
|
|
|
This is where all the magic happen.
|
|
|
|
---
|
|
|
|
Main scene is the most complicated scene with hundreds of object, script and config.
|
|
|
|

|
|
|
|
Yet it is suprisingly simple to use.
|
|
|
|
By following step by step setup, you'll have a working main scene in no time.
|
|
|
|
:::info
|
|
In fact, if all of the other scenes are setup properly, you can even run test the game without any setup on main scene.
|
|
|
|
Try to run the project, you'll the result as below. It doesn't look like much but it is actually a game running without visual assets.
|
|
|
|

|
|
:::
|
|
|
|
## Setup SpriteFrame Provider
|
|
---
|
|
|
|
**SpriteFrameProvider** allows global access to "sprite frames" from code.
|
|
|
|

|
|
|
|
## Setup Animation Provider
|
|
---
|
|
|
|
**Animation Provider** contains all **animations** of the game.
|
|
|
|

|
|
|
|
## Setup Reel Slot
|
|
---
|
|
|
|
1. Prepare the asset for symbols.
|
|
|
|

|
|
|
|
2. Add symbols to **SpriteFrameProvider** which allows those symbols to be accessed globally from the code.
|
|
|
|

|
|
|
|
3. Config reel slot using `reel-scroller-helper`.
|
|
|
|

|
|
|
|
| Properties | Explaination | Example |
|
|
|------------|--------------|---------|
|
|
|**Cell Item Script Name**|The name of the script will be attached to each cell item.||
|
|
| **Scroller Script Name** | the name of the script for handling the spinning logic.||
|
|
|**Row Count x Reel Count**| the number of Slot Item each row and column in the reel slot panel.||
|
|
|**Cell Size**| the size of each cells.||
|
|
|**Cell Spacing**| the distance between each cells horizontally and vertically.||
|
|
|**Cell Dim Color**| set the dark color for the non-win cells when showing winning animation for each line.||
|
|
|**Top Count and Bot Count**| for spinning logic to work, a certain number of cell will be added to the top and bottom of the reel.||
|
|
|
|
4. Generate panel using `reel-scroller-helper`.
|
|
|
|

|
|
|
|
:::tip
|
|
There is a popup panel covering the entire game scene. You should turn off this panel to see the other component clearly.
|
|
:::
|
|
|
|
## Setup Spinning Panel
|
|
|
|
Reel slot panel is just one part one the spinning panel.
|
|
|
|
There are other panels that need to be setup: **landing-panel**, **tension-panel**, **present-win-cell-panel** and **present-win-border-panel**.
|
|
|
|
The setup is very straightforward by using the `Generate Panel` command in each panel's helper class.
|
|
|
|
- Landing Panel:
|
|
|
|

|
|
|
|
To define Landing Panel, create the following script:
|
|
|
|
:::warning
|
|
```jsx title="assets/game-assets/scripts/slotty-settings/extend-slotty-setting.js"
|
|
SlottySetting.prototype._registerInjection = function () {
|
|
DIContainer.Register('landingGenerator', require('landing-generator'));
|
|
};
|
|
```
|
|
:::
|
|
|
|
- Present Win Cell Panel:
|
|
|
|

|
|
|
|
- Present Win Cell Panel:
|
|
|
|

|
|
|
|
- Tension Panel:
|
|
|
|

|
|
|
|
If the tension use a custom size frame, we can change the option **sizeMode** to **Custom** and set the static frame and size.
|
|
|
|

|
|
**check toggle General Panel**
|
|

|
|
To define Tension Panel, create the following script:
|
|
:::warning
|
|
```jsx title="assets/game-assets/scripts/slotty-settings/extend-slotty-setting.js"
|
|
SlottySetting.prototype._registerInjection = function () {
|
|
DIContainer.Register('tensionGenerator', require('tension-generator'));
|
|
};
|
|
```
|
|
:::
|
|
|
|
|
|
## Setup UI Panel
|
|
|
|
### UI Panel Overview
|
|
|
|
The UI system supports both desktop and mobile layouts design.
|
|
|
|
#### 🖥️ Desktop Layout
|
|
- Full bottom bar with all controls visible
|
|
- Horizontal layout maximizing screen width
|
|
|
|

|
|
|
|
#### 📱 Mobile Layout
|
|
The mobile interface adapts to both landscape and portrait orientations:
|
|
|
|
| Orientation | Preview |
|
|
|-------------|----------|
|
|
| Landscape |  |
|
|
| Portrait |  |
|
|
|
|
|
|
### UI Panel Desktop
|
|
|
|
#### Step 1: Setup Prefab Editor
|
|
|
|
| Step | Action | image |
|
|
|------|---------|--------------|
|
|
| 1. Locate Prefab | Search for `ui-bottom-bar-panel` prefab |  |
|
|
| 2. Copy Assets | Navigate from `core/editor` directory |  |
|
|
| 3. Place Assets | Copy / Paste to game assets location |  |
|
|
|
|
---
|
|
|
|
#### Step 2: Configure Prefabs
|
|
|
|
##### Core Prefabs Structure
|
|
Navigate to the location where the prefabs:
|
|

|
|
|
|
##### Rename Prefabs
|
|
Rename the copied prefabs by removing unnecessary prefixes:
|
|
| Prefix to Remove | Original Prefab Name | Final Name |
|
|
|------------------|----------------------|------------|
|
|
| `template-new-` | `template-new-ui-bottom-bar-panel` | `ui-bottom-bar-panel` |
|
|
| `template-` | `template-button-auto-selection` | `button-auto-selection` |
|
|
|
|
|
|
```jsx title="The folder structure is as follows:"
|
|
assets\game-assets\prefabs
|
|
```
|
|
|
|
|
|

|
|
|
|
#### Customize *`button-auto-selection`* Label
|
|
|
|
**Follow Design:**
|
|
Use the `template-label-auto-selection` to customize the appearance of the label inside the `button-auto-selection` prefab.
|
|
|
|
| Component | Description |
|
|
| -------------------- | ------------------------------------------------- |
|
|
| **Label Outline** | Add an outline to make the text stand out. |
|
|
| **Label Shadow** | Add a shadow for better contrast and readability. |
|
|
| -------------------- | ------------------------------------------------- |
|
|
|
|

|
|
|
|
#### Customize *`ui-bottom-bar-panel`* Label
|
|
Use `template-label-title` to customize the `ui-bottom-bar-panel`:
|
|
:::info
|
|
*[Follow the same configuration as Button Auto Selection Labels](#customize-button-auto-selection-label)*
|
|
**Bottom bar labels include a localization component for multi-language support**
|
|
:::
|
|
|
|

|
|
|
|
The `FormatText` property controls text formatting behavior for label components:
|
|
|
|
| Property | Description | Example |
|
|
|----------|-------------|---------|
|
|
| `default` | Initial formatting state | `false` |
|
|
| `notify` | Formatting update callback | Updates when value changes |
|
|
|
|
---
|
|
#### Step 3: Setup Ui In Main Scenes
|
|
|
|
Create new node and configuration in your main scene:
|
|

|
|
|
|
##### Platform Node Spawner Settings
|
|
|
|
| Setting | Value | Description |
|
|
|---------|-------|-------------|
|
|
| Desktop Toggle | ✓ Enabled | Show prefabs for desktop platform |
|
|
| Mobile Toggle | ☐ Disabled | Hide prefabs for mobile platform |
|
|
| Target Prefab | `ui-bottom-bar-panel` | References prefab |
|
|
|
|
#### Step 4: Apply Textures
|
|
|
|
##### Texture Button Bar
|
|
✅ Checklist assets completed for bottom UI and button UI text
|
|
🔗 [Follow is by Complete Assets Structure Guide](http://localhost:3000/docs/category/game-asset-structure):
|
|

|
|
|
|
##### Run the Helper Tool
|
|
- Open the UI Desktop Helper
|
|
- Select texture assignment options
|
|

|
|
|
|
##### Verify Results
|
|
|
|
*Auto Selection prefab*
|
|

|
|
|
|
*Bottom Bar prefab*
|
|

|
|
|
|
*In game*
|
|

|
|

|
|
|
|
---
|
|
|
|
### UI Panel Mobile
|
|
|
|
#### Step 1: Setup Prefab
|
|
| Step | Action | image |
|
|
|------|---------|--------------|
|
|
| 1. Locate Prefab | Search for `mobile-ui` prefab |  |
|
|
| 2. Place Assets | Copy to game assets location |  |
|
|
| 3. Locate Prefab | Search for `buy-feature` prefab |  |
|
|
|
|
#### Step 2: Rename Prefabs
|
|
|
|
```jsx title="The folder structure is as follows:"
|
|
assets\game-assets\prefabs\mobile
|
|
```
|
|
|
|
Rename the copied prefabs by removing unnecessary prefixes:
|
|
| Prefix to Remove | Final Name |
|
|
|------------------|----------------------|
|
|
| `template-` | |
|
|
|
|
#### Step 3: Setup Ui In Main Scenes
|
|
|
|
Create new node and configuration in your main scene:
|
|

|
|
|
|
##### Platform Node Spawner Settings
|
|
|
|
| Setting | Value | Description |
|
|
|---------|-------|-------------|
|
|
| Mobile Toggle | ✓ Enabled | Show prefabs for mobile platform |
|
|
| Desktop Toggle | ☐ Disabled | Hide prefabs for desktop platform |
|
|
| Target Prefab | `mobile-ui` | References prefab |
|
|
|
|
#### Step 4: Apply Textures
|
|
|
|
##### Texture Mobile Ui
|
|
✅ Checklist assets completed for Mobile UI
|
|
🔗 [Follow is by Complete Assets Structure Guide](http://localhost:3000/docs/category/game-asset-structure):
|
|

|
|
|
|
##### Run the Helper Tool
|
|
- Open the UI Mobile Helper
|
|
- Select texture assignment options
|
|

|
|
|
|
##### Results
|
|
|
|
*main ui button added textures*
|
|
|  |
|
|
|
|
|
|
#### Step 4: Setup Color For Menu Mobile UI
|
|
|
|
**Follow Design:**
|
|
|
|
| |  |
|
|
|---------|-------|
|
|
|
|
##### Overview
|
|
The `helper-paint-color-ui-mobile.js` component is a customizable color painter for various UI elements in a MOBILE UI. It allows designers and developers to easily apply theme-based colors across the game interface.
|
|
|
|

|
|
|
|
|Ordinal number| Properties | Explaination | Example |
|
|
|--------------|------------|--------------|---------|
|
|
|0 |**paintColor** |Trigger to repaint UI components | |
|
|
|1 | **Main Ui Normal Color** |Default color of UI elements |  |
|
|
|2 | **Main Ui Highlight Color** | Highlight color for selected UI elements |  |
|
|
|3 | **Toggle State Off Color** | Color of toggle when off |  |
|
|
|4 | **Toggle State On Color** | Color of toggle when on |  |
|
|
|5 | **Background Info Page Color** | Info screen background | |
|
|
|6 | **Background Menu Color** | Menu background color |  |
|
|
|7 | **Background Point Panel Color** | Background panel for point/balance UI |  |
|
|
|8 | **Background Bottom Bar Color** | Background bottom bar (show only mobile portrait) |  |
|
|
|9 | **Button Quit Color** | Quit button color |  |
|
|
|10 | **Button Cancel Color** | Cancel button color |  |1
|
|
|11 | **Label Balance Normal Color** | Normal balance label color |  |
|
|
|12 | **Label Balance Spin Color** | During-spin label color |  |
|
|
|13 | **Button Plus Minus Auto Color** | Button plus/Minus autoplay |  |
|
|
|14 | **Label Start Auto Color** | Start autoplay label |  |
|
|
|15 | **Label Outline Notification** | Outline color + width config |  |
|
|
|16 | **Total Win Medium Win Color** | Color for medium win effects |  |
|
|
|
|
---
|
|
|
|
## Setup Background
|
|
|
|
Background overview:
|
|
|
|
| | Desktop | Mobile |
|
|
|:-:|--------------|---------|
|
|
|**Background Landscape**<br/>|<br/>|<br/>|
|
|
|**Background Portrait**<br/>||<br/>|
|
|
|
|
**Background landscape** use for Desktop and Mobile landscape.
|
|
|
|
**Background portrait** only use for Mobile portrait.
|
|
|
|
### 1. Prepare the assets
|
|
| | Assets | Description |
|
|
|:-:|--------------|---------|
|
|
|**Static**<br/>||Static background is necessary for the game|
|
|
|**Animation**<br/>||Animation background may or may not be present, depending on the game design|
|
|
|
|
### 2. Background Landscape
|
|
|
|
- **background-container:** must have **orientation-ui-controller** to display on Landscape with the options below.
|
|
- **background-main-game:** we use sprite frame from prepared assets.
|
|
|
|
Both must add component **Widget** with the options below to resize with parent node.
|
|
|
|

|
|
|
|
### 3. Background Portrait
|
|
|
|
- **moible-background-container:**
|
|
- Add **mobile-portrait-background-ui-controller** to display only on Mobile.
|
|
- Add **background-mobile-portrait-fullscreen-scaler** to resize with screen resolution.
|
|
- Add **orientation-ui-controller** to display on Portrait with the options below.
|
|
|
|
- **mobile-background-main-game:** we use sprite frame from prepared assets. Must add component **Widget** with the options below to resize with parent node.
|
|
|
|

|
|
|
|
### 4. Background Animation
|
|
|
|
If the game have design animation for background, we will do this step.
|
|
|
|
1. Add **animation-provider**: This component contains all **animation** of the game.
|
|
|
|
2. Using hepler to generate animation.
|
|
|
|

|
|
|
|
3. We have the result as below, and continue setup for **spine-animation**.
|
|
- **Is Loop**: is ✅ because this animation will play through the game.
|
|
- **Static Sprite Frame**: It will be displayed when the animation has not finished loading.
|
|
|
|

|
|
|
|
4. Add animation background with component below:
|
|
|
|
**Animation background landscape**
|
|
|
|
- Add **animation-play-on-anable** with animation name in **Animation Provider**.
|
|
- Add **background-scaler** resize with screen resolution.
|
|
|
|

|
|
|
|
**Animation background portrait**
|
|
|
|
- **mobile-background-anim-portrait:**
|
|
- Add **mobile-portrait-background-ui-controller** to display only on **Mobile**.
|
|
- Add **orientation-ui-controller** to display on Portrait with the options below.
|
|
- **anim-background-main-game:**
|
|
- **animation-play-on-anable** with animation name in **Animation Provider**.
|
|
- **portrait-anim-background-scaler** resize with screen resolution.
|
|
|
|

|
|
|
|
## Setup Popup Panel
|
|
|
|
> To Be Added:
|
|
> - Prepare the asset
|
|
> - Run helper / p4f menu or setup manually |