Skip to content

Commit c053541

Browse files
committed
Stored Label
1 parent ed2ee22 commit c053541

File tree

7 files changed

+61
-36
lines changed

7 files changed

+61
-36
lines changed

src/label/ExempleLabel.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import { Sprite } from "pixi.js";
22
import { Label } from "../lib/classes/Label";
3+
import { labelDecorator } from "../lib/decorators/LabelDecorator";
34
import { clearDialogue, setDialogue } from "../lib/functions/DialogueUtility";
45
import { hideImage } from "../lib/functions/ImageUtility";
56
import { GameWindowManager } from "../lib/managers/WindowManager";
67
import { StepLabelType } from "../lib/types/StepLabelType";
78

9+
@labelDecorator()
810
export class ExempleLabel extends Label {
911
override get steps(): StepLabelType[] {
1012
return [
1113
() => setDialogue("Hello World!"),
1214
() => {
13-
setDialogue("Hello World! 2")
15+
setDialogue("This project have 2 parts, the first is the pixijs part, and the second is the react part.")
1416
// create a new Sprite from an image path
1517
const bunny = Sprite.from('https://pixijs.com/assets/bunny.png');
1618

@@ -29,12 +31,9 @@ export class ExempleLabel extends Label {
2931
bunny.rotation += 0.1 * delta;
3032
});
3133
},
32-
() => setDialogue("Hello World! 3"),
3334
() => hideImage("bunny"), // TODO: remove ticker and crete a manager for this
3435
() => clearDialogue(),
35-
() => setDialogue("Hello World! 4"),
36-
() => setDialogue("Hello World! 5"),
37-
() => setDialogue("Hello World! 6"),
36+
() => setDialogue("it is possible to modify the \"Labels\" in runtime. try adding a step in ExempleLabel and then save."),
3837
]
3938
}
4039
}

src/lib/decorators/LabelDecorator.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Label } from "../classes/Label"
2+
import { GameStepManager } from "../managers/StepManager"
3+
4+
export function labelDecorator(name?: string) {
5+
return function (target: typeof Label) {
6+
if (!name) {
7+
name = target.name
8+
}
9+
if (GameStepManager.registeredLabels[name]) {
10+
console.warn(`Label ${name} already exists, it will be overwritten`)
11+
}
12+
GameStepManager.registeredLabels[name] = target
13+
}
14+
}

src/lib/functions/StepLabelUtility.ts

-17
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { Label } from "../classes/Label"
2-
import { LabelHistoryDataType } from "../types/LabelHistoryDataType"
31
import { StepHistoryDataType } from "../types/StepHistoryDataType"
42
import { StepLabelType } from "../types/StepLabelType"
53

@@ -26,18 +24,3 @@ export function checkIfStepsIsEqual(step1: StepHistoryDataType | StepLabelType,
2624
}
2725
return step1.toLocaleLowerCase() === step2.toLocaleLowerCase()
2826
}
29-
30-
export function getLabelByClassName<T extends Label>(labelData: LabelHistoryDataType): T | undefined {
31-
try {
32-
let label = labelData()
33-
let step = label.steps
34-
if (step.length = 0) {
35-
console.warn("Label has no steps")
36-
}
37-
return label as T
38-
}
39-
catch (e) {
40-
console.error(e)
41-
return
42-
}
43-
}

src/lib/managers/StepManager.ts

+40-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import { Label } from "../classes/Label"
12
import { HistoryLabelEventEnum } from "../enums/LabelEventEnum"
2-
import { convertStelLabelToStepHistoryData, getLabelByClassName } from "../functions/StepLabelUtility"
3+
import { convertStelLabelToStepHistoryData } from "../functions/StepLabelUtility"
34
import { ExportedStep } from "../interface/ExportedStep"
45
import { HistoryLabelEvent } from "../interface/HistoryLabelEvent"
56
import { HistoryStep } from "../interface/HistoryStep"
@@ -18,6 +19,7 @@ export class GameStepManager {
1819
*/
1920
public static stepsHistory: (HistoryLabelEvent | HistoryStep)[] = []
2021
private static openedLabels: LabelHistoryDataType[] = []
22+
public static registeredLabels: { [key: LabelHistoryDataType]: typeof Label } = {}
2123
/**
2224
* currentLabel is the current label that occurred during the progression of the steps.
2325
*/
@@ -38,7 +40,7 @@ export class GameStepManager {
3840
// TODO: implement
3941
return
4042
}
41-
let currentLabel = getLabelByClassName(GameStepManager.currentLabel)
43+
let currentLabel = GameStepManager.getLabelByClassName(GameStepManager.currentLabel)
4244
if (!currentLabel) {
4345
console.error("Label not found")
4446
return
@@ -107,7 +109,7 @@ export class GameStepManager {
107109
public static async runNextStep() {
108110
let lasteStepsLength = GameStepManager.stepsAfterLastHistoryLabel.length
109111
if (GameStepManager.currentLabel) {
110-
let currentLabel = getLabelByClassName(GameStepManager.currentLabel)
112+
let currentLabel = GameStepManager.getLabelByClassName(GameStepManager.currentLabel)
111113
if (!currentLabel) {
112114
console.error("Label not found")
113115
return
@@ -127,15 +129,24 @@ export class GameStepManager {
127129
}
128130
console.warn("No next step")
129131
}
130-
public static async runLabel(label: LabelHistoryDataType) {
131-
GameStepManager.openLabel(label)
132+
public static async runLabel(label: typeof Label | Label) {
133+
try {
134+
if (label instanceof Label) {
135+
label = label.constructor as typeof Label
136+
}
137+
let labelName = label.name
138+
GameStepManager.openLabel(labelName)
139+
}
140+
catch (e) {
141+
console.error(e)
142+
return
143+
}
132144
await GameStepManager.runNextStep()
133145
}
134-
private static openLabel(label: LabelHistoryDataType) {
135-
let currentLabel = getLabelByClassName(label)
146+
private static openLabel(label: string) {
147+
let currentLabel = GameStepManager.getLabelByClassName(label)
136148
if (!currentLabel) {
137-
console.error("Label not found")
138-
return
149+
throw new Error("Label not found")
139150
}
140151
let historyLabel: HistoryLabelEvent = {
141152
label: label,
@@ -150,7 +161,7 @@ export class GameStepManager {
150161
console.warn("No label to close")
151162
return
152163
}
153-
let currentLabel = getLabelByClassName(GameStepManager.currentLabel)
164+
let currentLabel = GameStepManager.getLabelByClassName(GameStepManager.currentLabel)
154165
if (!currentLabel) {
155166
console.error("Label not found")
156167
return
@@ -195,4 +206,23 @@ export class GameStepManager {
195206
console.error("Error importing data", e)
196207
}
197208
}
209+
private static getLabelByClassName<T extends Label>(labelName: LabelHistoryDataType): T | undefined {
210+
try {
211+
let labelType = GameStepManager.registeredLabels[labelName]
212+
if (!labelType) {
213+
console.error("Label not found")
214+
return
215+
}
216+
let label = new labelType()
217+
let step = label.steps
218+
if (step.length = 0) {
219+
console.warn("Label has no steps")
220+
}
221+
return label as T
222+
}
223+
catch (e) {
224+
console.error(e)
225+
return
226+
}
227+
}
198228
}

src/lib/types/LabelHistoryDataType.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
import { Label } from "../classes/Label";
2-
3-
export type LabelHistoryDataType = () => Label
1+
export type LabelHistoryDataType = string

src/menu/MainMenu.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export default function MainMenu() {
4242
<MenuButton
4343
onClick={() => {
4444
GameWindowManager.removeChildren()
45-
GameStepManager.runLabel(() => new ExempleLabel())
45+
GameStepManager.runLabel(ExempleLabel)
4646
navigate("/game")
4747
}}
4848
>

tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"compilerOptions": {
33
"target": "ESNext",
4+
"experimentalDecorators": true,
45
"useDefineForClassFields": true,
56
"lib": ["ESNext", "DOM", "DOM.Iterable"],
67
"allowSyntheticDefaultImports": true,

0 commit comments

Comments
 (0)