From f7af2713846a9f0318a4b1c0a2b05ac17b990a85 Mon Sep 17 00:00:00 2001 From: marco Date: Sat, 18 Sep 2021 15:52:28 -0600 Subject: [PATCH] Added darkened overlay and visual variety as the game progresses #10. Added fireworks as well #9. --- assets/images/overlay100.png | Bin 0 -> 50887 bytes assets/images/overlay40.png | Bin 0 -> 55459 bytes assets/images/overlay50.png | Bin 0 -> 55460 bytes assets/images/overlay60.png | Bin 0 -> 55459 bytes assets/images/overlay70.png | Bin 0 -> 55460 bytes assets/images/overlay80.png | Bin 0 -> 55458 bytes assets/images/overlay90.png | Bin 0 -> 55458 bytes lib/circuit_background.dart | 233 +++++++++++++++++++++++++++++------ lib/firework.dart | 3 +- lib/game_state.dart | 41 ++++++ lib/runner.dart | 3 - 11 files changed, 240 insertions(+), 40 deletions(-) create mode 100644 assets/images/overlay100.png create mode 100644 assets/images/overlay40.png create mode 100644 assets/images/overlay50.png create mode 100644 assets/images/overlay60.png create mode 100644 assets/images/overlay70.png create mode 100644 assets/images/overlay80.png create mode 100644 assets/images/overlay90.png diff --git a/assets/images/overlay100.png b/assets/images/overlay100.png new file mode 100644 index 0000000000000000000000000000000000000000..34371510df9a43a6cc07565f6f1b9bab8448c047 GIT binary patch literal 50887 zcmeI5O=w(I7=}+`(>6(?#lIG{Fu0Iz6iZzcieNOw3`nsyi-?<)^hcpEp^3Jl=xCu< zbWvQWo9e=a8(XLw%|eVQ=&Fc+6-iqKca|;$aZ`%-CUd^;OY)8sI-NAl6Da4MnRM>W zbI>qz|ys~rR`Q6XeDnqr}{;xj%hpsXEX< zbm+GW)BPQ3ZAzOiKeS``nOoM4_I^5fX7Z-ueZ)t7Q`bfDbotbWQycUvmCl3uh5G90 z4*kl#W2^KFM>&W911s0+w4$K!-HN25wX)@%drs!P z0L6d9$cmjt2d*Z&H?9`f(c@e1EHA_QKWks?Ti;deZLyChe!toBobcdlTjxBs2U9DW zZCJVO^Cp{IIEc{;0bBt_j?Au1B90Veq>(dP$t2>4Rw9i?Mk@kJLMw_2T2WNcilBm4 z1QfKQpd_@Su%Hz|1+54ui>Q@T7k-{_-AuRL4q!`0on2l|#lmFR_;wMG3)LD34Rw9j@Z+xwMb9zH>`PHuZ`?GVK-|p*>fgKLfvVaIK=o&kVWj#442xGd z)9mw$!0d`N8kyN8pm1+dP?pBMC7wAIA89l)6)&Jr@d`>?E56xg6hARKvd+R19a%#W z0v*`^!{UwKk!|}=BO2S8KrzncG5d&OR8%NNMTL93pn_He6jZOE@Ml&e6|^F-pcMfH zttcpHMN+w*v@(A)ik~nYKWE{I6(ncjiESy)!V?P#&cae_w6d@3#QC{<0VqsE90G+I zU|6Iu4TXo+6z1&vQH;*j6UFE(JW-6!!V<-3C_+Fh0ft4iVkkmDD*;B1XeE<~V~ey> z|8;V-{1Zv_{>#6-bYw@R%rr|Q=$u*F%_QQ;(r%=Y^Yzp$&F55%OyK~-B2(BJ4ENDeQX}MN@n)jPg)G=vc zDJm^$Va>etQtKx_``y|VDXr|O4)hQ46^a4{A#M(whx?qbmaB_0RPb<5&!@I literal 0 HcmV?d00001 diff --git a/assets/images/overlay40.png b/assets/images/overlay40.png new file mode 100644 index 0000000000000000000000000000000000000000..ec76e8bb575a8cd69e5b99a9e28d398170df8665 GIT binary patch literal 55459 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 Szy4D?Gd^Ze^p?o9cm4;?Y4^GS literal 0 HcmV?d00001 diff --git a/assets/images/overlay60.png b/assets/images/overlay60.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ec99e211107ad0b1de92de21bf147f0acdf666 GIT binary patch literal 55459 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 QI(I{o$k0qtV>KL7v# literal 0 HcmV?d00001 diff --git a/assets/images/overlay70.png b/assets/images/overlay70.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad9eac73e203e9aa474d37f21c6e3b931bb03ad GIT binary patch literal 55460 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 literal 0 HcmV?d00001 diff --git a/assets/images/overlay80.png b/assets/images/overlay80.png new file mode 100644 index 0000000000000000000000000000000000000000..5731049a6048a328314810662873965e82ed1c60 GIT binary patch literal 55458 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 W6rVBr<=2y#+7n}k#;lJTJN5rJ5Ak6D literal 0 HcmV?d00001 diff --git a/assets/images/overlay90.png b/assets/images/overlay90.png new file mode 100644 index 0000000000000000000000000000000000000000..c59cd610b349a2827ce7be8d2779ba00181bba4b GIT binary patch literal 55458 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 literal 0 HcmV?d00001 diff --git a/lib/circuit_background.dart b/lib/circuit_background.dart index ef9382b..543a78c 100644 --- a/lib/circuit_background.dart +++ b/lib/circuit_background.dart @@ -14,8 +14,27 @@ enum WindowState { seventh, } +enum OverlayState { + first, + second, + third, + fourth, + fifth, + sixth, + seventh, +} + class CircuitBackground extends MovingObject { late Image background; + + late Image overlay0; + late Image overlay1; + late Image overlay2; + late Image overlay3; + late Image overlay4; + late Image overlay5; + late Image overlay6; + late Image windows0; late Image windows1; late Image windows2; @@ -28,6 +47,8 @@ class CircuitBackground extends MovingObject { late Sprite background2; late SpriteAnimationGroupComponent windowA; late SpriteAnimationGroupComponent windowB; + late SpriteAnimationGroupComponent overlayA; + late SpriteAnimationGroupComponent overlayB; Vector2 background1Size = Vector2(0, 0); Vector2 background2Size = Vector2(0, 0); Vector2 background1Position = Vector2(0, 0); @@ -40,6 +61,100 @@ class CircuitBackground extends MovingObject { background1 = Sprite(background); background2 = Sprite(background); + overlay0 = await Flame.images.load("overlay100.png"); + overlay1 = await Flame.images.load("overlay90.png"); + overlay2 = await Flame.images.load("overlay80.png"); + overlay3 = await Flame.images.load("overlay70.png"); + overlay4 = await Flame.images.load("overlay60.png"); + overlay5 = await Flame.images.load("overlay50.png"); + overlay6 = await Flame.images.load("overlay40.png"); + + SpriteAnimation firstOverlay = SpriteAnimation.fromFrameData( + overlay0, + SpriteAnimationData.sequenced( + amount: 1, + stepTime: 1, + textureSize: Vector2(6000, 2000), + loop: false)); + + SpriteAnimation secondOverlay = SpriteAnimation.fromFrameData( + overlay1, + SpriteAnimationData.sequenced( + amount: 1, + stepTime: 1, + textureSize: Vector2(6000, 2000), + loop: false)); + + SpriteAnimation thirdOverlay = SpriteAnimation.fromFrameData( + overlay2, + SpriteAnimationData.sequenced( + amount: 1, + stepTime: 1, + textureSize: Vector2(6000, 2000), + loop: false)); + + SpriteAnimation fourthOverlay = SpriteAnimation.fromFrameData( + overlay3, + SpriteAnimationData.sequenced( + amount: 1, + stepTime: 1, + textureSize: Vector2(6000, 2000), + loop: false)); + + SpriteAnimation fifthOverlay = SpriteAnimation.fromFrameData( + overlay4, + SpriteAnimationData.sequenced( + amount: 1, + stepTime: 1, + textureSize: Vector2(6000, 2000), + loop: false)); + + SpriteAnimation sixthOverlay = SpriteAnimation.fromFrameData( + overlay5, + SpriteAnimationData.sequenced( + amount: 1, + stepTime: 1, + textureSize: Vector2(6000, 2000), + loop: false)); + + SpriteAnimation seventhOverlay = SpriteAnimation.fromFrameData( + overlay6, + SpriteAnimationData.sequenced( + amount: 1, + stepTime: 1, + textureSize: Vector2(6000, 2000), + loop: false)); + + overlayA = SpriteAnimationGroupComponent( + animations: { + OverlayState.first: firstOverlay, + OverlayState.second: secondOverlay, + OverlayState.third: thirdOverlay, + OverlayState.fourth: fourthOverlay, + OverlayState.fifth: fifthOverlay, + OverlayState.sixth: sixthOverlay, + OverlayState.seventh: seventhOverlay, + }, + current: OverlayState.first, + ); + + overlayB = SpriteAnimationGroupComponent( + animations: { + OverlayState.first: firstOverlay, + OverlayState.second: secondOverlay, + OverlayState.third: thirdOverlay, + OverlayState.fourth: fourthOverlay, + OverlayState.fifth: fifthOverlay, + OverlayState.sixth: sixthOverlay, + OverlayState.seventh: seventhOverlay, + }, + current: OverlayState.first, + ); + + overlayA.changePriorityWithoutResorting(WINDOW_PRIORITY - 1); + + overlayA.changePriorityWithoutResorting(WINDOW_PRIORITY - 1); + windows0 = await Flame.images.load("windows-0.png"); windows1 = await Flame.images.load("windows-1.png"); windows2 = await Flame.images.load("windows-2.png"); @@ -48,7 +163,7 @@ class CircuitBackground extends MovingObject { windows5 = await Flame.images.load("windows-5.png"); windows6 = await Flame.images.load("windows-6.png"); - SpriteAnimation first = SpriteAnimation.fromFrameData( + SpriteAnimation firstWindow = SpriteAnimation.fromFrameData( windows0, SpriteAnimationData.sequenced( amount: 1, @@ -56,7 +171,7 @@ class CircuitBackground extends MovingObject { textureSize: Vector2(6000, 2000), loop: false)); - SpriteAnimation second = SpriteAnimation.fromFrameData( + SpriteAnimation secondWindow = SpriteAnimation.fromFrameData( windows1, SpriteAnimationData.sequenced( amount: 1, @@ -64,7 +179,7 @@ class CircuitBackground extends MovingObject { textureSize: Vector2(6000, 2000), loop: false)); - SpriteAnimation third = SpriteAnimation.fromFrameData( + SpriteAnimation thirdWindow = SpriteAnimation.fromFrameData( windows2, SpriteAnimationData.sequenced( amount: 1, @@ -72,7 +187,7 @@ class CircuitBackground extends MovingObject { textureSize: Vector2(6000, 2000), loop: false)); - SpriteAnimation fourth = SpriteAnimation.fromFrameData( + SpriteAnimation fourthWindow = SpriteAnimation.fromFrameData( windows3, SpriteAnimationData.sequenced( amount: 1, @@ -80,7 +195,7 @@ class CircuitBackground extends MovingObject { textureSize: Vector2(6000, 2000), loop: false)); - SpriteAnimation fifth = SpriteAnimation.fromFrameData( + SpriteAnimation fifthWindow = SpriteAnimation.fromFrameData( windows4, SpriteAnimationData.sequenced( amount: 1, @@ -88,7 +203,7 @@ class CircuitBackground extends MovingObject { textureSize: Vector2(6000, 2000), loop: false)); - SpriteAnimation sixth = SpriteAnimation.fromFrameData( + SpriteAnimation sixthWindow = SpriteAnimation.fromFrameData( windows5, SpriteAnimationData.sequenced( amount: 1, @@ -96,7 +211,7 @@ class CircuitBackground extends MovingObject { textureSize: Vector2(6000, 2000), loop: false)); - SpriteAnimation seventh = SpriteAnimation.fromFrameData( + SpriteAnimation seventhWindow = SpriteAnimation.fromFrameData( windows6, SpriteAnimationData.sequenced( amount: 1, @@ -106,26 +221,26 @@ class CircuitBackground extends MovingObject { windowA = SpriteAnimationGroupComponent( animations: { - WindowState.first: first, - WindowState.second: second, - WindowState.third: third, - WindowState.fourth: fourth, - WindowState.fifth: fifth, - WindowState.sixth: sixth, - WindowState.seventh: seventh, + WindowState.first: firstWindow, + WindowState.second: secondWindow, + WindowState.third: thirdWindow, + WindowState.fourth: fourthWindow, + WindowState.fifth: fifthWindow, + WindowState.sixth: sixthWindow, + WindowState.seventh: seventhWindow, }, current: WindowState.first, ); windowB = SpriteAnimationGroupComponent( animations: { - WindowState.first: first, - WindowState.second: second, - WindowState.third: third, - WindowState.fourth: fourth, - WindowState.fifth: fifth, - WindowState.sixth: sixth, - WindowState.seventh: seventh, + WindowState.first: firstWindow, + WindowState.second: secondWindow, + WindowState.third: thirdWindow, + WindowState.fourth: fourthWindow, + WindowState.fifth: fifthWindow, + WindowState.sixth: sixthWindow, + WindowState.seventh: seventhWindow, }, current: WindowState.first, ); @@ -140,12 +255,16 @@ class CircuitBackground extends MovingObject { void setUp() { windowA.current = WindowState.first; windowB.current = WindowState.first; + overlayA.current = OverlayState.first; + overlayB.current = OverlayState.first; background1Position = Vector2(0, 0); background1Size = Vector2( gameRef.viewport.canvasSize.y * (background.width / background.height), gameRef.viewport.canvasSize.y); windowA.position = background1Position; windowA.size = background1Size; + overlayA.position = background1Position; + overlayA.size = background1Size; background2Position = Vector2(background1Position.x + background1Size.x - 1, 0); @@ -154,42 +273,72 @@ class CircuitBackground extends MovingObject { gameRef.viewport.canvasSize.y); windowB.position = background2Position; windowB.size = background2Size; + overlayB.position = background2Position; + overlayB.size = background2Size; } @override void update(double dt) { - switch (gameRef.gameState.getLevel()) { + switch (gameRef.gameState.getScoreLevel()) { + case 12: + windowA.current = WindowState.seventh; + windowB.current = WindowState.seventh; + break; + case 11: + overlayA.current = OverlayState.seventh; + overlayB.current = OverlayState.seventh; + break; + case 10: + windowA.current = WindowState.sixth; + windowB.current = WindowState.sixth; + break; + case 9: + overlayA.current = OverlayState.sixth; + overlayB.current = OverlayState.sixth; + break; + case 8: + windowA.current = WindowState.fifth; + windowB.current = WindowState.fifth; + break; case 7: - gameRef.circuitBackground.windowA.current = WindowState.seventh; - gameRef.circuitBackground.windowB.current = WindowState.seventh; + overlayA.current = OverlayState.fifth; + overlayB.current = OverlayState.fifth; break; case 6: - gameRef.circuitBackground.windowA.current = WindowState.sixth; - gameRef.circuitBackground.windowB.current = WindowState.sixth; + windowA.current = WindowState.fourth; + windowB.current = WindowState.fourth; break; case 5: - gameRef.circuitBackground.windowA.current = WindowState.fifth; - gameRef.circuitBackground.windowB.current = WindowState.fifth; + overlayA.current = OverlayState.fourth; + overlayB.current = OverlayState.fourth; break; case 4: - gameRef.circuitBackground.windowA.current = WindowState.fourth; - gameRef.circuitBackground.windowB.current = WindowState.fourth; + windowA.current = WindowState.third; + windowB.current = WindowState.third; break; case 3: - gameRef.circuitBackground.windowA.current = WindowState.third; - gameRef.circuitBackground.windowB.current = WindowState.third; + overlayA.current = OverlayState.third; + overlayB.current = OverlayState.third; break; case 2: - gameRef.circuitBackground.windowA.current = WindowState.second; - gameRef.circuitBackground.windowB.current = WindowState.second; + windowA.current = WindowState.second; + windowB.current = WindowState.second; + break; + case 1: + overlayA.current = OverlayState.second; + overlayB.current = OverlayState.second; break; default: - gameRef.circuitBackground.windowA.current = WindowState.first; - gameRef.circuitBackground.windowB.current = WindowState.first; + windowA.current = WindowState.first; + windowB.current = WindowState.first; + overlayA.current = OverlayState.first; + overlayB.current = OverlayState.first; break; } windowA.update(dt); windowB.update(dt); + overlayA.update(dt); + overlayB.update(dt); if (background1Position.x + background1Size.x < 0) { double newPosition = background2Position.x + background2Size.x; background1Position = Vector2(newPosition - 1, 0); @@ -201,19 +350,27 @@ class CircuitBackground extends MovingObject { double velocity = gameRef.gameState.getVelocity() / 10.0; background1Position = background1Position - Vector2(velocity * dt, 0); windowA.position = background1Position; + overlayA.position = background1Position; background2Position = background2Position - Vector2(velocity * dt, 0); windowB.position = background2Position; + overlayB.position = background2Position; } void render(Canvas canvas) { background1.render(canvas, size: background1Size, position: background1Position); canvas.save(); + overlayA.render(canvas); + canvas.restore(); + canvas.save(); windowA.render(canvas); canvas.restore(); background2.render(canvas, size: background2Size, position: background2Position); canvas.save(); + overlayB.render(canvas); + canvas.restore(); + canvas.save(); windowB.render(canvas); canvas.restore(); } @@ -224,6 +381,8 @@ class CircuitBackground extends MovingObject { Vector2(newSize.y * (background.width / background.height), newSize.y); windowA.position = background1Position; windowA.size = background1Size; + overlayA.position = background1Position; + overlayA.size = background1Size; background2Position = Vector2(background1Position.x + background1Size.x - 1, 0); @@ -231,5 +390,7 @@ class CircuitBackground extends MovingObject { Vector2(newSize.y * (background.width / background.height), newSize.y); windowB.position = background2Position; windowB.size = background2Size; + overlayB.position = background2Position; + overlayB.size = background2Size; } } diff --git a/lib/firework.dart b/lib/firework.dart index d3900c3..298dbf8 100644 --- a/lib/firework.dart +++ b/lib/firework.dart @@ -93,7 +93,8 @@ class Firework extends Component { } void reset() { - message = gameRef.gameState.numCoins.toString(); + // message = gameRef.gameState.numCoins.toString(); + message = "Speed Up!"; sprite1.animation!.reset(); sprite2.animation!.reset(); } diff --git a/lib/game_state.dart b/lib/game_state.dart index 94264e2..6051951 100644 --- a/lib/game_state.dart +++ b/lib/game_state.dart @@ -7,12 +7,17 @@ class GameState extends Component { int numCoins = 0; int distance = 0; late MyGame gameRef; + int previousLevel = 1; @override void update(double dt) { super.update(dt); if (!isPaused) { distance = DateTime.now().microsecondsSinceEpoch - start; + if (previousLevel != getLevel()) { + previousLevel = getLevel(); + gameRef.fireworks.reset(); + } } } @@ -24,6 +29,7 @@ class GameState extends Component { this.gameRef = gameRef; numCoins = 0; distance = 0; + previousLevel = 1; start = DateTime.now().microsecondsSinceEpoch; isPaused = false; } @@ -50,6 +56,41 @@ class GameState extends Component { } } + int getScoreLevel() { + int score = getScore(); + if (score > LEVEL7) { + return 12; + } else if (score > LEVEL6 + LEVEL6 / 2) { + return 11; + } else if (score > LEVEL6) { + return 10; + } else if (score > LEVEL5 + LEVEL5 / 2) { + return 9; + } else if (score > LEVEL5) { + return 8; + } else if (score > LEVEL4 + LEVEL4 / 2) { + return 7; + } else if (score > LEVEL4) { + return 6; + } else if (score > LEVEL3 + LEVEL3 / 2) { + return 5; + } else if (score > LEVEL3) { + return 4; + } else if (score > LEVEL2 + LEVEL2 / 2) { + return 3; + } else if (score > LEVEL2) { + return 2; + } else if (score > LEVEL2 - LEVEL2 / 2) { + return 1; + } else { + return 0; + } + } + + int getScore() { + return distance ~/ 10 + numCoins * 1000000; + } + double getVelocity() { if (!isPaused) { switch (getLevel()) { diff --git a/lib/runner.dart b/lib/runner.dart index 543857d..8a9fd97 100644 --- a/lib/runner.dart +++ b/lib/runner.dart @@ -357,9 +357,6 @@ class Runner extends Component with HasGameRef { for (int i = 0; i < coinLevel.length;) { if (coinLevel[i].intersect(runnerRect) != "none") { gameRef.gameState.numCoins++; - if (gameRef.gameState.numCoins % 5 == 0) { - gameRef.fireworks.reset(); - } gameRef.coinHolder.remove(coinLevel, i); continue; }