32
32
//
33
33
34
34
import WatchKit
35
+ import SpriteKit
35
36
import Gambatte_watchOS
36
37
37
38
extension CGPoint {
@@ -41,7 +42,8 @@ extension CGPoint {
41
42
}
42
43
43
44
class GameplayController : WKInterfaceController {
44
- @IBOutlet var image : WKInterfaceImage !
45
+ @IBOutlet var scene : WKInterfaceSKScene !
46
+ let spriteNode = SKSpriteNode ( imageNamed: " loading " )
45
47
46
48
var panOrigin : CGPoint ?
47
49
let deadzone : CGFloat = 1
@@ -83,6 +85,22 @@ class GameplayController: WKInterfaceController {
83
85
@IBAction func selectSelected( ) { pressInputOnce ( . select) }
84
86
@IBAction func BSelected( ) { pressInputOnce ( . B) }
85
87
88
+ @IBAction func loadSelected( ) {
89
+ guard let core = loader. core else {
90
+ return
91
+ }
92
+ core. resetEmulation ( )
93
+ core. load ( fromSlot: 0 )
94
+ }
95
+
96
+ @IBAction func saveSelected( ) {
97
+ guard let core = loader. core else {
98
+ return
99
+ }
100
+ core. resetEmulation ( )
101
+ loader. core? . save ( toSlot: 0 )
102
+ }
103
+
86
104
@IBAction func resetSelected( ) {
87
105
loader. core? . resetEmulation ( )
88
106
}
@@ -128,7 +146,7 @@ class GameplayController: WKInterfaceController {
128
146
let loader = GameLoader . shared
129
147
130
148
var tick = 0
131
- let refreshRate = 20 ;
149
+ let refreshRate = 5 ;
132
150
133
151
override func awake( withContext context: Any ? ) {
134
152
super. awake ( withContext: context)
@@ -138,6 +156,16 @@ class GameplayController: WKInterfaceController {
138
156
return
139
157
}
140
158
159
+ var size = contentFrame. size
160
+ size. height *= 0.8
161
+ let scene = SKScene ( size: size)
162
+
163
+ spriteNode. size = size
164
+ spriteNode. position = CGPoint ( x: size. width * 0.5 ,
165
+ y: size. height * 0.5 )
166
+ scene. addChild ( spriteNode)
167
+ self . scene. presentScene ( scene)
168
+
141
169
let success : ( ( GameCore ) -> Void ) = { [ unowned self] ( core) in
142
170
core. didRender = { [ weak self] buffer in
143
171
guard let s = self else {
@@ -169,44 +197,40 @@ class GameplayController: WKInterfaceController {
169
197
crownSequencer. delegate = self
170
198
crownSequencer. focus ( )
171
199
172
- if let core = loader . core {
173
- core. load ( fromSlot : 0 )
174
- // core.paused = false
175
- }
200
+ // Too buggy
201
+ // if let core = loader.core, core.isLoaded {
202
+ // core.load(fromSlot: 0)
203
+ // }
176
204
}
177
205
178
206
override func didDeactivate( ) {
179
207
super. didDeactivate ( )
180
208
181
209
crownSequencer. delegate = nil
182
210
crownSequencer. resignFocus ( )
211
+
212
+ loader. core? . saveSavedata ( )
183
213
184
- if let core = loader . core {
185
- core. save ( toSlot : 0 )
186
- // core.paused = true;
187
- }
214
+ // Too buggy
215
+ // if let core = loader.core, core.isLoaded {
216
+ // core.save(toSlot: 0)
217
+ // }
188
218
}
189
219
190
220
var lastSnapshot : UIImage ?
191
221
192
222
func updateSnapshotIfNeeded( with buffer: UnsafeMutablePointer < UInt32 > ) {
193
223
194
224
tick += 1
195
- if tick > refreshRate || loader. core == nil {
225
+ if tick < refreshRate || loader. core == nil {
196
226
return
197
227
}
198
-
199
- let snapshot = loader. core!. createSnapshot ( from: buffer)
200
-
201
- // compare before updating. Not sure if faster.
202
- // if let lhs = lastSnapshot, let rhs = snapshot, lhs.equalPixels(to: rhs) {
203
- // return
204
- // }
205
- // lastSnapshot = snapshot
206
-
207
- DispatchQueue . main. async {
208
- self . image. setImage ( snapshot)
228
+
229
+ let texture = createTexture ( from: buffer)
230
+ texture. preload {
231
+ self . spriteNode. texture = texture
209
232
}
233
+
210
234
tick = 0
211
235
}
212
236
0 commit comments