@@ -34,6 +34,36 @@ namespace gdjs {
34
34
}
35
35
}
36
36
37
+ _loadGameFromSave ( saveState : GameSaveState ) : void {
38
+ const options : UpdateFromNetworkSyncDataOptions = {
39
+ clearMemory : true ,
40
+ } ;
41
+
42
+ this . _runtimeGame . updateFromNetworkSyncData (
43
+ saveState . gameNetworkSyncData ,
44
+ options
45
+ ) ;
46
+
47
+ this . applyUpdateFromNetworkSyncDataIfAny ( options ) ;
48
+
49
+ const sceneStack = this . _stack ;
50
+ sceneStack . forEach ( ( scene , index ) => {
51
+ const layoutSyncData = saveState . layoutNetworkSyncDatas [ index ] ;
52
+ if ( ! layoutSyncData ) return ;
53
+
54
+ scene . updateFromNetworkSyncData ( layoutSyncData . sceneData , options ) ;
55
+
56
+ const objectDatas = layoutSyncData . objectDatas ;
57
+ for ( const id in objectDatas ) {
58
+ const objectNetworkSyncData = objectDatas [ id ] ;
59
+ const object = scene . createObject ( objectNetworkSyncData . n || '' ) ;
60
+ if ( object ) {
61
+ object . updateFromNetworkSyncData ( objectNetworkSyncData , options ) ;
62
+ }
63
+ }
64
+ } ) ;
65
+ }
66
+
37
67
step ( elapsedTime : float ) : boolean {
38
68
this . _throwIfDisposed ( ) ;
39
69
if ( this . _isNextLayoutLoading || this . _stack . length === 0 ) {
@@ -70,115 +100,46 @@ namespace gdjs {
70
100
}
71
101
}
72
102
73
- const loadRequestOptions : LoadRequestOptions | null =
74
- currentScene . getLoadRequestOptions ( ) ;
75
- if ( loadRequestOptions ) {
76
- const options : UpdateFromNetworkSyncDataOptions = {
77
- clearMemory : true ,
78
- } ;
103
+ const loadRequestOptions = currentScene . getLoadRequestOptions ( ) ;
104
+ if ( ! loadRequestOptions ) return true ;
105
+
106
+ currentScene . requestLoadSnapshot ( null ) ;
107
+
108
+ if ( loadRequestOptions . loadVariable ) {
79
109
if (
80
- loadRequestOptions . loadVariable &&
81
110
loadRequestOptions . loadVariable !==
82
- gdjs . VariablesContainer . badVariable
111
+ gdjs . VariablesContainer . badVariable
83
112
) {
84
- try {
85
- const allSyncData =
86
- loadRequestOptions . loadVariable . toJSObject ( ) as GameSaveState ;
87
- currentScene . requestLoadSnapshot ( null ) ;
88
- if ( allSyncData ) {
89
- currentScene
90
- . getGame ( )
91
- . updateFromNetworkSyncData (
92
- allSyncData . gameNetworkSyncData ,
93
- options
94
- ) ;
95
-
96
- this . applyUpdateFromNetworkSyncDataIfAny ( options ) ;
97
-
98
- const sceneStack = this . _stack ;
99
- sceneStack . forEach ( ( scene , index ) => {
100
- const layoutSyncData =
101
- allSyncData . layoutNetworkSyncDatas [ index ] ;
102
- if ( ! layoutSyncData ) return ;
103
- scene . updateFromNetworkSyncData (
104
- layoutSyncData . sceneData ,
105
- options
106
- ) ;
107
-
108
- const objectDatas = layoutSyncData . objectDatas ;
109
- for ( const id in objectDatas ) {
110
- const objectNetworkSyncData = objectDatas [ id ] ;
111
- const object = scene . createObject (
112
- objectNetworkSyncData . n || ''
113
- ) ;
114
- if ( object ) {
115
- object . updateFromNetworkSyncData (
116
- objectNetworkSyncData ,
117
- options
118
- ) ;
119
- }
120
- }
121
- } ) ;
122
- }
123
- } catch ( error ) {
124
- logger . error ( 'Failed to load from variable:' , error ) ;
125
- }
126
- } else {
127
- const storageKey =
128
- loadRequestOptions . loadStorageName || gdjs . saveState . INDEXED_DB_KEY ;
129
- currentScene . requestLoadSnapshot ( null ) ;
130
-
131
- gdjs
132
- . loadFromIndexedDB (
133
- gdjs . saveState . INDEXED_DB_NAME ,
134
- gdjs . saveState . INDEXED_DB_OBJECT_STORE ,
135
- storageKey
136
- )
137
- . then ( ( jsonData ) => {
138
- const allSyncData = JSON . parse ( jsonData ) as GameSaveState ;
139
-
140
- if ( allSyncData ) {
141
- currentScene
142
- . getGame ( )
143
- . updateFromNetworkSyncData (
144
- allSyncData . gameNetworkSyncData ,
145
- options
146
- ) ;
147
-
148
- this . applyUpdateFromNetworkSyncDataIfAny ( options ) ;
149
-
150
- const sceneStack = this . _stack ;
151
- sceneStack . forEach ( ( scene , index ) => {
152
- const layoutSyncData =
153
- allSyncData . layoutNetworkSyncDatas [ index ] ;
154
- if ( ! layoutSyncData ) return ;
155
-
156
- scene . updateFromNetworkSyncData (
157
- layoutSyncData . sceneData ,
158
- options
159
- ) ;
160
-
161
- const objectDatas = layoutSyncData . objectDatas ;
162
- for ( const id in objectDatas ) {
163
- const objectNetworkSyncData = objectDatas [ id ] ;
164
- const object = scene . createObject (
165
- objectNetworkSyncData . n || ''
166
- ) ;
167
- if ( object ) {
168
- object . updateFromNetworkSyncData (
169
- objectNetworkSyncData ,
170
- options
171
- ) ;
172
- }
173
- }
174
- } ) ;
175
- }
176
- } )
177
- . catch ( ( error ) => {
178
- logger . error ( 'Error loading from IndexedDB:' , error ) ;
179
- } ) ;
113
+ throw new Error (
114
+ 'Requested loading save from wrongly defined variable.'
115
+ ) ;
116
+ }
117
+ const saveState =
118
+ loadRequestOptions . loadVariable . toJSObject ( ) as GameSaveState ;
119
+ try {
120
+ this . _loadGameFromSave ( saveState ) ;
121
+ } catch ( error ) {
122
+ logger . error ( 'Error loading from variable:' , error ) ;
180
123
}
124
+ } else {
125
+ const storageKey =
126
+ loadRequestOptions . loadStorageName || gdjs . saveState . INDEXED_DB_KEY ;
127
+
128
+ gdjs
129
+ . loadFromIndexedDB (
130
+ gdjs . saveState . INDEXED_DB_NAME ,
131
+ gdjs . saveState . INDEXED_DB_OBJECT_STORE ,
132
+ storageKey
133
+ )
134
+ . then ( ( jsonData ) => {
135
+ const saveState = JSON . parse ( jsonData ) as GameSaveState ;
136
+ this . _loadGameFromSave ( saveState ) ;
137
+ } )
138
+ . catch ( ( error ) => {
139
+ logger . error ( 'Error loading from IndexedDB:' , error ) ;
140
+ } ) ;
181
141
}
142
+
182
143
return true ;
183
144
}
184
145
0 commit comments