Add(2DAnimations): fireworks and winning text

pull/25/head
Johan LACHENAL 10 months ago
parent 6340d1ba5c
commit 373c1416e7

@ -27,6 +27,7 @@
C2DCC2BB2C19849A008AB78F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C2DCC2B92C19849A008AB78F /* Assets.xcassets */; };
C2DCC2BD2C19869B008AB78F /* Fireworks.sks in Resources */ = {isa = PBXBuildFile; fileRef = C2DCC2BC2C19869B008AB78F /* Fireworks.sks */; };
C2DCC2BF2C198702008AB78F /* actionEndGame.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2DCC2BE2C198702008AB78F /* actionEndGame.swift */; };
C2E32ED52C1C24A800DD37B6 /* FireworkLaunch.sks in Resources */ = {isa = PBXBuildFile; fileRef = C2E32ED42C1C24A800DD37B6 /* FireworkLaunch.sks */; };
C2F015092C09D366000F7221 /* LanguageSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F015082C09D366000F7221 /* LanguageSettings.swift */; };
C2F0150C2C09D3A4000F7221 /* KeyboardReadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F0150B2C09D3A4000F7221 /* KeyboardReadable.swift */; };
C2F015102C09D3C3000F7221 /* Language.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F0150E2C09D3C3000F7221 /* Language.swift */; };
@ -87,6 +88,7 @@
C2DCC2B92C19849A008AB78F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
C2DCC2BC2C19869B008AB78F /* Fireworks.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Fireworks.sks; sourceTree = "<group>"; };
C2DCC2BE2C198702008AB78F /* actionEndGame.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = actionEndGame.swift; sourceTree = "<group>"; };
C2E32ED42C1C24A800DD37B6 /* FireworkLaunch.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = FireworkLaunch.sks; sourceTree = "<group>"; };
C2F015082C09D366000F7221 /* LanguageSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LanguageSettings.swift; sourceTree = "<group>"; };
C2F0150B2C09D3A4000F7221 /* KeyboardReadable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardReadable.swift; sourceTree = "<group>"; };
C2F0150E2C09D3C3000F7221 /* Language.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Language.swift; sourceTree = "<group>"; };
@ -267,6 +269,7 @@
C2DCC2B82C19849A008AB78F /* Magic.sks */,
C2DCC2B92C19849A008AB78F /* Assets.xcassets */,
C2DCC2BC2C19869B008AB78F /* Fireworks.sks */,
C2E32ED42C1C24A800DD37B6 /* FireworkLaunch.sks */,
);
path = SKAnimations;
sourceTree = "<group>";
@ -468,6 +471,7 @@
buildActionMask = 2147483647;
files = (
C2DCC2BD2C19869B008AB78F /* Fireworks.sks in Resources */,
C2E32ED52C1C24A800DD37B6 /* FireworkLaunch.sks in Resources */,
C205A2BE2BF373380097BD93 /* Preview Assets.xcassets in Resources */,
C2DCC2BA2C19849A008AB78F /* Magic.sks in Resources */,
C2DCC2B62C1980A9008AB78F /* Spark.sks in Resources */,

@ -52,9 +52,23 @@ struct GameView: View {
}
func gameOver(result : Result) { print("Game over !")
// if(result)
msg = "Game over ! "
actionEndGame(scene: gameScene)
switch result
{
case .winner(let winner, _):
switch winner {
case .player1:
msg = msg + "player 1 wins !"
case .player2:
msg = msg + "player 2 wins !"
default:
msg = msg + "equality !"
}
default:
msg="Game over !"
}
// foreach gameScene.pieces
actionEndGame(scene: gameScene,message: msg)
}
func gameChange() { print("Game change !") }

@ -8,29 +8,89 @@
import Foundation
import SpriteKit
func actionEndGame(scene : SKScene) {
func actionEndGame(scene: SKScene, message: String) {
let size = scene.size
var delay: TimeInterval = 0.0
for _ in 0..<5 {
// Créer un effet de particule pour les feux d'artifice
if let fireworkEmitter = SKEmitterNode(fileNamed: "Spark.sks") {
// Position aléatoire pour chaque feu d'artifice
let randomX = CGFloat.random(in: 0..<size.width)
let randomY = CGFloat.random(in: 0..<size.height / 2) + size.height / 2
// Créer un effet de particule pour le lancement
if let launchEmitter = SKEmitterNode(fileNamed: "FireworkLaunch.sks") {
// Position de départ en bas de la scène
let startX: CGFloat = 0.0
let startY: CGFloat = (-size.height/2)
fireworkEmitter.position = CGPoint(x: randomX, y: randomY)
launchEmitter.position = CGPoint(x: startX, y: startY)
scene.addChild(launchEmitter)
// Action de montée
let moveUp = SKAction.moveBy(x: CGFloat.random(in: -(size.width/3)...(size.width/3)), y: CGFloat.random(in: (size.height/2)...(size.height/1.25)), duration: 2.0)
// Action de grossissement et de rapetissement
let scaleUp = SKAction.scale(to: 1.5, duration: 1.0)
let scaleDown = SKAction.scale(to: 1.0, duration: 1.0)
let scaleSequence = SKAction.sequence([scaleUp, scaleDown])
let moveAndScale = SKAction.group([moveUp, scaleSequence])
// Action pour déclencher l'explosion
let explode = SKAction.run {
createExplosion(at: launchEmitter.position, scene: scene)
launchEmitter.removeFromParent()
}
let wait = SKAction.wait(forDuration: delay)
// Séquence de montée puis explosion
let sequence = SKAction.sequence([wait,moveAndScale, explode])
launchEmitter.run(sequence)
delay += CGFloat.random(in: 0.3...0.6)
}
}
showWinningMessage(scene: scene, message: message)
}
func createExplosion(at position: CGPoint, scene: SKScene) {
// Créer un effet de particule pour l'explosion
if let explosionEmitter = SKEmitterNode(fileNamed: "Fireworks.sks") {
explosionEmitter.position = position
// Changer la couleur des particules
fireworkEmitter.particleColor = randomColor()
fireworkEmitter.particleColorBlendFactor = 1.0
explosionEmitter.particleColor = randomColor()
explosionEmitter.particleColorBlendFactor = 1.0
scene.addChild(fireworkEmitter)
scene.addChild(explosionEmitter)
// Retirer le feu d'artifice après une courte durée
// Retirer l'explosion après une courte durée
let wait = SKAction.wait(forDuration: 2.0)
let remove = SKAction.removeFromParent()
let sequence = SKAction.sequence([wait, remove])
fireworkEmitter.run(sequence)
explosionEmitter.run(sequence)
}
}
func showWinningMessage(scene: SKScene, message: String) {
let size = scene.size
let letters = Array(message)
let letterSpacing: CGFloat = 40.0
let totalWidth = CGFloat(letters.count) * letterSpacing
let startX = (0.0 - totalWidth) / 2
let startY = 0.0
for (index, letter) in letters.enumerated() {
let letterNode = SKLabelNode(text: String(letter))
letterNode.fontName = "Helvetica-Bold"
letterNode.fontSize = 50
letterNode.fontColor = .white
letterNode.position = CGPoint(x: startX + CGFloat(index) * letterSpacing, y: startY)
letterNode.alpha = 0
scene.addChild(letterNode)
let delay = SKAction.wait(forDuration: Double(index) * 0.1)
let fadeIn = SKAction.fadeIn(withDuration: 0.5)
let scaleUp = SKAction.scale(to: 1.5, duration: 0.25)
let scaleDown = SKAction.scale(to: 1.0, duration: 0.25)
let scaleSequence = SKAction.sequence([scaleUp, scaleDown])
let group = SKAction.group([fadeIn, scaleSequence])
let sequence = SKAction.sequence([delay, group])
letterNode.run(sequence)
}
}

Loading…
Cancel
Save