Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/extend background image #52

Merged
merged 2 commits into from Apr 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 6 additions & 2 deletions star-dash/star-dash/GameEngine/GameEngine.swift
Expand Up @@ -12,10 +12,13 @@ class GameEngine {
private let entityManager: EntityManager
private let eventManager: EventManager

init() {
let mapSize: CGSize

init(mapSize: CGSize) {
self.systemManager = SystemManager()
self.entityManager = EntityManager()
self.eventManager = EventManager()
self.mapSize = mapSize

setUpSystems()
}
Expand All @@ -29,7 +32,8 @@ class GameEngine {

return GameInfo(
playerScore: score,
playersInfo: playersInfo(of: playerIndex)
playersInfo: playersInfo(of: playerIndex),
mapSize: mapSize
)
}

Expand Down
3 changes: 3 additions & 0 deletions star-dash/star-dash/GameEngine/GameInfo.swift
@@ -1,4 +1,7 @@
import CoreGraphics

struct GameInfo {
let playerScore: Int
let playersInfo: [PlayerInfo]
let mapSize: CGSize
}
2 changes: 1 addition & 1 deletion star-dash/star-dash/Persistence/Data/data.json
@@ -1,7 +1,7 @@
{
"id": 0,
"name": "1",
"size": [1000, 200],
"size": [4842, 1040],
"obstacles": [
{
"levelId": 0,
Expand Down
4 changes: 4 additions & 0 deletions star-dash/star-dash/Persistence/StorageManager.swift
Expand Up @@ -14,6 +14,10 @@ class StorageManager {
database = Database()
}

func getLevelSize(id: Int64) -> CGSize? {
self.database.getLevelPersistable(id: id)?.size
}

func loadLevel(id: Int64, into entityManager: EntityManagerInterface) {
let entityPersistables = self.database.getAllEntities(levelId: id)

Expand Down
3 changes: 3 additions & 0 deletions star-dash/star-dash/Rendering/OverlayInfo.swift
@@ -1,4 +1,7 @@
import CoreGraphics

struct OverlayInfo {
let score: Int
let playersInfo: [PlayerInfo]
let mapSize: CGSize
}
4 changes: 2 additions & 2 deletions star-dash/star-dash/Rendering/PlayerView/MiniMapView.swift
Expand Up @@ -33,8 +33,8 @@ class MiniMapView: UIView {
mapImageView.heightAnchor.constraint(equalToConstant: 50)
])
}
// TODO: Pass in actual map size
func update(playersInfo: [PlayerInfo], mapSize: CGSize = CGSize(width: 4_500, height: 0)) {

func update(playersInfo: [PlayerInfo], mapSize: CGSize) {
removeAllPlayerIcons()

for playerData in playersInfo {
Expand Down
2 changes: 1 addition & 1 deletion star-dash/star-dash/Rendering/PlayerView/PlayerView.swift
Expand Up @@ -54,7 +54,7 @@ class PlayerView {

func update(_ overlayInfo: OverlayInfo) {
overlayView.update(overlayInfo.score)
minimapView.update(playersInfo: overlayInfo.playersInfo)
minimapView.update(playersInfo: overlayInfo.playersInfo, mapSize: overlayInfo.mapSize)
}

static func createPlayerView(layout: PlayerViewLayout, device: MTLDevice) -> PlayerView {
Expand Down
59 changes: 46 additions & 13 deletions star-dash/star-dash/ViewController.swift
Expand Up @@ -18,15 +18,18 @@ class ViewController: UIViewController {
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.storageManager = StorageManager()

let gameEngine = createGameEngine()
self.gameEngine = gameEngine

let scene = createGameScene(of: gameEngine.mapSize)
self.scene = scene

self.gameBridge = GameBridge(entityManager: gameEngine, scene: scene)
self.storageManager = StorageManager()

setupGameEntities()
setupBackground()

guard let renderer = MTKRenderer(scene: scene) else {
return
Expand All @@ -37,17 +40,24 @@ class ViewController: UIViewController {
self.renderer = renderer
}

func setupGameEntities() {
private func createGameEngine() -> GameEngine {
let levelSize = self.storageManager?.getLevelSize(id: 0) ?? CGSize(width: 4_842, height: 1_040)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the id here should be consistent with method setupGameEntities, by passing a variable?

return GameEngine(mapSize: levelSize)
}

private func createGameScene(of size: CGSize) -> GameScene {
let scene = GameScene(size: size)
scene.scaleMode = .aspectFill
scene.sceneDelegate = self
return scene
}

private func setupGameEntities() {
guard let scene = self.scene,
let gameEngine = self.gameEngine 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)

EntityFactory.createAndAddPlayer(to: gameEngine,
playerIndex: 0,
position: CGPoint(x: 100, y: scene.size.height / 2 + 200))
Expand All @@ -68,6 +78,28 @@ class ViewController: UIViewController {

self.storageManager?.loadLevel(id: 0, into: gameEngine)
}

private func setupBackground() {
guard let scene = self.scene else {
return
}
let background = SDSpriteObject(imageNamed: "GameBackground")
let backgroundWidth = background.size.width
let backgroundHeight = background.size.height

var remainingGameWidth = scene.size.width
var numOfAddedBackgrounds = 0
while remainingGameWidth > 0 {
let background = SDSpriteObject(imageNamed: "GameBackground")
let offset = CGFloat(numOfAddedBackgrounds) * backgroundWidth
background.position = CGPoint(x: backgroundWidth / 2 + offset, y: backgroundHeight / 2)
background.zPosition = -1
scene.addObject(background)

remainingGameWidth -= backgroundWidth
numOfAddedBackgrounds += 1
}
}
}

extension ViewController: SDSceneDelegate {
Expand Down Expand Up @@ -109,7 +141,8 @@ extension ViewController: ViewDelegate {

return OverlayInfo(
score: gameInfo.playerScore,
playersInfo: gameInfo.playersInfo
playersInfo: gameInfo.playersInfo,
mapSize: gameInfo.mapSize
)
}
}