From 8cf2c1b4f57c0ee0f224d9d122738fdefb8cc6ac Mon Sep 17 00:00:00 2001 From: David Schilling Date: Wed, 25 Feb 2026 21:18:33 +0100 Subject: [PATCH 01/13] WIP: align iOS menu and level selection UI to Android --- .../LevelMode/LevelButtonPositioner.swift | 4 +- SOPA/view/LevelMode/LevelChoiceScene.swift | 434 ++++++++++++------ SOPA/view/LevelMode/LevelSelectButton.swift | 77 +++- 3 files changed, 359 insertions(+), 156 deletions(-) diff --git a/SOPA/view/LevelMode/LevelButtonPositioner.swift b/SOPA/view/LevelMode/LevelButtonPositioner.swift index 35d34c0..167fee2 100644 --- a/SOPA/view/LevelMode/LevelButtonPositioner.swift +++ b/SOPA/view/LevelMode/LevelButtonPositioner.swift @@ -16,7 +16,7 @@ class LevelButtonPositioner { init(size: CGSize) { self.size = size - self.buttonSize = CGSize(width: size.width * 0.3, height: size.width * 0.3) + self.buttonSize = CGSize(width: size.width * 0.24, height: size.width * 0.24) self.drawingHeight = size.height } @@ -26,7 +26,7 @@ class LevelButtonPositioner { let column = idOnPage % 3 let row = idOnPage / 3 let xPos: CGFloat = size.width / 4.0 * CGFloat(1 + column) + (size.width * CGFloat(page)) - let yPos: CGFloat = size.height - (drawingHeight / 5.0 * CGFloat(row + 1)) + let yPos: CGFloat = size.height - (drawingHeight / 5.0 * CGFloat(row + 1)) + size.height * 0.03 let position = CGPoint(x: xPos, y: yPos) return position diff --git a/SOPA/view/LevelMode/LevelChoiceScene.swift b/SOPA/view/LevelMode/LevelChoiceScene.swift index f0f8af7..61ce7b3 100644 --- a/SOPA/view/LevelMode/LevelChoiceScene.swift +++ b/SOPA/view/LevelMode/LevelChoiceScene.swift @@ -38,31 +38,98 @@ class LevelChoiceScene: SKScene { private let levelInfos: [LevelInfo] private var levelButtonArea: LevelButtonArea? private var menuButton: SpriteButton? + private var leftArrowButton: SpriteButton? + private var rightArrowButton: SpriteButton? init(size: CGSize, levelService: LevelService) { levelInfos = levelService.getLevelInfos() super.init(size: size) levelButtonArea = LevelButtonArea(size: size, levelInfos: levelInfos, update: update) addChild(levelButtonArea!) + backgroundColor = .black addButtons() - self.backgroundColor = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255, alpha: 1.0) + addPageArrows() + update() } private func addButtons() { - let side = size.height * 0.08 - menuButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: side), onClick: backToStartMenu) - menuButton?.position = CGPoint(x: size.height * 0.057, y: size.height * 0.91) + let side = min(size.width * 0.095, size.height * 0.07) + menuButton = SpriteButton(texture: makeMenuBackTexture(side: side), onClick: backToStartMenu) + menuButton?.position = CGPoint(x: size.width * 0.085, y: size.height * 0.90) + menuButton?.zPosition = 20 addChild(menuButton!) } + + private func makeMenuBackTexture(side: CGFloat) -> SKTexture { + let textureSize = CGSize(width: side, height: side) + let renderer = UIGraphicsImageRenderer(size: textureSize) + let image = renderer.image { _ in + let config = UIImage.SymbolConfiguration(pointSize: side * 0.72, weight: .semibold) + if let symbol = UIImage(systemName: "chevron.left", withConfiguration: config)? + .withTintColor(UIColor(red: 160.0 / 255.0, green: 164.0 / 255.0, blue: 170.0 / 255.0, alpha: 0.95), renderingMode: .alwaysOriginal) { + let symbolRect = CGRect( + x: (side - symbol.size.width) / 2.0, + y: (side - symbol.size.height) / 2.0, + width: symbol.size.width, + height: symbol.size.height + ) + symbol.draw(in: symbolRect) + } + } + return SKTexture(image: image) + } + + private func addPageArrows() { + let arrowSide = min(size.width * 0.16, size.height * 0.13) + leftArrowButton = SpriteButton(texture: makePageArrowTexture(imageNamed: "ArrowLeft", side: arrowSide), onClick: goToPreviousPage) + leftArrowButton?.position = CGPoint(x: size.width * 0.08, y: size.height * 0.21) + leftArrowButton?.zPosition = 20 + addChild(leftArrowButton!) + + rightArrowButton = SpriteButton(texture: makePageArrowTexture(imageNamed: "ArrowRight", side: arrowSide), onClick: goToNextPage) + rightArrowButton?.position = CGPoint(x: size.width * 0.92, y: size.height * 0.21) + rightArrowButton?.zPosition = 20 + addChild(rightArrowButton!) + } + + private func makePageArrowTexture(imageNamed: String, side: CGFloat) -> SKTexture { + let texture = SKTexture(imageNamed: imageNamed) + let imageSize = texture.size() + let ratio = imageSize.width / max(1, imageSize.height) + let targetSize = CGSize(width: side * ratio, height: side) + let renderer = UIGraphicsImageRenderer(size: targetSize) + let image = renderer.image { _ in + let rect = CGRect(origin: .zero, size: targetSize) + UIImage(named: imageNamed)?.draw(in: rect) + } + return SKTexture(image: image) + } + + private func goToPreviousPage() { + levelButtonArea?.swipeLeft() + } + + private func goToNextPage() { + levelButtonArea?.swipeRight() + } private func backToStartMenu() { ResourcesManager.getInstance().storyService?.loadStartMenuScene() } func update() { - // Intentionally empty: level paging is swipe-only. + guard let area = levelButtonArea else { + leftArrowButton?.isHidden = true + rightArrowButton?.isHidden = true + return + } + + let isFirstPage = area.currentLevelPage == 0 + let isLastPage = area.currentLevelPage >= area.pageCount - 1 + leftArrowButton?.isHidden = isFirstPage + rightArrowButton?.isHidden = isLastPage || area.pageCount <= 1 } @@ -74,153 +141,188 @@ class LevelChoiceScene: SKScene { } class StartMenuScene: SKScene { - private let background = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255, alpha: 1.0) - private let textColor = UIColor(red: 240.0 / 255.0, green: 239.0 / 255.0, blue: 238.0 / 255.0, alpha: 1.0) - + private let background = UIColor.black + private let titleColor = UIColor(red: 214.0 / 255.0, green: 214.0 / 255.0, blue: 214.0 / 255.0, alpha: 1.0) + private let neonColor = UIColor(red: 111.0 / 255.0, green: 227.0 / 255.0, blue: 1.0, alpha: 1.0) + private let neonGlowColor = UIColor(red: 23.0 / 255.0, green: 183.0 / 255.0, blue: 1.0, alpha: 1.0) + private let twitterUrl = "https://twitter.com/sopagame" + private let shareText = "I played SOPA: https://play.google.com/store/apps/details?id=com.sopaapp" + override init(size: CGSize) { super.init(size: size) - self.backgroundColor = background + backgroundColor = background addTitle() addButtons() + addSocialButtons() } - + required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } - + private func addTitle() { - let title = SKLabelNode(fontNamed: "Optima-Bold") + let title = SKLabelNode(fontNamed: "Impact") title.text = "SOPA" - title.fontSize = size.height * 0.12 - title.fontColor = textColor - title.position = CGPoint(x: size.width / 2, y: size.height * 0.78) + title.fontSize = size.height * 0.14 + title.fontColor = titleColor + title.position = CGPoint(x: size.width / 2, y: size.height * 0.77) addChild(title) - - let subtitle = SKLabelNode(fontNamed: "Optima-Bold") - subtitle.text = "Choose a mode" - subtitle.fontSize = size.height * 0.04 - subtitle.fontColor = textColor - subtitle.position = CGPoint(x: size.width / 2, y: size.height * 0.70) - addChild(subtitle) } - + private func addButtons() { - let horizontalPadding = size.width * 0.10 - let interButtonGap = size.width * 0.06 - let maxButtonWidthFromScreen = (size.width - (horizontalPadding * 2.0) - interButtonGap) / 2.0 - let buttonSize = min(size.height * 0.20, maxButtonWidthFromScreen) - let iconTextureSize = CGSize(width: buttonSize, height: buttonSize) - let totalGroupWidth = buttonSize * 2.0 + interButtonGap - let leftCenterX = (size.width - totalGroupWidth) / 2.0 + buttonSize / 2.0 - let rightCenterX = leftCenterX + buttonSize + interButtonGap - let buttonCenterY = size.height * 0.42 - - let levelModeButton = SpriteButton(texture: makeModeTexture(symbolName: "square.grid.2x2", textureSize: iconTextureSize)) { - ResourcesManager.getInstance().storyService?.loadLevelCoiceScene() - } - levelModeButton.position = CGPoint(x: leftCenterX, y: buttonCenterY) - addChild(levelModeButton) - - let levelModeLabel = SKLabelNode(fontNamed: "Optima-Bold") - levelModeLabel.text = "Level Mode" - levelModeLabel.fontSize = size.height * 0.035 - levelModeLabel.fontColor = textColor - levelModeLabel.position = CGPoint(x: 0, y: -buttonSize * 0.70) - levelModeButton.addChild(levelModeLabel) - - let justPlayButton = SpriteButton(texture: makeModeTexture(symbolName: "bolt.fill", textureSize: iconTextureSize)) { - ResourcesManager.getInstance().storyService?.loadJustPlaySceneFromMenuScene() - } - justPlayButton.position = CGPoint(x: rightCenterX, y: buttonCenterY) - addChild(justPlayButton) - - let justPlayLabel = SKLabelNode(fontNamed: "Optima-Bold") - justPlayLabel.text = "Just Play" - justPlayLabel.fontSize = size.height * 0.035 - justPlayLabel.fontColor = textColor - justPlayLabel.position = CGPoint(x: 0, y: -buttonSize * 0.70) - justPlayButton.addChild(justPlayLabel) - - let utilityButtonY = size.height * 0.20 - let utilityButtonSize = CGSize(width: size.width * 0.30, height: size.height * 0.075) - let utilityGap = size.width * 0.04 - let totalUtilityWidth = utilityButtonSize.width * 2.0 + utilityGap - let firstUtilityX = (size.width - totalUtilityWidth) / 2.0 + utilityButtonSize.width / 2.0 - - let tutorialButton = SpriteButton(texture: makeTextButtonTexture(title: "Tutorial", size: utilityButtonSize)) { - ResourcesManager.getInstance().storyService?.loadTutorialSceneFromMenuScene() - } - tutorialButton.position = CGPoint(x: firstUtilityX, y: utilityButtonY) - addChild(tutorialButton) - - let creditsButton = SpriteButton(texture: makeTextButtonTexture(title: "Credits", size: utilityButtonSize)) { - ResourcesManager.getInstance().storyService?.loadCreditsSceneFromMenuScene() - } - creditsButton.position = CGPoint(x: firstUtilityX + utilityButtonSize.width + utilityGap, y: utilityButtonY) - addChild(creditsButton) + let menuItems: [(title: String, action: () -> Void)] = [ + ("LEVEL MODE", { ResourcesManager.getInstance().storyService?.loadLevelCoiceScene() }), + ("JUST PLAY", { ResourcesManager.getInstance().storyService?.loadJustPlaySceneFromMenuScene() }), + // Keep this wired until a dedicated Settings scene exists on iOS. + ("SETTINGS", { ResourcesManager.getInstance().storyService?.loadTutorialSceneFromMenuScene() }), + ("CREDITS", { ResourcesManager.getInstance().storyService?.loadCreditsSceneFromMenuScene() }) + ] + + let buttonSize = CGSize(width: size.width * 0.76, height: size.height * 0.095) + let firstY = size.height * 0.62 + let verticalGap = size.height * 0.11 + + for (index, item) in menuItems.enumerated() { + let button = SpriteButton(texture: makeNeonTextTexture(title: item.title, size: buttonSize), onClick: item.action) + button.position = CGPoint(x: size.width / 2.0, y: firstY - CGFloat(index) * verticalGap) + addChild(button) + } } - - private func makeModeTexture(symbolName: String, textureSize: CGSize) -> SKTexture { - let renderer = UIGraphicsImageRenderer(size: textureSize) - let image = renderer.image { _ in - let frame = CGRect(origin: .zero, size: textureSize).insetBy(dx: textureSize.width * 0.05, dy: textureSize.height * 0.05) - let backgroundPath = UIBezierPath(roundedRect: frame, cornerRadius: textureSize.width * 0.18) - UIColor(white: 1.0, alpha: 0.10).setFill() - backgroundPath.fill() - UIColor(white: 1.0, alpha: 0.22).setStroke() - backgroundPath.lineWidth = textureSize.width * 0.03 - backgroundPath.stroke() - let config = UIImage.SymbolConfiguration(pointSize: textureSize.width * 0.44, weight: .semibold) - if let symbol = UIImage(systemName: symbolName, withConfiguration: config)? - .withTintColor(textColor, renderingMode: .alwaysOriginal) { - let symbolRect = CGRect( - x: (textureSize.width - symbol.size.width) / 2.0, - y: (textureSize.height - symbol.size.height) / 2.0, - width: symbol.size.width, - height: symbol.size.height - ) - symbol.draw(in: symbolRect) - } - } - return SKTexture(image: image) + private func addSocialButtons() { + let buttonSide = min(size.width * 0.18, size.height * 0.10) + + let shareButton = SpriteButton( + texture: makeSocialButtonTexture(symbolName: "point.3.connected.trianglepath.dotted", size: CGSize(width: buttonSide, height: buttonSide), fillBackground: true), + onClick: shareApp + ) + shareButton.position = CGPoint(x: size.width * 0.20, y: size.height * 0.14) + addChild(shareButton) + + let twitterButton = SpriteButton( + texture: makeSocialButtonTexture(symbolName: "paperplane.fill", size: CGSize(width: buttonSide * 1.15, height: buttonSide * 1.15), fillBackground: false), + onClick: openTwitter + ) + twitterButton.position = CGPoint(x: size.width * 0.74, y: size.height * 0.14) + addChild(twitterButton) } - private func makeTextButtonTexture(title: String, size: CGSize) -> SKTexture { + private func makeNeonTextTexture(title: String, size: CGSize) -> SKTexture { let renderer = UIGraphicsImageRenderer(size: size) let image = renderer.image { _ in - let frame = CGRect(origin: .zero, size: size).insetBy(dx: size.width * 0.01, dy: size.height * 0.04) - let backgroundPath = UIBezierPath(roundedRect: frame, cornerRadius: size.height * 0.25) - UIColor(white: 1.0, alpha: 0.10).setFill() - backgroundPath.fill() - UIColor(white: 1.0, alpha: 0.22).setStroke() - backgroundPath.lineWidth = size.height * 0.07 - backgroundPath.stroke() - let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = .center - let attributes: [NSAttributedString.Key: Any] = [ - .font: UIFont(name: "Optima-Bold", size: size.height * 0.40) ?? UIFont.systemFont(ofSize: size.height * 0.40, weight: .semibold), - .foregroundColor: textColor, + + let glowShadow = NSShadow() + glowShadow.shadowColor = neonGlowColor + glowShadow.shadowBlurRadius = size.height * 0.22 + glowShadow.shadowOffset = .zero + + let font = UIFont(name: "HelveticaNeue-Light", size: size.height * 0.60) + ?? UIFont.systemFont(ofSize: size.height * 0.60, weight: .light) + let textRect = CGRect(x: 0, y: size.height * 0.22, width: size.width, height: size.height * 0.60) + + let glowAttributes: [NSAttributedString.Key: Any] = [ + .font: font, + .foregroundColor: neonColor, + .strokeColor: neonColor, + .strokeWidth: -1.2, + .paragraphStyle: paragraphStyle, + .shadow: glowShadow + ] + title.draw(in: textRect, withAttributes: glowAttributes) + + let coreAttributes: [NSAttributedString.Key: Any] = [ + .font: font, + .foregroundColor: UIColor(red: 183.0 / 255.0, green: 245.0 / 255.0, blue: 1.0, alpha: 1.0), .paragraphStyle: paragraphStyle ] - let textRect = CGRect(x: 0.0, y: size.height * 0.28, width: size.width, height: size.height * 0.5) - title.draw(in: textRect, withAttributes: attributes) + title.draw(in: textRect, withAttributes: coreAttributes) + } + return SKTexture(image: image) + } + + private func makeSocialButtonTexture(symbolName: String, size: CGSize, fillBackground: Bool) -> SKTexture { + let renderer = UIGraphicsImageRenderer(size: size) + let image = renderer.image { _ in + let blueColor = UIColor(red: 99.0 / 255.0, green: 177.0 / 255.0, blue: 230.0 / 255.0, alpha: 1.0) + if fillBackground { + let backgroundPath = UIBezierPath(roundedRect: CGRect(origin: .zero, size: size), cornerRadius: size.width * 0.18) + blueColor.setFill() + backgroundPath.fill() + } + + let pointSize = fillBackground ? size.width * 0.50 : size.width * 0.75 + let config = UIImage.SymbolConfiguration(pointSize: pointSize, weight: .semibold) + guard let baseSymbol = UIImage(systemName: symbolName, withConfiguration: config) else { + return + } + + let iconColor = fillBackground ? UIColor.white : blueColor + let symbol = baseSymbol.withTintColor(iconColor, renderingMode: .alwaysOriginal) + let symbolRect = CGRect( + x: (size.width - symbol.size.width) / 2.0, + y: (size.height - symbol.size.height) / 2.0, + width: symbol.size.width, + height: symbol.size.height + ) + symbol.draw(in: symbolRect) } return SKTexture(image: image) } + + private func openTwitter() { + guard let url = URL(string: twitterUrl) else { + return + } + UIApplication.shared.open(url) + } + + private func shareApp() { + guard let controller = topViewController() else { + return + } + let shareController = UIActivityViewController(activityItems: [shareText], applicationActivities: nil) + shareController.popoverPresentationController?.sourceView = controller.view + controller.present(shareController, animated: true) + } + + private func topViewController(base: UIViewController? = nil) -> UIViewController? { + let initialController: UIViewController? + if let base = base { + initialController = base + } else { + initialController = UIApplication.shared.connectedScenes + .compactMap { $0 as? UIWindowScene } + .flatMap { $0.windows } + .first { $0.isKeyWindow }?.rootViewController + } + + if let navController = initialController as? UINavigationController { + return topViewController(base: navController.visibleViewController) + } + if let tabController = initialController as? UITabBarController { + return topViewController(base: tabController.selectedViewController) + } + if let presented = initialController?.presentedViewController { + return topViewController(base: presented) + } + return initialController + } } class CreditsScene: SKScene { - private let background = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255, alpha: 1.0) - private let textColor = UIColor(red: 240.0 / 255.0, green: 239.0 / 255.0, blue: 238.0 / 255.0, alpha: 1.0) + private let background = UIColor.black + private let titleColor = UIColor(red: 214.0 / 255.0, green: 214.0 / 255.0, blue: 214.0 / 255.0, alpha: 1.0) + private let sectionColor = UIColor(red: 111.0 / 255.0, green: 227.0 / 255.0, blue: 1.0, alpha: 1.0) + private let textColor = UIColor(red: 230.0 / 255.0, green: 236.0 / 255.0, blue: 242.0 / 255.0, alpha: 1.0) override init(size: CGSize) { super.init(size: size) - self.backgroundColor = background + backgroundColor = background addBackButton() addTitle() - addLines() + addCreditsContent() } required init?(coder aDecoder: NSCoder) { @@ -229,41 +331,103 @@ class CreditsScene: SKScene { private func addBackButton() { let side = size.height * 0.08 - let backButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: side)) { + let backButton = SpriteButton(texture: makeBackButtonTexture(side: side)) { ResourcesManager.getInstance().storyService?.loadStartMenuScene() } backButton.position = CGPoint(x: size.height * 0.057, y: size.height * 0.91) addChild(backButton) } + private func makeBackButtonTexture(side: CGFloat) -> SKTexture { + let textureSize = CGSize(width: side, height: side) + let renderer = UIGraphicsImageRenderer(size: textureSize) + let image = renderer.image { _ in + let frame = CGRect(origin: .zero, size: textureSize) + let path = UIBezierPath(roundedRect: frame, cornerRadius: side * 0.25) + UIColor(white: 1.0, alpha: 0.10).setFill() + path.fill() + UIColor(white: 1.0, alpha: 0.20).setStroke() + path.lineWidth = side * 0.05 + path.stroke() + + let config = UIImage.SymbolConfiguration(pointSize: side * 0.44, weight: .bold) + if let symbol = UIImage(systemName: "chevron.left", withConfiguration: config)? + .withTintColor(sectionColor, renderingMode: .alwaysOriginal) { + let symbolRect = CGRect( + x: (side - symbol.size.width) / 2.0, + y: (side - symbol.size.height) / 2.0, + width: symbol.size.width, + height: symbol.size.height + ) + symbol.draw(in: symbolRect) + } + } + return SKTexture(image: image) + } + private func addTitle() { - let title = SKLabelNode(fontNamed: "Optima-Bold") - title.text = "Credits" - title.fontSize = size.height * 0.10 - title.fontColor = textColor + let title = SKLabelNode(fontNamed: "Impact") + title.text = "CREDITS" + title.fontSize = size.height * 0.09 + title.fontColor = titleColor title.position = CGPoint(x: size.width * 0.5, y: size.height * 0.78) addChild(title) } - private func addLines() { - addLine(text: "Design and Development", y: size.height * 0.62, sizeFactor: 0.038) - addLine(text: "David Schilling", y: size.height * 0.55, sizeFactor: 0.048) - addLine(text: "Raphael Schilling", y: size.height * 0.49, sizeFactor: 0.048) - addLine(text: "Gameplay and Product Iteration", y: size.height * 0.39, sizeFactor: 0.038) - addLine(text: "SOPA Team", y: size.height * 0.33, sizeFactor: 0.048) + private func addCreditsContent() { + let content: [(section: String, entries: [String])] = [ + ("DEVELOPMENT", ["David Schilling - @schillda710", "Raphael Schilling - @ubuntius"]), + ("DESIGN", ["Raphael Schilling - @ubuntius"]), + ("MUSIC", ["Menu - axtoncrolley on opengameart.org"]) + ] + + var currentY = size.height * 0.70 + for block in content { + addSectionLine(text: block.section, y: currentY) + currentY -= size.height * 0.045 + + for entry in block.entries { + addBodyLine(text: entry, y: currentY) + currentY -= size.height * 0.038 + } + currentY -= size.height * 0.028 + } + } + + private func addSectionLine(text: String, y: CGFloat) { + let line = SKLabelNode(fontNamed: "HelveticaNeue-Bold") + line.horizontalAlignmentMode = .left + line.verticalAlignmentMode = .center + line.text = text + line.fontSize = fittedFontSize( + for: text, + fontName: "HelveticaNeue-Bold", + preferredSize: size.height * 0.032, + maxWidth: size.width * 0.88 + ) + line.fontColor = sectionColor + line.position = CGPoint(x: size.width * 0.06, y: y) + addChild(line) } - private func addLine(text: String, y: CGFloat, sizeFactor: CGFloat) { - let line = SKLabelNode(fontNamed: "Optima-Bold") + private func addBodyLine(text: String, y: CGFloat) { + let line = SKLabelNode(fontNamed: "HelveticaNeue") + line.horizontalAlignmentMode = .left + line.verticalAlignmentMode = .center line.text = text - line.fontSize = fittedFontSize(for: text, preferredSize: size.height * sizeFactor, maxWidth: size.width * 0.86) + line.fontSize = fittedFontSize( + for: text, + fontName: "HelveticaNeue", + preferredSize: size.height * 0.026, + maxWidth: size.width * 0.90 + ) line.fontColor = textColor - line.position = CGPoint(x: size.width * 0.5, y: y) + line.position = CGPoint(x: size.width * 0.09, y: y) addChild(line) } - private func fittedFontSize(for text: String, preferredSize: CGFloat, maxWidth: CGFloat) -> CGFloat { - let label = SKLabelNode(fontNamed: "Optima-Bold") + private func fittedFontSize(for text: String, fontName: String, preferredSize: CGFloat, maxWidth: CGFloat) -> CGFloat { + let label = SKLabelNode(fontNamed: fontName) label.text = text var currentSize = preferredSize label.fontSize = currentSize diff --git a/SOPA/view/LevelMode/LevelSelectButton.swift b/SOPA/view/LevelMode/LevelSelectButton.swift index ee5716f..6af97be 100644 --- a/SOPA/view/LevelMode/LevelSelectButton.swift +++ b/SOPA/view/LevelMode/LevelSelectButton.swift @@ -10,24 +10,21 @@ import Foundation import SpriteKit class LevelSelectButton: SKSpriteNode { - let green = UIColor(red: 169.0 / 255.0, green: 162.0 / 255.0, blue: 121.0 / 255.0, alpha: 1.0) - let grey = UIColor(red: 0.5 , green: 0.5, blue: 0.5, alpha: 1.0) + let numberActive = UIColor(red: 223.0 / 255.0, green: 106.0 / 255.0, blue: 37.0 / 255.0, alpha: 1.0) + let numberUnlocked = UIColor(red: 98.0 / 255.0, green: 100.0 / 255.0, blue: 106.0 / 255.0, alpha: 1.0) + let numberLocked = UIColor(red: 110.0 / 255.0, green: 112.0 / 255.0, blue: 116.0 / 255.0, alpha: 1.0) let levelInfo: LevelInfo + init(levelInfo: LevelInfo, levelButtonPositioner: LevelButtonPositioner) { self.levelInfo = levelInfo + super.init(texture: nil, color: .clear, size: levelButtonPositioner.getLevelSize()) + position = levelButtonPositioner.getLevelPosition(id: levelInfo.levelId) + + let isCurrentTarget = !levelInfo.locked && levelInfo.fewestMoves < 0 + addFrame(locked: levelInfo.locked, highlighted: isCurrentTarget) + addLable(id: levelInfo.levelId, color: labelColor(locked: levelInfo.locked, highlighted: isCurrentTarget)) if !levelInfo.locked { - let texture = SKTexture(imageNamed: "Level") - super.init(texture: texture, color: UIColor.clear, size: levelButtonPositioner.getLevelSize()) - position = levelButtonPositioner.getLevelPosition(id: levelInfo.levelId) addStars(stars: levelInfo.stars) - addLable(id: levelInfo.levelId, color: green) - - } else { - let texture = SKTexture(imageNamed: "LevelSW") - super.init(texture: texture, color: UIColor.clear, size: levelButtonPositioner.getLevelSize()) - position = levelButtonPositioner.getLevelPosition(id: levelInfo.levelId) - addLable(id: levelInfo.levelId, color: grey) - } } @@ -36,14 +33,56 @@ class LevelSelectButton: SKSpriteNode { fatalError("init(coder:) has not been implemented") } + private func addFrame(locked: Bool, highlighted: Bool) { + let inset = size.width * 0.04 + let frameRect = CGRect( + x: -size.width / 2.0 + inset, + y: -size.height / 2.0 + inset, + width: size.width - 2.0 * inset, + height: size.height - 2.0 * inset + ) + let cornerRadius = size.width * 0.20 + + let glowNode = SKShapeNode(rect: frameRect, cornerRadius: cornerRadius) + glowNode.fillColor = .clear + glowNode.lineWidth = size.width * 0.040 + glowNode.strokeColor = highlighted + ? UIColor(red: 245.0 / 255.0, green: 102.0 / 255.0, blue: 34.0 / 255.0, alpha: 0.70) + : UIColor(white: 1.0, alpha: locked ? 0.12 : 0.30) + glowNode.glowWidth = size.width * 0.10 + glowNode.blendMode = .add + glowNode.zPosition = zPosition + addChild(glowNode) + + let frameNode = SKShapeNode(rect: frameRect, cornerRadius: cornerRadius) + frameNode.fillColor = .clear + frameNode.lineWidth = size.width * 0.030 + frameNode.strokeColor = highlighted + ? UIColor(red: 250.0 / 255.0, green: 192.0 / 255.0, blue: 107.0 / 255.0, alpha: 1.0) + : UIColor(white: locked ? 0.55 : 0.90, alpha: 0.95) + frameNode.lineJoin = .round + frameNode.zPosition = zPosition + 1 + addChild(frameNode) + } + + private func labelColor(locked: Bool, highlighted: Bool) -> UIColor { + if highlighted { + return numberActive + } + if locked { + return numberLocked + } + return numberUnlocked + } + func addStars(stars: Int) { let star1: SKSpriteNode = generateStar(achieved: stars >= 1) let star2: SKSpriteNode = generateStar(achieved: stars >= 2) let star3: SKSpriteNode = generateStar(achieved: stars >= 3) - star1.position = CGPoint(x: -size.width * 0.25, y: -size.height * 0.2) - star2.position = CGPoint(x: 0, y: -size.height * 0.27 ) - star3.position = CGPoint(x: size.width * 0.25, y: -size.height * 0.2) + star1.position = CGPoint(x: -size.width * 0.25, y: -size.height * 0.50) + star2.position = CGPoint(x: 0, y: -size.height * 0.56) + star3.position = CGPoint(x: size.width * 0.25, y: -size.height * 0.50) addChild(star1) addChild(star2) @@ -52,11 +91,11 @@ class LevelSelectButton: SKSpriteNode { } func addLable(id: Int, color: UIColor) { - let idLable = SKLabelNode(fontNamed: "Optima-Bold") + let idLable = SKLabelNode(fontNamed: "Impact") idLable.text = String(id) idLable.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.center idLable.verticalAlignmentMode = SKLabelVerticalAlignmentMode.center - idLable.fontSize = size.height * 0.34 + idLable.fontSize = size.height * 0.32 idLable.fontColor = color idLable.zPosition = zPosition + 1 addChild(idLable) @@ -68,7 +107,7 @@ class LevelSelectButton: SKSpriteNode { if achieved { star = SKSpriteNode(imageNamed: "star") } - star.size = CGSize(width: size.width/3, height: size.height/3) + star.size = CGSize(width: size.width/3.4, height: size.height/3.4) star.zPosition = zPosition + 1 return star } From 471cc8600cdbe315e8c8efa6690b847dadeb21a1 Mon Sep 17 00:00:00 2001 From: David Schilling Date: Wed, 25 Feb 2026 21:31:18 +0100 Subject: [PATCH 02/13] WIP: gameplay neon assets and level mode HUD/back navigation --- .../border/borders.imageset/Contents.json | 4 +- .../border/borders.imageset/borders.png | Bin 0 -> 1482 bytes .../bordersFinish.imageset/Contents.json | 4 +- .../bordersFinish.imageset/bordersFinish.png | Bin 0 -> 10621 bytes .../Contents.json | 4 +- .../bordersFinish_filled.png | Bin 0 -> 7048 bytes .../bordersStart.imageset/Contents.json | 4 +- .../bordersStart.imageset/bordersStart.png | Bin 0 -> 10792 bytes .../Contents.json | 4 +- .../bordersStart_filled.png | Bin 0 -> 7671 bytes .../tiles/a.imageset/Contents.json | 2 +- SOPA/Assets.xcassets/tiles/a.imageset/a.png | Bin 1827 -> 2825 bytes .../tiles/a_filled.imageset/Contents.json | 4 +- .../tiles/a_filled.imageset/a_filled.png | Bin 0 -> 1403 bytes .../tiles/c.imageset/Contents.json | 4 +- SOPA/Assets.xcassets/tiles/c.imageset/c.png | Bin 0 -> 6417 bytes .../tiles/c_filled.imageset/Contents.json | 4 +- .../tiles/c_filled.imageset/c_filled.png | Bin 0 -> 3638 bytes .../tiles/e.imageset/Contents.json | 4 +- SOPA/Assets.xcassets/tiles/e.imageset/e.png | Bin 0 -> 6305 bytes .../tiles/e_filled.imageset/Contents.json | 4 +- .../tiles/e_filled.imageset/e_filled.png | Bin 0 -> 3536 bytes .../tiles/g.imageset/Contents.json | 2 +- SOPA/Assets.xcassets/tiles/g.imageset/g.png | Bin 2285 -> 6185 bytes .../tiles/g_filled.imageset/Contents.json | 4 +- .../tiles/g_filled.imageset/g_filled.png | Bin 0 -> 3410 bytes .../tiles/i.imageset/Contents.json | 2 +- SOPA/Assets.xcassets/tiles/i.imageset/i.png | Bin 6664 -> 3278 bytes .../tiles/i_filled.imageset/Contents.json | 4 +- .../tiles/i_filled.imageset/i_filled.png | Bin 0 -> 1643 bytes .../tiles/o.imageset/Contents.json | 2 +- SOPA/Assets.xcassets/tiles/o.imageset/o.png | Bin 1810 -> 311 bytes .../tiles/u.imageset/Contents.json | 4 +- SOPA/Assets.xcassets/tiles/u.imageset/u.png | Bin 0 -> 6001 bytes .../tiles/u_filled.imageset/Contents.json | 4 +- .../tiles/u_filled.imageset/u_filled.png | Bin 0 -> 3228 bytes SOPA/view/LevelMode/LevelModeGameScene.swift | 129 ++++++++++++++++-- 37 files changed, 150 insertions(+), 43 deletions(-) create mode 100644 SOPA/Assets.xcassets/border/borders.imageset/borders.png create mode 100644 SOPA/Assets.xcassets/border/bordersFinish.imageset/bordersFinish.png create mode 100644 SOPA/Assets.xcassets/border/bordersFinish_filled.imageset/bordersFinish_filled.png create mode 100644 SOPA/Assets.xcassets/border/bordersStart.imageset/bordersStart.png create mode 100644 SOPA/Assets.xcassets/border/bordersStart_filled.imageset/bordersStart_filled.png create mode 100644 SOPA/Assets.xcassets/tiles/a_filled.imageset/a_filled.png create mode 100644 SOPA/Assets.xcassets/tiles/c.imageset/c.png create mode 100644 SOPA/Assets.xcassets/tiles/c_filled.imageset/c_filled.png create mode 100644 SOPA/Assets.xcassets/tiles/e.imageset/e.png create mode 100644 SOPA/Assets.xcassets/tiles/e_filled.imageset/e_filled.png create mode 100644 SOPA/Assets.xcassets/tiles/g_filled.imageset/g_filled.png create mode 100644 SOPA/Assets.xcassets/tiles/i_filled.imageset/i_filled.png create mode 100644 SOPA/Assets.xcassets/tiles/u.imageset/u.png create mode 100644 SOPA/Assets.xcassets/tiles/u_filled.imageset/u_filled.png diff --git a/SOPA/Assets.xcassets/border/borders.imageset/Contents.json b/SOPA/Assets.xcassets/border/borders.imageset/Contents.json index 82d3b31..3cb9267 100644 --- a/SOPA/Assets.xcassets/border/borders.imageset/Contents.json +++ b/SOPA/Assets.xcassets/border/borders.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "empty.png" + "filename" : "borders.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/border/borders.imageset/borders.png b/SOPA/Assets.xcassets/border/borders.imageset/borders.png new file mode 100644 index 0000000000000000000000000000000000000000..23272816f317f30061dd1e0cb61d649ca3cd9dc0 GIT binary patch literal 1482 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>lF!Z*Mu~OCOg#_OQHcy7uj&r4oh$OSb=-;M`TWu5MY~It9Bg6Ox&ky`*pU zsp_AcD_5qmJ~Z;h)GwbIn7u?YnGgN>Gk;>tvz^y0PnP+Wd2Tbkd3{M*WNKx@AzsznZQ2HEVv=-qSW$ z&-|{s&O0YdWU0PpvS+#FlIokwYs{DJkqX{cZ1iSQkLNv~mH&5~YM-C~X?^b5+mmX1 zj8ZKt-%h%cbfAFA_lke>BL7XEM%SL?1Q&h0zWnFs`|;0i#vhv!J1OzD+mWkwU%&d+ z)tWyqo%CO&a`uzjNw-yQi=F)Q@&%iFWtZ2q*GDfrs+jboa#Hv0S>o&SgVuek482`j zW6{%6wq}>#r|L=fC;hQLxm!hklh0&lg=HMa>&{xR6is^)Imv#jV!*OluV2SLoAt%? zUv!yEm}9xniH8-YTc4l16_}l+tFm^{Ej_)hzMZqhPW~1W2?FE+lbQJ_r4^WI;J%iJZa>~UBBFS((P@} zx37NwUhTxK#I85*j&6$e6=*DY(?s56P(*LKvYTz=0u@Q1M{rrvs1EU$@U+^hS7$;}`xlhvSt5`YM~geE;?%*5K<#hg-ATuijFToc!k2 z_3xhGw6Ny;w`FS&&#O0?@Kt*LmaVz*v!fJ373LgZk(_K3`}T98=&5waDc{aHNBU2) z@h+P82Ov(wHK8Vwvy6!z*7NjVP+L zT(W!j+5B6LuT$rLdVIO&|7YJ<+n(h{E<1MR&<)j33 literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/border/bordersFinish.imageset/Contents.json b/SOPA/Assets.xcassets/border/bordersFinish.imageset/Contents.json index 3e8a31a..642f573 100644 --- a/SOPA/Assets.xcassets/border/bordersFinish.imageset/Contents.json +++ b/SOPA/Assets.xcassets/border/bordersFinish.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "border.png" + "filename" : "bordersFinish.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/border/bordersFinish.imageset/bordersFinish.png b/SOPA/Assets.xcassets/border/bordersFinish.imageset/bordersFinish.png new file mode 100644 index 0000000000000000000000000000000000000000..9291faf3ec10ffcf43d58721ab84cbf55b664155 GIT binary patch literal 10621 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 literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/border/bordersFinish_filled.imageset/Contents.json b/SOPA/Assets.xcassets/border/bordersFinish_filled.imageset/Contents.json index 3e8a31a..f25dac8 100644 --- a/SOPA/Assets.xcassets/border/bordersFinish_filled.imageset/Contents.json +++ b/SOPA/Assets.xcassets/border/bordersFinish_filled.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "border.png" + "filename" : "bordersFinish_filled.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/border/bordersFinish_filled.imageset/bordersFinish_filled.png b/SOPA/Assets.xcassets/border/bordersFinish_filled.imageset/bordersFinish_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..155afa9c342218c0fcec932ce47fed9ccdeb11f7 GIT binary patch literal 7048 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 literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/border/bordersStart_filled.imageset/Contents.json b/SOPA/Assets.xcassets/border/bordersStart_filled.imageset/Contents.json index 3e8a31a..7d11783 100644 --- a/SOPA/Assets.xcassets/border/bordersStart_filled.imageset/Contents.json +++ b/SOPA/Assets.xcassets/border/bordersStart_filled.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "border.png" + "filename" : "bordersStart_filled.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/border/bordersStart_filled.imageset/bordersStart_filled.png b/SOPA/Assets.xcassets/border/bordersStart_filled.imageset/bordersStart_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0b7fa6c103c6f3587907228d4763411f1bafe2 GIT binary patch literal 7671 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 literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tiles/a.imageset/Contents.json b/SOPA/Assets.xcassets/tiles/a.imageset/Contents.json index a39878b..adf2f50 100644 --- a/SOPA/Assets.xcassets/tiles/a.imageset/Contents.json +++ b/SOPA/Assets.xcassets/tiles/a.imageset/Contents.json @@ -9,4 +9,4 @@ "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/tiles/a.imageset/a.png b/SOPA/Assets.xcassets/tiles/a.imageset/a.png index 6dfbddb6f9f41f8383a178d974318b854551b762..d1e26b2fab8bc9b62628de8dd9c31257f3760a23 100644 GIT binary patch literal 2825 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 literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tiles/c_filled.imageset/Contents.json b/SOPA/Assets.xcassets/tiles/c_filled.imageset/Contents.json index f71c70d..67739fc 100644 --- a/SOPA/Assets.xcassets/tiles/c_filled.imageset/Contents.json +++ b/SOPA/Assets.xcassets/tiles/c_filled.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "g.png" + "filename" : "c_filled.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/tiles/c_filled.imageset/c_filled.png b/SOPA/Assets.xcassets/tiles/c_filled.imageset/c_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d24d419e6c311535e176971609e5a8df90986b GIT binary patch literal 3638 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 YDIb#)$TIcCM;ji1fVVMgF!81Q58Yv9bpQYW literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tiles/e.imageset/Contents.json b/SOPA/Assets.xcassets/tiles/e.imageset/Contents.json index f71c70d..3004157 100644 --- a/SOPA/Assets.xcassets/tiles/e.imageset/Contents.json +++ b/SOPA/Assets.xcassets/tiles/e.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "g.png" + "filename" : "e.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/tiles/e.imageset/e.png b/SOPA/Assets.xcassets/tiles/e.imageset/e.png new file mode 100644 index 0000000000000000000000000000000000000000..608b4b7e46ce2ae443d889796404cc6bab1df684 GIT binary patch literal 6305 zcmd6M^-~*6)O8@ZLyHz@kQNFQ2~wP3#ie+F;8Kcvv0@KSA-HRSmZAxoQ0&116faO9 z6sNefMM{vD=lkuO_aAtFxO;YX?(E*3Idf;v*#v!EHA*rTG5`QTsiCf7aF3Y(f`sUP ztTU@Gz6Vk-b*L`@K>pyrzystLGTko{`)TN?68|7!eF!8uiLFop0GJ>eDvCyL7Y~bE zeV1Nl$Ck`cMxo8JJ-yepoeX6R3l@d`-YIb7Y+VDK4e}PW!5XX<*-z3y=!ti)Ap{&) z-i5iCpLJ2ZX{)L#3X+V4^3P?3!+sZOZs=7@08DR=K92#R_MhX6@8HzCot zXU5}gcc>x8@LZ8QJ|3K1Z1|CPs_5pVqM*9q?t7J<;kdt#KSc2nl*{yV&JmL(~#sqfjdCPo$u-|=Z`bYvs|x4-Iklv(tc zs~!#G2{~UnGan(8sbs$rf)&BgnFVo-tIGsDeK4bAl@9bE9^|V?EnEBW8Q8Myvcx1H zlmed0Q`DXjAoq&im?mqq`$g&N?#KX&+bi9*J>N&ihTZcO6HZ`=ycD<5?V_`&!wQEl zo=|+ljWp`b^JbRIMS>^~euVeZ_g7*!&!Zd?$N6%ObQ*!q5mZ;FaXp&Mhvd3hX(ONnCZc5@5$f=!nN6$txyoaTdAy3EnD1|?#V)!N075OfCb&9MUrPNvoSG>`^Vk|(a}{|EJ__BZ)TJVduYQ4>$)h!Zb(of+=hnEF1-UGF zuOvzp1W3c5^M*rT6%&pq2?@nt6fIX?ap0$uA5CU-7N*@u@!*0}RstcGeY9uOEHEoB z#6cF`ui=dpk;G<}ikNan+8>1L*5o61P_J{>VV5$24|FVuD-b9mFls_;n}eS=Njj%;5c}I{Yt*HyO#Ieb1A9R!a@I{jMnux(sX9e zf+`&<)9=jbQcb`9AVwzT3R0OIEo==0!a73jp-vfizg+My&w*)~2)>7Msr^mruXumb zGE^w_I;~kB;5mHg0sm`TcG;xv&A!0@(DbS66AJ=5qQv{kEuYuf=$ktqkkqErPmw># z){NIw{G1IF2PCkWRJh3HFM;`*3`iL@Elr+nm;?uHh_-Yp$b=GM>Yy3Y>)8%+Bs~UG zsw(zZO@eIJ2&lX~Ar1A{2(Xe_KY=yiS;1*s{;V*>Lnvd`|EWo5FhiV!BFS#PT5SL+ zJ*zm#mJ`$^q3MrwtL)!vX$UQC&+FZb>Ia(;n5=fcPQ}K(Tu*`xm>{6z?ab0I`wx^x%X=#g5s0k<;>|fLFyl+g|~yR0P&% z4Fgby*_A=rKO{5a&Qz+uN0d{l@8I>f9W|8HoT>J<&VH&ZfZo${&L($nl>fDVw&$E^ zEIa=+q54elWHQveL5@L2=dZQ)eN_n>(i7|ZB=77?J;>EVB0Sse!)}egY~R^{A@!6! zI!Fi`Lj@{}ExSBLVX?;&AG!605iy<_f(Nc0~=z5_*`c%&qJm5lIS70>6S?Dw9svBUaK@hZ_jT3D?VAvtPo@5W>JVYx+vbX` zR&>N7Jn#GNLL&$qcJhdu2-B(mnAK1q{+-IseNLTuX?-0mZniM{$HiMuPr(d4pP$_G zsj6t3so1Qv$S{RLXHjNQ+k>R$RVJV#$7N(QBSgIb zhL8A4|I8A`R;elU;PSslVIMX6^_=ZBfg~m=;YD%%tHKb9l(e40;xGz2V7~(xqW$## zHhWI*Q6|b0BFvzt8F+T!{~z)wXflQYBL5q9yGFMwj$##7tvbpJHwW&xqo8t=ggG1vZzoyl8++S71n|%Kf>XkuDv^Fq=P$=~JCbo;ICU z9e8%Z!ujh4vo`(g`?M?`S$KBnZWhv!CCE1mrii{4fuS%$6$*HWLTf`HXlc7#oHzf- zXbv$ZO%z7?a^bCq%&jm)`!ONlDHU%g2d@sfLEkH?o+(H1&`~rKsLCSFxu9iIh8m5D zE!Z;mFn--TT5e1FhX^AFRB8h_|628>eCy{f7phk~Mf}qDuIne(7_zB+ z=ox{fo_7Uvi?gykM!ct*@JsPU2qS3}3MlgobFcHK7 z-e#9WBL$q8B$*1Uu#+O*WTHzW1h2H1rwva=89S20-%{iIp$6?UitQt???Is?>BFUs z0S#XGC=fEQcSL%12Us!DdC!J6x{B0Z1VZnuv^Dj!kqNh6fp1if4g_61owLg_YPGzr z^udt0OZ&3(;*0{`;RWqkNQc4lz*pWb9XW_(9=;gP_-rS6oVv;6cs^xFXDyO*lD{Rz`l`9S=;H@{C4% zaRq>qoBvFnvJFad(=|b}*5b23qLses@Ed%rIcH@J-rP#Q=03Terz3M@&r+J#?~i>n zn={^d?FL@`6~+m1AQxT~cQLdPA@|WkLPyY&jdHJ*BWNDJr{_J(_$PB^jKBvDjKlfr zQpw6&Ap#ko^_j@^&n{`@e}))gHrj}k5-`m%Rxj@PaBigtAj~f*^(_%eeZV zEIO^ue>Rb61rNA^VViJMsar|=TX}ei8kHcYIWIzAj90|yR9jqCf8*^U$~AMB=dyfL z8ibl#@pnnV1Y7UE{SshL311?%7Z5e-fcQ_XzNs9h6W~1MEME~KA&$DXjb*gSc1x8V zT}5!la3+yxspcdyB)*I>Fl7BeO0m~-#~^C>_}erlcr$7Lq_WTrf4bfk=dXI-xfS$} zla%c?T4NpP%gj`Mz<5VX$QXu--KzVO#J-=!3`xZ|C?*W2JAhDeSxRN<+9q-E9~$;? zf73%`PcnZCxj4=5hf>(l_%!&mNyD4UA0acpjL!)Vfmv+^KBs)0Fo&ens zHS7vQrmy0yWS_$Cc9K_N!ECcH0UvVM7{zv~@`BYD0m>}(#w~wiQC{zF%KvSs@$<=L z1_e@OI?a7r5Z|Puv4Qd(TjgAjI)1sb9X{w;^HChLjW>+?9 zKDpc?lxD=D*29Vx_WlB>XItK&jq}9N#_EZBg%#7=JPTI@oG#W255AE)yotchB^W%o8C5lzu2XG z4jVZMQk>vik5pdy^gVM>)wGE{a1U}}HRf>`Xtjbe_`}_3sq%w8$Z8;YVnuaR$42A< zQrpYQtBXZpta%$KDMDH>nWT@0Kh8tGe$I*%Y6r%JY^DvdUwrQybugBgS;E(S;hdKz z&t_?8lI(7tRyHr$a4QJRWE?5ym69U8_7!BEU`zE`>mkjv=vbXcga%S3^Vc}KOf2%` zD^c>SIw=M0V64Y6cZC@@F4We%$V8f(*%!YBD?^*um@z)lKdI(8D6=5#kt!o3ykWf| zAtk>@mdVIeNs|nuV0;ZQZoT>!%mqc*tzt!RYpjOpJSN#BT9#)M<>f^uNkpYE>P1c+ zvbz|^XZpNGlyQH?j4H569Mi&6<OaG$zh8af9H1@9V z>^j7H*@-u(`X6g8>}ld(D7Q7Q`QEmMuEkv)-n0U!m2c}v>qD!qmc6U5UmdqhOL}X- zC|E+~8JeBk$J8`2ABk^r)7|{Y%lVOh#ZoXo*QFBl{(0IIFDRb%l%f(%2|w!nXwfqh z6zu7g=Am{uL>|!J)Zv!ON!2 zmw`-hgjvPJ#0uKmVy3)3Q|e6z3Cu%rCC^F*l2EraN!uZ71X-L@4gt8d>2|u6v1GL; z?|@5txnRU{p9etm-iZ1No2}1Fi(7^XZf(enk0Doee<0ImQp@onEjp||rT`bE21^)w z{SO|mmW6=Y!LZty4MViP1JS>$tnt0$oXSpH$Q51xCl);ktCQnL9QIlz{%kU9djkW4 zHu-|4reX82s1M{c%p{XH5f-zA!&@Q(k;pA8f3_L7xZa&6iZGl%+Ts-sR*OCwB44lY zMdbHfF0w`*IeEhJgxKPh*GWKuvr%F-)Aswnhq4`+`DPa+4UFHk6)UNrHh1w~lK?pGIaEG<+V@kP-zkV!OC5Dv|>0#2n_*(%n3v`xoaijn7U8 z%~E+Ypzv2UA_G1~Gi`<=jYopz#&NW;J`U(-!gRSfnO~cEjY69BjYCdLY{8+sjWJny zK6pMmS3_a(idEO)+8XL4GjBYRY)qH-^Av+%V^~d@Y_rz;NW zWLqh63uPOpL7VOoPlod;C@(o6u^`)jS5XZS?Zq~o`-omXLQ`WLI_+*r0Mob??>E7m zYVOaNP|BFb^iWr8T{U*;LcL3{X>Nle@ZrgXXo?$Q^ zed{Z}*UU)9w2jaGSNnz0D?p)l76{8aSdC~bZflSoG6=FA{k|a&02?`hiPYrMCT9Y)x<=R5N84M_9Y1-`q5!WXw5(MS1O>i}ZPXu)( z3#<^@p>74p>jTV$pg&JP;^Qy9aO-mIy^^SW8a8TvfwzJ8li)=l2K#Z?09MuPu?|0E zVuitz6{iS?HEp5);%0hw)9jBqX>y7$t5ixHcbw(%etqYvsk)|FU(pO2L6$q(PuJ>iT*Y>!x1EEdzbL@_hYgY ztDM3@)gN`4Nx9fII+D*HT!DMy#LKXl=!D@oSH0XTfsLK5$!Be9%*da7-&&7i$ z_w1CBd4V(iUd2{!PoKr8)$Kv|=qm#dcT2C6Tij=2m2(VEMduIgV%j^Pweew=Y}!BAbz4(%K}M1wm_XVme@0gy2ZHFT>*ny$urEF=EAEDJ~vy>|fI|>v>MRk2Ou$N@Xxf?J){ly;s2W3)5__9b-K)s0Sw?WWv^rok% z?a^w}aSlo2D6Q2u%6|4h3r;$x!}zQ+GEhy zG3EaJH^k)X{QAc}T34%Hl#-S}sulF}{AVu-yN$5jCJus!zqRR~|2&8jfXT`xw9mwc zta}d)3uQ;oW$Lwv+)nupj&08#iaJ&gmnT)73wOwW@cJ6n46Ah-?+gmjorQZ=x0e{O z4Tr0|wGy0CbvPcNfbkuPt)|LdiD^M=)rNVpLzk()X-+DX@0Vsd1|X#t>S7(Mz1U}h zJ|7h|?=#m1zy+U6S`xGJ*U$Ye#G_MW(7X;(MH$>a%oJisJE`Ih&k_wkNI2#?Y6I8p zp7wL8F$-#SA$w0FVRfw?;*NMl8Q}LxfwW;K#1&gkl=R*H^j$4H{9CgUp4iqlOrR<^hgTHr53PrilfS@Tzv&bT?^Y4 zVg(KwRb@SilyhokXFcES{h4j8F~L`j*iw?R&iZms^xu=G>xiENX+L);FHu~+v;AyB z1&kfJG#Qwb{4PQfP2`yb`c_nrA@jR4$ss)HhhK9P>{M6x3b*T-U7@ZWx;*J$93y2n zmZ>Q-Nu6;CbBe7CE1EiU)|#SJ)j|xqVRiLab!ZOD1^fz|;0|_*bXVo+i)DB5GPjRi zCwTn$H`UfdCtq6xYo@zAy|N4LJt~eof+0Z*cq_fj5cgPnxhD$m5CK9A`Mj+X5AkI? zDpBLi1xK4nK%g4%=&Y9W6CLR=N>AKkt4FG~BOR?X=kQ;Up2M>7-yIp12iQ;?hR=V$< y3VE@6iv{wZSra|r0M65Xnlb!;0~XEisL|fV<-Xc!RrlWu01Z`Lm3k$csQ&>ACI*-Q literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tiles/e_filled.imageset/Contents.json b/SOPA/Assets.xcassets/tiles/e_filled.imageset/Contents.json index f71c70d..0d614b3 100644 --- a/SOPA/Assets.xcassets/tiles/e_filled.imageset/Contents.json +++ b/SOPA/Assets.xcassets/tiles/e_filled.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "g.png" + "filename" : "e_filled.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/tiles/e_filled.imageset/e_filled.png b/SOPA/Assets.xcassets/tiles/e_filled.imageset/e_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..23b5e47598f85176c57d845f422c72083a1987cc GIT binary patch literal 3536 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 literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tiles/g.imageset/Contents.json b/SOPA/Assets.xcassets/tiles/g.imageset/Contents.json index f71c70d..9831764 100644 --- a/SOPA/Assets.xcassets/tiles/g.imageset/Contents.json +++ b/SOPA/Assets.xcassets/tiles/g.imageset/Contents.json @@ -9,4 +9,4 @@ "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/tiles/g.imageset/g.png b/SOPA/Assets.xcassets/tiles/g.imageset/g.png index 78f7814f766a5fa0393c238aa9002a6a66a05c37..804a12b8379beb66a0105f62981d078257f1fd9f 100644 GIT binary patch literal 6185 zcmd6L_ct6))c)@3t48lu^cqXlD62(Tf{k9H*940YH5OSS+9E_rh-lG+=zX=-MGYZ3 z(W5UCd410Jx9|H8yg%G|=FB;BXXc(e_uS`+HGHH+31$TY002rIZ4JaN;{G#I;@h#p zyfWt&$dK9=egFVD-G2rIWW8s;T_ky~qpwNwla!sFP>O2!M==1vgwxSbH4dEL|M1k0 zO*TE6>tl9>m6Jfgs*Xnye_dKd$s+aTzkiNf-CiTcDI?E9V?F1-B{X;~?~#1e{4y=8 zTdxtjRpF6(UnhC5FUk*yvMpx*KzN zgZRA`zIU>pE3o&s5b`fT?Od^2c>t=#2#ylc!$TZ9vkXqy+EAo&c0yn1*C)Cy(C_8` zWYb>!NZD~7SPkE7z4RPd5(%ViB@$0{1P`Y;-br#+EL}&Ul48EH1OBXO@g$WfZG86P zBX7;XC=FE`h;B+mDG@Yvt-ENtTJcozap({7dV56;0h)l+E@O}wmbZ}>o8JpDZQ^HF zf{3iwrC8-eNb0Boo&ywqY`x) zgSkjp?9XQI&Zs$bzoRFeujrZgJXYgbsfK1)V|1QxD=V}i!MMLb9?xa`FJh%3Xnk>) zY%cTN@%T_gCp)kT-s63~NK|(pjB_n|m{qMYsrI}JNe9cacwIL}<6lLO*+(`Mh~Q=Li|=UBYQUzU&epoF z*m6#Cq@_(4H#{OUCMZ-f6)=QF2j&s?R4q4xdO#s8E)L6`go5Xu%0;v$4IXPtl0D8 zxTr4uBd*#@?8L?yx5&lOgy7KXKhs5*Ox{0I+IlHHro-wZEk;(3 zX{9~Z75r&}FXl@n*HS*QM@lrinnfMf_+CcW3=0#jdx7wqbUB!6OR(e_9zNzPq^C4Y zMn^Om8{STUsUu70OiWh`*tU42bPew^?Xt|I1d$PG0-L1F;CCt1^83$WEak6<32n(n z$>G>%bCSTG2J_^p;DUZEd8#f_s_UM^U}N%=C)bbk4-M|+f_%Ma3KARjzi`UgapM+v zloiX16W^5^aB&f66YHS{qq467xde|3k77Pg8^R9mrB2V##aSQra+}jwGoSoE;uFUj z5v)E0rA$98d6b?OnG}9K&vd-YQZA!?KdKNFTA!irK+f2G)zevbP1~m>oFu2JM*(ML zdV?-l9gMM26h05HI$QUuGaM8!ybtu@KshD+t6CB{`)D`mF*TzvhQ57}MEuzX5%2l&cId-d zd(C-(P6dhk@C5#cdi7++(kBE=8Ll@mA6Io3Ul-jh1Q{W2-%RwsG`orJP`yn6X4DU- z2uo4zU}LfLPl+m7oz}pbmB`QB@J|3C2wT^Y4r{D!+;kPdJ*vkakiv(wZnAba9bD4? zFB2ciGB@=uohV`M16c;$!bX=0z6e5I%&*BXaRzXVm^2h^Ngrpnm+1nVq$%=Q-@E5_ zfA?=pMwMI8NVOk{@PctshD_{^qOU_A{xSjM+AKfT=gU)z*rfkF3w8ArPXpEXOUfo` z&f6vT3})oazDztULck6L7~MOegt}aM3!TAk(L0Pa!Qcb-(#?MtCS1wM;p&Bq>s|N% zKo8w*%+$g&IWGxw%Mj$pcAY7lvt>h(Zt7;R08U!8I?zat804q$Bp)LP5l#brLI^=h zRb`*z>UKhsbb&@C^fYPz9~7cK8-ri#{%@eRxm>yt-%S3?KiTNbdf^@X^{;1|<^S7n z>?uCO^PEA(r+I`F$gdF-3^);*+qjePdY%fg ztAD&tJxv8bEG&l|!+=l@s5X@z>rBB=%_-6TZT9T~^Lo#qN)f?eY=O`7E=0!#_>FhR`IJ6wGf-_Yzc8EpAz8E%5E`fv0$F0 zik+k2WC?o7koACgeVOhFMGy@2yq7yQnomb;kd+ry6y5oAPjLV@D@=b|@JR^gi?f|L zObgt68u%$i9OAp2vQ_W$h()XAp%z#m<4S1WUDBC2Vo`ld$+4&IXa6#eXP#Jl4O2Atm?2eoy ziup`5CkgY#dqHX?nKiPG#uxZ_ZBPYqADShtJf#AkHk1ldkSwh$hC}n@1|_b~uLh;4 z1Azj|uwgKG2^4b(DA=zC`MpE^DO~QqqZH=NBP&Y|*`NZthdl}&1Py?h0Z-KwW*<>p z-k#q3YBeTubv&AxSGFwF`)@bjo|5?K?ue{8r^P0p0gN4Jf^8%4uGRPZG+>{M zaE`(a65Nm_sjiArF)e$ERHvEMGTMJb?6N1gg*AAdFq+7aAN4gtjhr1k*akviRK}{Y z!tV|r_se2e*pjj{S;MtVSH#N`Y&xVZ*tfnwt)!tD3bRjn*vF)XYbit^QmTxRxxs&S z`A#ywWQ2?=in3wuSCERSHt#3{FK^qip6I@#5#H0c(m)}>N0pbrl$2GjxmX>715u3k zv(|8iX#qdI9Oo6Wjx>DkmN64&__hyI&IC&I)#HdDkoM$a%6fiSD+jBOS(q0r$Mt)+ zn*x>SrUj?nQ38Br<0Zn#YCleTVPZ-5&lJxVXZR+vLp;MK*hPS$!wkz(-ej@Ot+Thn z=9PYX8~IV_^*7mhsj?iY5nLddJG;BaFPHvGyMDo(R^cNl)t5PsKZN`tiMcj3%8}m$ z-7FmSb;)-{4x>u#RS_^zg_ai~fJ-d4hmiDG?t5C1(Ib(9cudbi`;@XO-|S*V|DMM; z+7Nk+?Peo-`QE1uyt&cen&smuzw_$VGc~znKwm3SVm+RKax9z!si5708!-}-3 z$!G{PkV)V*6HP5+>kxt5fJ+o3xBCQ^u1|gwYURHobWceN_%CmDx@oIHS1uMQ%7#2` zGL!smGqQNb@W4y;cwLXV_UB`9qD{`957tH5Z?Nc}zKpEVZzErHWd+_dOZd!EsraU3 zUMI`Snw`6fH{Ngf6&fgCg8#cf)G*j(@yd}ksiwEL`TWj>9VLB=I7|<>@%VCAIe=wB zSX}9N7j!Y1vg0{$JW(r()^%`mP~czA3{bhsD;BNl(+&GYKUgSX6)4V#b?198FP8+> z@{}*4l$gNtoUIoSkS+$Sv;(S(+KBKpt`Zl>C)_GxB{%Y0$2Ps&h>YMSUzUluoU3UY zx)V-cuMYXHaX5a&-&Rtfz;`Pl-eeB=`jnS&gj6n`g9(17FEh;x0isCHl?*pEesQVImLS~yAZ!eked z_;8JF%u@uS?i?6hntH!NW1mb1UQ}9f>Tafa8E@_-7#G)EzWwMdm_<+K)SsA|JHj^{ zRj{en=j`tU$jO`a5`jp5iuksoAU*3}P*p94`Z}|$n=6HJ#q^pa^6wI>JN@xzp$pk7 zU>Go>ERpYGQJATfE!Xh#loy-np0Ke|_KxC@TJ1#86F;!8Ly5c`pWZUw#o#Fw#KlUL zh%qkmr|HGb4})Teo35}qo>8C3Q`)c9u01*{ms`EB(e!V_2sFLqnAxCfpYB$hF}DZioSc47Q5vZZA>OGej{ZWw(u#c$ zk=ftBjVC9QVsEZ_b`uR9c+_ZpiLv{y}W4-{{M?9C0 z6Jc$YA3`zRNAKiq!)=jx-fm?|296Q?R)%FPPk5tT_~;5_j)#!7?scHCt!41D2&5=TWXo6)yC_mlkX0ueK5}l)ogtIQ~=mGvdfY+ybanGJeMez(Y$X; zW%F2%!skl+16{SD9(D$7kh7)uw|)6{(CE4a<8mPF3jT4#Utz|w5HoIX_#brt2l+o- zi5pW=9jC1q_U_obYPUbO>5kCy2U46Bu;l3z>8c`1<;p!PxlyPJJ-1z`rR3ZyvEp+GFHK6^D0B_p31o?z z9=Qwggx^tIWBf{~cEsEd0~`wvG-WwG`_U)pvxJ>x*~DSru~>*+J8~J#<+e=JrJ;Nv z>CabJc#EcYRXfAjI)hTs8Ea*PiDrB^{}>w|Cp{=ZR_Sg&9$VEPs2VaXudM7f>4!|C z7`A^5y9(4=2JuzP)s{0kDi5#D(Z$!2a;921IY^jTyZ`D`?8ExJu+yx3V_z)p**Cph zF68j%1+$b%j11wrM#GLj`g)1z;Qm{A|9_Se5B!J2s{;KFf>_{G`W7aB<;3OMT)YpS zUY?*Kbd@`YPe!((oj%b%k@Spo@T4sB;Hf>`?QdgbIvz#{^BU42UQ0}roS{`jYnj^c zQ4K}>d!sYYC;P@2X zTpFGLqEbb}#KfRSQS_6}vO%S>!8lVxFe7OF?$qD3BopS{M$(W(`~}~1S;}RJ<4xr% zFZPHZ>%+NNHWhqdWIUdOdTty3Ay+O`C~r-eqE)=A1>VvaF&ZY!*t^+^{kLK|sa2F0 z+#25IbOep}7kzmfBgB!PgZz$f@zA=URe66AX3uFUqeIBYc_DH?zlEx=@>y3sWogB8 z8)@bACn*;1m5Bl;!Kl33+0Q?eFomrk!Yx18QeQp&hNuKKNDvj^Dvc z3-?a>bABwF8Xbn3^_Cv_SP_M9Be!xq4oVo+q|b&8gkP%ow^~**;o9xOrb3~h#A?1b z0j8HjDVJr(K3)WEd{9G6s0=o$rwUQAr2->f1vS<%w3MtOB+1(MA9E}n|_aYjt1I2|Kk=VkR zl5())7^~e|B|C~HGtVQfD$bS=BFw+~^^RcHDvC~Sju{x!jrXR#w0d&0Z)lUHX3M5R zA@pGy%7|*=kbJz~G;dCfsVs7qhwXw!)Unf0u6fL)b^@VbP&&6fDOokLx?-bcyIK15 z&A=loYSPKYr9`(L^^frh>hy^>Cv#>qUn?X6z&cC&}Ohe*U_iunC!PXQ@&}r z#5BJuuUiI`d2KGT51Fo959+bi@EJ#3Z?g`88ARrRN;XK6P+d_Ypyp(Dt*KQ1^Z^Ow|W9KZHl;IpCY4-$fxR)8Al2T82gt%l5lVwN=$*yC&8d^ z^$paiMM`@@Z1WrA7ewpe7|`)YNQ6)J&r|7}JnR$}mxXPiy7i6#1{tP1x&3I-PapA+ zFB&6!y)%jZHf`=*Q@1$oP;7+!d}aw#ke7y;k#0 z)q!&?hF*SU$OQmRak0G!Hw(ca#-CYw(sJb&iH69zBD=N>`eBzLEC7@OO?a7KI0Ehu zgq>A_^G75?+}3)pmr=5|sO_c1;!Au*_>L$zwlr(9Pc?cLiI8C?kR?ras gzX3bkzy1N6{og^AVl<6!WqyE;<|Bn1CXj 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 NFplo1dWQ?de*=e_+rj_< literal 6664 zcmeAS@N?(olHy`uVBq!ia0y~yVEh8Y9Be?5)7S2I0V&4fAa^H*b?0PW0y&%o9+AZi z40_5S%viD1z6_`!GBYHiB*NFnDmgz_FEJ%QDOIl`w*aV`fx)K23dqb&ElE_U$j!+s zwyLmI0;{kBvO&W7N(x{lCE2!05xxNm&iO^D3Z{A{dIm~%TnY*bHbp6ERzWUqQ0+jT ztx`rwNr9EVetCJhUb(Seeo?xG?WUP)qwZeFo6#1NP{E~&-I zMVSR9nfZANAafIw@=Hr>m6Sjh!2!gbC7EdmoAQdG-U511A0(r1sAr%LHyfzc1|(|b zUzC{&v>9Z+ouLg_C5jl-9vgj-HE^m)Q^ITam)BptkI0txSRcFUz?-yZb2+s`PsH52vxfWTlgIP#@Bdf( z!L{MQY^M8lb@iX0*Zq)a+;3lJ`|RjFuLo>Q^Yb<=7UdLBaA;s?WM*`a?x9fk(0dk*%u)vpRDP3UK`EYam`ckRm-T>mwYFJ>d9t<=`!66~a;llFs$(BG5 z2q;`&VcBarQwiuZMyAV5O?I_%ry-`QDZDs)QUv5nff-@~UtWHW=mVQ-!swXqw+w9A zfh`RS{O2Dp0-L&klcTEG$Q5kaGFFz_UpCW}!KV5;T$nvs6Kt7*uELAU&o|0|P0e6x z8uh|xEPzt&XhIsz3!^2{XrVe)evc0-)<>Y4^d*mC>zkeQHDZamRzw`S?J$0RvS^l)w z39ac@1rH{Nb8-Bddg~r!nAuNA;LGHMS{?AP!Hyt@3+u0Z(*qAQ7ffncFrVdhGI-4X zz*MHDx~1F7A>-PUSy=w6M96!C>y&jO0$;SZ?(GJTY|l|qc%gpqR|Ld_r3dOKZWIWd Tf42MyXnMxe)z4*}Q$iB}58?S0 diff --git a/SOPA/Assets.xcassets/tiles/i_filled.imageset/Contents.json b/SOPA/Assets.xcassets/tiles/i_filled.imageset/Contents.json index 98c4b4e..f8e2ec5 100644 --- a/SOPA/Assets.xcassets/tiles/i_filled.imageset/Contents.json +++ b/SOPA/Assets.xcassets/tiles/i_filled.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "i.png" + "filename" : "i_filled.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/tiles/i_filled.imageset/i_filled.png b/SOPA/Assets.xcassets/tiles/i_filled.imageset/i_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..3754665888be721a93828437c3a9a398d287bc09 GIT binary patch literal 1643 zcmai#dr;C@6vycordDp6l|78GqIN6S(b9Zn*y<>dk1Z+Dl%~vADnx0KLXjC-sVHT> z!pzF`^~-!4E2}+3QhU&-h@xqxrHCa#@(`Bx*{px;-1*)!^O^5G=iZrf=BD_1dl)TT zy$}L{7@<7f_UU5VR~anO?G^qYOBWU#!Faeqv|rb)reda!7!o~kCn1nUre8G=lAFI$ z2lY>(yxjE%p^HqGZg_^Cq(C5gGblG#zca!~VGv;rch#k#u&g`c20Ze@N+bSTU{|)UfBMb!aYq{h!3Ifa9!Yj@Ea$O1fXzI}vwzoF@ST`OYCX?ArY1BVz)f2It0K_?; zX|K#F`o!eNPxMzZY6D0=Zu_tsr5q|9I(kV9b_z7p+ygHnTsj}8|7;miU}d9} zgk`wtD#Vqn4xv{HPh+n%E#^xGCj+X$!s)DSBx&{puByD|owF$Rn7sa2Ej=CW~dqVDX8k0%L;$bnG zCYKM2_wTQD^`*bz>TTzcPg^QZQ5&N>i={Q6;yNC!XJA@SY|f+#B!?1+vGJEdeetMq z8@VoERcD4D&Obu%UKO=9R)@e0c3txQKTa?3VqZhdAp~q zHVAdEN-T>FizO~FX(JakG~s&U;%mY70@rR^VQ5#&*x^6~qrJZ|^(T0MfShu=A+RR| z=#5dJodB{p<(znVK@(k`D=<|wYfIA;G{8`c^nRuj;dq7NV#)LDVf<@7o9n*gkCMdZ z9Z439YA$i=9bcnas~T3`d@#9+9eoYSvdgNYY*y{?9%Cn(x9)%ye-9;%R!@o8a=(E{ zzADIY?5Q>2#u_E)XD(V?&;qieCzzz!}vrK`IXJoXD=UhaMsABC3** ztj}r-BJDhKM$w;Au?etld17H~>SYdC4?VG96c9H?KVse|I~;_=jg1Wqpilsqr!zxz zLVk-Nf8hT?e;xkTH3$7u;$PQXH0&|A-keOpyg6uYCSVTw=9Pb6;XkM@01;i9xTdvR zoeL#p*k8rMoeK;%FQsLNuQy3H9Cgs8oPN!bI^J1yG0d^$SM^ro7JqjriI>uS6$dxp zP2U^KCWS|>H)&&fS2pRoi{MaV%60zKtT&x6|0r^!X5Yk@BJUZaQwM$#Y&xSAT`iGt z3i)VVN0^iP-s=nQ$rHtKt#x7IIxOHYku?#Ah%ke_47WZ0-6)Xbwo)W#+R<7j!SFpM zZEr>Ar9%h7@4V~mUR_vc%zH3qWei)!pIjR+5bhl=cY$Hp>n^2OF%12Vngfa)mXn0i zZ{ES)SerX9u>3>oOFW>b?aC%H7)y+;jNC?~BFhUjP6A literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tiles/o.imageset/Contents.json b/SOPA/Assets.xcassets/tiles/o.imageset/Contents.json index e4460a0..15d73a9 100644 --- a/SOPA/Assets.xcassets/tiles/o.imageset/Contents.json +++ b/SOPA/Assets.xcassets/tiles/o.imageset/Contents.json @@ -9,4 +9,4 @@ "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/tiles/o.imageset/o.png b/SOPA/Assets.xcassets/tiles/o.imageset/o.png index af9eb82cc84a7bdea58a04e78ea78e6dc0e097fa..6f082fbcb53023d922fd27073e03c0a7effbd143 100644 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yaTa()7Bet#3xhBt!>lS|xv6<249-QVi6yBi3gww484B*6z5(HleBwYw x8$DedLn>~)J;=xiTWe3_&=IP=XQgQ3;bwjQL3IeW<%F~*@?{{A}`Bv3IyPZw0 z0!eAF*4BN#u{i$uT!se!(`pP1j_eF9vJ3(x3=S6qKhD7*k61Ro*<<-?T#`3NP{)&jJ00Bl9}8z?N0`Ly#Zakfx9go(2i zB@zZcQcxm+rU{U^;28vwg6z;ikY)!#qztk&I|w2Lr8GyR*?i5-?S?(940hn^0aQ0& dsV=5fFgTQOd)zob@f)aW@^tlcS?83{1OTicx%&VB diff --git a/SOPA/Assets.xcassets/tiles/u.imageset/Contents.json b/SOPA/Assets.xcassets/tiles/u.imageset/Contents.json index f71c70d..7754ae7 100644 --- a/SOPA/Assets.xcassets/tiles/u.imageset/Contents.json +++ b/SOPA/Assets.xcassets/tiles/u.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "g.png" + "filename" : "u.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/tiles/u.imageset/u.png b/SOPA/Assets.xcassets/tiles/u.imageset/u.png new file mode 100644 index 0000000000000000000000000000000000000000..6e7529f1f488ec21070849c73cf20209386e9a13 GIT binary patch literal 6001 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 ZH}Y;MI)B+iliTG0LtPV{CL}uMe*p9p5!nC$ literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tiles/u_filled.imageset/Contents.json b/SOPA/Assets.xcassets/tiles/u_filled.imageset/Contents.json index f71c70d..64e76c4 100644 --- a/SOPA/Assets.xcassets/tiles/u_filled.imageset/Contents.json +++ b/SOPA/Assets.xcassets/tiles/u_filled.imageset/Contents.json @@ -2,11 +2,11 @@ "images" : [ { "idiom" : "universal", - "filename" : "g.png" + "filename" : "u_filled.png" } ], "info" : { "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/SOPA/Assets.xcassets/tiles/u_filled.imageset/u_filled.png b/SOPA/Assets.xcassets/tiles/u_filled.imageset/u_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..7280c4662725d9b00c0aeb7fa7f94cf63dee3992 GIT binary patch literal 3228 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 literal 0 HcmV?d00001 diff --git a/SOPA/view/LevelMode/LevelModeGameScene.swift b/SOPA/view/LevelMode/LevelModeGameScene.swift index 059ed47..9245d6b 100644 --- a/SOPA/view/LevelMode/LevelModeGameScene.swift +++ b/SOPA/view/LevelMode/LevelModeGameScene.swift @@ -12,8 +12,10 @@ class LevelModeGameScene: GameScene { var restartButton: SpriteButton? var levelChoiceButton: SpriteButton? var start: NSDate? + override init(size: CGSize, proportionSet: ProportionSet, level: Level) { super.init(size: size, proportionSet: proportionSet, level: level) + backgroundColor = .black startCounter() } @@ -31,27 +33,132 @@ class LevelModeGameScene: GameScene { required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } + override func addButtons() { - let restartSide = proportionSet.buttonSize() - restartButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "arrow.counterclockwise", side: restartSide), onClick: restartLevel) - restartButton!.position = proportionSet.restartButtonPos() - addChild(restartButton!) - - let side = proportionSet.levelChoiceSize() - levelChoiceButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: side), onClick: loadLevelChoiceScene) - levelChoiceButton!.position = proportionSet.levelChoicePos() + let backSide = min(size.width, size.height) * 0.09 + levelChoiceButton = SpriteButton(texture: makeMinimalBackTexture(side: backSide), onClick: loadLevelChoiceScene) + levelChoiceButton!.position = CGPoint(x: size.width * 0.08, y: size.height * 0.95) addChild(levelChoiceButton!) + let restartSide = min(size.width, size.height) * 0.18 + restartButton = SpriteButton(texture: makeGameplayCircleButtonTexture(symbolName: "arrow.counterclockwise", side: restartSide), onClick: restartLevel) + restartButton!.position = CGPoint(x: size.width * 0.86, y: size.height * 0.12) + addChild(restartButton!) + } + + override func addStaticLabels() { + addChild(movesLabels) + + let headingColor = UIColor(white: 0.90, alpha: 1.0) + let valueColor = UIColor(white: 0.96, alpha: 1.0) + let titleFont = "Impact" + + let minTitle = SKLabelNode(fontNamed: titleFont) + minTitle.text = "Min. Moves" + minTitle.horizontalAlignmentMode = .center + minTitle.verticalAlignmentMode = .center + minTitle.fontSize = min(size.width, size.height) * 0.055 + minTitle.fontColor = headingColor + minTitle.position = CGPoint(x: size.width * 0.14, y: size.height * 0.90) + movesLabels.addChild(minTitle) + + let minValue = SKLabelNode(fontNamed: titleFont) + minValue.text = String(gameService.getLevel().minimumMovesToSolve ?? 0) + minValue.horizontalAlignmentMode = .center + minValue.verticalAlignmentMode = .center + minValue.fontSize = min(size.width, size.height) * 0.15 + minValue.fontColor = valueColor + minValue.position = CGPoint(x: size.width * 0.04, y: size.height * 0.84) + movesLabels.addChild(minValue) + + let currentTitle = SKLabelNode(fontNamed: titleFont) + currentTitle.text = "Current Moves" + currentTitle.horizontalAlignmentMode = .center + currentTitle.verticalAlignmentMode = .center + currentTitle.fontSize = min(size.width, size.height) * 0.055 + currentTitle.fontColor = headingColor + currentTitle.position = CGPoint(x: size.width * 0.84, y: size.height * 0.90) + movesLabels.addChild(currentTitle) + + let levelNumber = SKLabelNode(fontNamed: titleFont) + levelNumber.horizontalAlignmentMode = .left + levelNumber.verticalAlignmentMode = .center + levelNumber.position = CGPoint(x: size.width * 0.04, y: size.height * 0.11) + levelNumber.fontSize = min(size.width, size.height) * 0.15 + levelNumber.text = String(gameService.getLevel().id!) + levelNumber.fontColor = valueColor + addChild(levelNumber) + + let levelLabel = SKLabelNode(fontNamed: titleFont) + levelLabel.text = "Level" + levelLabel.horizontalAlignmentMode = .left + levelLabel.verticalAlignmentMode = .center + levelLabel.fontSize = min(size.width, size.height) * 0.06 + levelLabel.fontColor = headingColor + levelLabel.position = CGPoint(x: size.width * 0.04, y: size.height * 0.045) + addChild(levelLabel) + } + + override func addDynamicLabels() { + currentMovesNode.text = String(gameService.getLevel().movesCounter) + currentMovesNode.horizontalAlignmentMode = .center + currentMovesNode.verticalAlignmentMode = .center + currentMovesNode.fontSize = min(size.width, size.height) * 0.15 + currentMovesNode.position = CGPoint(x: size.width * 0.80, y: size.height * 0.84) + currentMovesNode.fontColor = UIColor(white: 0.96, alpha: 1.0) + movesLabels.addChild(currentMovesNode) + } + + private func makeGameplayCircleButtonTexture(symbolName: String, side: CGFloat) -> SKTexture { + let textureSize = CGSize(width: side, height: side) + let renderer = UIGraphicsImageRenderer(size: textureSize) + let image = renderer.image { _ in + UIColor(white: 0.96, alpha: 1.0).setFill() + UIBezierPath(ovalIn: CGRect(origin: .zero, size: textureSize)).fill() + + let config = UIImage.SymbolConfiguration(pointSize: side * 0.52, weight: .bold) + if let symbol = UIImage(systemName: symbolName, withConfiguration: config)? + .withTintColor(UIColor(white: 0.05, alpha: 1.0), renderingMode: .alwaysOriginal) { + let symbolRect = CGRect( + x: (side - symbol.size.width) / 2.0, + y: (side - symbol.size.height) / 2.0, + width: symbol.size.width, + height: symbol.size.height + ) + symbol.draw(in: symbolRect) + } + } + return SKTexture(image: image) + + } + + private func makeMinimalBackTexture(side: CGFloat) -> SKTexture { + let textureSize = CGSize(width: side, height: side) + let renderer = UIGraphicsImageRenderer(size: textureSize) + let image = renderer.image { _ in + let config = UIImage.SymbolConfiguration(pointSize: side * 0.72, weight: .semibold) + if let symbol = UIImage(systemName: "chevron.left", withConfiguration: config)? + .withTintColor(UIColor(white: 0.86, alpha: 0.92), renderingMode: .alwaysOriginal) { + let symbolRect = CGRect( + x: (side - symbol.size.width) / 2.0, + y: (side - symbol.size.height) / 2.0, + width: symbol.size.width, + height: symbol.size.height + ) + symbol.draw(in: symbolRect) + } + } + return SKTexture(image: image) } func restartLevel() { ResourcesManager.getInstance().storyService?.reloadLevelModeGameScene(levelId: gameService.getLevel().id!) } - - func loadLevelChoiceScene() { + + private func loadLevelChoiceScene() { ResourcesManager.getInstance().storyService?.loadLevelCoiceSceneFromLevelModeScene() } - + override func onSolvedGame() { let time = stopCounter() let level = gameService.getLevel() From 6ff50cd04008af8083cabdda390c95df5df8715a Mon Sep 17 00:00:00 2001 From: David Schilling Date: Wed, 25 Feb 2026 21:41:32 +0100 Subject: [PATCH 03/13] Refactor LevelMode scenes with shared UI helpers --- SOPA.xcodeproj/project.pbxproj | 42 ++ .../view/LevelMode/ButtonTextureFactory.swift | 169 +++++ SOPA/view/LevelMode/CreditsScene.swift | 89 +++ SOPA/view/LevelMode/LabelSizing.swift | 47 ++ SOPA/view/LevelMode/LevelChoiceScene.swift | 705 +----------------- SOPA/view/LevelMode/LevelModeGameScene.swift | 56 +- SOPA/view/LevelMode/SopaTheme.swift | 17 + SOPA/view/LevelMode/StartMenuScene.swift | 106 +++ SOPA/view/LevelMode/TutorialGameScene.swift | 103 +++ SOPA/view/LevelMode/TutorialScene.swift | 139 ++++ 10 files changed, 730 insertions(+), 743 deletions(-) create mode 100644 SOPA/view/LevelMode/ButtonTextureFactory.swift create mode 100644 SOPA/view/LevelMode/CreditsScene.swift create mode 100644 SOPA/view/LevelMode/LabelSizing.swift create mode 100644 SOPA/view/LevelMode/SopaTheme.swift create mode 100644 SOPA/view/LevelMode/StartMenuScene.swift create mode 100644 SOPA/view/LevelMode/TutorialGameScene.swift create mode 100644 SOPA/view/LevelMode/TutorialScene.swift diff --git a/SOPA.xcodeproj/project.pbxproj b/SOPA.xcodeproj/project.pbxproj index 575c50f..90a4f0f 100644 --- a/SOPA.xcodeproj/project.pbxproj +++ b/SOPA.xcodeproj/project.pbxproj @@ -112,6 +112,20 @@ 64EFCB3E240E732F00714E7C /* LevelDestroyer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64EFCB3C240E732F00714E7C /* LevelDestroyer.swift */; }; 64EFCB40240E763A00714E7C /* LevelSolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64EFCB3F240E763A00714E7C /* LevelSolver.swift */; }; 64EFCB41240E763A00714E7C /* LevelSolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64EFCB3F240E763A00714E7C /* LevelSolver.swift */; }; + A11E00012602000100AAB001 /* StartMenuScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA001 /* StartMenuScene.swift */; }; + A11E00012602000100AAB002 /* StartMenuScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA001 /* StartMenuScene.swift */; }; + A11E00012602000100AAB003 /* CreditsScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA002 /* CreditsScene.swift */; }; + A11E00012602000100AAB004 /* CreditsScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA002 /* CreditsScene.swift */; }; + A11E00012602000100AAB005 /* TutorialScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA003 /* TutorialScene.swift */; }; + A11E00012602000100AAB006 /* TutorialScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA003 /* TutorialScene.swift */; }; + A11E00012602000100AAB007 /* TutorialGameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA004 /* TutorialGameScene.swift */; }; + A11E00012602000100AAB008 /* TutorialGameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA004 /* TutorialGameScene.swift */; }; + A11E00012602000100AAB009 /* SopaTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA005 /* SopaTheme.swift */; }; + A11E00012602000100AAB00A /* SopaTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA005 /* SopaTheme.swift */; }; + A11E00012602000100AAB00B /* LabelSizing.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA006 /* LabelSizing.swift */; }; + A11E00012602000100AAB00C /* LabelSizing.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA006 /* LabelSizing.swift */; }; + A11E00012602000100AAB00D /* ButtonTextureFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA007 /* ButtonTextureFactory.swift */; }; + A11E00012602000100AAB00E /* ButtonTextureFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11E00012602000100AAA007 /* ButtonTextureFactory.swift */; }; A1B2C3D424FA000100000001 /* JustPlayServiceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D424FA000100000011 /* JustPlayServiceTest.swift */; }; A1B2C3D424FA000100000002 /* helper/LevelServiceImplUnlockingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D424FA000100000012 /* helper/LevelServiceImplUnlockingTest.swift */; }; A1B2C3D424FA000100000003 /* database/JustPlayHighscorePersistenceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D424FA000100000013 /* database/JustPlayHighscorePersistenceTest.swift */; }; @@ -191,6 +205,13 @@ 64D66B1A21426ADC00595BD3 /* progbot.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = progbot.ttf; sourceTree = ""; }; 64EFCB3C240E732F00714E7C /* LevelDestroyer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LevelDestroyer.swift; sourceTree = ""; }; 64EFCB3F240E763A00714E7C /* LevelSolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LevelSolver.swift; sourceTree = ""; }; + A11E00012602000100AAA001 /* StartMenuScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartMenuScene.swift; sourceTree = ""; }; + A11E00012602000100AAA002 /* CreditsScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreditsScene.swift; sourceTree = ""; }; + A11E00012602000100AAA003 /* TutorialScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialScene.swift; sourceTree = ""; }; + A11E00012602000100AAA004 /* TutorialGameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialGameScene.swift; sourceTree = ""; }; + A11E00012602000100AAA005 /* SopaTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SopaTheme.swift; sourceTree = ""; }; + A11E00012602000100AAA006 /* LabelSizing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelSizing.swift; sourceTree = ""; }; + A11E00012602000100AAA007 /* ButtonTextureFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonTextureFactory.swift; sourceTree = ""; }; A1B2C3D424FA000100000011 /* JustPlayServiceTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JustPlayServiceTest.swift; sourceTree = ""; }; A1B2C3D424FA000100000012 /* helper/LevelServiceImplUnlockingTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = helper/LevelServiceImplUnlockingTest.swift; sourceTree = ""; }; A1B2C3D424FA000100000013 /* database/JustPlayHighscorePersistenceTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = database/JustPlayHighscorePersistenceTest.swift; sourceTree = ""; }; @@ -377,10 +398,17 @@ 64182B18208DCE0A00CF639A /* LevelModeGameScene.swift */, 64D5B8CE20ADE2680007D982 /* LevelModeScoreScene.swift */, 64D5B8D020B46BD70007D982 /* LevelChoiceScene.swift */, + A11E00012602000100AAA001 /* StartMenuScene.swift */, + A11E00012602000100AAA002 /* CreditsScene.swift */, + A11E00012602000100AAA003 /* TutorialScene.swift */, + A11E00012602000100AAA004 /* TutorialGameScene.swift */, 642E2B3E213B0B1E002669E5 /* LevelSelectButton.swift */, 642E2B41213D257C002669E5 /* LevelButtonPositioner.swift */, 646E6AE8213E80F7001D195B /* LevelButtonArea.swift */, 648558C221412BBD00B61C31 /* EffectSpriteButton.swift */, + A11E00012602000100AAA005 /* SopaTheme.swift */, + A11E00012602000100AAA006 /* LabelSizing.swift */, + A11E00012602000100AAA007 /* ButtonTextureFactory.swift */, ); path = LevelMode; sourceTree = ""; @@ -563,6 +591,10 @@ 64EFCB40240E763A00714E7C /* LevelSolver.swift in Sources */, 6493FB652073D6510044B4E0 /* SOPA.xcdatamodeld in Sources */, 64D5B8CF20ADE2680007D982 /* LevelModeScoreScene.swift in Sources */, + A11E00012602000100AAB003 /* CreditsScene.swift in Sources */, + A11E00012602000100AAB001 /* StartMenuScene.swift in Sources */, + A11E00012602000100AAB005 /* TutorialScene.swift in Sources */, + A11E00012602000100AAB007 /* TutorialGameScene.swift in Sources */, 63F661231F9B346E0043ABCF /* AppDelegate.swift in Sources */, E1AA11122602000100ABCDEF /* SceneDelegate.swift in Sources */, 6446C3031FAC80DC00806A10 /* LevelTranslator.swift in Sources */, @@ -574,6 +606,9 @@ 6446C2EF1FAC802900806A10 /* GameServiceImpl.swift in Sources */, 642E2B3F213B0B1E002669E5 /* LevelSelectButton.swift in Sources */, 64206E6C240EBB71001151B4 /* JustPlayGameScene.swift in Sources */, + A11E00012602000100AAB009 /* SopaTheme.swift in Sources */, + A11E00012602000100AAB00B /* LabelSizing.swift in Sources */, + A11E00012602000100AAB00D /* ButtonTextureFactory.swift in Sources */, 6446C3011FAC80DC00806A10 /* LevelFileService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -632,9 +667,16 @@ 646902C6207F6B7600283F71 /* GameServiceImpl.swift in Sources */, 64847A0B215A382B0012B732 /* LevelModeScoreScene.swift in Sources */, 64206E6D240EBB71001151B4 /* JustPlayGameScene.swift in Sources */, + A11E00012602000100AAB004 /* CreditsScene.swift in Sources */, + A11E00012602000100AAB002 /* StartMenuScene.swift in Sources */, + A11E00012602000100AAB006 /* TutorialScene.swift in Sources */, + A11E00012602000100AAB008 /* TutorialGameScene.swift in Sources */, 646902CE207F6B7D00283F71 /* LevelFileService.swift in Sources */, 646902DA207F6BD500283F71 /* GameScene.swift in Sources */, 642E2B40213B0B1E002669E5 /* LevelSelectButton.swift in Sources */, + A11E00012602000100AAB00A /* SopaTheme.swift in Sources */, + A11E00012602000100AAB00C /* LabelSizing.swift in Sources */, + A11E00012602000100AAB00E /* ButtonTextureFactory.swift in Sources */, 646902C7207F6B7600283F71 /* Level.swift in Sources */, 642EE5BD22423AAF00680612 /* ProportionSet.swift in Sources */, ); diff --git a/SOPA/view/LevelMode/ButtonTextureFactory.swift b/SOPA/view/LevelMode/ButtonTextureFactory.swift new file mode 100644 index 0000000..6f96a9d --- /dev/null +++ b/SOPA/view/LevelMode/ButtonTextureFactory.swift @@ -0,0 +1,169 @@ +import SpriteKit +import UIKit + +enum ButtonTextureFactory { + static func makeCircleButtonTexture( + symbolName: String, + side: CGFloat, + circleColor: UIColor = SopaTheme.circleButtonFill, + iconColor: UIColor = SopaTheme.circleButtonIcon, + symbolScale: CGFloat = 0.42, + symbolWeight: UIImage.SymbolWeight = .semibold + ) -> SKTexture { + let textureSize = CGSize(width: side, height: side) + let renderer = UIGraphicsImageRenderer(size: textureSize) + let image = renderer.image { _ in + circleColor.setFill() + UIBezierPath(ovalIn: CGRect(origin: .zero, size: textureSize)).fill() + + let config = UIImage.SymbolConfiguration(pointSize: side * symbolScale, weight: symbolWeight) + if let symbol = UIImage(systemName: symbolName, withConfiguration: config)? + .withTintColor(iconColor, renderingMode: .alwaysOriginal) { + let symbolRect = CGRect( + x: (side - symbol.size.width) / 2.0, + y: (side - symbol.size.height) / 2.0, + width: symbol.size.width, + height: symbol.size.height + ) + symbol.draw(in: symbolRect) + } + } + return SKTexture(image: image) + } + + static func makeMinimalBackTexture(side: CGFloat) -> SKTexture { + let textureSize = CGSize(width: side, height: side) + let renderer = UIGraphicsImageRenderer(size: textureSize) + let image = renderer.image { _ in + let config = UIImage.SymbolConfiguration(pointSize: side * 0.72, weight: .semibold) + if let symbol = UIImage(systemName: "chevron.left", withConfiguration: config)? + .withTintColor(UIColor(red: 160.0 / 255.0, green: 164.0 / 255.0, blue: 170.0 / 255.0, alpha: 0.95), renderingMode: .alwaysOriginal) { + let symbolRect = CGRect( + x: (side - symbol.size.width) / 2.0, + y: (side - symbol.size.height) / 2.0, + width: symbol.size.width, + height: symbol.size.height + ) + symbol.draw(in: symbolRect) + } + } + return SKTexture(image: image) + } + + static func makePageArrowTexture(imageNamed: String, side: CGFloat) -> SKTexture { + let texture = SKTexture(imageNamed: imageNamed) + let imageSize = texture.size() + let ratio = imageSize.width / max(1, imageSize.height) + let targetSize = CGSize(width: side * ratio, height: side) + let renderer = UIGraphicsImageRenderer(size: targetSize) + let image = renderer.image { _ in + UIImage(named: imageNamed)?.draw(in: CGRect(origin: .zero, size: targetSize)) + } + return SKTexture(image: image) + } + + static func makeNeonTextTexture(title: String, size: CGSize) -> SKTexture { + let renderer = UIGraphicsImageRenderer(size: size) + let image = renderer.image { _ in + let paragraphStyle = NSMutableParagraphStyle() + paragraphStyle.alignment = .center + + let glowShadow = NSShadow() + glowShadow.shadowColor = SopaTheme.neonGlowBlue + glowShadow.shadowBlurRadius = size.height * 0.22 + glowShadow.shadowOffset = .zero + + let font = UIFont(name: "HelveticaNeue-Light", size: size.height * 0.60) + ?? UIFont.systemFont(ofSize: size.height * 0.60, weight: .light) + let textRect = CGRect(x: 0, y: size.height * 0.22, width: size.width, height: size.height * 0.60) + + let glowAttributes: [NSAttributedString.Key: Any] = [ + .font: font, + .foregroundColor: SopaTheme.neonBlue, + .strokeColor: SopaTheme.neonBlue, + .strokeWidth: -1.2, + .paragraphStyle: paragraphStyle, + .shadow: glowShadow + ] + title.draw(in: textRect, withAttributes: glowAttributes) + + let coreAttributes: [NSAttributedString.Key: Any] = [ + .font: font, + .foregroundColor: SopaTheme.neonCoreBlue, + .paragraphStyle: paragraphStyle + ] + title.draw(in: textRect, withAttributes: coreAttributes) + } + return SKTexture(image: image) + } + + static func makeSocialButtonTexture(symbolName: String, size: CGSize, fillBackground: Bool) -> SKTexture { + let renderer = UIGraphicsImageRenderer(size: size) + let image = renderer.image { _ in + let blueColor = UIColor(red: 99.0 / 255.0, green: 177.0 / 255.0, blue: 230.0 / 255.0, alpha: 1.0) + if fillBackground { + let backgroundPath = UIBezierPath(roundedRect: CGRect(origin: .zero, size: size), cornerRadius: size.width * 0.18) + blueColor.setFill() + backgroundPath.fill() + } + + let pointSize = fillBackground ? size.width * 0.50 : size.width * 0.75 + let config = UIImage.SymbolConfiguration(pointSize: pointSize, weight: .semibold) + guard let baseSymbol = UIImage(systemName: symbolName, withConfiguration: config) else { + return + } + + let iconColor = fillBackground ? UIColor.white : blueColor + let symbol = baseSymbol.withTintColor(iconColor, renderingMode: .alwaysOriginal) + let symbolRect = CGRect( + x: (size.width - symbol.size.width) / 2.0, + y: (size.height - symbol.size.height) / 2.0, + width: symbol.size.width, + height: symbol.size.height + ) + symbol.draw(in: symbolRect) + } + return SKTexture(image: image) + } + + static func makeTextButtonTexture( + title: String, + size: CGSize, + fontName: String, + textColor: UIColor, + weight: UIFont.Weight = .semibold + ) -> SKTexture { + let renderer = UIGraphicsImageRenderer(size: size) + let image = renderer.image { _ in + let frame = CGRect(origin: .zero, size: size).insetBy(dx: size.width * 0.01, dy: size.height * 0.06) + let backgroundPath = UIBezierPath(roundedRect: frame, cornerRadius: size.height * 0.23) + UIColor(white: 1.0, alpha: 0.10).setFill() + backgroundPath.fill() + UIColor(white: 1.0, alpha: 0.22).setStroke() + backgroundPath.lineWidth = size.height * 0.08 + backgroundPath.stroke() + + let paragraphStyle = NSMutableParagraphStyle() + paragraphStyle.alignment = .center + let buttonFontSize = LabelSizing.fittedTextFontSize( + text: title, + fontName: fontName, + preferredSize: size.height * 0.38, + weight: weight, + maxWidth: size.width * 0.90 + ) + let attributes: [NSAttributedString.Key: Any] = [ + .font: UIFont(name: fontName, size: buttonFontSize) ?? UIFont.systemFont(ofSize: buttonFontSize, weight: weight), + .foregroundColor: textColor, + .paragraphStyle: paragraphStyle + ] + let textRect = CGRect(x: 0.0, y: size.height * 0.30, width: size.width, height: size.height * 0.5) + title.draw(in: textRect, withAttributes: attributes) + } + return SKTexture(image: image) + } +} + +func makeCircleButtonTexture(symbolName: String, side: CGFloat) -> SKTexture { + ButtonTextureFactory.makeCircleButtonTexture(symbolName: symbolName, side: side) +} diff --git a/SOPA/view/LevelMode/CreditsScene.swift b/SOPA/view/LevelMode/CreditsScene.swift new file mode 100644 index 0000000..63a9359 --- /dev/null +++ b/SOPA/view/LevelMode/CreditsScene.swift @@ -0,0 +1,89 @@ +import Foundation +import SpriteKit +import UIKit + +class CreditsScene: SKScene { + private let sectionColor = SopaTheme.neonBlue + + override init(size: CGSize) { + super.init(size: size) + backgroundColor = SopaTheme.blackBackground + addBackButton() + addTitle() + addCreditsContent() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func addBackButton() { + let side = size.height * 0.08 + let backButton = SpriteButton(texture: ButtonTextureFactory.makeCircleButtonTexture(symbolName: "chevron.left", side: side)) { + ResourcesManager.getInstance().storyService?.loadStartMenuScene() + } + backButton.position = CGPoint(x: size.height * 0.057, y: size.height * 0.91) + addChild(backButton) + } + + private func addTitle() { + let title = SKLabelNode(fontNamed: "Impact") + title.text = "CREDITS" + title.fontSize = size.height * 0.09 + title.fontColor = SopaTheme.titleGray + title.position = CGPoint(x: size.width * 0.5, y: size.height * 0.78) + addChild(title) + } + + private func addCreditsContent() { + let content: [(section: String, entries: [String])] = [ + ("DEVELOPMENT", ["David Schilling - @schillda710", "Raphael Schilling - @ubuntius"]), + ("DESIGN", ["Raphael Schilling - @ubuntius"]), + ("MUSIC", ["Menu - axtoncrolley on opengameart.org"]) + ] + + var currentY = size.height * 0.70 + for block in content { + addSectionLine(text: block.section, y: currentY) + currentY -= size.height * 0.045 + + for entry in block.entries { + addBodyLine(text: entry, y: currentY) + currentY -= size.height * 0.038 + } + currentY -= size.height * 0.028 + } + } + + private func addSectionLine(text: String, y: CGFloat) { + let line = SKLabelNode(fontNamed: "HelveticaNeue-Bold") + line.horizontalAlignmentMode = .left + line.verticalAlignmentMode = .center + line.text = text + line.fontSize = LabelSizing.fittedLabelFontSize( + text: text, + fontName: "HelveticaNeue-Bold", + preferredSize: size.height * 0.032, + maxWidth: size.width * 0.88 + ) + line.fontColor = sectionColor + line.position = CGPoint(x: size.width * 0.06, y: y) + addChild(line) + } + + private func addBodyLine(text: String, y: CGFloat) { + let line = SKLabelNode(fontNamed: "HelveticaNeue") + line.horizontalAlignmentMode = .left + line.verticalAlignmentMode = .center + line.text = text + line.fontSize = LabelSizing.fittedLabelFontSize( + text: text, + fontName: "HelveticaNeue", + preferredSize: size.height * 0.026, + maxWidth: size.width * 0.90 + ) + line.fontColor = SopaTheme.bodyText + line.position = CGPoint(x: size.width * 0.09, y: y) + addChild(line) + } +} diff --git a/SOPA/view/LevelMode/LabelSizing.swift b/SOPA/view/LevelMode/LabelSizing.swift new file mode 100644 index 0000000..fd4e7e6 --- /dev/null +++ b/SOPA/view/LevelMode/LabelSizing.swift @@ -0,0 +1,47 @@ +import SpriteKit +import UIKit + +enum LabelSizing { + static func fittedLabelFontSize( + text: String, + fontName: String, + preferredSize: CGFloat, + maxWidth: CGFloat, + minSize: CGFloat = 10.0 + ) -> CGFloat { + guard !text.isEmpty else { + return preferredSize + } + + let label = SKLabelNode(fontNamed: fontName) + label.text = text + var currentSize = preferredSize + label.fontSize = currentSize + + while label.frame.width > maxWidth && currentSize > minSize { + currentSize -= 1.0 + label.fontSize = currentSize + } + return currentSize + } + + static func fittedTextFontSize( + text: String, + fontName: String, + preferredSize: CGFloat, + weight: UIFont.Weight, + maxWidth: CGFloat, + minSize: CGFloat = 10.0 + ) -> CGFloat { + var currentSize = preferredSize + while currentSize > minSize { + let font = UIFont(name: fontName, size: currentSize) ?? UIFont.systemFont(ofSize: currentSize, weight: weight) + let measuredWidth = (text as NSString).size(withAttributes: [.font: font]).width + if measuredWidth <= maxWidth { + return currentSize + } + currentSize -= 1.0 + } + return minSize + } +} diff --git a/SOPA/view/LevelMode/LevelChoiceScene.swift b/SOPA/view/LevelMode/LevelChoiceScene.swift index 61ce7b3..f422720 100644 --- a/SOPA/view/LevelMode/LevelChoiceScene.swift +++ b/SOPA/view/LevelMode/LevelChoiceScene.swift @@ -10,30 +10,6 @@ import Foundation import SpriteKit import UIKit -func makeCircleButtonTexture(symbolName: String, side: CGFloat) -> SKTexture { - let textureSize = CGSize(width: side, height: side) - let circleColor = UIColor(white: 0.94, alpha: 1.0) - let iconColor = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255.0, alpha: 1.0) - let renderer = UIGraphicsImageRenderer(size: textureSize) - let image = renderer.image { _ in - circleColor.setFill() - UIBezierPath(ovalIn: CGRect(origin: .zero, size: textureSize)).fill() - - let config = UIImage.SymbolConfiguration(pointSize: side * 0.42, weight: .semibold) - if let symbol = UIImage(systemName: symbolName, withConfiguration: config)? - .withTintColor(iconColor, renderingMode: .alwaysOriginal) { - let symbolRect = CGRect( - x: (side - symbol.size.width) / 2.0, - y: (side - symbol.size.height) / 2.0, - width: symbol.size.width, - height: symbol.size.height - ) - symbol.draw(in: symbolRect) - } - } - return SKTexture(image: image) -} - class LevelChoiceScene: SKScene { private let levelInfos: [LevelInfo] private var levelButtonArea: LevelButtonArea? @@ -50,63 +26,29 @@ class LevelChoiceScene: SKScene { addButtons() addPageArrows() update() - - } - + private func addButtons() { let side = min(size.width * 0.095, size.height * 0.07) - menuButton = SpriteButton(texture: makeMenuBackTexture(side: side), onClick: backToStartMenu) + menuButton = SpriteButton(texture: ButtonTextureFactory.makeMinimalBackTexture(side: side), onClick: backToStartMenu) menuButton?.position = CGPoint(x: size.width * 0.085, y: size.height * 0.90) menuButton?.zPosition = 20 addChild(menuButton!) } - private func makeMenuBackTexture(side: CGFloat) -> SKTexture { - let textureSize = CGSize(width: side, height: side) - let renderer = UIGraphicsImageRenderer(size: textureSize) - let image = renderer.image { _ in - let config = UIImage.SymbolConfiguration(pointSize: side * 0.72, weight: .semibold) - if let symbol = UIImage(systemName: "chevron.left", withConfiguration: config)? - .withTintColor(UIColor(red: 160.0 / 255.0, green: 164.0 / 255.0, blue: 170.0 / 255.0, alpha: 0.95), renderingMode: .alwaysOriginal) { - let symbolRect = CGRect( - x: (side - symbol.size.width) / 2.0, - y: (side - symbol.size.height) / 2.0, - width: symbol.size.width, - height: symbol.size.height - ) - symbol.draw(in: symbolRect) - } - } - return SKTexture(image: image) - } - private func addPageArrows() { let arrowSide = min(size.width * 0.16, size.height * 0.13) - leftArrowButton = SpriteButton(texture: makePageArrowTexture(imageNamed: "ArrowLeft", side: arrowSide), onClick: goToPreviousPage) + leftArrowButton = SpriteButton(texture: ButtonTextureFactory.makePageArrowTexture(imageNamed: "ArrowLeft", side: arrowSide), onClick: goToPreviousPage) leftArrowButton?.position = CGPoint(x: size.width * 0.08, y: size.height * 0.21) leftArrowButton?.zPosition = 20 addChild(leftArrowButton!) - rightArrowButton = SpriteButton(texture: makePageArrowTexture(imageNamed: "ArrowRight", side: arrowSide), onClick: goToNextPage) + rightArrowButton = SpriteButton(texture: ButtonTextureFactory.makePageArrowTexture(imageNamed: "ArrowRight", side: arrowSide), onClick: goToNextPage) rightArrowButton?.position = CGPoint(x: size.width * 0.92, y: size.height * 0.21) rightArrowButton?.zPosition = 20 addChild(rightArrowButton!) } - private func makePageArrowTexture(imageNamed: String, side: CGFloat) -> SKTexture { - let texture = SKTexture(imageNamed: imageNamed) - let imageSize = texture.size() - let ratio = imageSize.width / max(1, imageSize.height) - let targetSize = CGSize(width: side * ratio, height: side) - let renderer = UIGraphicsImageRenderer(size: targetSize) - let image = renderer.image { _ in - let rect = CGRect(origin: .zero, size: targetSize) - UIImage(named: imageNamed)?.draw(in: rect) - } - return SKTexture(image: image) - } - private func goToPreviousPage() { levelButtonArea?.swipeLeft() } @@ -114,11 +56,11 @@ class LevelChoiceScene: SKScene { private func goToNextPage() { levelButtonArea?.swipeRight() } - + private func backToStartMenu() { ResourcesManager.getInstance().storyService?.loadStartMenuScene() } - + func update() { guard let area = levelButtonArea else { leftArrowButton?.isHidden = true @@ -131,643 +73,8 @@ class LevelChoiceScene: SKScene { leftArrowButton?.isHidden = isFirstPage rightArrowButton?.isHidden = isLastPage || area.pageCount <= 1 } - - - - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} - -class StartMenuScene: SKScene { - private let background = UIColor.black - private let titleColor = UIColor(red: 214.0 / 255.0, green: 214.0 / 255.0, blue: 214.0 / 255.0, alpha: 1.0) - private let neonColor = UIColor(red: 111.0 / 255.0, green: 227.0 / 255.0, blue: 1.0, alpha: 1.0) - private let neonGlowColor = UIColor(red: 23.0 / 255.0, green: 183.0 / 255.0, blue: 1.0, alpha: 1.0) - private let twitterUrl = "https://twitter.com/sopagame" - private let shareText = "I played SOPA: https://play.google.com/store/apps/details?id=com.sopaapp" - - override init(size: CGSize) { - super.init(size: size) - backgroundColor = background - addTitle() - addButtons() - addSocialButtons() - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - private func addTitle() { - let title = SKLabelNode(fontNamed: "Impact") - title.text = "SOPA" - title.fontSize = size.height * 0.14 - title.fontColor = titleColor - title.position = CGPoint(x: size.width / 2, y: size.height * 0.77) - addChild(title) - } - - private func addButtons() { - let menuItems: [(title: String, action: () -> Void)] = [ - ("LEVEL MODE", { ResourcesManager.getInstance().storyService?.loadLevelCoiceScene() }), - ("JUST PLAY", { ResourcesManager.getInstance().storyService?.loadJustPlaySceneFromMenuScene() }), - // Keep this wired until a dedicated Settings scene exists on iOS. - ("SETTINGS", { ResourcesManager.getInstance().storyService?.loadTutorialSceneFromMenuScene() }), - ("CREDITS", { ResourcesManager.getInstance().storyService?.loadCreditsSceneFromMenuScene() }) - ] - - let buttonSize = CGSize(width: size.width * 0.76, height: size.height * 0.095) - let firstY = size.height * 0.62 - let verticalGap = size.height * 0.11 - - for (index, item) in menuItems.enumerated() { - let button = SpriteButton(texture: makeNeonTextTexture(title: item.title, size: buttonSize), onClick: item.action) - button.position = CGPoint(x: size.width / 2.0, y: firstY - CGFloat(index) * verticalGap) - addChild(button) - } - } - - private func addSocialButtons() { - let buttonSide = min(size.width * 0.18, size.height * 0.10) - - let shareButton = SpriteButton( - texture: makeSocialButtonTexture(symbolName: "point.3.connected.trianglepath.dotted", size: CGSize(width: buttonSide, height: buttonSide), fillBackground: true), - onClick: shareApp - ) - shareButton.position = CGPoint(x: size.width * 0.20, y: size.height * 0.14) - addChild(shareButton) - - let twitterButton = SpriteButton( - texture: makeSocialButtonTexture(symbolName: "paperplane.fill", size: CGSize(width: buttonSide * 1.15, height: buttonSide * 1.15), fillBackground: false), - onClick: openTwitter - ) - twitterButton.position = CGPoint(x: size.width * 0.74, y: size.height * 0.14) - addChild(twitterButton) - } - - private func makeNeonTextTexture(title: String, size: CGSize) -> SKTexture { - let renderer = UIGraphicsImageRenderer(size: size) - let image = renderer.image { _ in - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.alignment = .center - - let glowShadow = NSShadow() - glowShadow.shadowColor = neonGlowColor - glowShadow.shadowBlurRadius = size.height * 0.22 - glowShadow.shadowOffset = .zero - - let font = UIFont(name: "HelveticaNeue-Light", size: size.height * 0.60) - ?? UIFont.systemFont(ofSize: size.height * 0.60, weight: .light) - let textRect = CGRect(x: 0, y: size.height * 0.22, width: size.width, height: size.height * 0.60) - - let glowAttributes: [NSAttributedString.Key: Any] = [ - .font: font, - .foregroundColor: neonColor, - .strokeColor: neonColor, - .strokeWidth: -1.2, - .paragraphStyle: paragraphStyle, - .shadow: glowShadow - ] - title.draw(in: textRect, withAttributes: glowAttributes) - - let coreAttributes: [NSAttributedString.Key: Any] = [ - .font: font, - .foregroundColor: UIColor(red: 183.0 / 255.0, green: 245.0 / 255.0, blue: 1.0, alpha: 1.0), - .paragraphStyle: paragraphStyle - ] - title.draw(in: textRect, withAttributes: coreAttributes) - } - return SKTexture(image: image) - } - - private func makeSocialButtonTexture(symbolName: String, size: CGSize, fillBackground: Bool) -> SKTexture { - let renderer = UIGraphicsImageRenderer(size: size) - let image = renderer.image { _ in - let blueColor = UIColor(red: 99.0 / 255.0, green: 177.0 / 255.0, blue: 230.0 / 255.0, alpha: 1.0) - if fillBackground { - let backgroundPath = UIBezierPath(roundedRect: CGRect(origin: .zero, size: size), cornerRadius: size.width * 0.18) - blueColor.setFill() - backgroundPath.fill() - } - - let pointSize = fillBackground ? size.width * 0.50 : size.width * 0.75 - let config = UIImage.SymbolConfiguration(pointSize: pointSize, weight: .semibold) - guard let baseSymbol = UIImage(systemName: symbolName, withConfiguration: config) else { - return - } - - let iconColor = fillBackground ? UIColor.white : blueColor - let symbol = baseSymbol.withTintColor(iconColor, renderingMode: .alwaysOriginal) - let symbolRect = CGRect( - x: (size.width - symbol.size.width) / 2.0, - y: (size.height - symbol.size.height) / 2.0, - width: symbol.size.width, - height: symbol.size.height - ) - symbol.draw(in: symbolRect) - } - return SKTexture(image: image) - } - - private func openTwitter() { - guard let url = URL(string: twitterUrl) else { - return - } - UIApplication.shared.open(url) - } - - private func shareApp() { - guard let controller = topViewController() else { - return - } - let shareController = UIActivityViewController(activityItems: [shareText], applicationActivities: nil) - shareController.popoverPresentationController?.sourceView = controller.view - controller.present(shareController, animated: true) - } - - private func topViewController(base: UIViewController? = nil) -> UIViewController? { - let initialController: UIViewController? - if let base = base { - initialController = base - } else { - initialController = UIApplication.shared.connectedScenes - .compactMap { $0 as? UIWindowScene } - .flatMap { $0.windows } - .first { $0.isKeyWindow }?.rootViewController - } - - if let navController = initialController as? UINavigationController { - return topViewController(base: navController.visibleViewController) - } - if let tabController = initialController as? UITabBarController { - return topViewController(base: tabController.selectedViewController) - } - if let presented = initialController?.presentedViewController { - return topViewController(base: presented) - } - return initialController - } -} - -class CreditsScene: SKScene { - private let background = UIColor.black - private let titleColor = UIColor(red: 214.0 / 255.0, green: 214.0 / 255.0, blue: 214.0 / 255.0, alpha: 1.0) - private let sectionColor = UIColor(red: 111.0 / 255.0, green: 227.0 / 255.0, blue: 1.0, alpha: 1.0) - private let textColor = UIColor(red: 230.0 / 255.0, green: 236.0 / 255.0, blue: 242.0 / 255.0, alpha: 1.0) - - override init(size: CGSize) { - super.init(size: size) - backgroundColor = background - addBackButton() - addTitle() - addCreditsContent() - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - private func addBackButton() { - let side = size.height * 0.08 - let backButton = SpriteButton(texture: makeBackButtonTexture(side: side)) { - ResourcesManager.getInstance().storyService?.loadStartMenuScene() - } - backButton.position = CGPoint(x: size.height * 0.057, y: size.height * 0.91) - addChild(backButton) - } - - private func makeBackButtonTexture(side: CGFloat) -> SKTexture { - let textureSize = CGSize(width: side, height: side) - let renderer = UIGraphicsImageRenderer(size: textureSize) - let image = renderer.image { _ in - let frame = CGRect(origin: .zero, size: textureSize) - let path = UIBezierPath(roundedRect: frame, cornerRadius: side * 0.25) - UIColor(white: 1.0, alpha: 0.10).setFill() - path.fill() - UIColor(white: 1.0, alpha: 0.20).setStroke() - path.lineWidth = side * 0.05 - path.stroke() - - let config = UIImage.SymbolConfiguration(pointSize: side * 0.44, weight: .bold) - if let symbol = UIImage(systemName: "chevron.left", withConfiguration: config)? - .withTintColor(sectionColor, renderingMode: .alwaysOriginal) { - let symbolRect = CGRect( - x: (side - symbol.size.width) / 2.0, - y: (side - symbol.size.height) / 2.0, - width: symbol.size.width, - height: symbol.size.height - ) - symbol.draw(in: symbolRect) - } - } - return SKTexture(image: image) - } - - private func addTitle() { - let title = SKLabelNode(fontNamed: "Impact") - title.text = "CREDITS" - title.fontSize = size.height * 0.09 - title.fontColor = titleColor - title.position = CGPoint(x: size.width * 0.5, y: size.height * 0.78) - addChild(title) - } - - private func addCreditsContent() { - let content: [(section: String, entries: [String])] = [ - ("DEVELOPMENT", ["David Schilling - @schillda710", "Raphael Schilling - @ubuntius"]), - ("DESIGN", ["Raphael Schilling - @ubuntius"]), - ("MUSIC", ["Menu - axtoncrolley on opengameart.org"]) - ] - - var currentY = size.height * 0.70 - for block in content { - addSectionLine(text: block.section, y: currentY) - currentY -= size.height * 0.045 - - for entry in block.entries { - addBodyLine(text: entry, y: currentY) - currentY -= size.height * 0.038 - } - currentY -= size.height * 0.028 - } - } - - private func addSectionLine(text: String, y: CGFloat) { - let line = SKLabelNode(fontNamed: "HelveticaNeue-Bold") - line.horizontalAlignmentMode = .left - line.verticalAlignmentMode = .center - line.text = text - line.fontSize = fittedFontSize( - for: text, - fontName: "HelveticaNeue-Bold", - preferredSize: size.height * 0.032, - maxWidth: size.width * 0.88 - ) - line.fontColor = sectionColor - line.position = CGPoint(x: size.width * 0.06, y: y) - addChild(line) - } - - private func addBodyLine(text: String, y: CGFloat) { - let line = SKLabelNode(fontNamed: "HelveticaNeue") - line.horizontalAlignmentMode = .left - line.verticalAlignmentMode = .center - line.text = text - line.fontSize = fittedFontSize( - for: text, - fontName: "HelveticaNeue", - preferredSize: size.height * 0.026, - maxWidth: size.width * 0.90 - ) - line.fontColor = textColor - line.position = CGPoint(x: size.width * 0.09, y: y) - addChild(line) - } - - private func fittedFontSize(for text: String, fontName: String, preferredSize: CGFloat, maxWidth: CGFloat) -> CGFloat { - let label = SKLabelNode(fontNamed: fontName) - label.text = text - var currentSize = preferredSize - label.fontSize = currentSize - - while label.frame.width > maxWidth && currentSize > 10.0 { - currentSize -= 1.0 - label.fontSize = currentSize - } - return currentSize - } -} - -class TutorialScene: SKScene { - private let background = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255, alpha: 1.0) - private let textColor = UIColor(red: 240.0 / 255.0, green: 239.0 / 255.0, blue: 238.0 / 255.0, alpha: 1.0) - private var currentPage = 0 - private let headline = SKLabelNode(fontNamed: "Optima-Bold") - private let textLine1 = SKLabelNode(fontNamed: "Optima-Bold") - private let textLine2 = SKLabelNode(fontNamed: "Optima-Bold") - private let textLine3 = SKLabelNode(fontNamed: "Optima-Bold") - private let tapHint = SKLabelNode(fontNamed: "Optima-Bold") - private var letsGoButton: SpriteButton? - - override init(size: CGSize) { - super.init(size: size) - self.backgroundColor = background - addBackButton() - addTitle() - addContentNodes() - updatePage() - } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } - - private func addBackButton() { - let side = size.height * 0.08 - let backButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: side)) { - ResourcesManager.getInstance().storyService?.loadStartMenuScene() - } - backButton.position = CGPoint(x: size.height * 0.057, y: size.height * 0.91) - addChild(backButton) - } - - private func addTitle() { - let title = SKLabelNode(fontNamed: "Optima-Bold") - title.text = "Tutorial" - title.fontSize = size.height * 0.10 - title.fontColor = textColor - title.position = CGPoint(x: size.width * 0.5, y: size.height * 0.78) - addChild(title) - } - - private func addContentNodes() { - headline.fontColor = textColor - headline.fontSize = size.height * 0.048 - headline.position = CGPoint(x: size.width * 0.5, y: size.height * 0.62) - addChild(headline) - - textLine1.fontColor = textColor - textLine1.fontSize = size.height * 0.034 - textLine1.position = CGPoint(x: size.width * 0.5, y: size.height * 0.54) - addChild(textLine1) - - textLine2.fontColor = textColor - textLine2.fontSize = size.height * 0.034 - textLine2.position = CGPoint(x: size.width * 0.5, y: size.height * 0.48) - addChild(textLine2) - - textLine3.fontColor = textColor - textLine3.fontSize = size.height * 0.034 - textLine3.position = CGPoint(x: size.width * 0.5, y: size.height * 0.42) - addChild(textLine3) - - tapHint.fontColor = textColor - tapHint.fontSize = size.height * 0.030 - tapHint.position = CGPoint(x: size.width * 0.5, y: size.height * 0.26) - addChild(tapHint) - } - - override func touchesBegan(_ touches: Set, with event: UIEvent?) { - if currentPage < 2 { - currentPage += 1 - updatePage() - } - } - - private func updatePage() { - switch currentPage { - case 0: - setPage( - headlineText: "Goal", - line1: "Connect the start and finish pipes.", - line2: "Swipe rows or columns to move tiles.", - line3: "Only matching pipe segments will connect.", - hint: "Tap anywhere to continue" - ) - letsGoButton?.isHidden = true - case 1: - setPage( - headlineText: "How It Works", - line1: "Horizontal swipe moves a full row.", - line2: "Vertical swipe moves a full column.", - line3: "Try to solve it in as few moves as possible.", - hint: "Tap anywhere to continue" - ) - letsGoButton?.isHidden = true - default: - setPage( - headlineText: "Try It Now", - line1: "Next you play a simple interactive level.", - line2: "Use restart if you want to try again.", - line3: "", - hint: "" - ) - ensureLetsGoButton() - letsGoButton?.isHidden = false - } - } - - private func setPage(headlineText: String, line1: String, line2: String, line3: String, hint: String) { - headline.text = headlineText - headline.fontSize = fittedFontSize(for: headlineText, preferredSize: size.height * 0.048, maxWidth: size.width * 0.90) - - textLine1.text = line1 - textLine1.fontSize = fittedFontSize(for: line1, preferredSize: size.height * 0.034, maxWidth: size.width * 0.92) - textLine2.text = line2 - textLine2.fontSize = fittedFontSize(for: line2, preferredSize: size.height * 0.034, maxWidth: size.width * 0.92) - textLine3.text = line3 - textLine3.fontSize = fittedFontSize(for: line3, preferredSize: size.height * 0.034, maxWidth: size.width * 0.92) - tapHint.text = hint - tapHint.fontSize = fittedFontSize(for: hint, preferredSize: size.height * 0.030, maxWidth: size.width * 0.92) - } - - private func ensureLetsGoButton() { - if letsGoButton != nil { - return - } - - let buttonSize = CGSize(width: size.width * 0.34, height: size.height * 0.10) - let button = SpriteButton(texture: makeTextButtonTexture(title: "Let's Go", size: buttonSize)) { - ResourcesManager.getInstance().storyService?.loadTutorialGameSceneFromTutorialScene() - } - button.position = CGPoint(x: size.width * 0.5, y: size.height * 0.25) - addChild(button) - letsGoButton = button - } - - private func makeTextButtonTexture(title: String, size: CGSize) -> SKTexture { - let renderer = UIGraphicsImageRenderer(size: size) - let image = renderer.image { _ in - let frame = CGRect(origin: .zero, size: size).insetBy(dx: size.width * 0.01, dy: size.height * 0.06) - let backgroundPath = UIBezierPath(roundedRect: frame, cornerRadius: size.height * 0.23) - UIColor(white: 1.0, alpha: 0.10).setFill() - backgroundPath.fill() - UIColor(white: 1.0, alpha: 0.22).setStroke() - backgroundPath.lineWidth = size.height * 0.08 - backgroundPath.stroke() - - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.alignment = .center - let attributes: [NSAttributedString.Key: Any] = [ - .font: UIFont(name: "Optima-Bold", size: size.height * 0.42) ?? UIFont.systemFont(ofSize: size.height * 0.42, weight: .semibold), - .foregroundColor: textColor, - .paragraphStyle: paragraphStyle - ] - let textRect = CGRect(x: 0.0, y: size.height * 0.28, width: size.width, height: size.height * 0.5) - title.draw(in: textRect, withAttributes: attributes) - } - return SKTexture(image: image) - } - - private func fittedFontSize(for text: String, preferredSize: CGFloat, maxWidth: CGFloat) -> CGFloat { - if text.isEmpty { - return preferredSize - } - let label = SKLabelNode(fontNamed: "Optima-Bold") - label.text = text - var currentSize = preferredSize - label.fontSize = currentSize - - while label.frame.width > maxWidth && currentSize > 10.0 { - currentSize -= 1.0 - label.fontSize = currentSize - } - return currentSize - } -} - -class TutorialGameScene: GameScene { - private var restartButton: SpriteButton? - private var menuButton: SpriteButton? - private var finishButton: SpriteButton? - private let tutorialHint = SKLabelNode(fontNamed: "Optima-Bold") - private let tutorialSubHint = SKLabelNode(fontNamed: "Optima-Bold") - - override init(size: CGSize, proportionSet: ProportionSet, level: Level) { - super.init(size: size, proportionSet: proportionSet, level: level) - addTutorialHints() - updateHintText() - } - - required init(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func addStaticLabels() { - // Tutorial scene keeps UI minimal and avoids overlap with end-of-tutorial CTA. - } - - override func addDynamicLabels() { - // No move counters in tutorial. - } - - override func addButtons() { - let side = proportionSet.levelChoiceSize() - restartButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "arrow.counterclockwise", side: side), onClick: restartTutorial) - restartButton!.position = CGPoint(x: size.width - size.height * 0.057, y: size.height * 0.91) - addChild(restartButton!) - - menuButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: side), onClick: backToStartMenu) - menuButton!.position = proportionSet.levelChoicePos() - addChild(menuButton!) - } - - override func moveLine(horizontal: Bool, rowOrColumn: Int, steps: Int) { - super.moveLine(horizontal: horizontal, rowOrColumn: rowOrColumn, steps: steps) - if !levelSolved { - updateHintText() - } - } - - override func onSolvedGame() { - tutorialHint.text = "Solved" - tutorialHint.fontSize = size.height * 0.06 - tutorialHint.position = CGPoint(x: size.width * 0.5, y: size.height * 0.30) - tutorialSubHint.text = "" - showFinishButton() - } - - private func addTutorialHints() { - tutorialHint.fontColor = fontColor - tutorialHint.position = CGPoint(x: size.width * 0.5, y: size.height * 0.24) - tutorialHint.zPosition = 10 - addChild(tutorialHint) - - tutorialSubHint.fontColor = fontColor - tutorialSubHint.position = CGPoint(x: size.width * 0.5, y: size.height * 0.19) - tutorialSubHint.zPosition = 10 - addChild(tutorialSubHint) - } - - private func updateHintText() { - if gameService.getLevel().movesCounter == 0 { - tutorialHint.text = "Swipe any row or column" - tutorialHint.fontSize = fittedFontSize(for: tutorialHint.text ?? "", preferredSize: size.height * 0.040, maxWidth: size.width * 0.92) - tutorialSubHint.text = "Connect start and finish in this level." - tutorialSubHint.fontSize = fittedFontSize(for: tutorialSubHint.text ?? "", preferredSize: size.height * 0.032, maxWidth: size.width * 0.92) - } else { - tutorialHint.text = "Good" - tutorialHint.fontSize = size.height * 0.044 - tutorialSubHint.text = "Keep going until the path is connected." - tutorialSubHint.fontSize = fittedFontSize(for: tutorialSubHint.text ?? "", preferredSize: size.height * 0.032, maxWidth: size.width * 0.92) - } - } - - private func showFinishButton() { - if finishButton != nil { - finishButton?.isHidden = false - return - } - let buttonSize = CGSize(width: size.width * 0.62, height: size.height * 0.095) - finishButton = SpriteButton(texture: makeTextButtonTexture(title: "Back to Menu", size: buttonSize)) { - ResourcesManager.getInstance().storyService?.loadStartMenuScene() - } - finishButton?.position = CGPoint(x: size.width * 0.5, y: size.height * 0.15) - finishButton?.zPosition = 10 - addChild(finishButton!) - } - - private func restartTutorial() { - ResourcesManager.getInstance().storyService?.loadTutorialGameSceneFromTutorialScene() - } - - private func backToStartMenu() { - ResourcesManager.getInstance().storyService?.loadStartMenuScene() - } - - private func makeTextButtonTexture(title: String, size: CGSize) -> SKTexture { - let renderer = UIGraphicsImageRenderer(size: size) - let image = renderer.image { _ in - let frame = CGRect(origin: .zero, size: size).insetBy(dx: size.width * 0.01, dy: size.height * 0.06) - let backgroundPath = UIBezierPath(roundedRect: frame, cornerRadius: size.height * 0.23) - UIColor(white: 1.0, alpha: 0.10).setFill() - backgroundPath.fill() - UIColor(white: 1.0, alpha: 0.22).setStroke() - backgroundPath.lineWidth = size.height * 0.08 - backgroundPath.stroke() - - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.alignment = .center - let buttonFontSize = fittedButtonFontSize(for: title, preferredSize: size.height * 0.38, maxWidth: size.width * 0.90) - let attributes: [NSAttributedString.Key: Any] = [ - .font: UIFont(name: "Optima-Bold", size: buttonFontSize) ?? UIFont.systemFont(ofSize: buttonFontSize, weight: .semibold), - .foregroundColor: fontColor, - .paragraphStyle: paragraphStyle - ] - let textRect = CGRect(x: 0.0, y: size.height * 0.30, width: size.width, height: size.height * 0.5) - title.draw(in: textRect, withAttributes: attributes) - } - return SKTexture(image: image) - } - - private func fittedButtonFontSize(for text: String, preferredSize: CGFloat, maxWidth: CGFloat) -> CGFloat { - var currentSize = preferredSize - while currentSize > 10.0 { - let font = UIFont(name: "Optima-Bold", size: currentSize) ?? UIFont.systemFont(ofSize: currentSize, weight: .semibold) - let measuredWidth = (text as NSString).size(withAttributes: [.font: font]).width - if measuredWidth <= maxWidth { - return currentSize - } - currentSize -= 1.0 - } - return 10.0 - } - - private func fittedFontSize(for text: String, preferredSize: CGFloat, maxWidth: CGFloat) -> CGFloat { - if text.isEmpty { - return preferredSize - } - let label = SKLabelNode(fontNamed: "Optima-Bold") - label.text = text - var currentSize = preferredSize - label.fontSize = currentSize - - while label.frame.width > maxWidth && currentSize > 10.0 { - currentSize -= 1.0 - label.fontSize = currentSize - } - return currentSize - } } diff --git a/SOPA/view/LevelMode/LevelModeGameScene.swift b/SOPA/view/LevelMode/LevelModeGameScene.swift index 9245d6b..44bb5ee 100644 --- a/SOPA/view/LevelMode/LevelModeGameScene.swift +++ b/SOPA/view/LevelMode/LevelModeGameScene.swift @@ -36,12 +36,22 @@ class LevelModeGameScene: GameScene { override func addButtons() { let backSide = min(size.width, size.height) * 0.09 - levelChoiceButton = SpriteButton(texture: makeMinimalBackTexture(side: backSide), onClick: loadLevelChoiceScene) + levelChoiceButton = SpriteButton(texture: ButtonTextureFactory.makeMinimalBackTexture(side: backSide), onClick: loadLevelChoiceScene) levelChoiceButton!.position = CGPoint(x: size.width * 0.08, y: size.height * 0.95) addChild(levelChoiceButton!) let restartSide = min(size.width, size.height) * 0.18 - restartButton = SpriteButton(texture: makeGameplayCircleButtonTexture(symbolName: "arrow.counterclockwise", side: restartSide), onClick: restartLevel) + restartButton = SpriteButton( + texture: ButtonTextureFactory.makeCircleButtonTexture( + symbolName: "arrow.counterclockwise", + side: restartSide, + circleColor: UIColor(white: 0.96, alpha: 1.0), + iconColor: UIColor(white: 0.05, alpha: 1.0), + symbolScale: 0.52, + symbolWeight: .bold + ), + onClick: restartLevel + ) restartButton!.position = CGPoint(x: size.width * 0.86, y: size.height * 0.12) addChild(restartButton!) } @@ -109,48 +119,6 @@ class LevelModeGameScene: GameScene { movesLabels.addChild(currentMovesNode) } - private func makeGameplayCircleButtonTexture(symbolName: String, side: CGFloat) -> SKTexture { - let textureSize = CGSize(width: side, height: side) - let renderer = UIGraphicsImageRenderer(size: textureSize) - let image = renderer.image { _ in - UIColor(white: 0.96, alpha: 1.0).setFill() - UIBezierPath(ovalIn: CGRect(origin: .zero, size: textureSize)).fill() - - let config = UIImage.SymbolConfiguration(pointSize: side * 0.52, weight: .bold) - if let symbol = UIImage(systemName: symbolName, withConfiguration: config)? - .withTintColor(UIColor(white: 0.05, alpha: 1.0), renderingMode: .alwaysOriginal) { - let symbolRect = CGRect( - x: (side - symbol.size.width) / 2.0, - y: (side - symbol.size.height) / 2.0, - width: symbol.size.width, - height: symbol.size.height - ) - symbol.draw(in: symbolRect) - } - } - return SKTexture(image: image) - - } - - private func makeMinimalBackTexture(side: CGFloat) -> SKTexture { - let textureSize = CGSize(width: side, height: side) - let renderer = UIGraphicsImageRenderer(size: textureSize) - let image = renderer.image { _ in - let config = UIImage.SymbolConfiguration(pointSize: side * 0.72, weight: .semibold) - if let symbol = UIImage(systemName: "chevron.left", withConfiguration: config)? - .withTintColor(UIColor(white: 0.86, alpha: 0.92), renderingMode: .alwaysOriginal) { - let symbolRect = CGRect( - x: (side - symbol.size.width) / 2.0, - y: (side - symbol.size.height) / 2.0, - width: symbol.size.width, - height: symbol.size.height - ) - symbol.draw(in: symbolRect) - } - } - return SKTexture(image: image) - } - func restartLevel() { ResourcesManager.getInstance().storyService?.reloadLevelModeGameScene(levelId: gameService.getLevel().id!) } diff --git a/SOPA/view/LevelMode/SopaTheme.swift b/SOPA/view/LevelMode/SopaTheme.swift new file mode 100644 index 0000000..ee57c31 --- /dev/null +++ b/SOPA/view/LevelMode/SopaTheme.swift @@ -0,0 +1,17 @@ +import UIKit + +enum SopaTheme { + static let blackBackground = UIColor.black + static let warmBackground = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255.0, alpha: 1.0) + + static let titleGray = UIColor(red: 214.0 / 255.0, green: 214.0 / 255.0, blue: 214.0 / 255.0, alpha: 1.0) + static let neonBlue = UIColor(red: 111.0 / 255.0, green: 227.0 / 255.0, blue: 1.0, alpha: 1.0) + static let neonGlowBlue = UIColor(red: 23.0 / 255.0, green: 183.0 / 255.0, blue: 1.0, alpha: 1.0) + static let neonCoreBlue = UIColor(red: 183.0 / 255.0, green: 245.0 / 255.0, blue: 1.0, alpha: 1.0) + + static let bodyText = UIColor(red: 230.0 / 255.0, green: 236.0 / 255.0, blue: 242.0 / 255.0, alpha: 1.0) + static let gameText = UIColor(red: 240.0 / 255.0, green: 239.0 / 255.0, blue: 238.0 / 255.0, alpha: 1.0) + + static let circleButtonFill = UIColor(white: 0.94, alpha: 1.0) + static let circleButtonIcon = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255.0, alpha: 1.0) +} diff --git a/SOPA/view/LevelMode/StartMenuScene.swift b/SOPA/view/LevelMode/StartMenuScene.swift new file mode 100644 index 0000000..89782b8 --- /dev/null +++ b/SOPA/view/LevelMode/StartMenuScene.swift @@ -0,0 +1,106 @@ +import Foundation +import SpriteKit +import UIKit + +class StartMenuScene: SKScene { + private let twitterUrl = "https://twitter.com/sopagame" + private let shareText = "I played SOPA: https://play.google.com/store/apps/details?id=com.sopaapp" + + override init(size: CGSize) { + super.init(size: size) + backgroundColor = SopaTheme.blackBackground + addTitle() + addButtons() + addSocialButtons() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func addTitle() { + let title = SKLabelNode(fontNamed: "Impact") + title.text = "SOPA" + title.fontSize = size.height * 0.14 + title.fontColor = SopaTheme.titleGray + title.position = CGPoint(x: size.width / 2, y: size.height * 0.77) + addChild(title) + } + + private func addButtons() { + let menuItems: [(title: String, action: () -> Void)] = [ + ("LEVEL MODE", { ResourcesManager.getInstance().storyService?.loadLevelCoiceScene() }), + ("JUST PLAY", { ResourcesManager.getInstance().storyService?.loadJustPlaySceneFromMenuScene() }), + // Keep this wired until a dedicated Settings scene exists on iOS. + ("SETTINGS", { ResourcesManager.getInstance().storyService?.loadTutorialSceneFromMenuScene() }), + ("CREDITS", { ResourcesManager.getInstance().storyService?.loadCreditsSceneFromMenuScene() }) + ] + + let buttonSize = CGSize(width: size.width * 0.76, height: size.height * 0.095) + let firstY = size.height * 0.62 + let verticalGap = size.height * 0.11 + + for (index, item) in menuItems.enumerated() { + let button = SpriteButton(texture: ButtonTextureFactory.makeNeonTextTexture(title: item.title, size: buttonSize), onClick: item.action) + button.position = CGPoint(x: size.width / 2.0, y: firstY - CGFloat(index) * verticalGap) + addChild(button) + } + } + + private func addSocialButtons() { + let buttonSide = min(size.width * 0.18, size.height * 0.10) + + let shareButton = SpriteButton( + texture: ButtonTextureFactory.makeSocialButtonTexture(symbolName: "point.3.connected.trianglepath.dotted", size: CGSize(width: buttonSide, height: buttonSide), fillBackground: true), + onClick: shareApp + ) + shareButton.position = CGPoint(x: size.width * 0.20, y: size.height * 0.14) + addChild(shareButton) + + let twitterButton = SpriteButton( + texture: ButtonTextureFactory.makeSocialButtonTexture(symbolName: "paperplane.fill", size: CGSize(width: buttonSide * 1.15, height: buttonSide * 1.15), fillBackground: false), + onClick: openTwitter + ) + twitterButton.position = CGPoint(x: size.width * 0.74, y: size.height * 0.14) + addChild(twitterButton) + } + + private func openTwitter() { + guard let url = URL(string: twitterUrl) else { + return + } + UIApplication.shared.open(url) + } + + private func shareApp() { + guard let controller = topViewController() else { + return + } + let shareController = UIActivityViewController(activityItems: [shareText], applicationActivities: nil) + shareController.popoverPresentationController?.sourceView = controller.view + controller.present(shareController, animated: true) + } + + private func topViewController(base: UIViewController? = nil) -> UIViewController? { + let initialController: UIViewController? + if let base = base { + initialController = base + } else { + initialController = UIApplication.shared.connectedScenes + .compactMap { $0 as? UIWindowScene } + .flatMap { $0.windows } + .first { $0.isKeyWindow }?.rootViewController + } + + if let navController = initialController as? UINavigationController { + return topViewController(base: navController.visibleViewController) + } + if let tabController = initialController as? UITabBarController { + return topViewController(base: tabController.selectedViewController) + } + if let presented = initialController?.presentedViewController { + return topViewController(base: presented) + } + return initialController + } +} diff --git a/SOPA/view/LevelMode/TutorialGameScene.swift b/SOPA/view/LevelMode/TutorialGameScene.swift new file mode 100644 index 0000000..889b057 --- /dev/null +++ b/SOPA/view/LevelMode/TutorialGameScene.swift @@ -0,0 +1,103 @@ +import Foundation +import SpriteKit +import UIKit + +class TutorialGameScene: GameScene { + private var restartButton: SpriteButton? + private var menuButton: SpriteButton? + private var finishButton: SpriteButton? + private let tutorialHint = SKLabelNode(fontNamed: "Optima-Bold") + private let tutorialSubHint = SKLabelNode(fontNamed: "Optima-Bold") + + override init(size: CGSize, proportionSet: ProportionSet, level: Level) { + super.init(size: size, proportionSet: proportionSet, level: level) + addTutorialHints() + updateHintText() + } + + required init(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func addStaticLabels() { + // Tutorial scene keeps UI minimal and avoids overlap with end-of-tutorial CTA. + } + + override func addDynamicLabels() { + // No move counters in tutorial. + } + + override func addButtons() { + let side = proportionSet.levelChoiceSize() + restartButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "arrow.counterclockwise", side: side), onClick: restartTutorial) + restartButton!.position = CGPoint(x: size.width - size.height * 0.057, y: size.height * 0.91) + addChild(restartButton!) + + menuButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: side), onClick: backToStartMenu) + menuButton!.position = proportionSet.levelChoicePos() + addChild(menuButton!) + } + + override func moveLine(horizontal: Bool, rowOrColumn: Int, steps: Int) { + super.moveLine(horizontal: horizontal, rowOrColumn: rowOrColumn, steps: steps) + if !levelSolved { + updateHintText() + } + } + + override func onSolvedGame() { + tutorialHint.text = "Solved" + tutorialHint.fontSize = size.height * 0.06 + tutorialHint.position = CGPoint(x: size.width * 0.5, y: size.height * 0.30) + tutorialSubHint.text = "" + showFinishButton() + } + + private func addTutorialHints() { + tutorialHint.fontColor = fontColor + tutorialHint.position = CGPoint(x: size.width * 0.5, y: size.height * 0.24) + tutorialHint.zPosition = 10 + addChild(tutorialHint) + + tutorialSubHint.fontColor = fontColor + tutorialSubHint.position = CGPoint(x: size.width * 0.5, y: size.height * 0.19) + tutorialSubHint.zPosition = 10 + addChild(tutorialSubHint) + } + + private func updateHintText() { + if gameService.getLevel().movesCounter == 0 { + tutorialHint.text = "Swipe any row or column" + tutorialHint.fontSize = LabelSizing.fittedLabelFontSize(text: tutorialHint.text ?? "", fontName: "Optima-Bold", preferredSize: size.height * 0.040, maxWidth: size.width * 0.92) + tutorialSubHint.text = "Connect start and finish in this level." + tutorialSubHint.fontSize = LabelSizing.fittedLabelFontSize(text: tutorialSubHint.text ?? "", fontName: "Optima-Bold", preferredSize: size.height * 0.032, maxWidth: size.width * 0.92) + } else { + tutorialHint.text = "Good" + tutorialHint.fontSize = size.height * 0.044 + tutorialSubHint.text = "Keep going until the path is connected." + tutorialSubHint.fontSize = LabelSizing.fittedLabelFontSize(text: tutorialSubHint.text ?? "", fontName: "Optima-Bold", preferredSize: size.height * 0.032, maxWidth: size.width * 0.92) + } + } + + private func showFinishButton() { + if finishButton != nil { + finishButton?.isHidden = false + return + } + let buttonSize = CGSize(width: size.width * 0.62, height: size.height * 0.095) + finishButton = SpriteButton(texture: ButtonTextureFactory.makeTextButtonTexture(title: "Back to Menu", size: buttonSize, fontName: "Optima-Bold", textColor: fontColor)) { + ResourcesManager.getInstance().storyService?.loadStartMenuScene() + } + finishButton?.position = CGPoint(x: size.width * 0.5, y: size.height * 0.15) + finishButton?.zPosition = 10 + addChild(finishButton!) + } + + private func restartTutorial() { + ResourcesManager.getInstance().storyService?.loadTutorialGameSceneFromTutorialScene() + } + + private func backToStartMenu() { + ResourcesManager.getInstance().storyService?.loadStartMenuScene() + } +} diff --git a/SOPA/view/LevelMode/TutorialScene.swift b/SOPA/view/LevelMode/TutorialScene.swift new file mode 100644 index 0000000..7c7331b --- /dev/null +++ b/SOPA/view/LevelMode/TutorialScene.swift @@ -0,0 +1,139 @@ +import Foundation +import SpriteKit +import UIKit + +class TutorialScene: SKScene { + private var currentPage = 0 + private let headline = SKLabelNode(fontNamed: "Optima-Bold") + private let textLine1 = SKLabelNode(fontNamed: "Optima-Bold") + private let textLine2 = SKLabelNode(fontNamed: "Optima-Bold") + private let textLine3 = SKLabelNode(fontNamed: "Optima-Bold") + private let tapHint = SKLabelNode(fontNamed: "Optima-Bold") + private var letsGoButton: SpriteButton? + + override init(size: CGSize) { + super.init(size: size) + self.backgroundColor = SopaTheme.warmBackground + addBackButton() + addTitle() + addContentNodes() + updatePage() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func addBackButton() { + let side = size.height * 0.08 + let backButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: side)) { + ResourcesManager.getInstance().storyService?.loadStartMenuScene() + } + backButton.position = CGPoint(x: size.height * 0.057, y: size.height * 0.91) + addChild(backButton) + } + + private func addTitle() { + let title = SKLabelNode(fontNamed: "Optima-Bold") + title.text = "Tutorial" + title.fontSize = size.height * 0.10 + title.fontColor = SopaTheme.gameText + title.position = CGPoint(x: size.width * 0.5, y: size.height * 0.78) + addChild(title) + } + + private func addContentNodes() { + headline.fontColor = SopaTheme.gameText + headline.fontSize = size.height * 0.048 + headline.position = CGPoint(x: size.width * 0.5, y: size.height * 0.62) + addChild(headline) + + textLine1.fontColor = SopaTheme.gameText + textLine1.fontSize = size.height * 0.034 + textLine1.position = CGPoint(x: size.width * 0.5, y: size.height * 0.54) + addChild(textLine1) + + textLine2.fontColor = SopaTheme.gameText + textLine2.fontSize = size.height * 0.034 + textLine2.position = CGPoint(x: size.width * 0.5, y: size.height * 0.48) + addChild(textLine2) + + textLine3.fontColor = SopaTheme.gameText + textLine3.fontSize = size.height * 0.034 + textLine3.position = CGPoint(x: size.width * 0.5, y: size.height * 0.42) + addChild(textLine3) + + tapHint.fontColor = SopaTheme.gameText + tapHint.fontSize = size.height * 0.030 + tapHint.position = CGPoint(x: size.width * 0.5, y: size.height * 0.26) + addChild(tapHint) + } + + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + if currentPage < 2 { + currentPage += 1 + updatePage() + } + } + + private func updatePage() { + switch currentPage { + case 0: + setPage( + headlineText: "Goal", + line1: "Connect the start and finish pipes.", + line2: "Swipe rows or columns to move tiles.", + line3: "Only matching pipe segments will connect.", + hint: "Tap anywhere to continue" + ) + letsGoButton?.isHidden = true + case 1: + setPage( + headlineText: "How It Works", + line1: "Horizontal swipe moves a full row.", + line2: "Vertical swipe moves a full column.", + line3: "Try to solve it in as few moves as possible.", + hint: "Tap anywhere to continue" + ) + letsGoButton?.isHidden = true + default: + setPage( + headlineText: "Try It Now", + line1: "Next you play a simple interactive level.", + line2: "Use restart if you want to try again.", + line3: "", + hint: "" + ) + ensureLetsGoButton() + letsGoButton?.isHidden = false + } + } + + private func setPage(headlineText: String, line1: String, line2: String, line3: String, hint: String) { + headline.text = headlineText + headline.fontSize = LabelSizing.fittedLabelFontSize(text: headlineText, fontName: "Optima-Bold", preferredSize: size.height * 0.048, maxWidth: size.width * 0.90) + + textLine1.text = line1 + textLine1.fontSize = LabelSizing.fittedLabelFontSize(text: line1, fontName: "Optima-Bold", preferredSize: size.height * 0.034, maxWidth: size.width * 0.92) + textLine2.text = line2 + textLine2.fontSize = LabelSizing.fittedLabelFontSize(text: line2, fontName: "Optima-Bold", preferredSize: size.height * 0.034, maxWidth: size.width * 0.92) + textLine3.text = line3 + textLine3.fontSize = LabelSizing.fittedLabelFontSize(text: line3, fontName: "Optima-Bold", preferredSize: size.height * 0.034, maxWidth: size.width * 0.92) + tapHint.text = hint + tapHint.fontSize = LabelSizing.fittedLabelFontSize(text: hint, fontName: "Optima-Bold", preferredSize: size.height * 0.030, maxWidth: size.width * 0.92) + } + + private func ensureLetsGoButton() { + if letsGoButton != nil { + return + } + + let buttonSize = CGSize(width: size.width * 0.34, height: size.height * 0.10) + let button = SpriteButton(texture: ButtonTextureFactory.makeTextButtonTexture(title: "Let's Go", size: buttonSize, fontName: "Optima-Bold", textColor: SopaTheme.gameText)) { + ResourcesManager.getInstance().storyService?.loadTutorialGameSceneFromTutorialScene() + } + button.position = CGPoint(x: size.width * 0.5, y: size.height * 0.25) + addChild(button) + letsGoButton = button + } +} From df6ce8229acf19eefaba64f9b0dabafc46d58ae7 Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 20:49:26 +0200 Subject: [PATCH 04/13] Clean up LevelMode: remove debug print, fix menu label - Remove stray print(difference) in LevelModeGameScene.stopCounter - Rename misleading "SETTINGS" menu button to "TUTORIAL" (it opens the tutorial scene; no settings scene exists on iOS) - Add CLAUDE.md referencing AGENTS.md Co-Authored-By: Claude Fable 5 --- CLAUDE.md | 1 + SOPA/view/LevelMode/LevelModeGameScene.swift | 1 - SOPA/view/LevelMode/StartMenuScene.swift | 3 +-- 3 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..ea9c29b --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +See [AGENTS.md](./AGENTS.md) for project instructions and conventions. diff --git a/SOPA/view/LevelMode/LevelModeGameScene.swift b/SOPA/view/LevelMode/LevelModeGameScene.swift index 44bb5ee..2f44dd1 100644 --- a/SOPA/view/LevelMode/LevelModeGameScene.swift +++ b/SOPA/view/LevelMode/LevelModeGameScene.swift @@ -26,7 +26,6 @@ class LevelModeGameScene: GameScene { private func stopCounter() -> Double { let end = NSDate() let difference: Double = end.timeIntervalSince(start! as Date) - print(difference) return difference } diff --git a/SOPA/view/LevelMode/StartMenuScene.swift b/SOPA/view/LevelMode/StartMenuScene.swift index 89782b8..93b68f4 100644 --- a/SOPA/view/LevelMode/StartMenuScene.swift +++ b/SOPA/view/LevelMode/StartMenuScene.swift @@ -31,8 +31,7 @@ class StartMenuScene: SKScene { let menuItems: [(title: String, action: () -> Void)] = [ ("LEVEL MODE", { ResourcesManager.getInstance().storyService?.loadLevelCoiceScene() }), ("JUST PLAY", { ResourcesManager.getInstance().storyService?.loadJustPlaySceneFromMenuScene() }), - // Keep this wired until a dedicated Settings scene exists on iOS. - ("SETTINGS", { ResourcesManager.getInstance().storyService?.loadTutorialSceneFromMenuScene() }), + ("TUTORIAL", { ResourcesManager.getInstance().storyService?.loadTutorialSceneFromMenuScene() }), ("CREDITS", { ResourcesManager.getInstance().storyService?.loadCreditsSceneFromMenuScene() }) ] From bfa5cabbfacb5283b42d8d6d929b6c85a399e7e5 Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 21:15:59 +0200 Subject: [PATCH 05/13] Add Android design-parity plan; document idb usage in AGENTS.md - ANDROID_DESIGN_PARITY_PLAN.md: per-screen gap analysis (live-captured via idb) with prioritized tasks toward Android design parity - AGENTS.md: idb tap/swipe/screenshot workflow, menu tap coordinates, setup notes (Python 3.12), corrected simulator name in build commands Co-Authored-By: Claude Fable 5 --- AGENTS.md | 39 +++++++++- ANDROID_DESIGN_PARITY_PLAN.md | 142 ++++++++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 ANDROID_DESIGN_PARITY_PLAN.md diff --git a/AGENTS.md b/AGENTS.md index e3cf243..0297608 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,9 +14,44 @@ SOPA iOS soll in der **Spiellogik** Android-Verhalten erreichen (UI darf abweich ## Build und Test - Build: - - `xcodebuild -project SOPA.xcodeproj -scheme SOPA -destination 'platform=iOS Simulator,name=iPhone 16,OS=18.0' build` + - `xcodebuild -project SOPA.xcodeproj -scheme SOPA -destination 'platform=iOS Simulator,name=iPhone 17 Pro' build` - Voller Testlauf: - - `xcodebuild -project SOPA.xcodeproj -scheme SOPA -destination 'platform=iOS Simulator,name=iPhone 16,OS=18.0' test` + - `xcodebuild -project SOPA.xcodeproj -scheme SOPA -destination 'platform=iOS Simulator,name=iPhone 17 Pro' test` +- Hinweis: Simulator-Namen mit `xcrun simctl list devices available` prüfen (der Name variiert je nach installierter Xcode-Version; aktuell iOS 26.5, iPhone 17 Pro). + +## App im Simulator ansehen (visuelle Verifikation mit idb) +Für UI-/Design-Arbeit lässt sich die App im Simulator fernsteuern (Taps/Swipes), um Screens +gegen das Android-Design abzugleichen. Setup ist installiert (siehe unten bei Problemen). + +Ablauf (Beispiel iPhone 17 Pro): +```bash +export PATH="$HOME/.local/bin:$PATH" # idb-CLI liegt in ~/.local/bin (pipx) +UDID=$(xcrun simctl list devices booted | grep -oE '[0-9A-F-]{36}' | head -1) +BUNDLE=de.davidschilling.SOPA + +xcrun simctl boot "iPhone 17 Pro" 2>/dev/null # falls nicht gebootet +xcrun simctl install "$UDID" "$(find ~/Library/Developer/Xcode/DerivedData/SOPA-*/Build/Products/Debug-iphonesimulator -maxdepth 1 -name SOPA.app | head -1)" +xcrun simctl launch "$UDID" "$BUNDLE" + +idb connect "$UDID" +idb ui tap --udid "$UDID" # Koordinaten in POINTS (iPhone 17 Pro = 402x874) +idb ui swipe --udid "$UDID" # z.B. Reihe/Spalte im Spielfeld schieben +xcrun simctl io "$UDID" screenshot out.png # Screenshot zum Vergleich +``` +Menü-Tap-Punkte (Points, iPhone 17 Pro): LEVEL MODE ≈ (201,345), JUST PLAY ≈ (201,439), +TUTORIAL ≈ (201,535), CREDITS ≈ (201,629). + +Grenzen: Screens hinter Gameplay (Level Complete, JustPlay-Score) erscheinen erst nach +gelöstem Puzzle und lassen sich per Blind-Swipe kaum reproduzierbar erreichen – dafür +Quellcode heranziehen. JustPlay-Game-Over erreicht man einfach, indem man den Timer +ablaufen lässt (~12 s ohne Lösung). + +### idb-Setup (falls nicht vorhanden) +- `brew install facebook/fb/idb-companion` +- `pipx install --python /opt/homebrew/bin/python3.12 fb-idb` + (**muss Python 3.12 sein**, nicht 3.14 – fb-idb 1.1.7 crasht auf 3.14 wegen entferntem + `asyncio.get_event_loop()`). +- Die Meldung `objc[...] Class FBProcess is implemented in both ...` bei jedem Aufruf ist harmlos. ## Wichtige Dateien - Produktplan: `IOS_PRODUCT_COMPLETION_PLAN.md` diff --git a/ANDROID_DESIGN_PARITY_PLAN.md b/ANDROID_DESIGN_PARITY_PLAN.md new file mode 100644 index 0000000..43379bd --- /dev/null +++ b/ANDROID_DESIGN_PARITY_PLAN.md @@ -0,0 +1,142 @@ +# iOS ↔ Android Design-Parität – Aufgabenplan + +Ziel: Das aktuelle **Android-Design** (siehe `sopa-android/pr/dev-screenshots/`) auf iOS +übernehmen. Grundlage dieses Plans ist ein Vergleich der 7 Android-Referenz-Screens mit +dem aktuellen iOS-Zustand (Branch `backup/ios-ui-level-overview-2026-02-25`). + +Die iOS-Screens wurden **live im Simulator** (iPhone 17 Pro, iOS 26.5) per idb erfasst und +mit den Android-Vorlagen verglichen. Ausnahmen: „Level Complete" und der JustPlay-Zwischen- +Score erscheinen nur nach gelöstem Puzzle und wurden über den Quellcode abgeglichen. + +## Statusüberblick pro Screen + +| Screen | iOS-Datei | Status | Kernabweichung zu Android | +|---|---|---|---| +| Hauptmenü | `StartMenuScene.swift` | 🟢 fast fertig | Menüpunkt-Label + Social-Icons; kein Settings-Screen | +| Level-Auswahl | `LevelChoiceScene` + `LevelButtonArea` + `LevelSelectButton` | 🟢 (live bestätigt) | fehlender Tutorial-Einstieg | +| Level-Mode Spiel | `LevelModeGameScene.swift` | 🟢 (live bestätigt) | Back-Button (Android hat keinen); Spielfeld sitzt zu weit oben | +| Level Complete | `LevelModeScoreScene.swift` | 🔴 altes Design | brauner Hintergrund, Wording, Button-Icon | +| Just-Play Spiel | `JustPlayGameScene.swift` (+ Basis `GameScene`) | 🔴 altes Design | brauner Hintergrund, kaputtes HUD, Notch-Kollision | +| Just-Play Highscore | `JustPlayLostScene` (in `JustPlayGameScene.swift`) | 🔴 altes Design | brauner Hintergrund, keine Farbbalken, kein „Share Score" | +| Tutorial | `TutorialScene.swift` / `TutorialGameScene.swift` | 🔴 anderes Konzept | Text-Seiten statt visuellem Grid; brauner BG; Einstiegspunkt | +| Credits | `CreditsScene.swift` | 🟢 (kein Referenz-Screenshot) | – | + +Grundursache vieler roter Punkte: Die Basis-Klasse `GameScene` (`SOPA/view/GameScene.swift:33`) +setzt weiterhin den **warmen braunen** Hintergrund und ein altes Inline-HUD +(„Optimum: N", „Moves:", „N. Level"). `LevelModeGameScene` überschreibt beides bereits +Android-konform – `JustPlayGameScene` und die Score-Szenen tun das noch nicht. + +--- + +## P1 – Hintergrund & Theme vereinheitlichen (schnelle, hochwirksame Fixes) + +Android nutzt durchgängig **Schwarz** als Hintergrund. Auf iOS sind noch braun: +`LevelModeScoreScene`, `JustPlayScoreScene`, `JustPlayLostScene`, `TutorialScene` sowie die +Basis `GameScene` (→ trifft `JustPlayGameScene` und `TutorialGameScene`). + +- [ ] `GameScene` Default-Hintergrund auf `SopaTheme.blackBackground` umstellen (`GameScene.swift:33`) +- [ ] `LevelModeScoreScene` Hintergrund auf schwarz (`LevelModeScoreScene.swift:14/21`) +- [ ] `JustPlayScoreScene` + `JustPlayLostScene` Hintergrund auf schwarz (`JustPlayGameScene.swift:364/498`) +- [ ] `TutorialScene` Hintergrund auf schwarz (`TutorialScene.swift:16`) +- [ ] Toten braunen `warmBackground`-Pfad nach der Umstellung entfernen bzw. dokumentieren + +## P1 – Just-Play Spiel-HUD an Android angleichen + +Android zeigt oben „Min. Moves"/„Current Moves" (Label + große Zahl darunter) und unten +„Left Time" (große Zahl). iOS `JustPlayGameScene` erbt aktuell das alte Basis-HUD und +addiert nur „Left Time" → doppelte/inkonsistente Beschriftung. + +- [ ] In `JustPlayGameScene` `addStaticLabels()` überschreiben, analog zu + `LevelModeGameScene.addStaticLabels()` (Impact-Font, Label + große Zahl) +- [ ] „Left Time" ins gleiche Layout bringen (große Zahl unter Label) +- [ ] Prüfen, ob das rote Warn-Overlay bei ≤5 s dem Android-Verhalten entspricht + +Live bestätigt: Aktuell zeigt der JustPlay-Screen oben „1. Level" (kollidiert mit der +Dynamic Island) und unten gestapelt „Left Time / Moves: / Optimum:" – also das alte +Basis-HUD plus Timer, nicht Androids Layout. + +## P1 – Safe-Area & Spielfeld-Positionierung (Layout) + +Live-Befund: Titel/Back-Button ragen im JustPlay/Tutorial in die **Dynamic Island**; das +Level-Mode-Spielfeld sitzt zu weit oben, unten bleibt großer Leerraum. Ursache ist v. a. das +hart verdrahtete `IPadProportionSet` (`StoryServiceImpl.swift:115`) auf iPhone-Geräten. + +- [ ] Top-Elemente an den Safe-Area-Insets ausrichten (nicht an `size.height`) +- [ ] Spielfeld vertikal zentrieren / iPhone-taugliches `ProportionSet` wählen +- [ ] Auf mehreren iPhone-Größen gegenprüfen + +## P2 – Level Complete an Android angleichen + +Android: **schwarzer** Hintergrund, Titel „N. Level Complete", „Your moves: X", +„Moves for 3 Stars: Y", 3 goldene Sterne, unten 3 weiße Kreis-Buttons (Grid / Restart / Play). + +- [ ] Hintergrund schwarz (siehe P1) +- [ ] Titel-Wording auf „N. Level Complete" + Font/Größe an Android angleichen + (`LevelModeScoreScene.swift:49`, aktuell „Level N Complete", Optima statt Impact) +- [ ] Untertitel „3-star target: N" → „Moves for 3 Stars: N" (`:68`) +- [ ] „Next"-Button: Icon `chevron.right` → gefülltes Play-Dreieck (`:30`) +- [ ] Sterne-Optik gegen Android prüfen (`star_score`/`starSW_score`) + +## P2 – Just-Play Highscore an Android angleichen + +Android: schwarzer Hintergrund, Titel „New Highscore", **blauer Balken** „Score: N", +**gelber Balken** „Level: N", unten 3 Kreis-Buttons: Zurück-Pfeil, Restart, **„SHARE SCORE"**. + +- [ ] Hintergrund schwarz (siehe P1) +- [ ] Score/Level als farbige Balken (blau/gelb) statt reinem Text (`JustPlayGameScene.swift:546–560`) +- [ ] **„SHARE SCORE"-Button ergänzen** (fehlt komplett) – Share-Flow wie im Menü nutzen +- [ ] Button-Set an Android angleichen (Zurück-Pfeil statt `chevron.left`) +- [ ] Entscheiden: Konfetti/„Highscore:"-Zeile beibehalten (iOS-Extra) oder für Parität entfernen + +## P2 – Tutorial neu aufbauen (anderes Konzept) + +Android-Tutorial = **visueller** 2-Screen-Ablauf: Titel „Tutorial" + „Click to see next info", +ein Spielfeld-Grid mit grünem/rotem Gate und blauen Röhren, unten farbig hervorgehobener +Erklärtext („Connect the **GREEN** and the **RED** gate, using the **BLUE** tubes. Use all tubes."). +Wird in Android **aus der Level-Auswahl** gestartet (`loadTutorialSceneFromLevelChoiceScene`) +bzw. beim Erststart, nicht aus dem Menü. + +iOS aktuell: reines **Text-Tutorial** (Seiten „Goal"/„How It Works"/„Try It Now") mit +„Let's Go"-Button, brauner Hintergrund, gestartet aus dem Menü. + +- [ ] Tutorial als visuellen Screen mit Spielfeld-Grid + farbigem Erklärtext umbauen +- [ ] Farbige Keywords (GREEN/RED/BLUE) im Text +- [ ] Einstiegspunkt an Android angleichen: aus der Level-Auswahl (+ optional Erststart) +- [ ] Übergänge Tutorial → erstes Level bzw. → Level-Auswahl analog Android + +## P3 – Menü: Settings vs. Tutorial klären + Social-Icons + +Android-Menü: **LEVEL MODE / JUST PLAY / SETTINGS / CREDITS** (kein Tutorial-Eintrag). +Der Settings-Screen in Android ist ein **Musik-Mute-Toggle** (`SettingsService`: `MUTE`, +`MY_FIRST_TIME`). Tutorial läuft über Level-Auswahl/Erststart. + +iOS aktuell: der 3. Menüpunkt wurde von „SETTINGS" auf **„TUTORIAL"** umbenannt und öffnet +das (Text-)Tutorial. Es gibt auf iOS **keinerlei Audio/Musik** und keinen Settings-Screen. + +- [ ] Entscheidung: Menü an Android angleichen (SETTINGS statt TUTORIAL) – setzt Settings-Screen + + Audio voraus – **oder** iOS bewusst mit TUTORIAL-Eintrag abweichen lassen +- [ ] Social-Icons an Android angleichen: Share-Glyph + klassischer Twitter-Vogel + (iOS nutzt SF-Symbols `point.3.connected.trianglepath.dotted` / `paperplane.fill`, + `StartMenuScene.swift:54/61`) + +## P3 – Audio/Musik + Settings (Voraussetzung für „SETTINGS") + +Android hat Menü-Musik und einen Mute-Toggle; iOS hat aktuell **kein Audio**. + +- [ ] Musik-Playback (z. B. `AVAudioPlayer`) + Mute-Persistenz (analog `SettingsService`) +- [ ] Settings-Szene mit Mute/Unmute-Button (schwarz, Neon-Stil) +- [ ] Erststart-Logik (`isFirstTime`) für automatischen Tutorial-Aufruf + +--- + +## Offene Punkte / zu verifizieren + +- Android-Credits-Screen liegt nicht als Screenshot vor → Parität nicht abgleichbar. +- Ob Android im Just-Play einen Zwischen-Score-Screen pro Level hat (iOS `JustPlayScoreScene`), + ist aus den Screenshots nicht ersichtlich – gegen die Android-App verifizieren. + +## Empfohlene Reihenfolge + +1. **P1** – Hintergründe schwarz + Just-Play-HUD (kleiner Aufwand, größter sichtbarer Effekt) +2. **P2** – Level Complete, Just-Play Highscore, Tutorial-Neuaufbau +3. **P3** – Menü-Entscheidung, Audio/Settings, Social-Icons From 32da5b16eb59cea3e33cc3f52ca39c51ed67156c Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 21:21:09 +0200 Subject: [PATCH 06/13] P1: black backgrounds + Android-style Just Play HUD - Switch all remaining warm-brown backgrounds to black to match Android: base GameScene, LevelModeScoreScene, TutorialScene, JustPlay score/lost - JustPlayGameScene: override addStaticLabels/addDynamicLabels for the Android HUD layout (Min. Moves / Current Moves / Left Time as label + large number) instead of the old inline "Optimum:/Moves:/N. Level" - Reposition JustPlay game buttons (restart bottom-right, minimal back top-left) so they no longer overlap the HUD labels Verified via idb: Just Play game + game-over and Tutorial now render on black with the correct HUD; 19 tests pass. Co-Authored-By: Claude Fable 5 --- SOPA/JustPlay/JustPlayGameScene.swift | 81 ++++++++++++++----- SOPA/view/GameScene.swift | 3 +- SOPA/view/LevelMode/LevelModeScoreScene.swift | 2 +- SOPA/view/LevelMode/TutorialScene.swift | 2 +- 4 files changed, 66 insertions(+), 22 deletions(-) diff --git a/SOPA/JustPlay/JustPlayGameScene.swift b/SOPA/JustPlay/JustPlayGameScene.swift index cfdc485..dba0b92 100644 --- a/SOPA/JustPlay/JustPlayGameScene.swift +++ b/SOPA/JustPlay/JustPlayGameScene.swift @@ -216,7 +216,7 @@ class JustPlayGameScene: GameScene, JustPlaySceneObserver { private var leaveScene = false private var restartButton: SpriteButton? private var levelChoiceButton: SpriteButton? - private var leftTimeNode = SKLabelNode(fontNamed: "Optima-Bold") + private var leftTimeNode = SKLabelNode(fontNamed: "Impact") private var warningOverlay: SKSpriteNode? init(size: CGSize, proportionSet: ProportionSet, justPlayLevel: JustPlayLevel, justPlayService: JustPlayService, timeBasedGameService: TimeBasedGameService) { @@ -253,32 +253,77 @@ class JustPlayGameScene: GameScene, JustPlaySceneObserver { } override func addButtons() { - let restartSide = proportionSet.buttonSize() + let restartSide = min(size.width, size.height) * 0.18 restartButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "arrow.counterclockwise", side: restartSide), onClick: restartLevel) - restartButton!.position = proportionSet.restartButtonPos() + restartButton!.position = CGPoint(x: size.width * 0.86, y: size.height * 0.12) addChild(restartButton!) - let side = proportionSet.levelChoiceSize() - levelChoiceButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: side), onClick: loadStartMenuScene) - levelChoiceButton!.position = proportionSet.levelChoicePos() + let backSide = min(size.width, size.height) * 0.09 + levelChoiceButton = SpriteButton(texture: ButtonTextureFactory.makeMinimalBackTexture(side: backSide), onClick: loadStartMenuScene) + levelChoiceButton!.position = CGPoint(x: size.width * 0.08, y: size.height * 0.95) addChild(levelChoiceButton!) } + private let headingColor = UIColor(white: 0.90, alpha: 1.0) + private let valueColor = UIColor(white: 0.96, alpha: 1.0) + private let hudFont = "Impact" + + override func addStaticLabels() { + addChild(movesLabels) + + let minTitle = SKLabelNode(fontNamed: hudFont) + minTitle.text = "Min. Moves" + minTitle.horizontalAlignmentMode = .center + minTitle.verticalAlignmentMode = .center + minTitle.fontSize = min(size.width, size.height) * 0.055 + minTitle.fontColor = headingColor + minTitle.position = CGPoint(x: size.width * 0.14, y: size.height * 0.90) + movesLabels.addChild(minTitle) + + let minValue = SKLabelNode(fontNamed: hudFont) + minValue.text = String(gameService.getLevel().minimumMovesToSolve ?? 0) + minValue.horizontalAlignmentMode = .center + minValue.verticalAlignmentMode = .center + minValue.fontSize = min(size.width, size.height) * 0.15 + minValue.fontColor = valueColor + minValue.position = CGPoint(x: size.width * 0.04, y: size.height * 0.84) + movesLabels.addChild(minValue) + + let currentTitle = SKLabelNode(fontNamed: hudFont) + currentTitle.text = "Current Moves" + currentTitle.horizontalAlignmentMode = .center + currentTitle.verticalAlignmentMode = .center + currentTitle.fontSize = min(size.width, size.height) * 0.055 + currentTitle.fontColor = headingColor + currentTitle.position = CGPoint(x: size.width * 0.84, y: size.height * 0.90) + movesLabels.addChild(currentTitle) + } + + override func addDynamicLabels() { + currentMovesNode.text = String(gameService.getLevel().movesCounter) + currentMovesNode.horizontalAlignmentMode = .center + currentMovesNode.verticalAlignmentMode = .center + currentMovesNode.fontSize = min(size.width, size.height) * 0.15 + currentMovesNode.position = CGPoint(x: size.width * 0.80, y: size.height * 0.84) + currentMovesNode.fontColor = valueColor + movesLabels.addChild(currentMovesNode) + } + private func addTimerLabels() { - let leftTimeLabel = SKLabelNode(fontNamed: fontName) + let leftTimeLabel = SKLabelNode(fontNamed: hudFont) leftTimeLabel.text = "Left Time" leftTimeLabel.horizontalAlignmentMode = .left - leftTimeLabel.verticalAlignmentMode = .top - leftTimeLabel.position = CGPoint(x: proportionSet.movesFontSize() * -2.6, y: proportionSet.movesFontSize() * 1.4) - leftTimeLabel.fontSize = proportionSet.movesFontSize() - leftTimeLabel.fontColor = fontColor + leftTimeLabel.verticalAlignmentMode = .center + leftTimeLabel.fontSize = min(size.width, size.height) * 0.06 + leftTimeLabel.fontColor = headingColor + leftTimeLabel.position = CGPoint(x: size.width * 0.04, y: size.height * 0.11) movesLabels.addChild(leftTimeLabel) - leftTimeNode.horizontalAlignmentMode = .right - leftTimeNode.verticalAlignmentMode = .top - leftTimeNode.position = CGPoint(x: proportionSet.movesFontSize() * 2.7, y: proportionSet.movesFontSize() * 1.4) - leftTimeNode.fontSize = proportionSet.movesFontSize() - leftTimeNode.fontColor = fontColor + leftTimeNode.horizontalAlignmentMode = .left + leftTimeNode.verticalAlignmentMode = .center + leftTimeNode.fontSize = min(size.width, size.height) * 0.15 + leftTimeNode.fontColor = valueColor + leftTimeNode.position = CGPoint(x: size.width * 0.04, y: size.height * 0.045) movesLabels.addChild(leftTimeNode) } @@ -361,7 +406,7 @@ class JustPlayGameScene: GameScene, JustPlaySceneObserver { class JustPlayScoreScene: SKScene { private let justPlayResult: JustPlayResult private let textColor = UIColor(red: 240.0 / 255.0, green: 239.0 / 255.0, blue: 238.0 / 255.0, alpha: 1.0) - private let background = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255.0, alpha: 1.0) + private let background = UIColor.black init(size: CGSize, proportionSet: ProportionSet, justPlayResult: JustPlayResult) { self.justPlayResult = justPlayResult @@ -495,7 +540,7 @@ class JustPlayLostScene: SKScene { self.previousHighscore = ResourcesManager.getInstance().levelService?.getBestJustPlayScore() self.isNewHighscore = previousHighscore == nil || justPlayResult.score > previousHighscore!.points super.init(size: size) - self.backgroundColor = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255, alpha: 1.0) + self.backgroundColor = .black ResourcesManager.getInstance().levelService?.submitJustPlayScore(score: JustPlayScore(points: justPlayResult.score, solvedLevels: justPlayResult.levelCount)) if isNewHighscore { addConfetti() diff --git a/SOPA/view/GameScene.swift b/SOPA/view/GameScene.swift index f177f61..768e4db 100644 --- a/SOPA/view/GameScene.swift +++ b/SOPA/view/GameScene.swift @@ -29,8 +29,7 @@ class GameScene: SKScene { addButtons() addStaticLabels() addDynamicLabels() - //self.backgroundColor = UIColor(red: 169.0 / 255.0, green: 162.0 / 255.0, blue: 121.0 / 255, alpha: 1.0)greenbrown - self.backgroundColor = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255, alpha: 1.0) + self.backgroundColor = .black } diff --git a/SOPA/view/LevelMode/LevelModeScoreScene.swift b/SOPA/view/LevelMode/LevelModeScoreScene.swift index 107ec04..0709aaf 100644 --- a/SOPA/view/LevelMode/LevelModeScoreScene.swift +++ b/SOPA/view/LevelMode/LevelModeScoreScene.swift @@ -11,7 +11,7 @@ import SpriteKit class LevelModeScoreScene: SKScene { private let levelResult: LevelResult - private let background = UIColor(red: 90.6 / 255.0, green: 86.7 / 255.0, blue: 70.6 / 255.0, alpha: 1.0) + private let background = UIColor.black private let textColor = UIColor(red: 240.0 / 255.0, green: 239.0 / 255.0, blue: 238.0 / 255.0, alpha: 1.0) init(size: CGSize, levelResult: LevelResult) { diff --git a/SOPA/view/LevelMode/TutorialScene.swift b/SOPA/view/LevelMode/TutorialScene.swift index 7c7331b..a1c3737 100644 --- a/SOPA/view/LevelMode/TutorialScene.swift +++ b/SOPA/view/LevelMode/TutorialScene.swift @@ -13,7 +13,7 @@ class TutorialScene: SKScene { override init(size: CGSize) { super.init(size: size) - self.backgroundColor = SopaTheme.warmBackground + self.backgroundColor = SopaTheme.blackBackground addBackButton() addTitle() addContentNodes() From 916d19c2814ccd67d98d1709b3324f1f70237e25 Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 21:24:07 +0200 Subject: [PATCH 07/13] Update parity plan: mark P1 done, correct field-position finding - Backgrounds + Just Play HUD checked off (verified via idb) - Clarify that the empty space below the game field matches Android (FIELD_SART_FROM_TOP=0.2); GameFieldNode intentionally left unchanged - Note IPadProportionSet is an empty subclass of IPhone6Proportionset Co-Authored-By: Claude Fable 5 --- ANDROID_DESIGN_PARITY_PLAN.md | 53 ++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/ANDROID_DESIGN_PARITY_PLAN.md b/ANDROID_DESIGN_PARITY_PLAN.md index 43379bd..88821ab 100644 --- a/ANDROID_DESIGN_PARITY_PLAN.md +++ b/ANDROID_DESIGN_PARITY_PLAN.md @@ -14,10 +14,10 @@ Score erscheinen nur nach gelöstem Puzzle und wurden über den Quellcode abgegl |---|---|---|---| | Hauptmenü | `StartMenuScene.swift` | 🟢 fast fertig | Menüpunkt-Label + Social-Icons; kein Settings-Screen | | Level-Auswahl | `LevelChoiceScene` + `LevelButtonArea` + `LevelSelectButton` | 🟢 (live bestätigt) | fehlender Tutorial-Einstieg | -| Level-Mode Spiel | `LevelModeGameScene.swift` | 🟢 (live bestätigt) | Back-Button (Android hat keinen); Spielfeld sitzt zu weit oben | -| Level Complete | `LevelModeScoreScene.swift` | 🔴 altes Design | brauner Hintergrund, Wording, Button-Icon | -| Just-Play Spiel | `JustPlayGameScene.swift` (+ Basis `GameScene`) | 🔴 altes Design | brauner Hintergrund, kaputtes HUD, Notch-Kollision | -| Just-Play Highscore | `JustPlayLostScene` (in `JustPlayGameScene.swift`) | 🔴 altes Design | brauner Hintergrund, keine Farbbalken, kein „Share Score" | +| Level-Mode Spiel | `LevelModeGameScene.swift` | 🟢 (live bestätigt) | Back-Button (Android hat keinen) | +| Level Complete | `LevelModeScoreScene.swift` | 🟡 BG schwarz (P1) | Wording + Button-Icon offen | +| Just-Play Spiel | `JustPlayGameScene.swift` (+ Basis `GameScene`) | 🟢 (P1 erledigt) | – (schwarz + Android-HUD) | +| Just-Play Highscore | `JustPlayLostScene` (in `JustPlayGameScene.swift`) | 🟡 BG schwarz (P1) | keine Farbbalken, kein „Share Score" | | Tutorial | `TutorialScene.swift` / `TutorialGameScene.swift` | 🔴 anderes Konzept | Text-Seiten statt visuellem Grid; brauner BG; Einstiegspunkt | | Credits | `CreditsScene.swift` | 🟢 (kein Referenz-Screenshot) | – | @@ -34,11 +34,11 @@ Android nutzt durchgängig **Schwarz** als Hintergrund. Auf iOS sind noch braun: `LevelModeScoreScene`, `JustPlayScoreScene`, `JustPlayLostScene`, `TutorialScene` sowie die Basis `GameScene` (→ trifft `JustPlayGameScene` und `TutorialGameScene`). -- [ ] `GameScene` Default-Hintergrund auf `SopaTheme.blackBackground` umstellen (`GameScene.swift:33`) -- [ ] `LevelModeScoreScene` Hintergrund auf schwarz (`LevelModeScoreScene.swift:14/21`) -- [ ] `JustPlayScoreScene` + `JustPlayLostScene` Hintergrund auf schwarz (`JustPlayGameScene.swift:364/498`) -- [ ] `TutorialScene` Hintergrund auf schwarz (`TutorialScene.swift:16`) -- [ ] Toten braunen `warmBackground`-Pfad nach der Umstellung entfernen bzw. dokumentieren +- [x] `GameScene` Default-Hintergrund auf schwarz umgestellt (`GameScene.swift`) +- [x] `LevelModeScoreScene` Hintergrund schwarz +- [x] `JustPlayScoreScene` + `JustPlayLostScene` Hintergrund schwarz +- [x] `TutorialScene` Hintergrund schwarz +- [ ] Toten braunen `warmBackground`-Pfad in `SopaTheme` später entfernen ## P1 – Just-Play Spiel-HUD an Android angleichen @@ -46,24 +46,33 @@ Android zeigt oben „Min. Moves"/„Current Moves" (Label + große Zahl darunte „Left Time" (große Zahl). iOS `JustPlayGameScene` erbt aktuell das alte Basis-HUD und addiert nur „Left Time" → doppelte/inkonsistente Beschriftung. -- [ ] In `JustPlayGameScene` `addStaticLabels()` überschreiben, analog zu - `LevelModeGameScene.addStaticLabels()` (Impact-Font, Label + große Zahl) -- [ ] „Left Time" ins gleiche Layout bringen (große Zahl unter Label) +- [x] In `JustPlayGameScene` `addStaticLabels()`/`addDynamicLabels()` überschrieben, analog + zu `LevelModeGameScene` (Impact-Font, Label + große Zahl) +- [x] „Left Time" ins gleiche Layout gebracht (Label oben, große Zahl darunter, unten links) - [ ] Prüfen, ob das rote Warn-Overlay bei ≤5 s dem Android-Verhalten entspricht -Live bestätigt: Aktuell zeigt der JustPlay-Screen oben „1. Level" (kollidiert mit der -Dynamic Island) und unten gestapelt „Left Time / Moves: / Optimum:" – also das alte -Basis-HUD plus Timer, nicht Androids Layout. +Live bestätigt (idb): JustPlay zeigt jetzt schwarz „Min. Moves / Current Moves" oben und +„Left Time" unten links, Restart unten rechts – wie Android. -## P1 – Safe-Area & Spielfeld-Positionierung (Layout) +## P1 – Safe-Area / Notch (weitgehend erledigt) -Live-Befund: Titel/Back-Button ragen im JustPlay/Tutorial in die **Dynamic Island**; das -Level-Mode-Spielfeld sitzt zu weit oben, unten bleibt großer Leerraum. Ursache ist v. a. das -hart verdrahtete `IPadProportionSet` (`StoryServiceImpl.swift:115`) auf iPhone-Geräten. +Live-Befund war: im JustPlay ragte der „1. Level"-Titel (altes Basis-HUD) in die +**Dynamic Island**, und die Spiel-Buttons überlappten die Labels. -- [ ] Top-Elemente an den Safe-Area-Insets ausrichten (nicht an `size.height`) -- [ ] Spielfeld vertikal zentrieren / iPhone-taugliches `ProportionSet` wählen -- [ ] Auf mehreren iPhone-Größen gegenprüfen +- [x] Ursache behoben durch den JustPlay-HUD-Umbau (kein Level-Titel oben mehr) und die + manuelle Button-Positionierung (Restart unten rechts, minimaler Back oben links) +- [ ] Optional: Top-Labels zusätzlich an Safe-Area-Insets ausrichten (statt `size.height`), + auf mehreren iPhone-Größen gegenprüfen + +Hinweis: Der große Leerraum **unter** dem Spielfeld ist **kein** Parität-Fehler – +Android platziert das Feld ebenfalls im oberen Bereich (`FIELD_SART_FROM_TOP = 0.2`, +`GameFieldNode.swift:18`), der untere Bereich trägt das HUD. `GameFieldNode` bleibt +daher unverändert; eine Zentrierung würde von Android *wegführen*. + +Zusatzbefund: `IPadProportionSet` ist nur eine leere Unterklasse von `IPhone6Proportionset` +(`IPadProportionSet.swift`), also faktisch identisch – die frühere „iPad-hardcoded"-Sorge +ist gegenstandslos. Positionswerte für das Spiel-HUD kommen aus `ProportionSet`, werden aber +in Level-Mode/JustPlay inzwischen durch absolute Layouts überschrieben. ## P2 – Level Complete an Android angleichen From bb772eb4b4ad0964205bfa3ab997fb6c87471547 Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 21:30:22 +0200 Subject: [PATCH 08/13] P2: align Level Complete + Just Play Game Over to Android Level Complete (LevelModeScoreScene): - Title "N. Level Complete" (was "Level N Complete") - Subtitle "Moves for 3 Stars" (was "3-star target") - Next button uses a play triangle (was chevron) Just Play Game Over (JustPlayLostScene): - Score/Level shown as colored bars (blue Score, yellow Level) matching Android, replacing the plain Score/Reached Level/Highscore text - Added a "SHARE SCORE" button; buttons now back / restart / share - New ButtonTextureFactory.makeCircleTextButtonTexture for the text circle Verified via idb: Just Play game-over matches Android (black, colored bars, three buttons); 19 tests pass. Co-Authored-By: Claude Fable 5 --- SOPA/JustPlay/JustPlayGameScene.swift | 105 ++++++++++++------ .../view/LevelMode/ButtonTextureFactory.swift | 33 ++++++ SOPA/view/LevelMode/LevelModeScoreScene.swift | 6 +- 3 files changed, 108 insertions(+), 36 deletions(-) diff --git a/SOPA/JustPlay/JustPlayGameScene.swift b/SOPA/JustPlay/JustPlayGameScene.swift index dba0b92..dc7aefd 100644 --- a/SOPA/JustPlay/JustPlayGameScene.swift +++ b/SOPA/JustPlay/JustPlayGameScene.swift @@ -588,31 +588,40 @@ class JustPlayLostScene: SKScene { addChild(title) } - let score = SKLabelNode(fontNamed: "Optima-Bold") - score.text = "Score: \(justPlayResult.score)" - score.fontSize = size.height * 0.05 - score.fontColor = textColor - score.position = CGPoint(x: size.width / 2.0, y: size.height * 0.62) - score.zPosition = 2 - addChild(score) - - let level = SKLabelNode(fontNamed: "Optima-Bold") - level.text = "Reached Level: \(justPlayResult.levelCount)" - level.fontSize = size.height * 0.04 - level.fontColor = textColor - level.position = CGPoint(x: size.width / 2.0, y: size.height * 0.54) - level.zPosition = 2 - addChild(level) - - if let highscore = ResourcesManager.getInstance().levelService?.getBestJustPlayScore() { - let highscoreLabel = SKLabelNode(fontNamed: "Optima-Bold") - highscoreLabel.text = "Highscore: \(max(highscore.points, justPlayResult.score))" - highscoreLabel.fontSize = size.height * 0.04 - highscoreLabel.fontColor = textColor - highscoreLabel.position = CGPoint(x: size.width / 2.0, y: size.height * 0.46) - highscoreLabel.zPosition = 2 - addChild(highscoreLabel) - } + addStatBar(color: UIColor(red: 0.13, green: 0.35, blue: 1.0, alpha: 1.0), + label: "Score:", value: "\(justPlayResult.score)", + centerY: size.height * 0.60) + addStatBar(color: UIColor(red: 1.0, green: 0.93, blue: 0.0, alpha: 1.0), + label: "Level:", value: "\(justPlayResult.levelCount)", + centerY: size.height * 0.525) + } + + private func addStatBar(color: UIColor, label: String, value: String, centerY: CGFloat) { + let barHeight = size.height * 0.075 + let bar = SKSpriteNode(color: color, size: CGSize(width: size.width, height: barHeight)) + bar.position = CGPoint(x: size.width / 2.0, y: centerY) + bar.zPosition = 1 + addChild(bar) + + let labelNode = SKLabelNode(fontNamed: "Impact") + labelNode.text = label + labelNode.horizontalAlignmentMode = .left + labelNode.verticalAlignmentMode = .center + labelNode.fontSize = barHeight * 0.55 + labelNode.fontColor = .black + labelNode.position = CGPoint(x: size.width * 0.06, y: centerY) + labelNode.zPosition = 2 + addChild(labelNode) + + let valueNode = SKLabelNode(fontNamed: "Impact") + valueNode.text = value + valueNode.horizontalAlignmentMode = .right + valueNode.verticalAlignmentMode = .center + valueNode.fontSize = barHeight * 0.55 + valueNode.fontColor = .black + valueNode.position = CGPoint(x: size.width * 0.94, y: centerY) + valueNode.zPosition = 2 + addChild(valueNode) } private func addConfetti() { @@ -661,20 +670,50 @@ class JustPlayLostScene: SKScene { } private func addButtons() { - let side = proportionSet.buttonSize() + let side = min(size.width, size.height) * 0.20 + let buttonSize = CGSize(width: side, height: side) + let buttonY = size.height * 0.17 + + let back = SpriteButton(texture: makeCircleButtonTexture(symbolName: "arrow.left", side: side)) { + ResourcesManager.getInstance().storyService?.loadStartMenuScene() + } + back.size = buttonSize + back.position = CGPoint(x: size.width * 0.20, y: buttonY) + addChild(back) let restart = SpriteButton(texture: makeCircleButtonTexture(symbolName: "arrow.counterclockwise", side: side)) { ResourcesManager.getInstance().storyService?.loadJustPlaySceneFromMenuScene() } - restart.size = CGSize(width: side, height: side) - restart.position = CGPoint(x: size.width * 0.72, y: size.height * 0.18) + restart.size = buttonSize + restart.position = CGPoint(x: size.width * 0.50, y: buttonY) addChild(restart) - let levelChoice = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: proportionSet.buttonSize())) { - ResourcesManager.getInstance().storyService?.loadStartMenuScene() + let share = SpriteButton(texture: ButtonTextureFactory.makeCircleTextButtonTexture(title: "SHARE\nSCORE", side: side)) { [weak self] in + self?.shareScore() } - levelChoice.size = CGSize(width: proportionSet.buttonSize(), height: proportionSet.buttonSize()) - levelChoice.position = CGPoint(x: size.width * 0.28, y: size.height * 0.18) - addChild(levelChoice) + share.size = buttonSize + share.position = CGPoint(x: size.width * 0.80, y: buttonY) + addChild(share) + } + + private func shareScore() { + guard let controller = topPresentedViewController() else { + return + } + let text = "I reached level \(justPlayResult.levelCount) with \(justPlayResult.score) points in SOPA!" + let shareController = UIActivityViewController(activityItems: [text], applicationActivities: nil) + shareController.popoverPresentationController?.sourceView = controller.view + controller.present(shareController, animated: true) + } + + private func topPresentedViewController() -> UIViewController? { + var controller = UIApplication.shared.connectedScenes + .compactMap { $0 as? UIWindowScene } + .flatMap { $0.windows } + .first { $0.isKeyWindow }?.rootViewController + while let presented = controller?.presentedViewController { + controller = presented + } + return controller } } diff --git a/SOPA/view/LevelMode/ButtonTextureFactory.swift b/SOPA/view/LevelMode/ButtonTextureFactory.swift index 6f96a9d..1306d9e 100644 --- a/SOPA/view/LevelMode/ButtonTextureFactory.swift +++ b/SOPA/view/LevelMode/ButtonTextureFactory.swift @@ -126,6 +126,39 @@ enum ButtonTextureFactory { return SKTexture(image: image) } + static func makeCircleTextButtonTexture( + title: String, + side: CGFloat, + circleColor: UIColor = SopaTheme.circleButtonFill, + textColor: UIColor = SopaTheme.circleButtonIcon + ) -> SKTexture { + let textureSize = CGSize(width: side, height: side) + let renderer = UIGraphicsImageRenderer(size: textureSize) + let image = renderer.image { _ in + circleColor.setFill() + UIBezierPath(ovalIn: CGRect(origin: .zero, size: textureSize)).fill() + + let lines = title.split(separator: "\n").map(String.init) + let paragraphStyle = NSMutableParagraphStyle() + paragraphStyle.alignment = .center + let fontSize = side * 0.20 + let font = UIFont(name: "Impact", size: fontSize) ?? UIFont.systemFont(ofSize: fontSize, weight: .bold) + let attributes: [NSAttributedString.Key: Any] = [ + .font: font, + .foregroundColor: textColor, + .paragraphStyle: paragraphStyle + ] + let lineHeight = fontSize * 1.05 + let totalHeight = lineHeight * CGFloat(lines.count) + var y = (side - totalHeight) / 2.0 + for line in lines { + line.draw(in: CGRect(x: 0, y: y, width: side, height: lineHeight), withAttributes: attributes) + y += lineHeight + } + } + return SKTexture(image: image) + } + static func makeTextButtonTexture( title: String, size: CGSize, diff --git a/SOPA/view/LevelMode/LevelModeScoreScene.swift b/SOPA/view/LevelMode/LevelModeScoreScene.swift index 0709aaf..c55495e 100644 --- a/SOPA/view/LevelMode/LevelModeScoreScene.swift +++ b/SOPA/view/LevelMode/LevelModeScoreScene.swift @@ -27,7 +27,7 @@ class LevelModeScoreScene: SKScene { let side = min(size.width, size.height) * 0.20 let restartButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "arrow.counterclockwise", side: side), onClick: restartLevel) let levelChoiceButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "square.grid.2x2", side: side), onClick: levelChoiceMenu) - let nextLevelButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.right", side: side), onClick: startNextLevel) + let nextLevelButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "play.fill", side: side), onClick: startNextLevel) let buttonSize = CGSize(width: side, height: side) restartButton.size = buttonSize @@ -46,7 +46,7 @@ class LevelModeScoreScene: SKScene { private func addStaticObjects() { let title = SKLabelNode(fontNamed: "Optima-Bold") - title.text = "Level \(levelResult.levelId) Complete" + title.text = "\(levelResult.levelId). Level Complete" title.horizontalAlignmentMode = .center title.verticalAlignmentMode = .center title.position = CGPoint(x: size.width * 0.5, y: size.height * 0.86) @@ -65,7 +65,7 @@ class LevelModeScoreScene: SKScene { let level = ResourcesManager.getInstance().levelService!.getLevelById(id: levelResult.levelId)! let optimumLabel = SKLabelNode(fontNamed: "Optima-Bold") - optimumLabel.text = "3-star target: \(level.minimumMovesToSolve!)" + optimumLabel.text = "Moves for 3 Stars: \(level.minimumMovesToSolve!)" optimumLabel.horizontalAlignmentMode = .center optimumLabel.verticalAlignmentMode = .center optimumLabel.position = CGPoint(x: size.width * 0.5, y: size.height * 0.46) From f0c1d6867c9b92270e5c986ed0b13a85b03d3fd5 Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 21:35:49 +0200 Subject: [PATCH 09/13] P2: rebuild Tutorial as Android-style visual screens - Import Android tutorial artwork (first/second screen A+B halves and Let's Go) into Assets.xcassets/tutorial - Rewrite TutorialScene to show the two visual screens (grid + colored GREEN/RED/BLUE instructions), tap to advance, then Let's Go -> the interactive tutorial level, matching the Android flow - Replaces the old text-only pages; runs on black Verified via idb: both tutorial screens, Let's Go, and the transition into the interactive level render correctly; 19 tests pass. Co-Authored-By: Claude Fable 5 --- SOPA/Assets.xcassets/tutorial/Contents.json | 6 + .../Contents.json | 8 + .../firstTutorialScreenA.png | Bin 0 -> 106777 bytes .../Contents.json | 8 + .../firstTutorialScreenB.png | Bin 0 -> 84396 bytes .../Contents.json | 8 + .../secondTutorialScreenA.png | Bin 0 -> 116420 bytes .../Contents.json | 8 + .../secondTutorialScreenB.png | Bin 0 -> 107288 bytes .../tutorialLetsGo.imageset/Contents.json | 8 + .../tutorialLetsGo.imageset/letsGo.png | Bin 0 -> 16174 bytes SOPA/view/LevelMode/TutorialScene.swift | 176 +++++++----------- 12 files changed, 112 insertions(+), 110 deletions(-) create mode 100644 SOPA/Assets.xcassets/tutorial/Contents.json create mode 100644 SOPA/Assets.xcassets/tutorial/firstTutorialScreenA.imageset/Contents.json create mode 100644 SOPA/Assets.xcassets/tutorial/firstTutorialScreenA.imageset/firstTutorialScreenA.png create mode 100644 SOPA/Assets.xcassets/tutorial/firstTutorialScreenB.imageset/Contents.json create mode 100644 SOPA/Assets.xcassets/tutorial/firstTutorialScreenB.imageset/firstTutorialScreenB.png create mode 100644 SOPA/Assets.xcassets/tutorial/secondTutorialScreenA.imageset/Contents.json create mode 100644 SOPA/Assets.xcassets/tutorial/secondTutorialScreenA.imageset/secondTutorialScreenA.png create mode 100644 SOPA/Assets.xcassets/tutorial/secondTutorialScreenB.imageset/Contents.json create mode 100644 SOPA/Assets.xcassets/tutorial/secondTutorialScreenB.imageset/secondTutorialScreenB.png create mode 100644 SOPA/Assets.xcassets/tutorial/tutorialLetsGo.imageset/Contents.json create mode 100644 SOPA/Assets.xcassets/tutorial/tutorialLetsGo.imageset/letsGo.png diff --git a/SOPA/Assets.xcassets/tutorial/Contents.json b/SOPA/Assets.xcassets/tutorial/Contents.json new file mode 100644 index 0000000..2d92bd5 --- /dev/null +++ b/SOPA/Assets.xcassets/tutorial/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/SOPA/Assets.xcassets/tutorial/firstTutorialScreenA.imageset/Contents.json b/SOPA/Assets.xcassets/tutorial/firstTutorialScreenA.imageset/Contents.json new file mode 100644 index 0000000..b82038b --- /dev/null +++ b/SOPA/Assets.xcassets/tutorial/firstTutorialScreenA.imageset/Contents.json @@ -0,0 +1,8 @@ +{ + "images" : [ + { "idiom" : "universal", "filename" : "firstTutorialScreenA.png", "scale" : "1x" }, + { "idiom" : "universal", "scale" : "2x" }, + { "idiom" : "universal", "scale" : "3x" } + ], + "info" : { "version" : 1, "author" : "xcode" } +} diff --git a/SOPA/Assets.xcassets/tutorial/firstTutorialScreenA.imageset/firstTutorialScreenA.png b/SOPA/Assets.xcassets/tutorial/firstTutorialScreenA.imageset/firstTutorialScreenA.png new file mode 100644 index 0000000000000000000000000000000000000000..03a76043161330e65125e7b99760ad3c69e040d5 GIT binary patch literal 106777 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ʽ*}I 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 MFuPc;=N$8Y02xEGkpKVy literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tutorial/firstTutorialScreenB.imageset/Contents.json b/SOPA/Assets.xcassets/tutorial/firstTutorialScreenB.imageset/Contents.json new file mode 100644 index 0000000..a3a5ffd --- /dev/null +++ b/SOPA/Assets.xcassets/tutorial/firstTutorialScreenB.imageset/Contents.json @@ -0,0 +1,8 @@ +{ + "images" : [ + { "idiom" : "universal", "filename" : "firstTutorialScreenB.png", "scale" : "1x" }, + { "idiom" : "universal", "scale" : "2x" }, + { "idiom" : "universal", "scale" : "3x" } + ], + "info" : { "version" : 1, "author" : "xcode" } +} diff --git a/SOPA/Assets.xcassets/tutorial/firstTutorialScreenB.imageset/firstTutorialScreenB.png b/SOPA/Assets.xcassets/tutorial/firstTutorialScreenB.imageset/firstTutorialScreenB.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e883257881a06adcac24f91170f1859d80f526 GIT binary patch literal 84396 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 z

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 YLPgu$HW*!vwF8jP`m7zLob1c|A497WhyVZp literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tutorial/secondTutorialScreenB.imageset/Contents.json b/SOPA/Assets.xcassets/tutorial/secondTutorialScreenB.imageset/Contents.json new file mode 100644 index 0000000..cb72b8e --- /dev/null +++ b/SOPA/Assets.xcassets/tutorial/secondTutorialScreenB.imageset/Contents.json @@ -0,0 +1,8 @@ +{ + "images" : [ + { "idiom" : "universal", "filename" : "secondTutorialScreenB.png", "scale" : "1x" }, + { "idiom" : "universal", "scale" : "2x" }, + { "idiom" : "universal", "scale" : "3x" } + ], + "info" : { "version" : 1, "author" : "xcode" } +} diff --git a/SOPA/Assets.xcassets/tutorial/secondTutorialScreenB.imageset/secondTutorialScreenB.png b/SOPA/Assets.xcassets/tutorial/secondTutorialScreenB.imageset/secondTutorialScreenB.png new file mode 100644 index 0000000000000000000000000000000000000000..d80857f80d4b29dbda97de817d0f2a2af73dbf6a GIT binary patch literal 107288 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 z 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 literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/tutorial/tutorialLetsGo.imageset/Contents.json b/SOPA/Assets.xcassets/tutorial/tutorialLetsGo.imageset/Contents.json new file mode 100644 index 0000000..9b6acb5 --- /dev/null +++ b/SOPA/Assets.xcassets/tutorial/tutorialLetsGo.imageset/Contents.json @@ -0,0 +1,8 @@ +{ + "images" : [ + { "idiom" : "universal", "filename" : "letsGo.png", "scale" : "1x" }, + { "idiom" : "universal", "scale" : "2x" }, + { "idiom" : "universal", "scale" : "3x" } + ], + "info" : { "version" : 1, "author" : "xcode" } +} diff --git a/SOPA/Assets.xcassets/tutorial/tutorialLetsGo.imageset/letsGo.png b/SOPA/Assets.xcassets/tutorial/tutorialLetsGo.imageset/letsGo.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd0c9abb7763835da766a5ba9f8f4a8a4c580ea GIT binary patch literal 16174 zcma)jbzD{3w=V_;At2o)B@F^fN~e@cDjm`wAR(b3NFxH$AT0vIRyw6Y2|>E0yF1@l z-gE9B@AK|`KaZ!}?7i1obIdWmH3LhUAqGR6xzOI z3jexdq$n$ec8>h@u{t{v{^Yv7oVFtx8YVvS_XV{0L=yPJt4{I{q_0j~Bq78kd_?H9 ziH1glCNCxa$aQ#i%uVa@?6BAdXM>rH3@HKbqx*P`6wDXIAE`?|;Ku&R!%DugV_9Gt znUuPf*j{uu+nUGxr(1vGRSMN#6lxS`7u2rc#R;rncddteZT_&h>Dh0FGtuQdHn3Q= zzG#?#Ts|<|RXs3l6?Xxbh7S2vadl4V0v_@UmHJ~2|#`gs^b19FOy^Z z{W!Y+;obk)%SMvo|IhFK=iUF|%ht?)FZ{o+{Qr9QfA}&s`rq4DQ`F)?hl}bZqoAbh zE_XD)eEIVCk&#LkVPWCPnVHK>OiV=25bEH3toj(+^m#-do~*`4^TqYBSs{vSVn*dOoN5D*j7i;2~;a6GMelbA?xjaEr? zzzi)G9aca+Bs3Je!eu>-O2mEg^;N3-T3RF*FJ1cc=TGXk4GSAvu$eody`KLGM z;irNEb4iB+6PIUZW@f?)@T9RqzJ230GB(Deqzv^sJxVq2N`^<_UfnS?G<4T>gGOCl z-F{R9DYuVgoFexHFfyGfoo%9<3fg8nXY9q*;^dy=C!d(l+^%7;#~(HZ1lfN zcEmeY;oMMY*s#$`A5O!=bMwOoe@{(kLqpmdRKfwL$NR>=vmTVaSS4dBkCv8_GT2$@ zCJ}MJBj~(j!Zq?#RrQtga=+o~aIu`cJogXXjK784EpiOGE! zPu*P}Fg`unEpy$ZW73x$F1C7m9iP!)sxj~y7S^4E)3&azmNe<$Li;}wGcz-VsRl@y znz-lX<#Cy{lT_{WC8~gjj+jAZGe0+Q> zG-vl698j?$FH7JaOvXkf8=IN}>1D%Wov@RH-PCX0x`o_Foxy_shN}q|$^Ol?wKckX z_q3sIUtqFVS)$x`E%B(RIt43&7Y0%3gH>+4nDaMY?ynKj($ZQpm%TFN`uoKVSkVd$ z<6g%$YI=H|(PN&&We({JW0eBSO9J)7!#W-tbyw3$NTMc|s zYEEhG>}+lf#E*FYK5bycqB93dp2sFEEKIA=;KJV8*iSQw3zBbdG)2(M7Mir(baiu! zv!;R)hpV8TY>l9|W?WNm38O^WO^CK9327GS-)Lhckdg`0WDZye-&r2OQT)L6y0%s< zGWAk)bo9YS1J34Rc8WxLcWk@Y%a<>Wn}P@f0s{^4M$?Om?u3x?UU74Cb1${2l0XW= zr@g&>W54#C@_296m^W1tE-RMLil{S5=xwUx+xSM&mgeTEnYKu{h=)>Am%WY_nXssY zwaz=4CJ8a<(wpH*b|#)Yc~aN?CC~{8k;7B`l$R&<_%Y$<&!1JFKE);{C%-EwSYKCn0a~WLlhYgMe?Gpx33Oas zxO;nh?kGE0f;w2@?!m!Ue;-T|WTIr`b*IZ34}CQ)M4>EpZ7iNWyKiR3*wfSVE;%_2 zRszaOW|NvlNKi0Mx6~G%%6)jgR301RPHUra*nUz(L_}H@PAtu#p%?t3eNNKa~Mq37ZG`Zzqd*lNINw9Fy@jNZFuFsyDec-2*yheU=# zUS1x`p=c?%!gjohg@{v+O(u*YN0W2ea-yc%^=L7>X{sq$8n#~Nwvm!E^hidHJgsg^ zz7Ox;(=~@vb0#JwIaf^Z^Ya@G78)8g_+#h4NX*wQRo2qd+ITSZ^iq#r3O_`C-p0`Jq@PoF;h(hkc~PWpkY`W0Vnbl7vP>=ga-&bs<(cyre$TxY$iT_^eA9*(tw}f-}RCCSzli-0ac{S)Y16)aqgSS z%F4ERkB!MX7#jGDF1E$c=(ClR)T=t5J330kcc}F#$;k!W^*kz4{z9>|A;5?%Ge3ba z6)Bc+fc7^tmKwR7++6&JSxSaA=d6rMu{2-wYi)Vv``2rZl{a-1Ra69GClreASlie% zmDr3Bbp3%k8&ci4+++ZaoQuST*!K$dO>AuJAP(iNt*u5$9FazkbLG2t?*@d6ooV$B z43O`Z@1k0$9(vGL!JPdA_tU#;WMRSbfn7Jtl_T=~`@jAC@52gj7#llHuA#IGgl4)) zlwBDDaAI`VM%BN>E;%_lEh9s!TSvG2c_s{c#)q73ZEZnw--?PJxxRe)4Y?TP-kR52 zmilrDpT5h;$XMtb$;Y1EXS1t0%u>zmlX12kE3$}8D=vXfX9#=b`7Y1PJ!|Rh3g=}F zGI zUaV;S_j{jFLGz^(6Vpebw?f_cB_&Zhvi}K`)A!i)6Hn1yU0o&2FLs>oybcu_`32v~ z%E|#CO4DUx-%nPJGv%FbyUg^&vZ$T}_eKS0Gy^!4=xzIuhWIAVPR8E$u}y-&FF^79EvkB7`t znqaTTnV=_%c~jwt9?-m49X90}Ir;OJ`nHA@wdW4r4NAer`Z7rwnJdUhmToTj`nA42 zj+c-$K@*llFLiRW)qq5GXKhRurAsGzc3?cGC9CrK2zDd(l0 zm|m=n=E#kclaWb?RhL$-b{sI(9Ujx0Ga_bBN-bTc1uf37#Cv%=;-J$^KFCj^4Ltw%@qq|B^g+8gsEl=i;ARR zgW*z8guqur;WacgT%w|)+Su8719%jkn4yggHY+QumacBY=qLqQXqNUPP0jSGsw!;) zBBH6I-Q_Ze=_|0w!m6r-XXfX(wYYdhUhcv6Wg;LI;^!w~VPR3?xqt@42>|m2Oiav0 zW0eGcY^WO3_vel9b0~wli;L6H%8{Yd+TI@ZO$Lx*1wdh61Wrp!)84*~0q?bUa8R4E zgGors$47V-hpG|K05Z5>_#zF!`3GE{p`l?wNQl&2SQ?cyIVfUg++ z{J?$y8;}QrW7>h!GSA}@tup)6g^|*N zwlk`Ft%aXev2k&MZ{A!+xow*@QRRQSldr+5oOqYktRtQwEiLU0O!Y2vcM{kZ5p>&P z0GsAwy4lRyV^arz-i*^fJsj%=0C$jX?e8V6s`@Tg%)91OZZ2=Ebnkfe%ck$IFAb>{ zrk2f@64ag@Ez_~G{#eB>GwMDp|w4UmAwjs$_sE@zneK-x^hNYD3` zFE~0z#KdH`mS<`f=(TT(NCA<0qmdgeN_}{E2qQcZ8$EqD9bPlqUFr)WsQ5x5;{FK0 z2Xs$K2hCLVoW}E$uJeGYDWk~N?ND-oMj#AyK zqHYD<&%kS)zCT|#yR{07oIeElg8Hs573;ymx=%#PKVvwFVRu+F!(_L`q81%xE|A-( z$~#9v$6egkR#T$|kQb{j^Gyr7I^BFYt)xF!?LHniH+N9`&mYmOL#kX()Bq}t0FI}9 z{``ZPSSd3zbE%9M5M&sKWl0z=vKPC1B__EcEe)t>T0EdkZFym_4P?%gXujZUk>(UErbG9e_dflM|`Or*4Z)Zn%3 zWnMI<67?VfXs^U^`Z@JoK2$P*Qp4vAS|}sGqL!+0i<#C4Yi2oZgm{$NQl1@ldEeeD zQSu}rAb11YYHa_tjK9U!OdGtI)U6jv-!Qqf6cigvvN(MPltPJv&)CW;SlsuDJhcl@ zT$qSTg_p@fuK>k~7G3)&?z^`9gMb|4ND{iKw7Yu+-9#9vx@7T-RUP5um2Yg<@VDA| zyC#D9$PTJFAn!o5Ry1KHm0pAMS{xB^) z-C<`z?ef*D2_78n9UYsir4w6J?)VY#Kwvie2hvn)&$N{QJc#=6fv3E;{a31FX1Lq- z+ymgDZ`-1oVW<1~`ML9*TQe^RGy$Dyq4t(a;J1kl5sD9j+4L=k>$$kNI8sDAc5edL z`d}YrhL^*DX8ho!ZnZoB{af-;2nM7J4>_g>K6BT3i2&$P7_=o|I<%aeI89AW092(PJixZJvNAL^MF(Ox zI5LtB4|`#>oEPMSH_0L|VJMS*`SL~3;x-Y-lK`0Pi6SpQNE=I?ZH9Y)bXgx4JWVLI z9jh;QoPP&$3V?DLA?Y7KqM4eSGPANuN=u{PA;SjBo7!gygJ_HZ#)Q4Iv)|jdSA|7H z{wywD2Q~%kK+nv4jZ)BQ((XRilUlFSjBq!=%D_8(p`@p#rZU2{A3pSj9?MmZ0mPpR zpm~P(AvrOzi;Bt&$YBp8BqdQ$7fF2hE#cHHSq~DB&YdXgNv4y(r*ckNtb<*w6WY_G z4)^{Cn*D=wF1m=hz7iS zhs#fTCBtr_rl)1J)>{l;Q81?%c7}L*H{8iH;BS_ex2LA3GY9IbMWl5AifDNda1i z{ul%!6+=<+r^c8H!a3Y`o*|_j1QVzKb+W9PS=Nrb$H`_(oNjXg!oYj1R_(lx$sKbI z+GDvTj}nvaI!x)6zQy*-c?(?)p#y1{>#Ukz0yd{xFryVRw@;VHDofLj_xpA2P^nxS z3;p>Ca1-zJ$N_Lq!FIz<5_Ikv@x;Nz#OF2dtXk$IaP91UdRIt@RXqj(b313c_Tca^ zMyL#Zb^p=+de_Nq5@@YG^LaHjdV_<5fZ&USK>^7gG^zyjRJAv3mER+G;-VCPM?NY# zT7IGhIw&GO@)KO4Krrl1MQd9d9!OTapM;U;KDFH?Mhr7pm~&ZtXMIB7{izqLpVbcvmN1ef}Thw>SAc6P=J*d^~cEH5u3LIxHokJNhd zt@kl8Z$Euv&eQ%TvsC8b;NW_8IIsQa3NzFwD4{*gBT#`Uk#Q^C{c{^2 zGF;F%p=WPyhRYPT{%mbEFp_5~Zk~HA!11K)qrmQW-DD*${~MIIJ!>#9Fr>7!V(VtU zL*HO~TJgy8#<=JH)A2161BcTiXA3ct0{9hv{bQ#regJ4g0wdo4KuBT`_uA z(7@XBZy*f1XP!e$ETuNpV027my1cx+$J>Jv2AF+$VPPRINO95eSK)G@CT>FSivExS zPdag)*uOV>jd}CH2uKZrcmSXfxW#LMCKaboDFxC1!9C5Q9YevY*|y6Ml7&gVyu5mv zb3cCucH%>~zsZuHntB0tsUS2l zp7*J<#k8r3iNR8Dj!a}q?b&WY+4I?;C{(iNo;Fe9g@xXn$S4Oy$YYGm*xK2N5;ap( z!$X=KAAdnbW+Q5>r@}zeP(sgrk)f=jLV?^4K!J?2*cYAr=F0UNR?|EH1s1`N)x+|p z#RGqKG)hwuyEV>5>nsnNNs8B6fuz>ctW#o53eY8lLl(w+JxCK7Ax*giM_uFNdOz+$ zsT=VGVxyz_wXCd}Tgza$r2<1yZ~mN{+mK*aV^LJ@etx>28M57ouTr?Nlj!T~8|47x zDpu*e!raJ6d26~D-F7E>zs|DiRM5MG1aiO~d~upgpln(9ij@r)8u~_^Ztw5M>=Dqa z`@=wuag8I-W z5%?a3x`IR1ezDj1tJkGl+iez7`&))y0>EHODTo*t|i{$SIP2>Tcxwf{p zdh+P+T5oS4HmGa6j~+jcj&gu;irjQyjPdgb*^1A9S4gTx_vqJ6egc`!=H@E^0%Lgk zp&}7b9NCr>5)(Z%GD1&B=i~P&+obxQ>&hUCOJII6YDO*Rku~$$d))d@5(7~OJ;5Eh zwk#3rACi3!u0NZB?=b)*YMKZ31I)Wvr8TdUO<9&{;f?Q?*rY_F6B1ZWDWJ>VVqoA- zy%h=rXNUVRpBvR568Z1lJP#M%3MfLoSQ#`_F9+#I*4TL3GyHeDEDljx^83S=AHC1E zQ-Vf=m9jttZhc3N(I0QSiGj{yyYMSjy}8@6c<`HfxcuywswxV27S_xmgD}W4L;F%C zuYx{|3yO;p+u|%;K}}6^AVYsVo;uwGNTh)2%z-2PEoxNH@86*4+djW1>@d~n8IE`J zW?Jj@gf)E~o%r5O0Na0|<354Y1W1WH+|gxA;(2^fL=WjEV5yN$0xsP<;un)z=Cs)3 z8Ey!q7!)U>4655~Y*9QdF79jP^9WX{N$}aRjc6g}x@pyM7kP;NVE)iEZnu1AQc1qk zMlm-#D^HpYG8CJfNU>qVl|^GPe@N!LQd$824o>}SmQrBfGN~p_*0RduJ556t6qkyh z0G8(mP~}GdDbXUkiDdMg?EWuLb6d-7ZEX)g`m_I2j}F5%kh(Bq;q5(Qw+xkHkl!mZ zrD}#$-|hHI8l%`y~0dorgNQty&O8U-IqNfc`@E`&n4?v365+) z5*N(hhG9Jos0-1=5lay6n*c}bq_8MP^(L{~lNmKD{sIu&mGW*tIhVR4+eIDB$DU@M zS$~QCw-wphOu_2meFFo=K<@IlN-tfygs8Sq?UxYvSLwnD9s2d)pcV((kgDA5+FEDh zdu7Ye6t@a!_i0l>{eSpq8fnh=b%0{2rva2 z_6c5L%^yOH1{BnF)ydY+gSiAdETfl{6cqnho@n>M4c=Ry2nVm?aS4qr>FOgv_f>_PU-Qd72BnD`Qq0Me;r2d)?^B~y?nV%(@)E=^R#l&GCfA!$RrC}RPqNz5fls7v0{0pbou3xX4INK9Q6mq$NY_pxk-=G`SUGI0i zckfEbYN(z_!o-|R0D=ngO;1E5;$Wjgd{#X2X)6X!Db@1ubP76LLKS>G8p2^Shd@r2f^ zjO|s*c=*9)j}~PtP<{7>EC^{s8dsz4W_2YAwfOsZ_4mA-2>3MHG8m)p6{wsfXxJEl zH(24E+g*hk{_z6?C`uzZq?60bKig~>_P0_y{e5;a`$2i^V4}FKl&PMok|OG^hU4)g zGNQt5n{jk>H1?WEeYP;E7_e5DTZTZJf)ZzRB>_T#{S^qc?BL_v4r3ptnR*KVgg0Qt z>^MA#I>{}?>f{qCD=V{mZ4o02%0P8N zR?3@AOpN-Qd6x{hcqgZ)o5NNGhOk?Jwet;ng1J#&<9W>Gw4kb77zXl*;!#3pM@I)9 zIr+~SbzYEJ_je>mD=nDi?kUU&(9=&R_rHS)7}bs*;_G_}ELxI%QWG6;Wi~-iN0u09 zc@u1IZmWJaxT4lcGAvzPT|h1V!M+;ypq4BeH#aqLqjp#=EG(> zOM&{E_xTyj;*5UyVPKj~Gq=Cj*IxwDxTmFhfRlSrl_Y0r$r7s4T_L@D5*U0eAaHQ- z&~b2ZK))i4WPDH$poh@y{1q0WMpe7>Q7h(4DvWwl-Mo3x#l?j&CVmL`><%}`K)(v~ z#TYd&Ad<9`QCQh(c^3JbpjilSBy3R@X1e|QuN5W^1^ z4esOw9G{*R>yZ+6M4*~cAfTkoZ;h$m=LOXZ>WG!V1Mg~WB$B#23YpDqdo0!TLT0xEl{UIdl~14k8=A!$-N4A zS$U2y2ow{>D7n8=7<^IJxj6I5*;zj@Bc`%bywp$Dl@s_w+Xh}k!(rK)UIE_7UEZq% zDicf-PR~)bbeYZkq4yxXPeIEAr3@6TwdL2MfAwA#C<9k_cb*)nD<3N=$byO3C7_?- zl9T7Qigee)g}(|9$BF!M38E{JqGpiApso-H1_Oc&^2n6FTm}QNjIL!BNZtDKggG=S z#QNTCqfroEjtz*4e*fMF+-U>wvk?L-T2o$r4+^JAYWX{`w#Uh02M$i_t=JnA22Uzx-GjN3 zI3v*I6%&H}{jdC)n`^EjGl0O%DCzBJ1u!<{L^Q>Aen|pfN5U>3nkt;t^~`+VPd3(l|V*m?q>n0v4|AI7~T3E zW~A`x&Tn;U&f`g693GS)47|4>t}0Rww6t6Wlw#nMBM+7dVns+dC-a)$!1us0>q^E} zR8(A?_5yec+7v`enyF=FWc-T`2g@Cq94%i#CAtaoco9PPk9uK?q(fpKQu?K&q|i;M z1Nz4R;cPC}D#fgrad~^XHk9Jt`{Lg|0l~o!O{hS}^eZhbjk1{`#Gq%|mW>6G<{9jd zNXu6fciKKS3efkuiyp7=KD$H4Vtjaf%$q8RXgb*B{BqO-zkef|n2Ar0cK+CUx|DYp zXvPp4YPvOn4q9Z>m!&+NVufLR@gY@`dvVmlU^2K)1v14x!na{|-4ftnU|{G;ChG<2 z!uaT|=+OebbhGDTX3Vc|<|>S_@krNDHyH(3elpAHZRoQOHW)ti4IDY@QWQ$<=w$0_ zN<<6fyD~fEH8ehed}ywR%^VaQoY`ItHsQ8~$!6{Oacz%RZ;QtgKfm30UMo8;%o=>) zNbTGMq7P7>$1kKU^S^#oN3tY*J6Hd#uChb@=g6H2SP#-T>$>^XUxv9ZKdc3fZzecT zX$RwPAF(h2*_p$XLP$u6@nOr^*?ui6k1Y%|#F&K(uR1?F4hmVGoP0I=Gp3=w-ben7 z5_YCfLP7$aCX?vF~zz1c7OixcYn2?bc>#&<9BE0__Aw=tFAb=Ku8XFr!H0|X1>uB%d;&NJr zR9~e~AAEg2tKijq;tfz+tMUaqwp$81OX{nkK5A|TP zg}OWI0eNI6Dmt2w-*yzqen>ahf?YiRa$Q8a*-X-q4x*SyPAkW_28=i`1C5{WK7pMc zx;8!peKnie)0z{~5088dH!;Mc4Hr3~jAd1YQKr}*{_?B*oH6D=3 z_R_!tPf+$~e*F9iQ3`mdbs1#PXy$LncfpJb1j7Kl%vMZz^wP-`To53d(^P2~8qyvX z#v$c-bB`|#G0fG80i>IY?$UrJ&Iv+78fGMze!(yc=SCU_M3HQg>M-QzLeCW006(H2 z(%0m8I1{O|WaRCt8mH5qc<*6^kLMph;#hr=P)OvkIG*%r>T{>a+yu8G>cxuV>m0F7 zBpy+7HwSc32;mynJn&de?|rGd2Hl!*bZjj2t1XhL0izKzHCwYkor_h3KPjs%iz^ut#_@S&2Pw&Wj^JHh!1y=o1p8)M;M`8LxLjkUs3U`9UZf7 zkGsZ&ilA|%VnQ5qnq8H#YR|#Ri2zLCe*!^Z^@Myjt9Y?`8_;>C>sn`uSi#R+VfbS1 zWcMYOCX9pA{Rx4#MA4IthAA-N+_h`%sy3mQCy9DisIgxJXO$jFlR>mmDN6&`l&Qt; z_gsx5w}f;KB6o>vYO1O<$*xn^&ty8J21FrgN(`}*pn*7zTtX<48nwi1eUK!RX7WCN zRv6F>huvd|bm8voJA)8E_PoK)&fYW~F2(^4|L1{Sa#B(j8(T1Q*da4VuWyxXt zQ?Q-H`jbXB{hBA>B#%6EBqJhXBx2K|xkDCeJ~PP^s)h(aKB~Z)S?QjUkr9FC?Esl{JS144HfnAK9LOJwln&vzYMPqn_Pead z5p}?W5HEyl5Pf#+uFG0tENtnG%}wruqX$Y#1VB>MttLAJCT83obNI0JbaISu(v8Ayz@laiz4t^kAAVnN({3+-ygrFJ-b~Wu!cu&N0 zqMJw>E@At{#l;~Gv2uwJ6O(M!W;3~aH7*L$=Dt^Ph#*Ubge{(l5`aF`1Ud;}(gZvW zB#ykfR=FMo$TzUHRSu7U;1+CN2zDhw66nqW(>K5#NUWFJ^T-L0h$ySn+1lKk2@%)S zbaXzqKG`1Q^>^`Gvi*{Gn}w58$qSR*cH!t!rsnze-Z}~r`C;ahx-)lHiaRn6F5X6lxQZ(ZDp-VUGc<1w8I57<1gue$ik-2nNZ$3dr)b$MazV zCz^Ml+4OLRZi{@(@&39j%>J+6zUlHY!KgqIrkfDgYG`Vbj;M`DN(u!PNJGRnXVxEw zIt=8O`u_fszEbIYjcJ$=av&Y+=#YVyi$pM!PCbcJay=r&bTeljS zVF5dahslsY(Z-(!T^sTu9d^VthsI$%@a3u8g9m;x=@EjmIKmrfSFp+6KvGspR<@zJ zIje8a1)3@eP(Hwjx&^j~400e1iGX*&3c%J%T2n+MuazNR2)RxH-)U`aeWj86c*YKd zX<9J9;kbb~fMYyT(m+wqqwnAl-V!CKs;-WRjJyO67C!+-QURQwco!cZ)Z6`aT+n`i4L{zj3Mb*dm>^&`7dVI}0>FH*$O0dtM7b^_8rs@{ zaDQ~1oCVrXDqmnD!Q`AAaT^<(Z_hxkK#p2`dUP8w!uO62Y%u;2vmV?K4-XGqTwFA7 zZ*Sz>M@Pp4&iU+;5{-y1`lk?hZ0yNYjEIWLARc)L5FI3;N$5!r;L?4Af-t~!;FE@% z2Q_4JVd2`04Mn?xGAkMkB3f}Sehbkg|{{H^`r^05Eb^cSzdU|?@ z77EG1LCfPTja-Ml6>ZQsF@Q)Ty7SidHnhQ4P)u1kH^JZs5Dgac9ZYj`b5P0nFyUH3 zaz_UbA4Dy#MZ36~qb1fV!28zBPOdedzkF#1xhev(QxG@#1EcJL+LI@vMXKt#eb7cB zxC5C^_zg+x*Z&p${#9b53%Tz)aQR-pevOpw#fujWUiwCyJp-!!cQEQc6EE8#D!tdYoWF1jtPRHD zYvdR}I^h(BIA?9@oqqp%Ef8Mm7#U?ytN|H9Hp4}A?->*~7Sh9cNb^?!VIVCGiJp_s zo;`@;L3f;M?;eVA%lZfoWV12w=$sg}FOg97{UbBS8 zNFls8Xl%_G0(m`jM9YHy`qptc2r}}o0EeX8FuqDDundE;0xdkzULG61Ui7nO$K~&= z1XmP^C%keW-G+p$M)^Mv7a3s(h!SIt3^-k-~J_uW7zhd z0XdDq<1_=&Sl8)LfkLwmvdAHGSTY#D7@kKvh8ITD@tKs7Tmm@!-IX@egcwIpA=(4G ztO0ua#FE$^?IB`6u1wUX1b!5YN=XR^_FWjqWh5I;B@I!{joBFeG!!c0x|*tk12+V! zg8;rpS~7ZBKq@W`IT7%+Q|A-plg}ZxgiA`A6Z6l_3`}_K!x0FG0Qv&Xk1WV`bmB}* zOe}PmmT7Emj(-y7R#Q>wH}^>`T~$k~)g%_d{T_$2F$ntQx%C->aHHjpn;;~Agn-!0 zHXc5{FFGdCMI z(8%jl=b|9&p35E#j#n@=YR8))D>m7X+P@-DAgte}siDEhsGQh}jw1=iLjY(?!4LtU zB4LO2!G{bO3;^!^JtDD45(Qj`b7Ax!IG)}nBO_CK!2x@|5d=hO zBcn9fqB0IfF3!$`yk_mcj#-J|<{Z{W?;#=rhb4(O2{>I->)z*;pq|W#JHCY&KgxB} z2w;AlU<58mXj2E9(~JXhNSYafl%!juDELC!`S-I`Zrf6(rkV0Hwb1AgW~&s-B@R&* z^4;oQBx8=8FoIOBj57ta!~kMFSMfZ(YDD{ppK-gz%BqNnM*e5C&A%L=p>jhi8)e=_ z6?w{&1KbP&nYS1jF`%>e`&|UdmKEp~Ga!GpepN|HUmy_KB*LzRYVE`+TP7cOcCSl- zHtY&k;l>Zvf{!3G%S3OdrO~Yn7h?j;Xo7~Lrmb!9+?kk&$RCg*9UKzF5!u0ovk;@7 z?Zl#;Dd5&pf#;EM8K41jgKEDHZ8AL(MwiUWSS7K(=Pn`a^zX6~zdbki_htV%7)C{9 z+k5<3BNyd3ubiiax(M@30y;V7{i|?PkK18NN-6O!-r3pNm0B@)5?WQR+yEtC<>j$W zYsVn#mfE|A==JcFA;NwcW(XEX3z&nj?97Np480ObA+c4R8=0E=0Ry0g!!OWV0U*8x zM-T=UCR8B=24I*I!B*&ymPK&!$x&5Du$hQJ3HaI^!1r>c(suXY=Glcrd;1a%h@moc!3k($ptk9nNbQ5+kDH*&#E7CLyRsbCkJo=a?;9vYepVC z3uUScXpk2{^2Fd7U9EQCl|T+3Uc9*T^}~gaH8oU_%0RMY2%*L#=CHphZw}S~)Iczt z8l;7|9lXN_qy{}ZF5E#*b z$qUHfpA$WxAXjvIFM|H3GwYiL7Y~WFXGbbe_3Fx;mx(y^YeK+Rm;zRN_vId2XR=5z zn2O3biUZ()07RJlVWT6eIxLV32pGRm#W^N97(*x{HXe)s7Tjc4g4Qy;e z;phLsQ^-L}A0HnOZ8NuRx}V*F(7FuZLC6NZ3JJkVg!DDwmPztN?5NC4hWdtvgnq=d zf&-xaZEjkC)_{55b)3Tjs1^YS5>vd6+GaXyA!GXYNGOb6a3qnSJjA5oiCl$24>?&X zBracEY;&Xnr>gEi4joP+ut1Mc)zb@u!%=2P*a*3D7&b6W{^%;mGXb*tGe7?p{IOJU z);9L`{K39}Rr|BDGD-kA6waCXC}bkP;W7aQ!l%VcsdCji(Lh!1Dnd@dgevd|M2C1j!8@X5AXiZUjFxpHU#&%wICsC5HQwxh{QD@%QmF!1?5Efu2W literal 0 HcmV?d00001 diff --git a/SOPA/view/LevelMode/TutorialScene.swift b/SOPA/view/LevelMode/TutorialScene.swift index a1c3737..562ea7f 100644 --- a/SOPA/view/LevelMode/TutorialScene.swift +++ b/SOPA/view/LevelMode/TutorialScene.swift @@ -3,137 +3,93 @@ import SpriteKit import UIKit class TutorialScene: SKScene { - private var currentPage = 0 - private let headline = SKLabelNode(fontNamed: "Optima-Bold") - private let textLine1 = SKLabelNode(fontNamed: "Optima-Bold") - private let textLine2 = SKLabelNode(fontNamed: "Optima-Bold") - private let textLine3 = SKLabelNode(fontNamed: "Optima-Bold") - private let tapHint = SKLabelNode(fontNamed: "Optima-Bold") - private var letsGoButton: SpriteButton? + private var step = 0 + private var leaveScene = false + + private var firstA: SKSpriteNode! + private var firstB: SKSpriteNode! + private var secondA: SKSpriteNode! + private var secondB: SKSpriteNode! + private var letsGo: SKSpriteNode! override init(size: CGSize) { super.init(size: size) - self.backgroundColor = SopaTheme.blackBackground + backgroundColor = SopaTheme.blackBackground + addScreens() addBackButton() - addTitle() - addContentNodes() - updatePage() + showStep() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } + private func addScreens() { + let width = size.width + // The screens are split into a top (A) and bottom (B) half that tile vertically, + // mirroring the Android tutorial artwork. Keep each half's aspect ratio. + let aHeight = width * 910.0 / 1024.0 + let bHeight = width * 960.0 / 1080.0 + let topInset = (size.height - (aHeight + bHeight)) / 2.0 + let aCenterY = size.height - topInset - aHeight / 2.0 + let bCenterY = size.height - topInset - aHeight - bHeight / 2.0 + + firstA = makeScreen(imageNamed: "firstTutorialScreenA", width: width, height: aHeight, centerY: aCenterY) + firstB = makeScreen(imageNamed: "firstTutorialScreenB", width: width, height: bHeight, centerY: bCenterY) + secondA = makeScreen(imageNamed: "secondTutorialScreenA", width: width, height: aHeight, centerY: aCenterY) + secondB = makeScreen(imageNamed: "secondTutorialScreenB", width: width, height: bHeight, centerY: bCenterY) + + let letsGoWidth = width * 0.5 + letsGo = SKSpriteNode(imageNamed: "tutorialLetsGo") + letsGo.size = CGSize(width: letsGoWidth, height: letsGoWidth * 234.0 / 788.0) + letsGo.position = CGPoint(x: size.width / 2.0, y: size.height * 0.5) + letsGo.zPosition = 5 + addChild(letsGo) + } + + private func makeScreen(imageNamed: String, width: CGFloat, height: CGFloat, centerY: CGFloat) -> SKSpriteNode { + let node = SKSpriteNode(imageNamed: imageNamed) + node.size = CGSize(width: width, height: height) + node.position = CGPoint(x: size.width / 2.0, y: centerY) + addChild(node) + return node + } + private func addBackButton() { let side = size.height * 0.08 - let backButton = SpriteButton(texture: makeCircleButtonTexture(symbolName: "chevron.left", side: side)) { + let backButton = SpriteButton(texture: ButtonTextureFactory.makeMinimalBackTexture(side: side)) { [weak self] in + self?.leaveScene = true ResourcesManager.getInstance().storyService?.loadStartMenuScene() } - backButton.position = CGPoint(x: size.height * 0.057, y: size.height * 0.91) + backButton.position = CGPoint(x: size.height * 0.057, y: size.height * 0.95) + backButton.zPosition = 10 addChild(backButton) } - private func addTitle() { - let title = SKLabelNode(fontNamed: "Optima-Bold") - title.text = "Tutorial" - title.fontSize = size.height * 0.10 - title.fontColor = SopaTheme.gameText - title.position = CGPoint(x: size.width * 0.5, y: size.height * 0.78) - addChild(title) - } - - private func addContentNodes() { - headline.fontColor = SopaTheme.gameText - headline.fontSize = size.height * 0.048 - headline.position = CGPoint(x: size.width * 0.5, y: size.height * 0.62) - addChild(headline) - - textLine1.fontColor = SopaTheme.gameText - textLine1.fontSize = size.height * 0.034 - textLine1.position = CGPoint(x: size.width * 0.5, y: size.height * 0.54) - addChild(textLine1) - - textLine2.fontColor = SopaTheme.gameText - textLine2.fontSize = size.height * 0.034 - textLine2.position = CGPoint(x: size.width * 0.5, y: size.height * 0.48) - addChild(textLine2) - - textLine3.fontColor = SopaTheme.gameText - textLine3.fontSize = size.height * 0.034 - textLine3.position = CGPoint(x: size.width * 0.5, y: size.height * 0.42) - addChild(textLine3) - - tapHint.fontColor = SopaTheme.gameText - tapHint.fontSize = size.height * 0.030 - tapHint.position = CGPoint(x: size.width * 0.5, y: size.height * 0.26) - addChild(tapHint) - } - override func touchesBegan(_ touches: Set, with event: UIEvent?) { - if currentPage < 2 { - currentPage += 1 - updatePage() - } - } - - private func updatePage() { - switch currentPage { - case 0: - setPage( - headlineText: "Goal", - line1: "Connect the start and finish pipes.", - line2: "Swipe rows or columns to move tiles.", - line3: "Only matching pipe segments will connect.", - hint: "Tap anywhere to continue" - ) - letsGoButton?.isHidden = true - case 1: - setPage( - headlineText: "How It Works", - line1: "Horizontal swipe moves a full row.", - line2: "Vertical swipe moves a full column.", - line3: "Try to solve it in as few moves as possible.", - hint: "Tap anywhere to continue" - ) - letsGoButton?.isHidden = true - default: - setPage( - headlineText: "Try It Now", - line1: "Next you play a simple interactive level.", - line2: "Use restart if you want to try again.", - line3: "", - hint: "" - ) - ensureLetsGoButton() - letsGoButton?.isHidden = false - } - } - - private func setPage(headlineText: String, line1: String, line2: String, line3: String, hint: String) { - headline.text = headlineText - headline.fontSize = LabelSizing.fittedLabelFontSize(text: headlineText, fontName: "Optima-Bold", preferredSize: size.height * 0.048, maxWidth: size.width * 0.90) - - textLine1.text = line1 - textLine1.fontSize = LabelSizing.fittedLabelFontSize(text: line1, fontName: "Optima-Bold", preferredSize: size.height * 0.034, maxWidth: size.width * 0.92) - textLine2.text = line2 - textLine2.fontSize = LabelSizing.fittedLabelFontSize(text: line2, fontName: "Optima-Bold", preferredSize: size.height * 0.034, maxWidth: size.width * 0.92) - textLine3.text = line3 - textLine3.fontSize = LabelSizing.fittedLabelFontSize(text: line3, fontName: "Optima-Bold", preferredSize: size.height * 0.034, maxWidth: size.width * 0.92) - tapHint.text = hint - tapHint.fontSize = LabelSizing.fittedLabelFontSize(text: hint, fontName: "Optima-Bold", preferredSize: size.height * 0.030, maxWidth: size.width * 0.92) - } - - private func ensureLetsGoButton() { - if letsGoButton != nil { + guard step < 2 else { return } + step += 1 + showStep() + } - let buttonSize = CGSize(width: size.width * 0.34, height: size.height * 0.10) - let button = SpriteButton(texture: ButtonTextureFactory.makeTextButtonTexture(title: "Let's Go", size: buttonSize, fontName: "Optima-Bold", textColor: SopaTheme.gameText)) { - ResourcesManager.getInstance().storyService?.loadTutorialGameSceneFromTutorialScene() + private func showStep() { + let onFirst = step == 0 + let onSecond = step == 1 + firstA.isHidden = !onFirst + firstB.isHidden = !onFirst + secondA.isHidden = !onSecond + secondB.isHidden = !onSecond + letsGo.isHidden = step < 2 + + if step >= 2 { + DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { [weak self] in + guard let self = self, !self.leaveScene else { + return + } + ResourcesManager.getInstance().storyService?.loadTutorialGameSceneFromTutorialScene() + } } - button.position = CGPoint(x: size.width * 0.5, y: size.height * 0.25) - addChild(button) - letsGoButton = button } } From 5462d66685a481fdc18f9d15e2c173e5e38d5a44 Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 21:37:11 +0200 Subject: [PATCH 10/13] Update parity plan: mark P2 done (Level Complete, Highscore, Tutorial) Co-Authored-By: Claude Fable 5 --- ANDROID_DESIGN_PARITY_PLAN.md | 46 +++++++++++++++++------------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/ANDROID_DESIGN_PARITY_PLAN.md b/ANDROID_DESIGN_PARITY_PLAN.md index 88821ab..62ee27e 100644 --- a/ANDROID_DESIGN_PARITY_PLAN.md +++ b/ANDROID_DESIGN_PARITY_PLAN.md @@ -15,10 +15,10 @@ Score erscheinen nur nach gelöstem Puzzle und wurden über den Quellcode abgegl | Hauptmenü | `StartMenuScene.swift` | 🟢 fast fertig | Menüpunkt-Label + Social-Icons; kein Settings-Screen | | Level-Auswahl | `LevelChoiceScene` + `LevelButtonArea` + `LevelSelectButton` | 🟢 (live bestätigt) | fehlender Tutorial-Einstieg | | Level-Mode Spiel | `LevelModeGameScene.swift` | 🟢 (live bestätigt) | Back-Button (Android hat keinen) | -| Level Complete | `LevelModeScoreScene.swift` | 🟡 BG schwarz (P1) | Wording + Button-Icon offen | +| Level Complete | `LevelModeScoreScene.swift` | 🟢 (P2 erledigt) | Wording + Play-Icon angepasst | | Just-Play Spiel | `JustPlayGameScene.swift` (+ Basis `GameScene`) | 🟢 (P1 erledigt) | – (schwarz + Android-HUD) | -| Just-Play Highscore | `JustPlayLostScene` (in `JustPlayGameScene.swift`) | 🟡 BG schwarz (P1) | keine Farbbalken, kein „Share Score" | -| Tutorial | `TutorialScene.swift` / `TutorialGameScene.swift` | 🔴 anderes Konzept | Text-Seiten statt visuellem Grid; brauner BG; Einstiegspunkt | +| Just-Play Highscore | `JustPlayLostScene` (in `JustPlayGameScene.swift`) | 🟢 (P2 erledigt) | Farbbalken + „Share Score" ergänzt | +| Tutorial | `TutorialScene.swift` / `TutorialGameScene.swift` | 🟢 (P2 erledigt) | visuelle Android-Screens; Einstiegspunkt offen (P3) | | Credits | `CreditsScene.swift` | 🟢 (kein Referenz-Screenshot) | – | Grundursache vieler roter Punkte: Die Basis-Klasse `GameScene` (`SOPA/view/GameScene.swift:33`) @@ -79,11 +79,11 @@ in Level-Mode/JustPlay inzwischen durch absolute Layouts überschrieben. Android: **schwarzer** Hintergrund, Titel „N. Level Complete", „Your moves: X", „Moves for 3 Stars: Y", 3 goldene Sterne, unten 3 weiße Kreis-Buttons (Grid / Restart / Play). -- [ ] Hintergrund schwarz (siehe P1) -- [ ] Titel-Wording auf „N. Level Complete" + Font/Größe an Android angleichen - (`LevelModeScoreScene.swift:49`, aktuell „Level N Complete", Optima statt Impact) -- [ ] Untertitel „3-star target: N" → „Moves for 3 Stars: N" (`:68`) -- [ ] „Next"-Button: Icon `chevron.right` → gefülltes Play-Dreieck (`:30`) +- [x] Hintergrund schwarz (P1) +- [x] Titel-Wording auf „N. Level Complete" +- [x] Untertitel „Moves for 3 Stars: N" +- [x] „Next"-Button: gefülltes Play-Dreieck (`play.fill`) +- [ ] Optional: Titel-Font/Größe/links-Ausrichtung noch näher an Android (aktuell zentriert, Optima) - [ ] Sterne-Optik gegen Android prüfen (`star_score`/`starSW_score`) ## P2 – Just-Play Highscore an Android angleichen @@ -91,11 +91,11 @@ Android: **schwarzer** Hintergrund, Titel „N. Level Complete", „Your moves: Android: schwarzer Hintergrund, Titel „New Highscore", **blauer Balken** „Score: N", **gelber Balken** „Level: N", unten 3 Kreis-Buttons: Zurück-Pfeil, Restart, **„SHARE SCORE"**. -- [ ] Hintergrund schwarz (siehe P1) -- [ ] Score/Level als farbige Balken (blau/gelb) statt reinem Text (`JustPlayGameScene.swift:546–560`) -- [ ] **„SHARE SCORE"-Button ergänzen** (fehlt komplett) – Share-Flow wie im Menü nutzen -- [ ] Button-Set an Android angleichen (Zurück-Pfeil statt `chevron.left`) -- [ ] Entscheiden: Konfetti/„Highscore:"-Zeile beibehalten (iOS-Extra) oder für Parität entfernen +- [x] Hintergrund schwarz (P1) +- [x] Score/Level als farbige Balken (blau/gelb) statt reinem Text +- [x] **„SHARE SCORE"-Button ergänzt** (neuer `makeCircleTextButtonTexture`) +- [x] Button-Set an Android angeglichen (Zurück-Pfeil / Restart / Share) +- [x] „Reached Level"/„Highscore"-Klartextzeilen für Parität entfernt (Konfetti bleibt als iOS-Extra bei neuem Highscore) ## P2 – Tutorial neu aufbauen (anderes Konzept) @@ -105,13 +105,12 @@ Erklärtext („Connect the **GREEN** and the **RED** gate, using the **BLUE** t Wird in Android **aus der Level-Auswahl** gestartet (`loadTutorialSceneFromLevelChoiceScene`) bzw. beim Erststart, nicht aus dem Menü. -iOS aktuell: reines **Text-Tutorial** (Seiten „Goal"/„How It Works"/„Try It Now") mit -„Let's Go"-Button, brauner Hintergrund, gestartet aus dem Menü. - -- [ ] Tutorial als visuellen Screen mit Spielfeld-Grid + farbigem Erklärtext umbauen -- [ ] Farbige Keywords (GREEN/RED/BLUE) im Text -- [ ] Einstiegspunkt an Android angleichen: aus der Level-Auswahl (+ optional Erststart) -- [ ] Übergänge Tutorial → erstes Level bzw. → Level-Auswahl analog Android +- [x] Tutorial als visuelle Screens umgebaut – Android-Artwork nach + `Assets.xcassets/tutorial` importiert (first/second Screen A+B, Let's Go) +- [x] Farbige Keywords (GREEN/RED/BLUE) – über die importierten Screens abgedeckt +- [x] 2-Screen-Ablauf + „Lets GO" → interaktives Tutorial-Level (analog Android) +- [ ] Einstiegspunkt: Android startet aus der Level-Auswahl / beim Erststart; iOS startet + aktuell aus dem Menü (hängt an der SETTINGS/TUTORIAL-Entscheidung, siehe P3) ## P3 – Menü: Settings vs. Tutorial klären + Social-Icons @@ -146,6 +145,7 @@ Android hat Menü-Musik und einen Mute-Toggle; iOS hat aktuell **kein Audio**. ## Empfohlene Reihenfolge -1. **P1** – Hintergründe schwarz + Just-Play-HUD (kleiner Aufwand, größter sichtbarer Effekt) -2. **P2** – Level Complete, Just-Play Highscore, Tutorial-Neuaufbau -3. **P3** – Menü-Entscheidung, Audio/Settings, Social-Icons +1. ~~**P1** – Hintergründe schwarz + Just-Play-HUD~~ ✅ erledigt +2. ~~**P2** – Level Complete, Just-Play Highscore, Tutorial-Neuaufbau~~ ✅ erledigt +3. **P3** – Menü-Entscheidung (SETTINGS vs. TUTORIAL) + Tutorial-Einstiegspunkt, + Audio/Settings, Social-Icons From 2d286896ecf6a2e161fe879ca0d3e270110c494c Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 21:43:17 +0200 Subject: [PATCH 11/13] P3: use Android share/Twitter icons in the menu - Import Android ShareThis + Twitter bird artwork into Assets.xcassets/menu - StartMenuScene uses these images instead of SF-symbol textures (paper plane -> classic Twitter bird; share glyph now pixel-matches) - Remove now-unused ButtonTextureFactory.makeSocialButtonTexture Verified via idb: menu social icons match Android; 19 tests pass. Co-Authored-By: Claude Fable 5 --- SOPA/Assets.xcassets/menu/Contents.json | 3 ++ .../menu/ShareThis.imageset/Contents.json | 8 +++++ .../menu/ShareThis.imageset/ShareThis.png | Bin 0 -> 9226 bytes .../menu/TwitterLogo.imageset/Contents.json | 8 +++++ .../Twitter_logo_blue.png | Bin 0 -> 7923 bytes .../view/LevelMode/ButtonTextureFactory.swift | 29 ------------------ SOPA/view/LevelMode/StartMenuScene.swift | 13 +++----- 7 files changed, 24 insertions(+), 37 deletions(-) create mode 100644 SOPA/Assets.xcassets/menu/Contents.json create mode 100644 SOPA/Assets.xcassets/menu/ShareThis.imageset/Contents.json create mode 100644 SOPA/Assets.xcassets/menu/ShareThis.imageset/ShareThis.png create mode 100644 SOPA/Assets.xcassets/menu/TwitterLogo.imageset/Contents.json create mode 100644 SOPA/Assets.xcassets/menu/TwitterLogo.imageset/Twitter_logo_blue.png diff --git a/SOPA/Assets.xcassets/menu/Contents.json b/SOPA/Assets.xcassets/menu/Contents.json new file mode 100644 index 0000000..0ce4e31 --- /dev/null +++ b/SOPA/Assets.xcassets/menu/Contents.json @@ -0,0 +1,3 @@ +{ + "info" : { "version" : 1, "author" : "xcode" } +} diff --git a/SOPA/Assets.xcassets/menu/ShareThis.imageset/Contents.json b/SOPA/Assets.xcassets/menu/ShareThis.imageset/Contents.json new file mode 100644 index 0000000..36afda9 --- /dev/null +++ b/SOPA/Assets.xcassets/menu/ShareThis.imageset/Contents.json @@ -0,0 +1,8 @@ +{ + "images" : [ + { "idiom" : "universal", "filename" : "ShareThis.png", "scale" : "1x" }, + { "idiom" : "universal", "scale" : "2x" }, + { "idiom" : "universal", "scale" : "3x" } + ], + "info" : { "version" : 1, "author" : "xcode" } +} diff --git a/SOPA/Assets.xcassets/menu/ShareThis.imageset/ShareThis.png b/SOPA/Assets.xcassets/menu/ShareThis.imageset/ShareThis.png new file mode 100644 index 0000000000000000000000000000000000000000..f5e9f82ac7a1e8f66ae46450ed7a02811d2b76fb GIT binary patch literal 9226 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 ONGb{%@^!N2VgCb%BMCPE literal 0 HcmV?d00001 diff --git a/SOPA/Assets.xcassets/menu/TwitterLogo.imageset/Contents.json b/SOPA/Assets.xcassets/menu/TwitterLogo.imageset/Contents.json new file mode 100644 index 0000000..ac755ac --- /dev/null +++ b/SOPA/Assets.xcassets/menu/TwitterLogo.imageset/Contents.json @@ -0,0 +1,8 @@ +{ + "images" : [ + { "idiom" : "universal", "filename" : "Twitter_logo_blue.png", "scale" : "1x" }, + { "idiom" : "universal", "scale" : "2x" }, + { "idiom" : "universal", "scale" : "3x" } + ], + "info" : { "version" : 1, "author" : "xcode" } +} diff --git a/SOPA/Assets.xcassets/menu/TwitterLogo.imageset/Twitter_logo_blue.png b/SOPA/Assets.xcassets/menu/TwitterLogo.imageset/Twitter_logo_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..b87ae9d67b67ee03ac8a8b40bbccbaf6f33fbfc8 GIT binary patch literal 7923 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∈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 SKTexture { - let renderer = UIGraphicsImageRenderer(size: size) - let image = renderer.image { _ in - let blueColor = UIColor(red: 99.0 / 255.0, green: 177.0 / 255.0, blue: 230.0 / 255.0, alpha: 1.0) - if fillBackground { - let backgroundPath = UIBezierPath(roundedRect: CGRect(origin: .zero, size: size), cornerRadius: size.width * 0.18) - blueColor.setFill() - backgroundPath.fill() - } - - let pointSize = fillBackground ? size.width * 0.50 : size.width * 0.75 - let config = UIImage.SymbolConfiguration(pointSize: pointSize, weight: .semibold) - guard let baseSymbol = UIImage(systemName: symbolName, withConfiguration: config) else { - return - } - - let iconColor = fillBackground ? UIColor.white : blueColor - let symbol = baseSymbol.withTintColor(iconColor, renderingMode: .alwaysOriginal) - let symbolRect = CGRect( - x: (size.width - symbol.size.width) / 2.0, - y: (size.height - symbol.size.height) / 2.0, - width: symbol.size.width, - height: symbol.size.height - ) - symbol.draw(in: symbolRect) - } - return SKTexture(image: image) - } - static func makeCircleTextButtonTexture( title: String, side: CGFloat, diff --git a/SOPA/view/LevelMode/StartMenuScene.swift b/SOPA/view/LevelMode/StartMenuScene.swift index 93b68f4..2f08eab 100644 --- a/SOPA/view/LevelMode/StartMenuScene.swift +++ b/SOPA/view/LevelMode/StartMenuScene.swift @@ -49,17 +49,14 @@ class StartMenuScene: SKScene { private func addSocialButtons() { let buttonSide = min(size.width * 0.18, size.height * 0.10) - let shareButton = SpriteButton( - texture: ButtonTextureFactory.makeSocialButtonTexture(symbolName: "point.3.connected.trianglepath.dotted", size: CGSize(width: buttonSide, height: buttonSide), fillBackground: true), - onClick: shareApp - ) + let shareButton = SpriteButton(texture: SKTexture(imageNamed: "ShareThis"), onClick: shareApp) + shareButton.size = CGSize(width: buttonSide, height: buttonSide) shareButton.position = CGPoint(x: size.width * 0.20, y: size.height * 0.14) addChild(shareButton) - let twitterButton = SpriteButton( - texture: ButtonTextureFactory.makeSocialButtonTexture(symbolName: "paperplane.fill", size: CGSize(width: buttonSide * 1.15, height: buttonSide * 1.15), fillBackground: false), - onClick: openTwitter - ) + let twitterWidth = buttonSide * 1.2 + let twitterButton = SpriteButton(texture: SKTexture(imageNamed: "TwitterLogo"), onClick: openTwitter) + twitterButton.size = CGSize(width: twitterWidth, height: twitterWidth * 244.0 / 300.0) twitterButton.position = CGPoint(x: size.width * 0.74, y: size.height * 0.14) addChild(twitterButton) } From a255e5e15d99393c15c015e56d7f6aa78d8fc88a Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 21:44:08 +0200 Subject: [PATCH 12/13] Update parity plan: P3 social icons done; Settings/audio + tutorial entry deferred per user Co-Authored-By: Claude Fable 5 --- ANDROID_DESIGN_PARITY_PLAN.md | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/ANDROID_DESIGN_PARITY_PLAN.md b/ANDROID_DESIGN_PARITY_PLAN.md index 62ee27e..0c37022 100644 --- a/ANDROID_DESIGN_PARITY_PLAN.md +++ b/ANDROID_DESIGN_PARITY_PLAN.md @@ -121,19 +121,24 @@ Der Settings-Screen in Android ist ein **Musik-Mute-Toggle** (`SettingsService`: iOS aktuell: der 3. Menüpunkt wurde von „SETTINGS" auf **„TUTORIAL"** umbenannt und öffnet das (Text-)Tutorial. Es gibt auf iOS **keinerlei Audio/Musik** und keinen Settings-Screen. -- [ ] Entscheidung: Menü an Android angleichen (SETTINGS statt TUTORIAL) – setzt Settings-Screen - + Audio voraus – **oder** iOS bewusst mit TUTORIAL-Eintrag abweichen lassen -- [ ] Social-Icons an Android angleichen: Share-Glyph + klassischer Twitter-Vogel - (iOS nutzt SF-Symbols `point.3.connected.trianglepath.dotted` / `paperplane.fill`, - `StartMenuScene.swift:54/61`) +- [x] Social-Icons an Android angeglichen: Android-`ShareThis` + Twitter-Vogel importiert und + im `StartMenuScene` statt der SF-Symbol-Texturen verwendet +- [~] **Entscheidung getroffen (Nutzer):** iOS weicht bewusst ab – Menüpunkt bleibt „TUTORIAL", + **kein** SETTINGS-Eintrag. Settings/Audio werden vorerst **nicht** gebaut. -## P3 – Audio/Musik + Settings (Voraussetzung für „SETTINGS") +## P3 – Audio/Musik + Settings (zurückgestellt) Android hat Menü-Musik und einen Mute-Toggle; iOS hat aktuell **kein Audio**. +**Auf Nutzerwunsch vorerst zurückgestellt** – wird derzeit nicht umgesetzt. -- [ ] Musik-Playback (z. B. `AVAudioPlayer`) + Mute-Persistenz (analog `SettingsService`) -- [ ] Settings-Szene mit Mute/Unmute-Button (schwarz, Neon-Stil) -- [ ] Erststart-Logik (`isFirstTime`) für automatischen Tutorial-Aufruf +- [ ] (später) Musik-Playback (z. B. `AVAudioPlayer`) + Mute-Persistenz +- [ ] (später) Settings-Szene mit Mute/Unmute-Button +- [ ] (später) Erststart-Logik (`isFirstTime`) für automatischen Tutorial-Aufruf + +## Tutorial-Einstiegspunkt (zurückgestellt) + +Android startet das Tutorial aus der Level-Auswahl / beim Erststart. iOS behält auf +Nutzerwunsch den **Menü-Eintrag „TUTORIAL"**; eine Verlegung des Einstiegs wird nicht gemacht. --- @@ -147,5 +152,9 @@ Android hat Menü-Musik und einen Mute-Toggle; iOS hat aktuell **kein Audio**. 1. ~~**P1** – Hintergründe schwarz + Just-Play-HUD~~ ✅ erledigt 2. ~~**P2** – Level Complete, Just-Play Highscore, Tutorial-Neuaufbau~~ ✅ erledigt -3. **P3** – Menü-Entscheidung (SETTINGS vs. TUTORIAL) + Tutorial-Einstiegspunkt, - Audio/Settings, Social-Icons +3. ~~**P3** – Social-Icons~~ ✅ erledigt; Settings/Audio + Tutorial-Einstieg auf + Nutzerwunsch zurückgestellt + +Damit ist die sichtbare Design-Parität für alle vorhandenen Screens erreicht. +Offen bleiben nur die bewusst zurückgestellten Punkte (Audio/Settings) sowie kleinere +Feinschliff-Optionen (Level-Complete-Titelstil, Sterne-Optik). From 0a0378f5ac4754149bf8f1c5ced6a77f38167b72 Mon Sep 17 00:00:00 2001 From: David Schilling Date: Mon, 20 Jul 2026 22:06:20 +0200 Subject: [PATCH 13/13] Fix level-button taps on the neon frame not opening a level The level-grid redesign draws the button frame as SKShapeNode children, but LevelButtonArea.tabOn only resolved SKLabelNode/SKSpriteNode hits to their parent button. Taps landing on the frame stroke stayed on the SKShapeNode and were ignored. Walk up the parent chain to the enclosing LevelSelectButton instead, so any child node type resolves correctly. Reported by Cursor Bugbot on PR #8. Verified via idb: tapping the frame border now opens the level; 19 tests pass. Co-Authored-By: Claude Fable 5 --- SOPA/view/LevelMode/LevelButtonArea.swift | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/SOPA/view/LevelMode/LevelButtonArea.swift b/SOPA/view/LevelMode/LevelButtonArea.swift index 64e82c8..b2a1747 100644 --- a/SOPA/view/LevelMode/LevelButtonArea.swift +++ b/SOPA/view/LevelMode/LevelButtonArea.swift @@ -68,18 +68,16 @@ class LevelButtonArea: SKSpriteNode { } func tabOn(location: CGPoint) { + // Resolve the tapped node to its enclosing level button. The button's visuals are a mix + // of shape (neon frame), label (number) and sprite (stars) children, so walk up the + // parent chain instead of special-casing individual node types. var node: SKNode? = atPoint(location) - - if !(node is LevelSelectButton) { - if node is SKLabelNode || node is SKSpriteNode { - node = node?.parent - } + while node != nil && !(node is LevelSelectButton) { + node = node?.parent } - - if node is LevelSelectButton { - if !(node as! LevelSelectButton).levelInfo.locked { - ResourcesManager.getInstance().storyService?.loadLevelModeGameSceneFromChoiceScene(levelId: (node as! LevelSelectButton).levelInfo.levelId) - } + + if let levelButton = node as? LevelSelectButton, !levelButton.levelInfo.locked { + ResourcesManager.getInstance().storyService?.loadLevelModeGameSceneFromChoiceScene(levelId: levelButton.levelInfo.levelId) } }