/
ViewController.swift
90 lines (71 loc) · 2.45 KB
/
ViewController.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//
// ViewController.swift
// star-dash
//
// Created by Lau Rui han on 12/3/24.
//
import UIKit
import SDPhysicsEngine
class ViewController: UIViewController {
var scene: SDScene?
var renderer: Renderer?
var gameBridge: GameBridge?
var gameEngine: GameEngine?
override func viewDidLoad() {
super.viewDidLoad()
let scene = GameScene(size: CGSize(width: 4_842, height: 1_040))
scene.scaleMode = .aspectFill
scene.sceneDelegate = self
self.scene = scene
let gameEngine = GameEngine()
self.gameEngine = gameEngine
self.gameBridge = GameBridge(entityManager: gameEngine, scene: scene)
setupGameEntities()
guard let renderer = MTKRenderer(scene: scene) else {
return
}
renderer.viewDelegate = self
renderer.createSinglePlayerView(at: self.view)
self.renderer = renderer
}
func setupGameEntities() {
guard let scene = self.scene,
let entityManager = gameEngine?.entityManager else {
return
}
let background = SDSpriteObject(imageNamed: "GameBackground")
background.position = CGPoint(x: scene.size.width / 2, y: scene.size.height / 2)
background.zPosition = -1
scene.addObject(background)
let player = Player(
playerIndex: 0,
position: CGPoint(x: scene.size.width / 2, y: scene.size.height / 2 + 200),
playerSprite: PlayerSprite.RedNose
)
player.setUpAndAdd(to: entityManager)
let floor = Floor(position: CGPoint(x: scene.size.width / 2, y: scene.size.height / 2 - 400))
floor.setUpAndAdd(to: entityManager)
}
}
extension ViewController: SDSceneDelegate {
func update(_ scene: SDScene, deltaTime: Double) {
gameBridge?.syncToEntities()
gameEngine?.update(by: deltaTime)
gameBridge?.syncFromEntities()
}
func contactOccured(objectA: SDObject, objectB: SDObject, contactPoint: CGPoint) {
guard let entityA = gameBridge?.entityId(of: objectA.id),
let entityB = gameBridge?.entityId(of: objectB.id) else {
return
}
gameEngine?.handleCollision(entityA, entityB, at: contactPoint)
}
}
extension ViewController: ViewDelegate {
func joystickMoved(toLeft: Bool) {
gameEngine?.handlePlayerMove(toLeft: toLeft)
}
func jumpButtonPressed() {
gameEngine?.handlePlayerJump()
}
}