From 48361738bab806383ffbcb1abc5b3ad84885ee33 Mon Sep 17 00:00:00 2001 From: 127-Z3R0 <81heti1bif@hft-stuttgart.de> Date: Tue, 2 Jun 2020 20:14:19 +0200 Subject: [PATCH 1/4] add RoundCount directly to HUD * add backgroundRoundCounter, currentRoundLabel, roundsLabel and roundlabel * add necessary Assets to project * add labels to EntityManager * minor refactoring in RoundCalculatorService and SettingsScene --- .../roundInfo_texture.imageset/Contents.json | 23 +++++++++ .../roundInfo_texture-1.png | Bin 0 -> 19597 bytes .../roundInfo_texture-2.png | Bin 0 -> 19597 bytes .../roundInfo_texture.png | Bin 0 -> 19597 bytes .../GoldWars/Entities/EntityManager.swift | 4 ++ GoldWars/GoldWars/Entities/HUD.swift | 46 ++++++++++++++++++ .../GoldWars/RoundCalculatorService.swift | 11 ++--- GoldWars/GoldWars/SettingsScene.swift | 1 - 8 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 GoldWars/GoldWars/Assets.xcassets/roundInfo_texture.imageset/Contents.json create mode 100644 GoldWars/GoldWars/Assets.xcassets/roundInfo_texture.imageset/roundInfo_texture-1.png create mode 100644 GoldWars/GoldWars/Assets.xcassets/roundInfo_texture.imageset/roundInfo_texture-2.png create mode 100644 GoldWars/GoldWars/Assets.xcassets/roundInfo_texture.imageset/roundInfo_texture.png diff --git a/GoldWars/GoldWars/Assets.xcassets/roundInfo_texture.imageset/Contents.json b/GoldWars/GoldWars/Assets.xcassets/roundInfo_texture.imageset/Contents.json new file mode 100644 index 0000000..2044f76 --- /dev/null +++ b/GoldWars/GoldWars/Assets.xcassets/roundInfo_texture.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "roundInfo_texture.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "roundInfo_texture-1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "roundInfo_texture-2.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GoldWars/GoldWars/Assets.xcassets/roundInfo_texture.imageset/roundInfo_texture-1.png b/GoldWars/GoldWars/Assets.xcassets/roundInfo_texture.imageset/roundInfo_texture-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2668882b0d6add6f27d1c973a2bcefbf5fa2bf23 GIT binary patch literal 19597 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

V|AG zVYw)hlHBkiOD4V3K4YVsH@-B*?Z|--s)7T-WU|CCmYc}#LVqHg@zH0C+jVCKLO3Dz z0%2#aSj&VC!6llkwPssR!gYpp^?tP|14FGg1H)l%mqmXfqg#P?l;(HIP)Fuf#_Sq9}V4z&yP1jVUIeQ`WA*vnE+fVRYk)}1~=~I6Z@b}_F6NYaLHR{~WD^ytCXdyO!y+z*{V?pA_iqbKC(-<)U>SZWboGitytOJpe9E)uYW9pK?{vKiG2RHZ+|LcPxNrt2y3jDpRpI&?(xrW1p717FgT!tIVEh6sc0;0o|@ zHAt}=|MVPh1}H=MWh?Wpd8zOC(}x5t!slvl)9-=6dkg`$nXkTa;g*-+4EmgsF(q05 zd3d#p3(Xk940)juGoxB8mLlUtf_HFAi*K5+gD6!q@A5nUq2jMIw6EQnqJ8D``jCwn z+q2D1%@yG5Y55In)xDYVG8n3rm!>EueTV-#l4Vo9k$pf zTDS3@_OaJ0Dpe*k6YU1hp(#AaMi#rWzH`{}!HEW}7t!Jy1}fws%*qf<6GX5Js&edD z@_LNDI6DjnMV-m%Qju#3wyS-<#JCbU@`?PxF_F6TTPB+KFJ5zN?59tYI))an*V{g|!~1FQb(-KVOTiiH*V}UkAvXMO|FOM>;?}IIZywl>NR`okt$*Gih%;fL3xMk7Mq6hz&zKdFE9_q zWIFvi5YE`YgF8(@7Vb;&a=W7`M~yK$1nKfBkjwzR*ZtE76xKy*cVCo8C2WN~?aI`d zA#Z$8RN^+K{^N1|F7Q`IY_p&pT=f|ypAqQsjm_}Q?}aHcntvO$0+%JlS~yS1mD zXJ+?P5P&f+Bd7UzzKELg2RilxppIoN<3E1lVhr(?SiP|RV;v!T%;H@T>!=jY^-d;$ zF!7k9k6seNi0j2zRU>fIX;cA-xKh6paAFv+Bm!rmqG4mq5Ds|aT$V|~KQb2KHiTp> z*^w~>|1iIHIqH#!P;#TcOh}_3yY

  • 3E_Ym$@4Kg^4H`>Bx?FT6cI9% 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

    V|AG zVYw)hlHBkiOD4V3K4YVsH@-B*?Z|--s)7T-WU|CCmYc}#LVqHg@zH0C+jVCKLO3Dz z0%2#aSj&VC!6llkwPssR!gYpp^?tP|14FGg1H)l%mqmXfqg#P?l;(HIP)Fuf#_Sq9}V4z&yP1jVUIeQ`WA*vnE+fVRYk)}1~=~I6Z@b}_F6NYaLHR{~WD^ytCXdyO!y+z*{V?pA_iqbKC(-<)U>SZWboGitytOJpe9E)uYW9pK?{vKiG2RHZ+|LcPxNrt2y3jDpRpI&?(xrW1p717FgT!tIVEh6sc0;0o|@ zHAt}=|MVPh1}H=MWh?Wpd8zOC(}x5t!slvl)9-=6dkg`$nXkTa;g*-+4EmgsF(q05 zd3d#p3(Xk940)juGoxB8mLlUtf_HFAi*K5+gD6!q@A5nUq2jMIw6EQnqJ8D``jCwn z+q2D1%@yG5Y55In)xDYVG8n3rm!>EueTV-#l4Vo9k$pf zTDS3@_OaJ0Dpe*k6YU1hp(#AaMi#rWzH`{}!HEW}7t!Jy1}fws%*qf<6GX5Js&edD z@_LNDI6DjnMV-m%Qju#3wyS-<#JCbU@`?PxF_F6TTPB+KFJ5zN?59tYI))an*V{g|!~1FQb(-KVOTiiH*V}UkAvXMO|FOM>;?}IIZywl>NR`okt$*Gih%;fL3xMk7Mq6hz&zKdFE9_q zWIFvi5YE`YgF8(@7Vb;&a=W7`M~yK$1nKfBkjwzR*ZtE76xKy*cVCo8C2WN~?aI`d zA#Z$8RN^+K{^N1|F7Q`IY_p&pT=f|ypAqQsjm_}Q?}aHcntvO$0+%JlS~yS1mD zXJ+?P5P&f+Bd7UzzKELg2RilxppIoN<3E1lVhr(?SiP|RV;v!T%;H@T>!=jY^-d;$ zF!7k9k6seNi0j2zRU>fIX;cA-xKh6paAFv+Bm!rmqG4mq5Ds|aT$V|~KQb2KHiTp> z*^w~>|1iIHIqH#!P;#TcOh}_3yY

  • 3E_Ym$@4Kg^4H`>Bx?FT6cI9% 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

    V|AG zVYw)hlHBkiOD4V3K4YVsH@-B*?Z|--s)7T-WU|CCmYc}#LVqHg@zH0C+jVCKLO3Dz z0%2#aSj&VC!6llkwPssR!gYpp^?tP|14FGg1H)l%mqmXfqg#P?l;(HIP)Fuf#_Sq9}V4z&yP1jVUIeQ`WA*vnE+fVRYk)}1~=~I6Z@b}_F6NYaLHR{~WD^ytCXdyO!y+z*{V?pA_iqbKC(-<)U>SZWboGitytOJpe9E)uYW9pK?{vKiG2RHZ+|LcPxNrt2y3jDpRpI&?(xrW1p717FgT!tIVEh6sc0;0o|@ zHAt}=|MVPh1}H=MWh?Wpd8zOC(}x5t!slvl)9-=6dkg`$nXkTa;g*-+4EmgsF(q05 zd3d#p3(Xk940)juGoxB8mLlUtf_HFAi*K5+gD6!q@A5nUq2jMIw6EQnqJ8D``jCwn z+q2D1%@yG5Y55In)xDYVG8n3rm!>EueTV-#l4Vo9k$pf zTDS3@_OaJ0Dpe*k6YU1hp(#AaMi#rWzH`{}!HEW}7t!Jy1}fws%*qf<6GX5Js&edD z@_LNDI6DjnMV-m%Qju#3wyS-<#JCbU@`?PxF_F6TTPB+KFJ5zN?59tYI))an*V{g|!~1FQb(-KVOTiiH*V}UkAvXMO|FOM>;?}IIZywl>NR`okt$*Gih%;fL3xMk7Mq6hz&zKdFE9_q zWIFvi5YE`YgF8(@7Vb;&a=W7`M~yK$1nKfBkjwzR*ZtE76xKy*cVCo8C2WN~?aI`d zA#Z$8RN^+K{^N1|F7Q`IY_p&pT=f|ypAqQsjm_}Q?}aHcntvO$0+%JlS~yS1mD zXJ+?P5P&f+Bd7UzzKELg2RilxppIoN<3E1lVhr(?SiP|RV;v!T%;H@T>!=jY^-d;$ zF!7k9k6seNi0j2zRU>fIX;cA-xKh6paAFv+Bm!rmqG4mq5Ds|aT$V|~KQb2KHiTp> z*^w~>|1iIHIqH#!P;#TcOh}_3yY

  • 3E_Ym$@4Kg^4H`>Bx?FT6cI9% zsKDH+T8&UW;XnL2yflkO(Aq&&q^c8Z@t#B7**;%Z@%4VJcQO$H%|8rdWVNcr?cEGmU$1ad>a?(#UO70u-C|4>DcIvX_!6 z2{HkY{{bAWU?fm+!hz}%Kdne2+3IhHPc5d|DaUt_GQ(z!38^_VYBJQFU}Ef{l$)Zl zXQE3+@%_HZlTG>8J^mxO&qKtYs!~gI000PINkl8zJaR!TPH5K^9Hy4DDW?=Rlc2{qS#ojB%$%sG?-Z%kx4<$GTCgRLEa>k5|v2$ zK9t>I5@n49I07I%mx{(CgkkDmV3#6zOU5z3@ye$pq%ES7YKqxd zZ%A95xS%KFnNp?vi5LIt2LG}DSrp!%iXk4WfmyO@JbyI2zoDztOv#W5z)S*2Hqmlgu;wywwRM`rcp`ortdQezlQvMDn1rrAyn0{8I?5g@ECN())uL(#~jGn=2NT%;I5eLW0Ajyt#w5*}6Zal14FZJ(J z*$i&w`e)D7zyGeGXV0E5X9X-VOG%Ll-FF3sdcQV|j5Kkj!Ykt!g-O$v6^P^=zgjJJ zQe>LP^fO(&T~f7>gz%SQ**Hh5OmK2$ILA&g-%iTSD_M}xNDlb(xexcoTK8BDiG_KXKasI$+*oeYV zRDuyk4v*_mGDToQ_*Z%)5fYIk<0_to(e5GiwJ=J0vMGN71U#yb|10>i#ng}TA)Z63 zMa&qrTq3|r^iXnS0!~u^8s6teMM#4UIfBaP4y+#NxlBBp3rCkv-)90qz=G5Lk@yCg zP1Ka~_o-}OJl1IC`tQHnZehzUw|ph5>k_n-9GN)O!)k~N)XYl*^49J335&zTX-jOV zhHfBzp9w05*5BKfOuZWF_o+ApAGy-kEv)|Wy2S|SMz$b2D{Ki_N{&p#reD8)fBW1v z+qjYx2UNb29H7S@%I<*}E6Q1GtjL*`v3)i}FAn)EamdEIbc!g@Bf+14Hq?V3eiWhd zGJ4A2MhG>D|G)4EWExkyxUrhR5pMzGgU`Q>{-t^@NiqSfse^|M!IN65Z)Kw?a_P3z z8G&>Vb}Bjj_$Q~P&CLp0cv1{a-)913Y7tQVfX@212oPPg^FOKw{5)7Up0$KO->$ZN zvdmb0VUOMS2wQBi#jA3Z@FAjAQkTe~9`2hiP)*~?BDA!;ftAGn#WEA?H5kH*HVLkD z;0g&}>|i|*B+~bpu#AeNVVgs$04}X(U?T*3DSV%)94*{Pz6`2M(uL|;dBuYV4!j3C zkNMO%KPbU?Cd$=1MKd}ItRY0bd*G+7K>0ool4;(qks(h8Cdl^h;C0eeV@s3 zA|8&dfdhxNLJ_JO{XP|k<=pQh)=riQE@RL!$K2fzhImw?k|h%_ZigLq_y@Oh$_&v~ zC6{4&5x*XS7Lpb3HE&iP$rSge3w9EUN8VGJUVu=v&_F;H3Ad!YRxQ*9eOgOl%PAzE zz7J(Reof#%W-Q)Wo3$JjVTjvkBxr~?XvmPtd(x}IO7l?CWCCQIR0S4!D)wB+(P@?({wtsrpclk6=zSKwK zq{_tE8`-2pL;pSzOBXv++8e|7skoQNgQGdhsA9mVA>SNwJ9Hp_@Ki-4Ije~P2+$S7 zJ+`H6u>2oQqcxWWzZk}|n$hCDt~r*fvvt59 zvv?JseDX=(YN|`UikEcH=Z-oEPk3b z4uguRr2LC;)jt0F?z=CCcyAPQP4*fm_F4Gfa?35ZBAsMv8UYOTHv8fiznCj^fl$cH z{k3W?vzvc`2t`t4aWtVtX(V|7g?Af!wRMUD? z+vzogVIDE~7%vS@=hzKDn0U0ayih+r^-z!?PhceGcJs-OaRg}miYaHoW{KJ0Y}R;; z0TfI5*A)I=-*3OrsZ*zMRcfK+oh?fK3UPs))qD5dcYiVT+@aSPC3xgG3}-61o)d9Y z=6;b@)OCtlBv=Zj5Kq1?%TyF0#${kdXaT1t&nzh(>oos(RbG@j$)C&jTC(`eG{R9A z0{ () { + backgroundRoundCounter.zPosition = 2 + backgroundRoundCounter.position = CGPoint(x: Double(size.width) * 0.06, y: Double(size.height) * 0.08) + + currentRoundLabel.text = "\(RoundCalculatorService.sharedInstance.roundcount)" + currentRoundLabel.fontSize = 50 + currentRoundLabel.fontColor = SKColor.black + currentRoundLabel.verticalAlignmentMode = .center + currentRoundLabel.position = CGPoint(x: backgroundRoundCounter.position.x, y: backgroundRoundCounter.position.y - 5) + currentRoundLabel.zPosition = backgroundRoundCounter.zPosition + 1 + + roundsLabel.zPosition = backgroundRoundCounter.zPosition + 1 + roundsLabel.text = "of \(RoundCalculatorService.sharedInstance.rounds)" + roundsLabel.fontColor = SKColor.black + roundsLabel.verticalAlignmentMode = .center + roundsLabel.fontSize = 12 + roundsLabel.position = CGPoint(x: currentRoundLabel.position.x, y: currentRoundLabel.position.y - 25) + + roundLabel.zPosition = backgroundRoundCounter.zPosition + 1 + roundLabel.text = "Round" + roundLabel.fontColor = SKColor.black + roundLabel.verticalAlignmentMode = .center + roundLabel.fontSize = 12 + roundLabel.position = CGPoint(x: currentRoundLabel.position.x, y: currentRoundLabel.position.y + 25) + } + + func setCurrentRound(round: Int) -> Void { + currentRoundLabel.text = "\(round)" + let newRoundAction = SKAction.sequence([ + SKAction.scale(by: 2, duration: 1), + SKAction.scale(by: 0.5, duration: 1), + ]) + currentRoundLabel.run(newRoundAction) + } } diff --git a/GoldWars/GoldWars/RoundCalculatorService.swift b/GoldWars/GoldWars/RoundCalculatorService.swift index fc57f96..a70efdd 100644 --- a/GoldWars/GoldWars/RoundCalculatorService.swift +++ b/GoldWars/GoldWars/RoundCalculatorService.swift @@ -10,20 +10,19 @@ import GameKit import os class RoundCalculatorService { + var entityManager = EntityManager.gameEMInstance static let sharedInstance = RoundCalculatorService() static let LOG = OSLog.init(subsystem: "Round Calculator", category: "RoundCalculatorService") - let ATK_BOOST_MULTIPLICATOR = 1.1 - let DEF_BOOST_MULTIPLICATOR = 1.1 - var allPlayerMoves: [String: [PlayerMove]] = [:] // TODO: Better data structure var boosts: [String: (Bool, Bool)] = [:] // First bool is atk boost, second is def boost - var entityManager = EntityManager.gameEMInstance - + let ATK_BOOST_MULTIPLICATOR = 1.1 + let DEF_BOOST_MULTIPLICATOR = 1.1 + let MAX_ROUNDS = 20 + var currentRound = 1 var isCalculating = false - var numberOfAttacks = 0 var numberOfOwnUnitMoves = 0 diff --git a/GoldWars/GoldWars/SettingsScene.swift b/GoldWars/GoldWars/SettingsScene.swift index 306e579..2e0760d 100644 --- a/GoldWars/GoldWars/SettingsScene.swift +++ b/GoldWars/GoldWars/SettingsScene.swift @@ -13,7 +13,6 @@ class SettingsScene: SKScene { var entityManager = EntityManager.settingsEMInstance override func sceneDidLoad() { - entityManager.setScene(scene: self) let positionX = self.size.width * 0.1 let positionY = self.size.height * 0.05 From 028282f7847e1c8d8599733d59eaa7ef760c23e9 Mon Sep 17 00:00:00 2001 From: 127-Z3R0 <81heti1bif@hft-stuttgart.de> Date: Tue, 2 Jun 2020 20:52:11 +0200 Subject: [PATCH 2/4] implement RoundIncrement feature --- GoldWars/GoldWars/Entities/HUD.swift | 4 ++-- GoldWars/GoldWars/GameCenterManager.swift | 2 ++ GoldWars/GoldWars/RoundCalculatorService.swift | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/GoldWars/GoldWars/Entities/HUD.swift b/GoldWars/GoldWars/Entities/HUD.swift index ab72ece..a05168c 100644 --- a/GoldWars/GoldWars/Entities/HUD.swift +++ b/GoldWars/GoldWars/Entities/HUD.swift @@ -150,7 +150,7 @@ class HUD: GKEntity { backgroundRoundCounter.zPosition = 2 backgroundRoundCounter.position = CGPoint(x: Double(size.width) * 0.06, y: Double(size.height) * 0.08) - currentRoundLabel.text = "\(RoundCalculatorService.sharedInstance.roundcount)" + currentRoundLabel.text = "\(RoundCalculatorService.sharedInstance.currentRound)" currentRoundLabel.fontSize = 50 currentRoundLabel.fontColor = SKColor.black currentRoundLabel.verticalAlignmentMode = .center @@ -158,7 +158,7 @@ class HUD: GKEntity { currentRoundLabel.zPosition = backgroundRoundCounter.zPosition + 1 roundsLabel.zPosition = backgroundRoundCounter.zPosition + 1 - roundsLabel.text = "of \(RoundCalculatorService.sharedInstance.rounds)" + roundsLabel.text = "of \(RoundCalculatorService.sharedInstance.MAX_ROUNDS)" roundsLabel.fontColor = SKColor.black roundsLabel.verticalAlignmentMode = .center roundsLabel.fontSize = 12 diff --git a/GoldWars/GoldWars/GameCenterManager.swift b/GoldWars/GoldWars/GameCenterManager.swift index 64bfd7a..b5314a3 100644 --- a/GoldWars/GoldWars/GameCenterManager.swift +++ b/GoldWars/GoldWars/GameCenterManager.swift @@ -159,6 +159,8 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG } if let snapshotModel = try? jsonDecoder.decode(SnapshotModel.self, from: data) { DataService.sharedInstance.snapshotModel = snapshotModel + RoundCalculatorService.sharedInstance.currentRound += 1 + entityManager.getHUD()?.setCurrentRound(round: RoundCalculatorService.sharedInstance.currentRound) entityManager.updateSnapshotModel(snapshotModel: snapshotModel) entityManager.getHUD()?.startWithDuration() } diff --git a/GoldWars/GoldWars/RoundCalculatorService.swift b/GoldWars/GoldWars/RoundCalculatorService.swift index a70efdd..00fbf43 100644 --- a/GoldWars/GoldWars/RoundCalculatorService.swift +++ b/GoldWars/GoldWars/RoundCalculatorService.swift @@ -147,6 +147,10 @@ class RoundCalculatorService { DataService.sharedInstance.localRoundData.localPlayerMoves.removeAll() DataService.sharedInstance.localRoundData.hasAttackBoost = false DataService.sharedInstance.localRoundData.hasDefenceBoost = false + + currentRound += 1 + entityManager.getHUD()?.setCurrentRound(round: currentRound) + MultiplayerNetwork.sharedInstance.sendSnapshotModelToPlayers() DataService.sharedInstance.snapshotModel = currentSnapshotModel entityManager.updateSnapshotModel(snapshotModel: currentSnapshotModel!) From 09062d5f5df010ae4b9acf8cc4c9093b6c2386bd Mon Sep 17 00:00:00 2001 From: 127-Z3R0 <81heti1bif@hft-stuttgart.de> Date: Tue, 2 Jun 2020 21:51:37 +0200 Subject: [PATCH 3/4] add isGameOver and determineHost func * adjust position finish button small refactoring and delete prints -> ready to merge --- GoldWars/GoldWars/Entities/HUD.swift | 4 +- GoldWars/GoldWars/GameCenterManager.swift | 56 +++++++++++-------- .../GoldWars/RoundCalculatorService.swift | 43 +++++++++++++- 3 files changed, 76 insertions(+), 27 deletions(-) diff --git a/GoldWars/GoldWars/Entities/HUD.swift b/GoldWars/GoldWars/Entities/HUD.swift index a05168c..04b0c60 100644 --- a/GoldWars/GoldWars/Entities/HUD.swift +++ b/GoldWars/GoldWars/Entities/HUD.swift @@ -89,8 +89,8 @@ class HUD: GKEntity { text: "Done", isEnabled: true, position: CGPoint( - x: EntityManager.gameEMInstance.scene.size.width * 0.1, - y: EntityManager.gameEMInstance.scene.size.height * 0.1), + x: EntityManager.gameEMInstance.scene.size.width * 0.15, + y: EntityManager.gameEMInstance.scene.size.height * 0.06), onButtonPress: { } ) finishButton.size = CGSize(width: 80, height: 40) diff --git a/GoldWars/GoldWars/GameCenterManager.swift b/GoldWars/GoldWars/GameCenterManager.swift index b5314a3..adbdea2 100644 --- a/GoldWars/GoldWars/GameCenterManager.swift +++ b/GoldWars/GoldWars/GameCenterManager.swift @@ -22,6 +22,8 @@ struct State: Codable { // 1 RemotePlayerInit fertig // 2 Peer hat Map erhalten // 3 Host hat Spiel gestartet + // 4 Peer hat verloren + // 5 Peer hat gewonnen let state: Int } @@ -92,7 +94,7 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG achievement.percentComplete += increasePercentComplete achievement.showsCompletionBanner = true GKAchievement.report([achievement]) { (error) in - print(error?.localizedDescription ?? "") + print(error?.localizedDescription ?? "") } } }) @@ -101,7 +103,7 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG newAchievement.showsCompletionBanner = true newAchievement.percentComplete = increasePercentComplete GKAchievement.report([newAchievement]) { (error) in - print(error?.localizedDescription ?? "") + print(error?.localizedDescription ?? "") } } } @@ -129,29 +131,35 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG } if let state = try? jsonDecoder.decode(State.self, from: data) { switch state.state { - case 0: - os_log("State 0 erhalten", log: LOG, type: .info) - sendStateToPeers(state: State(state: 1)) - case 1: - os_log("State 1 erhalten", log: LOG, type: .info) - - if isServer { - os_log("Peer hat Player initialisiert", log: LOG, type: .info) - initAndSendMap() - }else { - os_log("Host hat Player initialisiert", log: LOG, type: .info) + case 0: + os_log("State 0 erhalten", log: LOG, type: .info) + sendStateToPeers(state: State(state: 1)) + case 1: + os_log("State 1 erhalten", log: LOG, type: .info) + + if isServer { + os_log("Peer hat Player initialisiert", log: LOG, type: .info) + initAndSendMap() + }else { + os_log("Host hat Player initialisiert", log: LOG, type: .info) } - case 2: - os_log("State 2 erhalten", log: LOG, type: .info) - sendStateToPeers(state: State(state: 3)) - initIsFinish = true - os_log("Spiel startet", log: LOG, type: .info) - case 3: - os_log("State 3 erhalten", log: LOG, type: .info) - initIsFinish = true - os_log("Spiel startet", log: LOG, type: .info) - default: - break + case 2: + os_log("State 2 erhalten", log: LOG, type: .info) + sendStateToPeers(state: State(state: 3)) + initIsFinish = true + os_log("Spiel startet", log: LOG, type: .info) + case 3: + os_log("State 3 erhalten", log: LOG, type: .info) + initIsFinish = true + os_log("Spiel startet", log: LOG, type: .info) + case 4: + os_log("State 4 erhalten, Peer hat verloren", log: LOG, type: .info) + // TODO: Trigger Loser Scene + case 5: + os_log("State 5 erhalten, Peer hat gewonnen", log: LOG, type: .info) + // TODO: Trigger Winner Scene + default: + break } } if let roundData = try? jsonDecoder.decode(LocalRoundData.self, from: data) { diff --git a/GoldWars/GoldWars/RoundCalculatorService.swift b/GoldWars/GoldWars/RoundCalculatorService.swift index 00fbf43..a604a1a 100644 --- a/GoldWars/GoldWars/RoundCalculatorService.swift +++ b/GoldWars/GoldWars/RoundCalculatorService.swift @@ -148,6 +148,18 @@ class RoundCalculatorService { DataService.sharedInstance.localRoundData.hasAttackBoost = false DataService.sharedInstance.localRoundData.hasDefenceBoost = false + if isGameOver() { + let winner: String? + if MAX_ROUNDS == currentRound { + os_log("Game is over by rounds", log: RoundCalculatorService.LOG, type: .info) + winner = determineWinner(by: "rounds") + } else { + os_log("Game is over by capture", log: RoundCalculatorService.LOG, type: .info) + winner = determineWinner(by: "capture") + } + winner == GameCenterManager.sharedInstance.hostingPlayer?.displayName ? GameCenterManager.sharedInstance.sendStateToPeers(state: State(state: 4)) : GameCenterManager.sharedInstance.sendStateToPeers(state: State(state: 5)) + return + } currentRound += 1 entityManager.getHUD()?.setCurrentRound(round: currentRound) @@ -171,7 +183,7 @@ class RoundCalculatorService { DataService.sharedInstance.remotePlayerMoves[GameCenterManager.sharedInstance.peerPlayer!.displayName]?.hasAttackBoost ?? false, DataService.sharedInstance.remotePlayerMoves[GameCenterManager.sharedInstance.peerPlayer!.displayName]?.hasDefenceBoost ?? false ) - + allPlayerMoves[GKLocalPlayer.local.displayName] = DataService.sharedInstance.localRoundData.localPlayerMoves var baseSpecificMoves: [Int: [String: [PlayerMove]]] = [:] @@ -209,4 +221,33 @@ class RoundCalculatorService { self.numberOfAttacks += 1 } } + + func isGameOver() -> Bool { + let remoteplayerBasesCount = entityManager.getBasesByPlayer(for: GameCenterManager.sharedInstance.peerPlayer!).count + let localplayerBasesCount = entityManager.getBasesByPlayer(for: GameCenterManager.sharedInstance.hostingPlayer!).count + let onePlayerLoseAllBases = remoteplayerBasesCount == 0 || localplayerBasesCount == 0 + let reachMaxRounds = MAX_ROUNDS == currentRound + return onePlayerLoseAllBases || reachMaxRounds + } + + func determineWinner(by criteria: String) -> String { + var winner: String? + switch criteria { + case "rounds": + let peerPlayerBasesCount = entityManager.getBasesByPlayer(for: GameCenterManager.sharedInstance.peerPlayer!).count + let hostingPlayerBasesCount = entityManager.getBasesByPlayer(for: GameCenterManager.sharedInstance.hostingPlayer!).count + if peerPlayerBasesCount == hostingPlayerBasesCount { + let hostingPlayerUnitCount = entityManager.getUnitSum(by: GameCenterManager.sharedInstance.hostingPlayer!) + let peerPlayerUnitCount = entityManager.getUnitSum(by: GameCenterManager.sharedInstance.peerPlayer!) + winner = hostingPlayerUnitCount > peerPlayerUnitCount ? GameCenterManager.sharedInstance.hostingPlayer?.displayName : GameCenterManager.sharedInstance.peerPlayer?.displayName + } else { + winner = hostingPlayerBasesCount > peerPlayerBasesCount ? GameCenterManager.sharedInstance.hostingPlayer?.displayName : GameCenterManager.sharedInstance.peerPlayer?.displayName + } + case "capture": + winner = entityManager.getBasesByPlayer(for: GameCenterManager.sharedInstance.hostingPlayer!).count == 0 ? GameCenterManager.sharedInstance.peerPlayer?.displayName : GameCenterManager.sharedInstance.hostingPlayer?.displayName + default: + break + } + return winner! + } } From cbf288e86d375bad65beca8fca75871b9b9f4c2c Mon Sep 17 00:00:00 2001 From: 127-Z3R0 <81heti1bif@hft-stuttgart.de> Date: Tue, 2 Jun 2020 22:18:59 +0200 Subject: [PATCH 4/4] minor refactoring --- GoldWars/GoldWars/GameCenterManager.swift | 58 +++++++++---------- .../GoldWars/RoundCalculatorService.swift | 1 + 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/GoldWars/GoldWars/GameCenterManager.swift b/GoldWars/GoldWars/GameCenterManager.swift index adbdea2..d10654b 100644 --- a/GoldWars/GoldWars/GameCenterManager.swift +++ b/GoldWars/GoldWars/GameCenterManager.swift @@ -131,35 +131,35 @@ final class GameCenterManager: NSObject, GKMatchmakerViewControllerDelegate, GKG } if let state = try? jsonDecoder.decode(State.self, from: data) { switch state.state { - case 0: - os_log("State 0 erhalten", log: LOG, type: .info) - sendStateToPeers(state: State(state: 1)) - case 1: - os_log("State 1 erhalten", log: LOG, type: .info) - - if isServer { - os_log("Peer hat Player initialisiert", log: LOG, type: .info) - initAndSendMap() - }else { - os_log("Host hat Player initialisiert", log: LOG, type: .info) - } - case 2: - os_log("State 2 erhalten", log: LOG, type: .info) - sendStateToPeers(state: State(state: 3)) - initIsFinish = true - os_log("Spiel startet", log: LOG, type: .info) - case 3: - os_log("State 3 erhalten", log: LOG, type: .info) - initIsFinish = true - os_log("Spiel startet", log: LOG, type: .info) - case 4: - os_log("State 4 erhalten, Peer hat verloren", log: LOG, type: .info) - // TODO: Trigger Loser Scene - case 5: - os_log("State 5 erhalten, Peer hat gewonnen", log: LOG, type: .info) - // TODO: Trigger Winner Scene - default: - break + case 0: + os_log("State 0 erhalten", log: LOG, type: .info) + sendStateToPeers(state: State(state: 1)) + case 1: + os_log("State 1 erhalten", log: LOG, type: .info) + + if isServer { + os_log("Peer hat Player initialisiert", log: LOG, type: .info) + initAndSendMap() + }else { + os_log("Host hat Player initialisiert", log: LOG, type: .info) + } + case 2: + os_log("State 2 erhalten", log: LOG, type: .info) + sendStateToPeers(state: State(state: 3)) + initIsFinish = true + os_log("Spiel startet", log: LOG, type: .info) + case 3: + os_log("State 3 erhalten", log: LOG, type: .info) + initIsFinish = true + os_log("Spiel startet", log: LOG, type: .info) + case 4: + os_log("State 4 erhalten, Peer hat verloren", log: LOG, type: .info) + // TODO: Trigger Loser Scene + case 5: + os_log("State 5 erhalten, Peer hat gewonnen", log: LOG, type: .info) + // TODO: Trigger Winner Scene + default: + break } } if let roundData = try? jsonDecoder.decode(LocalRoundData.self, from: data) { diff --git a/GoldWars/GoldWars/RoundCalculatorService.swift b/GoldWars/GoldWars/RoundCalculatorService.swift index a604a1a..95f0c72 100644 --- a/GoldWars/GoldWars/RoundCalculatorService.swift +++ b/GoldWars/GoldWars/RoundCalculatorService.swift @@ -158,6 +158,7 @@ class RoundCalculatorService { winner = determineWinner(by: "capture") } winner == GameCenterManager.sharedInstance.hostingPlayer?.displayName ? GameCenterManager.sharedInstance.sendStateToPeers(state: State(state: 4)) : GameCenterManager.sharedInstance.sendStateToPeers(state: State(state: 5)) + //TODO: Trigger Winner/Loser-Scene for Server return } currentRound += 1