@@ -2,36 +2,42 @@ import * as PIXI from "pixi.js";
2
2
import FileSystem from "../filesystem" ;
3
3
import { textureFromUint8ArrayMP4 } from "../util/pixi" ;
4
4
import GADRenderer from "./gad-renderer" ;
5
+ import MusicPlayer from "./music-player" ;
5
6
6
7
type Callback = ( ) => void ;
7
8
8
9
interface ScreenConfig {
10
+ onLoad : Callback ;
9
11
callbacks : Callback [ ] ;
10
12
}
11
13
12
14
export default class MenuStructure extends PIXI . utils . EventEmitter {
13
15
private readonly structure : { [ k : string ] : ScreenConfig } = {
14
16
menu_main : {
17
+ onLoad : ( ) => this . playMainMenuMusic ( ) ,
15
18
callbacks : [
16
19
async ( ) => this . renderScreen ( "menu_missions" ) ,
17
20
async ( ) => console . log ( "Multiplayer" ) ,
18
21
async ( ) => {
19
22
// Credits
23
+ this . musicPlayer . stop ( ) ;
20
24
const videoSprite = await this . loadVideoSprite ( 10 ) ;
21
25
videoSprite . width = 453 - 14 ;
22
26
videoSprite . height = 367 - 14 ;
23
27
videoSprite . position . set ( 500 + 7 , 359 + 7 ) ;
24
- this . gadRenderer . renderVideo ( videoSprite ) ;
28
+ this . gadRenderer . renderVideo ( videoSprite , ( ) => this . playMainMenuMusic ) ;
25
29
} ,
26
30
async ( ) => {
27
31
// Intro
28
32
const videoSprite = await this . loadVideoSprite ( 58 ) ;
33
+ this . musicPlayer . stop ( ) ;
29
34
this . gadRenderer . renderVideoFullscreen ( videoSprite , ( ) => this . renderScreen ( "menu_main" ) ) ;
30
35
} ,
31
36
async ( ) => console . log ( "Exit" ) ,
32
37
] ,
33
38
} ,
34
39
menu_missions : {
40
+ onLoad : ( ) => this . playMainMenuMusic ( ) ,
35
41
callbacks : [
36
42
async ( ) => console . log ( "New Game" ) ,
37
43
async ( ) => console . log ( "Load Game" ) ,
@@ -45,9 +51,15 @@ export default class MenuStructure extends PIXI.utils.EventEmitter {
45
51
] ,
46
52
} ,
47
53
menu_loading : {
54
+ onLoad : ( ) => {
55
+ // Nothing to do
56
+ } ,
48
57
callbacks : [ ] ,
49
58
} ,
50
59
menu_mission_details : {
60
+ onLoad : ( ) => {
61
+ // Nothing to do
62
+ } ,
51
63
callbacks : [
52
64
async ( ) => console . log ( "Start Mission" ) ,
53
65
async ( ) => this . renderScreen ( "menu_missions" ) ,
@@ -65,14 +77,21 @@ export default class MenuStructure extends PIXI.utils.EventEmitter {
65
77
} ,
66
78
} ;
67
79
68
- constructor ( private readonly fs : FileSystem , private readonly gadRenderer : GADRenderer ) {
80
+ constructor ( private readonly fs : FileSystem , private readonly gadRenderer : GADRenderer ,
81
+ private readonly musicPlayer : MusicPlayer ) {
69
82
super ( ) ;
70
83
}
71
84
72
85
public async renderScreen ( screen : string ) {
73
86
const data = JSON . parse ( await this . fs . openAndGetContentAsText ( `/screens/${ screen } .json` ) ) ;
74
87
console . log ( data ) ;
75
- await this . gadRenderer . render ( data , this . structure [ screen ] . callbacks ) ;
88
+ const config = this . structure [ screen ] ;
89
+ config . onLoad ( ) ;
90
+ await this . gadRenderer . render ( data , config . callbacks ) ;
91
+ }
92
+
93
+ private playMainMenuMusic ( ) {
94
+ this . musicPlayer . play ( "1st Beginning" , true ) ;
76
95
}
77
96
78
97
private async loadVideoSprite ( videoNumber : number ) {
0 commit comments