From fae2855bf94a4b01e91fb382ecbfd2b9253aa10f Mon Sep 17 00:00:00 2001 From: Niko <> Date: Sat, 2 May 2020 22:29:16 +0200 Subject: [PATCH 1/3] stash --- GoldWars/GoldWars.xcodeproj/project.pbxproj | 24 ++++-- .../Components/BackgroundComponent.swift | 10 +++ .../GoldWars/Components/ButtonComponent.swift | 28 +++++++ GoldWars/GoldWars/Components/ButtonNode.swift | 70 +++++++++++++++++ GoldWars/GoldWars/Entities/Button.swift | 29 +++++++ .../GoldWars/Entities/EntityManager.swift | 7 ++ GoldWars/GoldWars/GameViewController.swift | 15 ++-- GoldWars/GoldWars/Scenes/GameScene.sks | Bin 4126 -> 0 bytes GoldWars/GoldWars/Scenes/MenuScene.sks | Bin 8166 -> 0 bytes GoldWars/GoldWars/Scenes/MenuScene.swift | 72 +++++++++--------- 10 files changed, 202 insertions(+), 53 deletions(-) create mode 100644 GoldWars/GoldWars/Components/BackgroundComponent.swift create mode 100644 GoldWars/GoldWars/Components/ButtonComponent.swift create mode 100644 GoldWars/GoldWars/Components/ButtonNode.swift create mode 100644 GoldWars/GoldWars/Entities/Button.swift delete mode 100644 GoldWars/GoldWars/Scenes/GameScene.sks delete mode 100644 GoldWars/GoldWars/Scenes/MenuScene.sks diff --git a/GoldWars/GoldWars.xcodeproj/project.pbxproj b/GoldWars/GoldWars.xcodeproj/project.pbxproj index 37f6e37..675a919 100644 --- a/GoldWars/GoldWars.xcodeproj/project.pbxproj +++ b/GoldWars/GoldWars.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 110360D3244B101A008610AF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360D2244B101A008610AF /* AppDelegate.swift */; }; - 110360D5244B101A008610AF /* GameScene.sks in Resources */ = {isa = PBXBuildFile; fileRef = 110360D4244B101A008610AF /* GameScene.sks */; }; 110360D9244B101A008610AF /* GameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360D8244B101A008610AF /* GameScene.swift */; }; 110360DB244B101A008610AF /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360DA244B101A008610AF /* GameViewController.swift */; }; 110360DE244B101A008610AF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 110360DC244B101A008610AF /* Main.storyboard */; }; @@ -16,13 +15,16 @@ 110360E3244B101B008610AF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 110360E1244B101B008610AF /* LaunchScreen.storyboard */; }; 110360EE244B101B008610AF /* GoldWarsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360ED244B101B008610AF /* GoldWarsTests.swift */; }; 110360F9244B101B008610AF /* GoldWarsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360F8244B101B008610AF /* GoldWarsUITests.swift */; }; - 11036111244B3D6A008610AF /* MenuScene.sks in Resources */ = {isa = PBXBuildFile; fileRef = 11036110244B3D6A008610AF /* MenuScene.sks */; }; 11036113244B3E30008610AF /* MenuScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11036112244B3E30008610AF /* MenuScene.swift */; }; 116060F7245C57D2004E5A36 /* EntityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 116060F6245C57D2004E5A36 /* EntityManager.swift */; }; 11738A3B24508F68004426F1 /* Unit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11738A3A24508F68004426F1 /* Unit.swift */; }; 3EBD242C245D8044003CECE7 /* GameCenterHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBD242B245D8044003CECE7 /* GameCenterHelper.swift */; }; 3EBD242E245D9332003CECE7 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBD242D245D9332003CECE7 /* Team.swift */; }; 9E11FF79245CD81100EED3BE /* Fire.sks in Resources */ = {isa = PBXBuildFile; fileRef = 9E11FF77245CD81100EED3BE /* Fire.sks */; }; + 9E174C82245DD81D00209FF0 /* ButtonNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C81245DD81D00209FF0 /* ButtonNode.swift */; }; + 9E174C84245DD8CE00209FF0 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C83245DD8CE00209FF0 /* Button.swift */; }; + 9E174C86245DD91500209FF0 /* ButtonComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C85245DD91500209FF0 /* ButtonComponent.swift */; }; + 9E174C88245DF1FF00209FF0 /* BackgroundComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C87245DF1FF00209FF0 /* BackgroundComponent.swift */; }; 9E78ACB6245C9A5300526FF7 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E78ACB5245C9A5300526FF7 /* GameKit.framework */; }; 9E78ACB8245CB75B00526FF7 /* TeamComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E78ACB7245CB75B00526FF7 /* TeamComponent.swift */; }; 9E78ACBA245CBDAF00526FF7 /* HUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E78ACB9245CBDAF00526FF7 /* HUD.swift */; }; @@ -60,7 +62,6 @@ /* Begin PBXFileReference section */ 110360CF244B101A008610AF /* GoldWars.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GoldWars.app; sourceTree = BUILT_PRODUCTS_DIR; }; 110360D2244B101A008610AF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 110360D4244B101A008610AF /* GameScene.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = GameScene.sks; sourceTree = ""; }; 110360D8244B101A008610AF /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = ""; }; 110360DA244B101A008610AF /* GameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = ""; }; 110360DD244B101A008610AF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -73,13 +74,16 @@ 110360F4244B101B008610AF /* GoldWarsUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoldWarsUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 110360F8244B101B008610AF /* GoldWarsUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoldWarsUITests.swift; sourceTree = ""; }; 110360FA244B101B008610AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 11036110244B3D6A008610AF /* MenuScene.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = MenuScene.sks; sourceTree = ""; }; 11036112244B3E30008610AF /* MenuScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuScene.swift; sourceTree = ""; }; 116060F6245C57D2004E5A36 /* EntityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EntityManager.swift; sourceTree = ""; }; 11738A3A24508F68004426F1 /* Unit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Unit.swift; sourceTree = ""; }; 3EBD242B245D8044003CECE7 /* GameCenterHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameCenterHelper.swift; sourceTree = ""; }; 3EBD242D245D9332003CECE7 /* Team.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Team.swift; sourceTree = ""; }; 9E11FF77245CD81100EED3BE /* Fire.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Fire.sks; sourceTree = ""; }; + 9E174C81245DD81D00209FF0 /* ButtonNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ButtonNode.swift; sourceTree = ""; }; + 9E174C83245DD8CE00209FF0 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; + 9E174C85245DD91500209FF0 /* ButtonComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonComponent.swift; sourceTree = ""; }; + 9E174C87245DF1FF00209FF0 /* BackgroundComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundComponent.swift; sourceTree = ""; }; 9E78ACB5245C9A5300526FF7 /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System/Library/Frameworks/GameKit.framework; sourceTree = SDKROOT; }; 9E78ACB7245CB75B00526FF7 /* TeamComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeamComponent.swift; sourceTree = ""; }; 9E78ACB9245CBDAF00526FF7 /* HUD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HUD.swift; sourceTree = ""; }; @@ -186,6 +190,7 @@ 116060F4245C56EA004E5A36 /* Components */ = { isa = PBXGroup; children = ( + 9E174C81245DD81D00209FF0 /* ButtonNode.swift */, 9EA3ABE8245C6DAA006BC61D /* DefaultBaseComponent.swift */, 9EA3ABEC245C8143006BC61D /* ModalBackgroundComponent.swift */, 9EA3ABEE245C834B006BC61D /* ModalContentComponent.swift */, @@ -194,6 +199,8 @@ 9E78ACBD245CC9C000526FF7 /* AtkBoostSkillComponent.swift */, 9E78ACC3245CCA3600526FF7 /* SpySkillComponent.swift */, 9E78ACC1245CC9EE00526FF7 /* DefBoostSkillComponent.swift */, + 9E174C85245DD91500209FF0 /* ButtonComponent.swift */, + 9E174C87245DF1FF00209FF0 /* BackgroundComponent.swift */, ); path = Components; sourceTree = ""; @@ -205,6 +212,7 @@ 9EC86B9E245C88A300796EF3 /* Modal.swift */, 116060F6245C57D2004E5A36 /* EntityManager.swift */, 9E78ACB9245CBDAF00526FF7 /* HUD.swift */, + 9E174C83245DD8CE00209FF0 /* Button.swift */, ); path = Entities; sourceTree = ""; @@ -247,10 +255,8 @@ 9EC86BA4245C8A1E00796EF3 /* Scenes */ = { isa = PBXGroup; children = ( - 11036110244B3D6A008610AF /* MenuScene.sks */, 11036112244B3E30008610AF /* MenuScene.swift */, 110360D8244B101A008610AF /* GameScene.swift */, - 110360D4244B101A008610AF /* GameScene.sks */, ); path = Scenes; sourceTree = ""; @@ -369,8 +375,6 @@ buildActionMask = 2147483647; files = ( 110360DE244B101A008610AF /* Main.storyboard in Resources */, - 11036111244B3D6A008610AF /* MenuScene.sks in Resources */, - 110360D5244B101A008610AF /* GameScene.sks in Resources */, 9E11FF79245CD81100EED3BE /* Fire.sks in Resources */, 110360E0244B101B008610AF /* Assets.xcassets in Resources */, 110360E3244B101B008610AF /* LaunchScreen.storyboard in Resources */, @@ -407,8 +411,10 @@ 110360D9244B101A008610AF /* GameScene.swift in Sources */, 116060F7245C57D2004E5A36 /* EntityManager.swift in Sources */, 3EBD242E245D9332003CECE7 /* Team.swift in Sources */, + 9E174C88245DF1FF00209FF0 /* BackgroundComponent.swift in Sources */, 9E78ACBA245CBDAF00526FF7 /* HUD.swift in Sources */, 11738A3B24508F68004426F1 /* Unit.swift in Sources */, + 9E174C86245DD91500209FF0 /* ButtonComponent.swift in Sources */, 11036113244B3E30008610AF /* MenuScene.swift in Sources */, 9EA3ABE9245C6DAA006BC61D /* DefaultBaseComponent.swift in Sources */, 9EA3ABED245C8143006BC61D /* ModalBackgroundComponent.swift in Sources */, @@ -416,6 +422,8 @@ AB1D759C245DD18100671525 /* MapProtocoll.swift in Sources */, AB1D759D245DD18100671525 /* TwoPlayerDefaultTestMap.swift in Sources */, ABA03DA0244BD54F00A66916 /* Base.swift in Sources */, + 9E174C82245DD81D00209FF0 /* ButtonNode.swift in Sources */, + 9E174C84245DD8CE00209FF0 /* Button.swift in Sources */, 110360DB244B101A008610AF /* GameViewController.swift in Sources */, 110360D3244B101A008610AF /* AppDelegate.swift in Sources */, 9EC86B9F245C88A300796EF3 /* Modal.swift in Sources */, diff --git a/GoldWars/GoldWars/Components/BackgroundComponent.swift b/GoldWars/GoldWars/Components/BackgroundComponent.swift new file mode 100644 index 0000000..49244c0 --- /dev/null +++ b/GoldWars/GoldWars/Components/BackgroundComponent.swift @@ -0,0 +1,10 @@ +// +// BackgroundComponent.swift +// GoldWars +// +// Created by Niko Jochim on 02.05.20. +// Copyright © 2020 SP2. All rights reserved. +// + +import Foundation + diff --git a/GoldWars/GoldWars/Components/ButtonComponent.swift b/GoldWars/GoldWars/Components/ButtonComponent.swift new file mode 100644 index 0000000..57476db --- /dev/null +++ b/GoldWars/GoldWars/Components/ButtonComponent.swift @@ -0,0 +1,28 @@ +// +// ButtonComponent.swift +// GoldWars +// +// Created by Niko Jochim on 02.05.20. +// Copyright © 2020 SP2. All rights reserved. +// + +import Foundation +import GameplayKit + +class ButtonComponent: GKComponent { + + var buttonNode : ButtonNode + + init(iconName: String, text: String, position: CGPoint, isEnabled:Bool , onButtonPress: @escaping () -> ()) { + buttonNode = ButtonNode(iconName: iconName, + text: text, + isEnabled: isEnabled, + position: position, + onButtonPress: onButtonPress) + super.init() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/GoldWars/GoldWars/Components/ButtonNode.swift b/GoldWars/GoldWars/Components/ButtonNode.swift new file mode 100644 index 0000000..be4176c --- /dev/null +++ b/GoldWars/GoldWars/Components/ButtonNode.swift @@ -0,0 +1,70 @@ +// +// ButtonNode.swift +// GoldWars +// +// Created by Niko Jochim on 01.05.20. +// Copyright © 2020 SP2. All rights reserved. +// + +import Foundation +import SpriteKit + +class ButtonNode : SKSpriteNode { + + var isEnabled:Bool + + let onButtonPress: () -> () + + init(iconName: String, text: String,isEnabled:Bool, position: CGPoint, onButtonPress: @escaping () -> ()) { + + self.onButtonPress = onButtonPress + self.isEnabled = isEnabled + let texture = SKTexture(imageNamed: "yellow_button04") + super.init(texture: texture, color: SKColor.white, size: texture.size()) + self.position = position + + let label = SKLabelNode(fontNamed: "Courier-Bold") + + label.fontSize = 30 + label.fontColor = SKColor.black + + label.zPosition = 1 + label.verticalAlignmentMode = .center + label.text = text + label.name = "label" + + if !iconName.isEmpty { + label.position = CGPoint(x: size.width * 0.25, y: 0) + let icon = SKSpriteNode(imageNamed: iconName) + icon.position = CGPoint(x: -size.width * 0.25, y: 0) + icon.zPosition = 1 + self.addChild(icon) + } else { + label.position = CGPoint(x: 0, y: 0) + } + self.addChild(label) + isUserInteractionEnabled = true + } + + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + + if isEnabled { + let action = SKAction.sequence( + [ + SKAction.scale(by: (3/4), duration: 0.3), + SKAction.scale(by: (4/3), duration: 0.3), + ]) + + self.childNode(withName: "label")?.run(action) + self.run(action) + onButtonPress() + } + + } + + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/GoldWars/GoldWars/Entities/Button.swift b/GoldWars/GoldWars/Entities/Button.swift new file mode 100644 index 0000000..e2c52e2 --- /dev/null +++ b/GoldWars/GoldWars/Entities/Button.swift @@ -0,0 +1,29 @@ +// +// Button.swift +// GoldWars +// +// Created by Niko Jochim on 02.05.20. +// Copyright © 2020 SP2. All rights reserved. +// + +import Foundation +import GameKit + +class Button : GKEntity{ + let name : String + var isEnabled = true + + init(name: String, iconName: String, text: String, position: CGPoint, onButtonPress: @escaping () -> ()) { + self.name = name + super.init() + self.addComponent(ButtonComponent(iconName: iconName, text: text,position: position, isEnabled: isEnabled, onButtonPress: onButtonPress)) + } + + + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + +} diff --git a/GoldWars/GoldWars/Entities/EntityManager.swift b/GoldWars/GoldWars/Entities/EntityManager.swift index 8f94ce6..0c9ff60 100644 --- a/GoldWars/GoldWars/Entities/EntityManager.swift +++ b/GoldWars/GoldWars/Entities/EntityManager.swift @@ -50,6 +50,9 @@ class EntityManager { scene.addChild(skill.shapeNode) scene.addChild(skill.labelNode) } + if let buttonNode = entity.component(ofType: ButtonComponent.self)?.buttonNode { + scene.addChild(buttonNode) + } } @@ -85,4 +88,8 @@ class EntityManager { func baseNode(for team: Team) -> SKSpriteNode?{ return base(for: team)?.component(ofType: DefaultBaseComponent.self)?.spriteNode } + + func getButtonByName(buttonName:String) -> Button{ + return entities.filter{($0 as! Button).name == buttonName}[0] as! Button + } } diff --git a/GoldWars/GoldWars/GameViewController.swift b/GoldWars/GoldWars/GameViewController.swift index 158c6de..4eed433 100644 --- a/GoldWars/GoldWars/GameViewController.swift +++ b/GoldWars/GoldWars/GameViewController.swift @@ -16,17 +16,16 @@ class GameViewController: UIViewController { super.viewDidLoad() if let view = self.view as! SKView? { - if let scene = SKScene(fileNamed: "MenuScene") { - scene.scaleMode = .aspectFill - view.presentScene(scene) - //TODO: create dev profile or remove on delivery - view.showsFPS = true - view.showsNodeCount = true - } - } + let scene = MenuScene(size: self.view.bounds.size) + scene.scaleMode = .aspectFill + view.presentScene(scene) + //TODO: create dev profile or remove on delivery + view.showsFPS = true + view.showsNodeCount = true GameCenterHelper.helper.viewController = self } + } override var shouldAutorotate: Bool { return true diff --git a/GoldWars/GoldWars/Scenes/GameScene.sks b/GoldWars/GoldWars/Scenes/GameScene.sks deleted file mode 100644 index ebf306afa8e8897c9ce187eaebeb9ac81f51cb73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4126 zcmaJ^33wFM9sj@Gw=+9OU^xWB8Iph;AuIu6I0SNVMnYsE8$yy{vO7tJYn;fA9T| z-~0XFG$dlWl?(=t009qpfr1Y>;GuVQZkuLWx)EQNtD2E!9lw_3CXGaOuFc%#8)u$hdoS*&bZpd9)@U(jJCB;XoY z1*@SQ*1#R`3%C=03G3lka2MPS_rL~t5T1oy@Ekl3FTl(23cL!h!vS~;4#5#P3LnC8 zFyJHj7*4_;i9kfsgY<^8qz@TRvPllfC8Nk_l1IjoLNbNSATvoRnM3B21*C#3Az`wd z)RShSla-`}#7OJX+;}P$I}sQImq9=14+9_*2Erg13`1Zj41+8f4%v_cxiA7o!sRdu zM#C5w3wbaO@?ks#VFDDuM3@AVp%AWsBA5bGVH!+_D`5uAgjrAwB~S`wFdJJL%!B!` z0H0T3tAIs#FGihGlrF_K3#w64gWtv2>Op}OprT|JL_vc_Xo9j@C%#I9k%~vH8fEoj zBdOX+sZp$!NTr&xwCFM=VOY8?R06$}1~t;sWZLSbM$9ma!;00cMm4imQR9(j!>ly) zc(P7uaX{hZ*HQuj_dAqo2qjECsiEk|1;JcO3BDxx5l=%Xrsw0?} z6+I5Zy-YT4_i`D_dP1g=9ruZMN;Q}`JZnZ#t4!FsTsEU*PP(M@nO+yb}4&*3)o zvp4I@a#$`K!A7z{cD5=@l$H>prBqF7O@@gm9A?WBrq-rwt6bQJoSm{Xt~VNHD*`I} zLXGm-Q9Wsxjtuc0l-v&wU<`{*Q*GY__e0x>KqhkAG-Ru6 zWVs>8Rz=8UTr|&<#N>H z*gGGdMEQ14M0M@Dkj<5q`%8ZiFb}7xSBWQIzcXVivDSY4gk6c?4Q0ARS*qE-8TPV`( zy$$cc!Ol*W7ufkFdxo z4SWly;cxJF_zwO7XW)DI0W0l4;a^ytPr_L^2d#v_0pi8?R%|C>HQ@-4I;-l{cvC8- zB89ak^mx-!#X|HUtmB#%wUEb?dOT&M@GTaz4<%(<5;+iGY8!Pe7A?_}3stLSxv5!6 zJ(+S#RnPR4Ra(rji4`}g>QJ^8Eoq-?s%?&}KN1igbllmN;P~`h^)WrJsb<&U>PFK| zX*k-BB&0`>%A3`Mw!}Hl^o*o8eR^<6Nd%E}BWNu$wh>Q@>(p4xSk*<(Rgq@ZY|@r1 zTC_=9tVZ>eRp&064nh@1BCbWlSQ4@Pw&%>;wP8ai0I)IsKIhU`&dmL;PzV4U%V_tv zKj2|h$eCH$u<#E!rhBlzzGH$mHdvUK*Dt^ z^b*xx>C-36@%Pe~!(;@4HAY4v5!`L_zKJ=<(!(Y(pAzWT;TD{{td0r6f=L*iiG_u0 z*LDpWV-I45w&sA2j&WF<#s$}2qI;C&!&ow&1jz(gMGDA7GKoya12Wb%ExIrjOX_&m z*37W7(k^;d7|&c$9jjQA3q>}K6|pI7sm~^IP~#S!%!tvNuO<>P z4QsP~YHQJx`Idcb=z>ByxypsYVX}x+qN!Jt#U!*$!RmtNMf6QU=Mv2pD`q9E)b(ts z<5|}X)npmmj!{%-#QKFGXHjm9` z3s{z2fn6iZ^<#9fm>irqIT#G~hM{*BRTtr# zec}I1CKk0kEN4^k0Dd)QB8h($55pFC9Jawzumhffourafd5EWnC)1Pb$@i3a7I?xQ z&9mBbo98aiX3tj7cF%L3y`CeUQ=YS4!Q0E5>mBPY@hJ= zbPk0R_5dLMm+K1O%Y z7w8_kpB|zg(og9Z^b9@c6MdP!LB1irVZPzM9N!4v<-S5+k#DMRx^ISWmaoKD=9}ZI z@m=fN=-cP}oC7YG8_A95f?NSNjVtBmaof13xE`JNb?L6Z|&*Nq#&3JinViz`x6X!hgm8;0M3#@8uul&+?D=#}a-W1*v-Vu%o9|*^VkA)M$DdAh;v`9oz93T!6$BISb6mhCJT`UtH5x0nsiBE~! z#izw*#h1k0;>+S5aj*E6__p}IcvAdAJR^A|Dsj>OD(LNcW_(mLr@={D&O z=}u|A^nmoB^sux=+A2LEJt=LMUXb=mN2FuYDd{`ujP!%-ku&6ha-m!*m&vo`x$+XZ zUT&0|<&|#Bkz=V$-Cv3hA?yKBme|=77a$=B8WLgxWKY@Yt|TR$?xvT7kjZ!f z*+f8O6eFXCusAv>D5BtkxQ>dW4vV6r;s9sZ~FJEs#~{C z-R*qmyI-Ad3i{-5#N|4QFd`@caY%!-C=r>f$F@tMupIE$jCF@Rtuoxr9UBP*tH%bK zZj?Ncuo>YMy`qp@R#_r-O5Vbl(J`b$dNc&_$bgcN5hWu5nHszSPqa<)N75smK}i(G zRF+hFB)?SXi9ip9;jrA|XOF|NR-nbXp+F!~Ew(IB4Cjfmzd1mc(q$CWo9U`u!g^#u zRwSbvQ4lRe9cU5iL~GEkXf0ZY)}!0d2J{=W3EhQy(B0@>v;&<$C($W%8hwh+ptI<& z=qq#%eT}|B0rV|8kAB2iI2Y&Pd|ZI9z*F&bd=0)1m*8?d5?_ylcp;ABcHD^<<8J(G zyaeBjm*Z7<4Zanx$G73%;HU5b{473*U%)Tp*YF|y27VKtz$fu3{0aUPpTTGG7x?e^ z8~iQ)4u4OElTlC=HE8<* zwe#SZhN_{a7VZm`cSLjpazo8DzflZ?!{KVttu~{Au}bu~+oX`Y zR&4S~es5{OD>aJcCFQN1Vc8Qd3V1tN+abyAX`LSMha(|3j0gI&z&Ha@pLaUoT?$9NVX_>pKr7KIo-B4IngTphd|HuN(=4ln7)E z&64Dn)`%#K8e~)kXqg@jM*?k1IFu>q7(K}3f_AE8Z={vMH9o>QAsJAw#PwliDQ-s_ zd#RwV?j7h(Sd_w0$lck8?m+EhiYY=hrIJ6Y3~WsCg9njnxf%Ty;;5{$G#X(6P%JBP z=?-;nMVrw*sJ*_d^5;6Wqx;bI?Wh-RL49Z|+D2{k5;}v{Q;DXY5GE@Oc|ZCcu;c^i zLEy;W1555ySn?rY$R*HN>+poJ>07X+{RyTy4eFV#%9!uMT?gDT zzWe}6AEFMRABFZBMSrxdNeazro-O;OaGls3@JAFztbon==Wz4Rl@@_ZZ7dceGDLr& zFShA277zso!%MRi3Q68l_oCVE&OkJx_^)1!z?(6;9MF7GjnWl^!92yJZh+wcyFxY$ zpSwx&6~%c{eUl+=fZa?s2Hu>^f7Si!^G7kY_=U z=vW|yQ4lih9?{WojDdPBMQKydrlyWU2+?tA)0%ss0L4V*9hE$sV9RJ@1RWYDjE@*$ zPzTkBLP}R&CU8SuRzZ5cD=#-AFC#xMr@J0xOmwas@kz6rd@A%lM%#O7s*2pt(C3Z) zxK*IO6@A9QuG7ca;cw^*^kr`^9jU%?5Bhr_!*pF`$!xZWEDEa%LqJfabE{_teBLT| zC_ILZUA6xQ`fi}Z<0v-Ypz%W~gjW`(#N|_=4T5N+e z!*&@e#>3DwJOYn|^JwKfl0C!Y@Fh$u;LGp?xM#5e*vBrMfinT|z+rA519UVbRV%QA zLLEqgu%senKpF67R-{3oV>;}lMRKIn9bPcN0D#A~TDLdQA$enuSrx=bYee?9#Ht#^ z4tFRxQwp?6kx*xy2-_BH%WMm*im4XZy;w+=%8LfH4p9i*N1MDd+cX3I*;2dY3oFPP zPP6HFI!!4vY!0I?I3vJj7Mv#m_9h4nfyD|Y5iO#ZDVy3vngP!lh8a397YI#{;S*;o z_`HQJgHBd3h^Jw;=#?cE z7l@xeT!h*$`b3EoT&zS&ED-QaJWCCPdiYvU)EWcr5j>l1-MAF_@f@~!hQI@`bJI-N zt`kI|qN^)6!wZ_IX5$>d(x<`%#8f>yo~IE z99K?mMowl{b~f1MK~*07GIKIB3i2{@bGy4w2m-Fam3S_mhv(xeTn*^2!L_&!*W(7< zh(&w@d{msl9_(dT6u>QTCj*KX0Cvw{KMvH2a#)c=l9v^)@yW1+-g#meIIvdqgaScD zgt2GS-9ZNHDkzq_Bdv`wAp}5F<(eF3@(S<=FU@Ig4olz?bH7q8jDSRBoLnmggZJfwtR|o^a`2- zO?65>U!X$-2^R_YUD-!)NbyG){E?x^C+Ly+Badoox-trYBC`v+<5nHaiWUrhq&l>V zIh0<>peuB#stbISF=PX>y@pmRWtE0zLpe@E*T#q@PC~Un zJ4{*6qNU0kDhZX)>*7oNw6erA*)lp+3d+h=C@4EWBh!_^_R0M2I)E+X*6<+4c@9q* z#3dk>@r#2v;Sczgf5Qo{D;_LkU61eT%E<%lWo7)LZ$MR+3m#>-T>tmjK8%kHi0$JL z+wZ|*p1~jB07OYStx{uUKCDRvi6 z_`iok+!^N-XVhF2@8^{s>Mq*De?%1H|58M4zbGbLzbNh?dQ?n!hG$sj4kn6;0Cyd5 z#6&T%|1640D(WD^PzPXjI8CDs3V!3_uc=@Bd7$2_;91dpMX>k54=R|c3TqKcY*%&D z8)9onMks68H~`Q&nXYt~%a!GVEhZ-qV4c$q#29G{R>n8dxcDP!1K~?9A>&o}4wPuX zcSUjwXcJ$+Ke<%$%F(ul%AhRyMk&on{{M(Gi0cAp$5^F* z`R5H<{%TV5%jIvFAwzZsHnpg~g{`%XG!l{AK-{E>c!-xsXd-DQEu@vmnXYokViP}gP)N}(4x5051Eh3aG0q*E%bo*PPJ~w1X+JZoR z>gEq0*?vj#h9N}+d>9Qxq2%*1p;#b^{gAHmcKY3IvInw6 zt?r;SS4r6>dt%vz*vpk-&;`f^#R~~!7-d`~yO}zOXMW~;THT=*Q09`iMXGQEw8IT* zr?Ewt4=dr9yj75GgUnuM+SL6$J-sX@{W{CPV!yPhud0=L8lYVNoep#_r%#(&-c}f@c>sbwieu6%B)ubA4nbY9Cw`6P{!>xkZIZRV+=dg5rOM#Ja(t z04SURDBLyx62AdR+{qvTq0z2@qK8?r&-jqCEV}-AT{ugu%yOxJ6NOoV*?|!wMk({X zun^NRFDa3413~a7Zb)A18k3x`yl{+ zM;;&#!q|ULc9Mt4!@zcsC4)>s)EANA9|S2>CEmzVXkqp(O)}o@1-b8;zyXmhL zflqcT;i#7PpzVE-`kezgxi*?w!xZ0S_>_+MYd?9ivEN@xYO#+zh1xHu`^846=rqWi zAKVV7=laE&nj&SN4i;9;74j;~{xx!l zyj~;12OnggVQwN!F4!8T%jpWbQk~5kgNWu&yOkM@xGldrA4=>8|I#=iwKWMo-LF7X(e>bo2>e%a zFS;K+1gWk^Ai=d4J%Nwo4r!siL+In3!f6E~C_#btAa+#Ifk^Kxw*<<@a`alKq0w~gDu z{f>K(+sQr5?dBfk9^)S8_Hj>gPjd&jgWU7ni`>iHE8J_`>)adMTijvpDEBsZoO_RZ zpZk#eh&#!h=04#*m6p%~8#HZK`&Pwn^Km zU8-HCU9MfHy;Hkc+pB$0yGy%I`-b+I_N4Z#_Pq8x?LW0YYJW;Zi6n7<;&X{_CBC2d zg)UJyMt8aHO5F@yiLOfL(M5GP>DK6W==STL)4i(ulkSM_nC>0jyShK?KG2=e{Y7_5 z_p$C%-RHWqy1(hZ)csxeweDNpKXl*ge$aDztv*?A(p&T?db{4KPt_0CkJOLWr|HM( z$Lq88x%zy4xxPW)tZ&iF`jCE!ewBW;{uccv{ayMV{bv0({R8^F`e*bn>ksLV>Oazd zuK!m5;}G4DJwu)!a%jjqLrx9(j^}tgKY`EZi}~67e7=eA;5+#)zMH>^U&1frm-8$6 z)%+TMEx(@Mz;ER5;5YF-{AT_h{yu&Szm?z4-_Jk5|DJz{-^D+|@8S3IPw@Nsr}$_1 zXZh#&7xKk!HSxB27zIsOL&XD}H?7%~jShEl^EL$#sJ5HhSZ+-BHd*l6fAY%%m1 zwizBV95B3UIAr*v;mxG6Ni9jCr0%3;N$Zk&lC~u6PTH6BV$!=wr<2YbIit~NH#&?? zW2$kuafETCakO!aajfwY_^I(5<9XwE$qC6qvN_qBJU-c#e0B0Q$(6}J2}mFU zCujwoFhnp2MnMqFf>p2y4q>P;Oc)`I62=H)g-e7>g$cqWAzg3@nL@UZE947T2v-SH zglR&NP%K;{%o45>s)QP$PUsMp3AYJ7!e(KcuwA%ccud$UJTB}LUJ?!qM}@ad$TZzl zY?@)3X}Z>QovFlBYAQ38n<`9mP4i7vrW#Y7snv9&$!BUeEi)}Qtu$>g-D~PK^_ljX zo;ST{df9Zubj9pw+(`Tly&B#p5oY`)E!~B-{u=%L@ZS!&Sd*=7eADTZhpERE~ ze`5a3e8&7&^B3l?%;(JCn9rNPGyl_)V9{6-EqV)YNwOqcOcskJ#bUQOEvc4EEfXx0 zEVC@N7LUbiX|{wd5lht4VOeIm)3VK4XKk>GR=3q-m8>mR*}A~mW(`;uTEo_;wZqzJ z?Xq@TZ?Z12F0(GTuC%VUuCcDQuD5QmZnWNE-DK^tZnoZIz0bPS`mlAk^)>6e)|1v# z){m{{tY2Hdv7S#MDMHGEl*K7DWoydrl&4ePNI9AEqm8#&ZNqHiZ3VWgZRNH`n`B#P zyUDh~w$8T6)?>Tdw$--N_K_>u7egIu<%Yj)uS>~*B);k-VqO;W*bVi*^ovWQ| soNJxyop(C#a^CIyt@B>zqs~{He{r61ehGR2euTuXpQ_jR+4, with event: UIEvent?) { - guard let touch = touches.first else { - return + func backgroundInit(){ + for i in 0...2 { + let sky = SKSpriteNode(imageNamed: "SkyBackground") + sky.name = "clouds" + sky.zPosition = -1 + sky.size = CGSize(width: self.size.width, height: self.size.height) + sky.position = CGPoint(x: CGFloat(i) * sky.size.width , y: (self.frame.size.height / 2)) + + self.addChild(sky) } - let gameScene = GameScene(size: self.size) - let location = touch.location(in: self) - let frontTouchedNode = atPoint(location).name - + } + + func loadScene(scene: SKScene) { let transition = SKTransition.moveIn(with: .right, duration: 1) - - if frontTouchedNode == "startGameBtn" || frontTouchedNode == "tmpStartGameLbl"{ - self.view?.presentScene(gameScene, transition: transition) - } - - if frontTouchedNode == "settingsBtn" || frontTouchedNode == "tmpSettingsLbl"{ - //TODO: Implement settings functionality - } + self.view?.presentScene(scene, transition: transition) } override func update(_ currentTime: TimeInterval) { @@ -54,16 +61,7 @@ class MenuScene: SKScene { node.position.x += (self.scene?.size.width)! * 3 } })) - - // TODO: Notfalllösung - if(!GameCenterHelper.isAuthenticated) { - let authLabel = SKLabelNode(text: "You are not logged in to Gamecenter. Please login via GameCenterApp") - authLabel.name = "authLabel" - authLabel.zPosition = 2 - authLabel.position = CGPoint(x: self.size.width / 2, y: self.size.height / 5) - self.addChild(authLabel) - } else { - self.childNode(withName: "authLabel")?.removeFromParent() - } + + entityManager.getButtonByName(buttonName: "startGameButton").isEnabled = GameCenterHelper.isAuthenticated } } From 94d7be35ff8b08b875a2654b8dc0b556cf699eb2 Mon Sep 17 00:00:00 2001 From: Niko <> Date: Sat, 2 May 2020 23:12:37 +0200 Subject: [PATCH 2/3] implemented ButtonEntity --- GoldWars/GoldWars/Components/ButtonNode.swift | 59 +++++++++++-------- GoldWars/GoldWars/Scenes/MenuScene.swift | 16 ++--- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/GoldWars/GoldWars/Components/ButtonNode.swift b/GoldWars/GoldWars/Components/ButtonNode.swift index be4176c..d1d6ad2 100644 --- a/GoldWars/GoldWars/Components/ButtonNode.swift +++ b/GoldWars/GoldWars/Components/ButtonNode.swift @@ -11,39 +11,48 @@ import SpriteKit class ButtonNode : SKSpriteNode { - var isEnabled:Bool + var isEnabled:Bool{ + didSet{ + if isEnabled { + self.alpha = 1 + self.childNode(withName: "label")?.alpha = 1 + } else { + self.alpha = 0.3 + self.childNode(withName: "label")?.alpha = 0.3 + } + } + } let onButtonPress: () -> () init(iconName: String, text: String,isEnabled:Bool, position: CGPoint, onButtonPress: @escaping () -> ()) { + self.onButtonPress = onButtonPress + self.isEnabled = isEnabled + let texture = SKTexture(imageNamed: "yellow_button04") + super.init(texture: texture, color: SKColor.white, size: texture.size()) + self.position = position - self.onButtonPress = onButtonPress - self.isEnabled = isEnabled - let texture = SKTexture(imageNamed: "yellow_button04") - super.init(texture: texture, color: SKColor.white, size: texture.size()) - self.position = position + let label = SKLabelNode(fontNamed: "Courier-Bold") - let label = SKLabelNode(fontNamed: "Courier-Bold") + label.fontSize = 30 + label.fontColor = SKColor.black - label.fontSize = 30 - label.fontColor = SKColor.black + label.zPosition = 1 + label.verticalAlignmentMode = .center + label.text = text + label.name = "label" - label.zPosition = 1 - label.verticalAlignmentMode = .center - label.text = text - label.name = "label" - - if !iconName.isEmpty { - label.position = CGPoint(x: size.width * 0.25, y: 0) - let icon = SKSpriteNode(imageNamed: iconName) - icon.position = CGPoint(x: -size.width * 0.25, y: 0) - icon.zPosition = 1 - self.addChild(icon) - } else { - label.position = CGPoint(x: 0, y: 0) - } - self.addChild(label) - isUserInteractionEnabled = true + if !iconName.isEmpty { + label.position = CGPoint(x: size.width * 0.25, y: 0) + let icon = SKSpriteNode(imageNamed: iconName) + icon.position = CGPoint(x: -size.width * 0.25, y: 0) + icon.zPosition = 1 + self.addChild(icon) + } else { + label.position = CGPoint(x: 0, y: 0) + } + self.addChild(label) + isUserInteractionEnabled = true } override func touchesBegan(_ touches: Set, with event: UIEvent?) { diff --git a/GoldWars/GoldWars/Scenes/MenuScene.swift b/GoldWars/GoldWars/Scenes/MenuScene.swift index 46f3ae6..8557396 100644 --- a/GoldWars/GoldWars/Scenes/MenuScene.swift +++ b/GoldWars/GoldWars/Scenes/MenuScene.swift @@ -12,7 +12,7 @@ class MenuScene: SKScene { var entityManager: EntityManager! - override func sceneDidLoad() { + override func sceneDidLoad() { entityManager = EntityManager(scene: self) let midX = self.size.width / 2 let midY = self.size.height / 2 @@ -23,18 +23,14 @@ class MenuScene: SKScene { onButtonPress: { self.loadScene(scene: GameScene(size: self.size)) })) - entityManager.add(Button(name: "settingsButton", iconName: "", text: "Settings", position: CGPoint(x: midX, y: midY - 80 ), onButtonPress: { - - })) - - } - - + //TODO: create Settings Scene + })) + } func backgroundInit(){ for i in 0...2 { @@ -43,7 +39,6 @@ class MenuScene: SKScene { sky.zPosition = -1 sky.size = CGSize(width: self.size.width, height: self.size.height) sky.position = CGPoint(x: CGFloat(i) * sky.size.width , y: (self.frame.size.height / 2)) - self.addChild(sky) } } @@ -61,7 +56,6 @@ class MenuScene: SKScene { node.position.x += (self.scene?.size.width)! * 3 } })) - - entityManager.getButtonByName(buttonName: "startGameButton").isEnabled = GameCenterHelper.isAuthenticated + entityManager.getButtonByName(buttonName: "startGameButton").component(ofType: ButtonComponent.self)?.buttonNode.isEnabled = GameCenterHelper.isAuthenticated } } From d72c10fa75c01b7e57035568407147c823dd608a Mon Sep 17 00:00:00 2001 From: Niko <> Date: Sun, 3 May 2020 00:14:32 +0200 Subject: [PATCH 3/3] implement Background Entity and Component --- GoldWars/GoldWars.xcodeproj/project.pbxproj | 4 +++ .../Components/BackgroundComponent.swift | 35 +++++++++++++++++++ GoldWars/GoldWars/Entities/Background.swift | 30 ++++++++++++++++ .../GoldWars/Entities/EntityManager.swift | 17 ++++++--- GoldWars/GoldWars/Scenes/GameScene.swift | 25 +++---------- GoldWars/GoldWars/Scenes/MenuScene.swift | 22 ++---------- 6 files changed, 89 insertions(+), 44 deletions(-) create mode 100644 GoldWars/GoldWars/Entities/Background.swift diff --git a/GoldWars/GoldWars.xcodeproj/project.pbxproj b/GoldWars/GoldWars.xcodeproj/project.pbxproj index 5d8d41a..62abbb1 100644 --- a/GoldWars/GoldWars.xcodeproj/project.pbxproj +++ b/GoldWars/GoldWars.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ 9E174C84245DD8CE00209FF0 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C83245DD8CE00209FF0 /* Button.swift */; }; 9E174C86245DD91500209FF0 /* ButtonComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C85245DD91500209FF0 /* ButtonComponent.swift */; }; 9E174C88245DF1FF00209FF0 /* BackgroundComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C87245DF1FF00209FF0 /* BackgroundComponent.swift */; }; + 9E174C8A245E1A0A00209FF0 /* Background.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E174C89245E1A0A00209FF0 /* Background.swift */; }; 9E78ACB6245C9A5300526FF7 /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E78ACB5245C9A5300526FF7 /* GameKit.framework */; }; 9E78ACB8245CB75B00526FF7 /* TeamComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E78ACB7245CB75B00526FF7 /* TeamComponent.swift */; }; 9E78ACBA245CBDAF00526FF7 /* HUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E78ACB9245CBDAF00526FF7 /* HUD.swift */; }; @@ -85,6 +86,7 @@ 9E174C83245DD8CE00209FF0 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; }; 9E174C85245DD91500209FF0 /* ButtonComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonComponent.swift; sourceTree = ""; }; 9E174C87245DF1FF00209FF0 /* BackgroundComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundComponent.swift; sourceTree = ""; }; + 9E174C89245E1A0A00209FF0 /* Background.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Background.swift; sourceTree = ""; }; 9E78ACB5245C9A5300526FF7 /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System/Library/Frameworks/GameKit.framework; sourceTree = SDKROOT; }; 9E78ACB7245CB75B00526FF7 /* TeamComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeamComponent.swift; sourceTree = ""; }; 9E78ACB9245CBDAF00526FF7 /* HUD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HUD.swift; sourceTree = ""; }; @@ -215,6 +217,7 @@ 116060F6245C57D2004E5A36 /* EntityManager.swift */, 9E78ACB9245CBDAF00526FF7 /* HUD.swift */, 9E174C83245DD8CE00209FF0 /* Button.swift */, + 9E174C89245E1A0A00209FF0 /* Background.swift */, ); path = Entities; sourceTree = ""; @@ -420,6 +423,7 @@ 9E174C86245DD91500209FF0 /* ButtonComponent.swift in Sources */, 11036113244B3E30008610AF /* MenuScene.swift in Sources */, 9EA3ABE9245C6DAA006BC61D /* DefaultBaseComponent.swift in Sources */, + 9E174C8A245E1A0A00209FF0 /* Background.swift in Sources */, 9EA3ABED245C8143006BC61D /* ModalBackgroundComponent.swift in Sources */, 3EBD242C245D8044003CECE7 /* GameCenterHelper.swift in Sources */, AB1D759C245DD18100671525 /* MapProtocol.swift in Sources */, diff --git a/GoldWars/GoldWars/Components/BackgroundComponent.swift b/GoldWars/GoldWars/Components/BackgroundComponent.swift index 49244c0..349cf2a 100644 --- a/GoldWars/GoldWars/Components/BackgroundComponent.swift +++ b/GoldWars/GoldWars/Components/BackgroundComponent.swift @@ -7,4 +7,39 @@ // import Foundation +import GameplayKit +class BackgroundComponent: GKComponent{ + + var nodes = [SKSpriteNode]() + let size: CGSize + + init(size: CGSize) { + self.size = size + for i in 0...2 { + let sky = SKSpriteNode(imageNamed: "SkyBackground") + sky.name = "clouds" + sky.zPosition = -1 + sky.size = CGSize(width: size.width, height: size.height) + sky.position = CGPoint(x: CGFloat(i) * sky.size.width , y: (size.height / 2)) + nodes.append(sky) + } + super.init() + } + + func update(){ + for node in nodes{ + node.position.x -= 2 + if node.position.x < -(size.width) { + node.position.x += (size.width) * 3 + } + } + } + + + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/GoldWars/GoldWars/Entities/Background.swift b/GoldWars/GoldWars/Entities/Background.swift new file mode 100644 index 0000000..423168e --- /dev/null +++ b/GoldWars/GoldWars/Entities/Background.swift @@ -0,0 +1,30 @@ +// +// Background.swift +// GoldWars +// +// Created by Niko Jochim on 02.05.20. +// Copyright © 2020 SP2. All rights reserved. +// + +import Foundation +import GameplayKit + +class Background: GKEntity { + + init(size: CGSize) { + super.init() + addComponent(BackgroundComponent(size: size)) + } + + + override func update(deltaTime seconds: TimeInterval) { + component(ofType: BackgroundComponent.self)?.update() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + + +} diff --git a/GoldWars/GoldWars/Entities/EntityManager.swift b/GoldWars/GoldWars/Entities/EntityManager.swift index 0c9ff60..4511bf4 100644 --- a/GoldWars/GoldWars/Entities/EntityManager.swift +++ b/GoldWars/GoldWars/Entities/EntityManager.swift @@ -53,6 +53,11 @@ class EntityManager { if let buttonNode = entity.component(ofType: ButtonComponent.self)?.buttonNode { scene.addChild(buttonNode) } + if let nodes = entity.component(ofType: BackgroundComponent.self)?.nodes { + for node in nodes { + scene.addChild(node) + } + } } @@ -73,7 +78,7 @@ class EntityManager { entities.remove(entity) } - func base(for team: Team) -> GKEntity? { + func getBaseByTeam(for team: Team) -> GKEntity? { for entity in entities { if let teamComponent = entity.component(ofType: TeamComponent.self), let _ = entity.component(ofType: DefaultBaseComponent.self) { @@ -85,11 +90,15 @@ class EntityManager { return nil } - func baseNode(for team: Team) -> SKSpriteNode?{ - return base(for: team)?.component(ofType: DefaultBaseComponent.self)?.spriteNode + func getBackground() -> GKEntity? { + return entities.filter{$0 is Background}[0] + } + + func getBaseNodeByTeam(for team: Team) -> SKSpriteNode?{ + return getBaseByTeam(for: team)?.component(ofType: DefaultBaseComponent.self)?.spriteNode } func getButtonByName(buttonName:String) -> Button{ - return entities.filter{($0 as! Button).name == buttonName}[0] as! Button + return entities.filter{$0 is Button && ($0 as! Button).name == buttonName }[0] as! Button } } diff --git a/GoldWars/GoldWars/Scenes/GameScene.swift b/GoldWars/GoldWars/Scenes/GameScene.swift index 678b327..e255a05 100644 --- a/GoldWars/GoldWars/Scenes/GameScene.swift +++ b/GoldWars/GoldWars/Scenes/GameScene.swift @@ -16,22 +16,11 @@ class GameScene: SKScene{ override func sceneDidLoad() { entityManager = EntityManager(scene: self) entityManager.add(HUD(size: self.size)) + entityManager.add(Background(size: self.size)) initMap() - createBackground() - } - func createBackground() { - for i in 0...2 { - let sky = SKSpriteNode(imageNamed: "SkyBackground") - sky.name = "clouds" - sky.zPosition = -1 - sky.size = CGSize(width: (self.scene?.size.width)!, height: (self.scene?.size.height)!) - sky.position = CGPoint(x: CGFloat(i) * sky.size.width , y: (self.frame.size.height / 2)) - - self.addChild(sky) - } - } + func initMap() { MapFactory(scene: self, entityManager: self.entityManager).loadMap(playerCount: 2) @@ -76,15 +65,9 @@ class GameScene: SKScene{ } } - + override func update(_ currentTime: TimeInterval) { - self.enumerateChildNodes(withName: "clouds", using: ({ - (node, error) in - node.position.x -= 2 - if node.position.x < -(self.scene?.size.width)! { - node.position.x += (self.scene?.size.width)! * 3 - } - })) + entityManager.getBackground()?.update(deltaTime: currentTime) } } diff --git a/GoldWars/GoldWars/Scenes/MenuScene.swift b/GoldWars/GoldWars/Scenes/MenuScene.swift index 8557396..8164439 100644 --- a/GoldWars/GoldWars/Scenes/MenuScene.swift +++ b/GoldWars/GoldWars/Scenes/MenuScene.swift @@ -30,32 +30,16 @@ class MenuScene: SKScene { onButtonPress: { //TODO: create Settings Scene })) - } - - func backgroundInit(){ - for i in 0...2 { - let sky = SKSpriteNode(imageNamed: "SkyBackground") - sky.name = "clouds" - sky.zPosition = -1 - sky.size = CGSize(width: self.size.width, height: self.size.height) - sky.position = CGPoint(x: CGFloat(i) * sky.size.width , y: (self.frame.size.height / 2)) - self.addChild(sky) - } + entityManager.add(Background(size: self.size)) } func loadScene(scene: SKScene) { - let transition = SKTransition.moveIn(with: .right, duration: 1) + let transition = SKTransition.flipVertical(withDuration: 0.5) self.view?.presentScene(scene, transition: transition) } override func update(_ currentTime: TimeInterval) { - self.enumerateChildNodes(withName: "clouds", using: ({ - (node, error) in - node.position.x -= 2 - if node.position.x < -(self.scene?.size.width)! { - node.position.x += (self.scene?.size.width)! * 3 - } - })) + entityManager.getBackground()!.update(deltaTime: currentTime) entityManager.getButtonByName(buttonName: "startGameButton").component(ofType: ButtonComponent.self)?.buttonNode.isEnabled = GameCenterHelper.isAuthenticated } }