-
Notifications
You must be signed in to change notification settings - Fork 1
/
GameScene.swift
66 lines (50 loc) · 1.61 KB
/
GameScene.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import SpriteKit
public class GameScene: SKScene {
public var sceneDelegate: SDSceneDelegate?
private var lastUpdateTime: TimeInterval?
private var objectMap: [SKNode: SDObject] = [:]
override public func sceneDidLoad() {
super.sceneDidLoad()
physicsWorld.contactDelegate = self
}
override public func update(_ currentTime: TimeInterval) {
super.update(currentTime)
guard let lastUpdateTime = lastUpdateTime else {
lastUpdateTime = currentTime
return
}
let deltaTime = currentTime - lastUpdateTime
self.lastUpdateTime = currentTime
sceneDelegate?.update(self, deltaTime: deltaTime)
}
}
extension GameScene: SDScene {
public func addObject(_ object: SDObject) {
guard objectMap[object.node] == nil else {
return
}
objectMap[object.node] = object
addChild(object.node)
}
public func removeObject(_ object: SDObject) {
objectMap[object.node] = nil
object.removeFromParent()
}
}
extension GameScene: SKPhysicsContactDelegate {
public func didBegin(_ contact: SKPhysicsContact) {
guard let skNodeA = contact.bodyA.node,
let skNodeB = contact.bodyB.node else {
return
}
guard let objectA = objectMap[skNodeA],
let objectB = objectMap[skNodeB] else {
fatalError("Unknown node in game scene")
}
sceneDelegate?.contactOccured(
objectA: objectA,
objectB: objectB,
contactPoint: contact.contactPoint
)
}
}