diff --git a/Ballz1/Assets.xcassets/win_lose_text_background.imageset/Contents.json b/Ballz1/Assets.xcassets/win_lose_text_background.imageset/Contents.json
new file mode 100644
index 0000000..8fa58ec
--- /dev/null
+++ b/Ballz1/Assets.xcassets/win_lose_text_background.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "win_lose_text_background.pdf"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
\ No newline at end of file
diff --git a/Ballz1/Assets.xcassets/win_lose_text_background.imageset/win_lose_text_background.pdf b/Ballz1/Assets.xcassets/win_lose_text_background.imageset/win_lose_text_background.pdf
new file mode 100644
index 0000000..e514c2a
Binary files /dev/null and b/Ballz1/Assets.xcassets/win_lose_text_background.imageset/win_lose_text_background.pdf differ
diff --git a/Ballz1/Controllers/LevelsGameController.swift b/Ballz1/Controllers/LevelsGameController.swift
index 43a4eb5..a2e76f4 100644
--- a/Ballz1/Controllers/LevelsGameController.swift
+++ b/Ballz1/Controllers/LevelsGameController.swift
@@ -21,6 +21,7 @@ class LevelsGameController: UIViewController,
@IBOutlet var rowCountLabel: UILabel!
@IBOutlet var heartImageView: UIImageView!
+ /* XXX REMOVE THESE NEXT 3 LINES */
@IBOutlet var gameOverView: UIView!
@IBOutlet var gameOverLevelCount: UILabel!
@IBOutlet var gameOverLevelScore: UILabel!
@@ -31,6 +32,11 @@ class LevelsGameController: UIViewController,
@IBOutlet weak var bannerAdView: GADBannerView!
+ @IBOutlet var gameOverViewNew: UIView!
+ @IBOutlet weak var gameOverTextBackground: UIImageView!
+ @IBOutlet weak var gameOverShareButton: UIButton!
+ @IBOutlet weak var gameOverNextButton: UIButton!
+
private var interstitialAd: GADInterstitial!
private var rewardAdViewController: RewardAdViewController!
@@ -269,6 +275,33 @@ class LevelsGameController: UIViewController,
}
}
+ @IBAction func gameOverShareButtonClicked(_ sender: Any) {
+ let layer = UIApplication.shared.keyWindow!.layer
+ let scale = UIScreen.main.scale
+ // Creates UIImage of same size as view
+ UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale);
+ layer.render(in: UIGraphicsGetCurrentContext()!)
+ let screenshot = UIGraphicsGetImageFromCurrentImageContext()
+ UIGraphicsEndImageContext()
+
+ let activityViewController = UIActivityViewController(activityItems: [screenshot], applicationActivities: [])
+ self.present(activityViewController, animated: true, completion: nil)
+ }
+
+ @IBAction func gameOverNextButtonClicked(_ sender: Any) {
+ let scene = self.scene as! LevelsGameScene
+ scene.removeConfetti()
+ scene.removeGameOverView()
+
+ // Show an interstitial ad
+ if self.interstitialAd.isReady {
+ self.interstitialAd.present(fromRootViewController: self)
+ }
+
+ // Replay the game scene; state should have already been saved
+ self.goToGameScene()
+ }
+
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Prepare for a segue
}
@@ -323,7 +356,14 @@ class LevelsGameController: UIViewController,
resumeButton.layer.cornerRadius = resumeButton.frame.height * 0.5
gameMenuButton.layer.cornerRadius = gameMenuButton.frame.height * 0.5
- gameOverView.center = CGPoint(x: view.frame.midX, y: view.frame.midY)
+ // XXX REMOVE ME gameOverView.center = CGPoint(x: view.frame.midX, y: view.frame.midY)
+ gameOverViewNew.center = CGPoint(x: view.frame.midX, y: view.frame.midY)
+
+ gameOverNextButton.imageView?.contentMode = .scaleAspectFit
+ gameOverShareButton.imageView?.contentMode = .scaleAspectFit
+
+ gameOverNextButton.layer.cornerRadius = gameOverNextButton.frame.height * 0.5
+ gameOverShareButton.layer.cornerRadius = gameOverShareButton.frame.height * 0.5
view.presentScene(scene)
view.ignoresSiblingOrder = true
@@ -435,6 +475,7 @@ class LevelsGameController: UIViewController,
currentLevelCount -= 1
}
+ /* XXX REMOVE ME
gameOverLevelCount.attributedText = NSAttributedString(string: "Level \(currentLevelCount)",
attributes: strokeTextAttributes)
gameOverLevelScore.attributedText = NSAttributedString(string: "\(scene.gameModel!.gameScore)",
@@ -443,19 +484,26 @@ class LevelsGameController: UIViewController,
// If they beat their high score, let them know
scene.showGameOverView(win: win, gameOverView: gameOverView)
+ */
if win {
// Used for determining when we might be able to prompt the use for a positive review (they're more likely to be happy if they've completed more than 1 level successfully)
numConsecutiveWins += 1
// Used in analytics to determine how many levels were completed in a session
numLevelsCompleted += 1
+ gameOverNextButton.setTitle("Next", for: .normal)
}
else {
numConsecutiveWins = 0
// Increment the number of levels failed
numLevelsFailed += 1
+
+ // Change the text of the button to say "Try Again" instead of "Next"
+ gameOverNextButton.setTitle("Try Again", for: .normal)
}
+ scene.showGameOverView(win: win, gameOverView: gameOverViewNew)
+
let winInt = win ? 1 : 0
let userRescuedInt = userWasRescued ? 1 : 0
// Analytics log event: level ending; send over the level number that just endedNS whether or not they just beat this level
@@ -466,6 +514,7 @@ class LevelsGameController: UIViewController,
"rescued": userRescuedInt as NSNumber,
])
+ /* XXX REWORK ME
let _ = Timer.scheduledTimer(withTimeInterval: 3.0, repeats: false) { _ in
let scene = self.scene as! LevelsGameScene
if win {
@@ -482,6 +531,7 @@ class LevelsGameController: UIViewController,
// Replay the game scene; state should have already been saved
self.goToGameScene()
}
+ */
}
// MARK: Private functions
diff --git a/Ballz1/Views/BrickBreak.storyboard b/Ballz1/Views/BrickBreak.storyboard
index 29d45a6..e4765f6 100644
--- a/Ballz1/Views/BrickBreak.storyboard
+++ b/Ballz1/Views/BrickBreak.storyboard
@@ -820,6 +820,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -907,7 +950,11 @@
+
+
+
+
@@ -991,6 +1038,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1044,5 +1140,6 @@
+
diff --git a/Ballz1/Views/LevelsGameScene.swift b/Ballz1/Views/LevelsGameScene.swift
index 9be09b0..2ebaa4a 100644
--- a/Ballz1/Views/LevelsGameScene.swift
+++ b/Ballz1/Views/LevelsGameScene.swift
@@ -506,6 +506,7 @@ class LevelsGameScene: GameScene {
let blurView = UIVisualEffectView(effect: blur)
blurView.frame = view!.frame
+ /* XXX
let imageView = UIImageView(image: UIImage(named: "score_background_yellow_fade"))
// Set the center of the image to be the center of the main view
imageView.center = view!.center
@@ -529,6 +530,14 @@ class LevelsGameScene: GameScene {
// Add the background image for the labels
view!.addSubview(imageView2)
+ */
+
+ // Add the blur view to the screen first
+ view!.addSubview(blurView)
+
+ // Set the alphas to 0 so we can fade it in
+ blurView.alpha = 0
+ gameOverView.alpha = 0
// Unhide the level cleared view
gameOverView.isHidden = false
@@ -536,61 +545,72 @@ class LevelsGameScene: GameScene {
// Add the level cleared view on top of the blur view and the level cleared view
view!.addSubview(gameOverView)
- // Set a flag so that the update scene tick will fade the view in
- showingGameOverView = true
-
- activeViews = [blurView, gameOverView, imageView, imageView2]
+ var imageView: UIImageView? = nil
if win {
if gameModel!.gameScore > gameModel!.highScore {
- let _ = Timer.scheduledTimer(withTimeInterval: 1.5, repeats: false) { _ in
- self.addHighScoreStamp()
- }
+ imageView = addHighScoreStamp()
}
else {
- let _ = Timer.scheduledTimer(withTimeInterval: 1.5, repeats: false) { _ in
- self.addLevelPassedStamp()
- }
+ imageView = addLevelPassedStamp()
}
}
else {
- let _ = Timer.scheduledTimer(withTimeInterval: 1.5, repeats: false) { _ in
- self.addLevelFailedStamp()
- }
+ imageView = addLevelFailedStamp()
}
+
+ view!.addSubview(imageView!)
+
+ // XXX activeViews = [blurView, gameOverView, imageView, imageView2]
+ activeViews = [blurView, gameOverView, imageView!]
+
+ // Set a flag so that the update scene tick will fade the view in
+ showingGameOverView = true
}
- public func addLevelPassedStamp() {
+ public func addLevelPassedStamp() -> UIImageView {
let levelPassedStampView = UIImageView(image: UIImage(named: "level_passed_narrow4"))
levelPassedStampView.center = view!.center
levelPassedStampView.center.y -= 70
levelPassedStampView.contentMode = .scaleAspectFit
+ levelPassedStampView.alpha = 0
+ /* XXX REMOVE ME
view!.addSubview(levelPassedStampView)
activeViews.append(levelPassedStampView)
+ */
+ return levelPassedStampView
}
- public func addLevelFailedStamp() {
- let levelPassedStampView = UIImageView(image: UIImage(named: "level_failed_narrow4"))
- levelPassedStampView.center = view!.center
- levelPassedStampView.center.y -= 70
- levelPassedStampView.contentMode = .scaleAspectFit
+ public func addLevelFailedStamp() -> UIImageView {
+ let levelFailedStampView = UIImageView(image: UIImage(named: "level_failed_narrow4"))
+ levelFailedStampView.center = view!.center
+ levelFailedStampView.center.y -= 70
+ levelFailedStampView.contentMode = .scaleAspectFit
+ levelFailedStampView.alpha = 0
- view!.addSubview(levelPassedStampView)
+ /* XXX REMOVE ME
+ view!.addSubview(levelFailedStampView)
- activeViews.append(levelPassedStampView)
+ activeViews.append(levelFailedStampView)
+ */
+ return levelFailedStampView
}
- public func addHighScoreStamp() {
+ public func addHighScoreStamp() -> UIImageView {
let highScoreStamp = UIImageView(image: UIImage(named: "high_score_narrow4"))
highScoreStamp.center = view!.center
highScoreStamp.center.y -= 70
highScoreStamp.contentMode = .scaleAspectFit
+ highScoreStamp.alpha = 0
+ /* XXX REMOVE ME
view!.addSubview(highScoreStamp)
activeViews.append(highScoreStamp)
+ */
+ return highScoreStamp
}
public func removeGameOverView() {