refactor: clear the code of SceneWithStory and add comments to it
This commit is contained in:
parent
a3009dcbbf
commit
11dffbd718
|
@ -11,7 +11,7 @@ import Color from "../../Wolfie2D/Utils/Color";
|
||||||
import Layer from "../../Wolfie2D/Scene/Layer";
|
import Layer from "../../Wolfie2D/Scene/Layer";
|
||||||
import Label from "../../Wolfie2D/Nodes/UIElements/Label";
|
import Label from "../../Wolfie2D/Nodes/UIElements/Label";
|
||||||
import MainMenu from "./MainMenu";
|
import MainMenu from "./MainMenu";
|
||||||
import StorySceneTester from "./StorySceneTester";
|
import SceneWithStory from "./SceneWithStory";
|
||||||
|
|
||||||
|
|
||||||
export default class Levels extends Scene {
|
export default class Levels extends Scene {
|
||||||
|
@ -110,7 +110,7 @@ export default class Levels extends Scene {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(event.type === "StorySceneTester"){
|
if(event.type === "StorySceneTester"){
|
||||||
this.sceneManager.changeToScene(StorySceneTester, {});
|
this.sceneManager.changeToScene(SceneWithStory, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(event.type === "back"){
|
if(event.type === "back"){
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import Input from "../../Wolfie2D/Input/Input";
|
|
||||||
import Scene from "../../Wolfie2D/Scene/Scene";
|
import Scene from "../../Wolfie2D/Scene/Scene";
|
||||||
import Label, { HAlign } from "../../Wolfie2D/Nodes/UIElements/Label";
|
import Label, { HAlign } from "../../Wolfie2D/Nodes/UIElements/Label";
|
||||||
import Story from "../Tools/DataTypes/Story";
|
import Story from "../Tools/DataTypes/Story";
|
||||||
|
@ -7,7 +6,6 @@ import Vec2 from "../../Wolfie2D/DataTypes/Vec2";
|
||||||
import Color from "../../Wolfie2D/Utils/Color";
|
import Color from "../../Wolfie2D/Utils/Color";
|
||||||
import Layer from "../../Wolfie2D/Scene/Layer";
|
import Layer from "../../Wolfie2D/Scene/Layer";
|
||||||
import Sprite from "../../Wolfie2D/Nodes/Sprites/Sprite";
|
import Sprite from "../../Wolfie2D/Nodes/Sprites/Sprite";
|
||||||
import MapTemplate from "../Tools/DataTypes/MapTemplate";
|
|
||||||
import { GameEventType } from "../../Wolfie2D/Events/GameEventType";
|
import { GameEventType } from "../../Wolfie2D/Events/GameEventType";
|
||||||
|
|
||||||
enum Mode {
|
enum Mode {
|
||||||
|
@ -15,11 +13,12 @@ enum Mode {
|
||||||
STORY_MODE = "StoryMode",
|
STORY_MODE = "StoryMode",
|
||||||
PAUSE_MODE = "PauseMode",
|
PAUSE_MODE = "PauseMode",
|
||||||
}
|
}
|
||||||
export default class StorySceneTester extends Scene {
|
|
||||||
|
export default class SceneWithStory extends Scene {
|
||||||
private currentMode: Mode = Mode.GAME_MODE;
|
private currentMode: Mode = Mode.GAME_MODE;
|
||||||
private storytextLabel: Label;
|
private storytextLabel: Label;
|
||||||
private storyLayer: Layer;
|
private storyLayer: Layer;
|
||||||
private primary: Layer;
|
// private primary: Layer;
|
||||||
private story: Story;
|
private story: Story;
|
||||||
private storyProgress: number;
|
private storyProgress: number;
|
||||||
private storySprites: Array<Sprite>;
|
private storySprites: Array<Sprite>;
|
||||||
|
@ -28,24 +27,32 @@ export default class StorySceneTester extends Scene {
|
||||||
private currentContent: string;
|
private currentContent: string;
|
||||||
|
|
||||||
startScene(): void {
|
startScene(): void {
|
||||||
this.primary = this.addUILayer("primary");
|
|
||||||
this.storyLayer = this.addUILayer("story");
|
|
||||||
|
|
||||||
const center = this.viewport.getCenter();
|
|
||||||
const loadStory = this.add.uiElement(UIElementType.BUTTON, "primary", { position: new Vec2(center.x, center.y), text: "LoadStory" });
|
|
||||||
loadStory.size.set(200, 50);
|
|
||||||
loadStory.borderWidth = 2;
|
|
||||||
loadStory.borderColor = Color.WHITE;
|
|
||||||
loadStory.backgroundColor = Color.TRANSPARENT;
|
|
||||||
loadStory.onClickEventId = "loadStory";
|
|
||||||
|
|
||||||
|
|
||||||
this.receiver.subscribe("loadStory");
|
|
||||||
|
// The code below are for testing only. Please comment them when submit
|
||||||
|
|
||||||
|
// this.primary = this.addUILayer("primary");
|
||||||
|
// const center = this.viewport.getCenter();
|
||||||
|
// const loadStory = this.add.uiElement(UIElementType.BUTTON, "primary", { position: new Vec2(center.x, center.y), text: "LoadStory" });
|
||||||
|
// loadStory.size.set(200, 50);
|
||||||
|
// loadStory.borderWidth = 2;
|
||||||
|
// loadStory.borderColor = Color.WHITE;
|
||||||
|
// loadStory.backgroundColor = Color.TRANSPARENT;
|
||||||
|
// loadStory.onClickEventId = "loadStory";
|
||||||
|
|
||||||
|
|
||||||
|
// this.receiver.subscribe("loadStory");
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function load a story JSON from storyPath and auto display it to storyLayer
|
||||||
|
* @param storyPath The path to the story JSON
|
||||||
|
*/
|
||||||
async storyLoader(storyPath: string) {
|
async storyLoader(storyPath: string) {
|
||||||
|
this.storyLayer = this.addUILayer("story");
|
||||||
const response = await (await fetch(storyPath)).json();
|
const response = await (await fetch(storyPath)).json();
|
||||||
this.story = <Story>response;
|
this.story = <Story>response;
|
||||||
if (this.story.bgm) {
|
if (this.story.bgm) {
|
||||||
|
@ -74,10 +81,16 @@ export default class StorySceneTester extends Scene {
|
||||||
this.updateStory();
|
this.updateStory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns True if the story has next sentence False otherwise
|
||||||
|
*/
|
||||||
hasNextStory(): boolean {
|
hasNextStory(): boolean {
|
||||||
return this.currentMode === Mode.STORY_MODE && this.storyProgress + 1 < this.story.texts.length;
|
return this.currentMode === Mode.STORY_MODE && this.storyProgress + 1 < this.story.texts.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Go to the next sentence of current story if there is one or clear the storyLayer and exit storyMode
|
||||||
|
*/
|
||||||
updateStory() {
|
updateStory() {
|
||||||
if (this.currentMode === Mode.STORY_MODE && this.hasNextStory()) {
|
if (this.currentMode === Mode.STORY_MODE && this.hasNextStory()) {
|
||||||
this.storyProgress++;
|
this.storyProgress++;
|
||||||
|
@ -147,22 +160,26 @@ export default class StorySceneTester extends Scene {
|
||||||
console.log("sound stopped:", bgm);
|
console.log("sound stopped:", bgm);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
this.storyLayer.disable();
|
||||||
this.storyBGMs = undefined;
|
this.storyBGMs = undefined;
|
||||||
this.storySprites = undefined;
|
this.storySprites = undefined;
|
||||||
this.story = undefined;
|
this.story = undefined;
|
||||||
this.storytextLabel = undefined;
|
this.storytextLabel = undefined;
|
||||||
|
this.storyLayer = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateScene(deltaT: number): void {
|
updateScene(deltaT: number): void {
|
||||||
while (this.receiver.hasNextEvent()) {
|
while (this.receiver.hasNextEvent()) {
|
||||||
let event = this.receiver.getNextEvent();
|
let event = this.receiver.getNextEvent();
|
||||||
if (event.type === "loadStory" && this.currentMode === Mode.GAME_MODE) {
|
// Testing code
|
||||||
this.storyLoader("shattered_sword_assets/jsons/samplestory.json");
|
// if (event.type === "loadStory" && this.currentMode === Mode.GAME_MODE) {
|
||||||
}
|
// this.storyLoader("shattered_sword_assets/jsons/samplestory.json");
|
||||||
}
|
// }
|
||||||
if (Input.isMouseJustPressed() && this.currentMode === Mode.STORY_MODE) {
|
|
||||||
this.updateStory();
|
|
||||||
}
|
}
|
||||||
|
// Testing code
|
||||||
|
// if (Input.isMouseJustPressed() && this.currentMode === Mode.STORY_MODE) {
|
||||||
|
// this.updateStory();
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user