Merge branch 'sprint_2_delivery' into 'master'
Sprint 2 delivery See merge request marcel.schwarz/software-projekt-2!45
@ -3,23 +3,49 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 50;
|
objectVersion = 53;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
110360D3244B101A008610AF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360D2244B101A008610AF /* AppDelegate.swift */; };
|
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 */; };
|
110360D9244B101A008610AF /* GameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360D8244B101A008610AF /* GameScene.swift */; };
|
||||||
110360DB244B101A008610AF /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360DA244B101A008610AF /* GameViewController.swift */; };
|
110360DB244B101A008610AF /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360DA244B101A008610AF /* GameViewController.swift */; };
|
||||||
110360DE244B101A008610AF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 110360DC244B101A008610AF /* Main.storyboard */; };
|
110360DE244B101A008610AF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 110360DC244B101A008610AF /* Main.storyboard */; };
|
||||||
110360E0244B101B008610AF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 110360DF244B101B008610AF /* Assets.xcassets */; };
|
110360E0244B101B008610AF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 110360DF244B101B008610AF /* Assets.xcassets */; };
|
||||||
110360E3244B101B008610AF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 110360E1244B101B008610AF /* LaunchScreen.storyboard */; };
|
110360E3244B101B008610AF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 110360E1244B101B008610AF /* LaunchScreen.storyboard */; };
|
||||||
110360EE244B101B008610AF /* GoldWarsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360ED244B101B008610AF /* GoldWarsTests.swift */; };
|
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 */; };
|
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 */; };
|
11738A3B24508F68004426F1 /* Unit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11738A3A24508F68004426F1 /* Unit.swift */; };
|
||||||
|
2086465C2461B66200817C23 /* TimerComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2086465B2461B66200817C23 /* TimerComponent.swift */; };
|
||||||
|
3EBD242C245D8044003CECE7 /* GameCenterHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBD242B245D8044003CECE7 /* GameCenterHelper.swift */; };
|
||||||
|
3EBD242E245D9332003CECE7 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBD242D245D9332003CECE7 /* Team.swift */; };
|
||||||
|
9E04AFAF245E2B73002D5CFC /* AttackActionComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E04AFAE245E2B73002D5CFC /* AttackActionComponent.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 */; };
|
||||||
|
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 */; };
|
||||||
|
9E78ACBE245CC9C000526FF7 /* AtkBoostSkillComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E78ACBD245CC9C000526FF7 /* AtkBoostSkillComponent.swift */; };
|
||||||
|
9E78ACC2245CC9EE00526FF7 /* DefBoostSkillComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E78ACC1245CC9EE00526FF7 /* DefBoostSkillComponent.swift */; };
|
||||||
|
9E78ACC4245CCA3600526FF7 /* SpySkillComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E78ACC3245CCA3600526FF7 /* SpySkillComponent.swift */; };
|
||||||
|
9EA3ABE9245C6DAA006BC61D /* DefaultBaseComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA3ABE8245C6DAA006BC61D /* DefaultBaseComponent.swift */; };
|
||||||
|
9EA3ABEB245C6DFA006BC61D /* BaseNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA3ABEA245C6DFA006BC61D /* BaseNode.swift */; };
|
||||||
|
9EA3ABED245C8143006BC61D /* ModalBackgroundComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA3ABEC245C8143006BC61D /* ModalBackgroundComponent.swift */; };
|
||||||
|
9EA3ABEF245C834B006BC61D /* ModalContentComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA3ABEE245C834B006BC61D /* ModalContentComponent.swift */; };
|
||||||
|
9EBFD7552462CF5A00E1E219 /* SliderComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EBFD7542462CF5A00E1E219 /* SliderComponent.swift */; };
|
||||||
|
9EC7E48B2461FBF700396BCD /* SliderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC7E48A2461FBF700396BCD /* SliderNode.swift */; };
|
||||||
|
9EC86B9F245C88A300796EF3 /* Modal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC86B9E245C88A300796EF3 /* Modal.swift */; };
|
||||||
|
9EC86BA6245C8AD000796EF3 /* ModalType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC86BA5245C8AD000796EF3 /* ModalType.swift */; };
|
||||||
|
AB1D759C245DD18100671525 /* MapProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB1D759A245DD18100671525 /* MapProtocol.swift */; };
|
||||||
|
AB1D759D245DD18100671525 /* TwoPlayerDefaultTestMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB1D759B245DD18100671525 /* TwoPlayerDefaultTestMap.swift */; };
|
||||||
|
AB1D75A0245DEC0500671525 /* MapFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB1D759F245DEC0500671525 /* MapFactory.swift */; };
|
||||||
ABA03DA0244BD54F00A66916 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA03D9F244BD54F00A66916 /* Base.swift */; };
|
ABA03DA0244BD54F00A66916 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA03D9F244BD54F00A66916 /* Base.swift */; };
|
||||||
|
AE151589245F18EF001D363E /* MatchmakingHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE151588245F18EF001D363E /* MatchmakingHelper.swift */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@ -30,19 +56,11 @@
|
|||||||
remoteGlobalIDString = 110360CE244B101A008610AF;
|
remoteGlobalIDString = 110360CE244B101A008610AF;
|
||||||
remoteInfo = GoldWars;
|
remoteInfo = GoldWars;
|
||||||
};
|
};
|
||||||
110360F5244B101B008610AF /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = 110360C7244B101A008610AF /* Project object */;
|
|
||||||
proxyType = 1;
|
|
||||||
remoteGlobalIDString = 110360CE244B101A008610AF;
|
|
||||||
remoteInfo = GoldWars;
|
|
||||||
};
|
|
||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
110360CF244B101A008610AF /* GoldWars.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GoldWars.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
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 = "<group>"; };
|
110360D2244B101A008610AF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
110360D4244B101A008610AF /* GameScene.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = GameScene.sks; sourceTree = "<group>"; };
|
|
||||||
110360D8244B101A008610AF /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = "<group>"; };
|
110360D8244B101A008610AF /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = "<group>"; };
|
||||||
110360DA244B101A008610AF /* GameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = "<group>"; };
|
110360DA244B101A008610AF /* GameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = "<group>"; };
|
||||||
110360DD244B101A008610AF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
110360DD244B101A008610AF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||||
@ -52,13 +70,39 @@
|
|||||||
110360E9244B101B008610AF /* GoldWarsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoldWarsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
110360E9244B101B008610AF /* GoldWarsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoldWarsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
110360ED244B101B008610AF /* GoldWarsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoldWarsTests.swift; sourceTree = "<group>"; };
|
110360ED244B101B008610AF /* GoldWarsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoldWarsTests.swift; sourceTree = "<group>"; };
|
||||||
110360EF244B101B008610AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
110360EF244B101B008610AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
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 = "<group>"; };
|
|
||||||
110360FA244B101B008610AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
|
||||||
11036110244B3D6A008610AF /* MenuScene.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = MenuScene.sks; sourceTree = "<group>"; };
|
|
||||||
11036112244B3E30008610AF /* MenuScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuScene.swift; sourceTree = "<group>"; };
|
11036112244B3E30008610AF /* MenuScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuScene.swift; sourceTree = "<group>"; };
|
||||||
|
116060F6245C57D2004E5A36 /* EntityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EntityManager.swift; sourceTree = "<group>"; };
|
||||||
11738A3A24508F68004426F1 /* Unit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Unit.swift; sourceTree = "<group>"; };
|
11738A3A24508F68004426F1 /* Unit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Unit.swift; sourceTree = "<group>"; };
|
||||||
|
2086465B2461B66200817C23 /* TimerComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerComponent.swift; sourceTree = "<group>"; };
|
||||||
|
3EBD242B245D8044003CECE7 /* GameCenterHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameCenterHelper.swift; sourceTree = "<group>"; };
|
||||||
|
3EBD242D245D9332003CECE7 /* Team.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Team.swift; sourceTree = "<group>"; };
|
||||||
|
9E04AFAE245E2B73002D5CFC /* AttackActionComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttackActionComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9E11FF77245CD81100EED3BE /* Fire.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Fire.sks; sourceTree = "<group>"; };
|
||||||
|
9E174C81245DD81D00209FF0 /* ButtonNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ButtonNode.swift; sourceTree = "<group>"; };
|
||||||
|
9E174C83245DD8CE00209FF0 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = "<group>"; };
|
||||||
|
9E174C85245DD91500209FF0 /* ButtonComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9E174C87245DF1FF00209FF0 /* BackgroundComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9E174C89245E1A0A00209FF0 /* Background.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Background.swift; sourceTree = "<group>"; };
|
||||||
|
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 = "<group>"; };
|
||||||
|
9E78ACB9245CBDAF00526FF7 /* HUD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HUD.swift; sourceTree = "<group>"; };
|
||||||
|
9E78ACBD245CC9C000526FF7 /* AtkBoostSkillComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AtkBoostSkillComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9E78ACC1245CC9EE00526FF7 /* DefBoostSkillComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefBoostSkillComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9E78ACC3245CCA3600526FF7 /* SpySkillComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpySkillComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9EA3ABE8245C6DAA006BC61D /* DefaultBaseComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultBaseComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9EA3ABEA245C6DFA006BC61D /* BaseNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseNode.swift; sourceTree = "<group>"; };
|
||||||
|
9EA3ABEC245C8143006BC61D /* ModalBackgroundComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalBackgroundComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9EA3ABEE245C834B006BC61D /* ModalContentComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalContentComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9EBFD7542462CF5A00E1E219 /* SliderComponent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SliderComponent.swift; sourceTree = "<group>"; };
|
||||||
|
9EC7E48A2461FBF700396BCD /* SliderNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SliderNode.swift; sourceTree = "<group>"; };
|
||||||
|
9EC86B9E245C88A300796EF3 /* Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modal.swift; sourceTree = "<group>"; };
|
||||||
|
9EC86BA5245C8AD000796EF3 /* ModalType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalType.swift; sourceTree = "<group>"; };
|
||||||
|
9ECD3699245C91F7008DEEBD /* GoldWars.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = GoldWars.entitlements; sourceTree = "<group>"; };
|
||||||
|
AB1D759A245DD18100671525 /* MapProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapProtocol.swift; sourceTree = "<group>"; };
|
||||||
|
AB1D759B245DD18100671525 /* TwoPlayerDefaultTestMap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TwoPlayerDefaultTestMap.swift; sourceTree = "<group>"; };
|
||||||
|
AB1D759F245DEC0500671525 /* MapFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapFactory.swift; sourceTree = "<group>"; };
|
||||||
ABA03D9F244BD54F00A66916 /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = "<group>"; };
|
ABA03D9F244BD54F00A66916 /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = "<group>"; };
|
||||||
|
AE151588245F18EF001D363E /* MatchmakingHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatchmakingHelper.swift; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@ -66,6 +110,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
9E78ACB6245C9A5300526FF7 /* GameKit.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -76,13 +121,6 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
110360F1244B101B008610AF /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
@ -91,8 +129,8 @@
|
|||||||
children = (
|
children = (
|
||||||
110360D1244B101A008610AF /* GoldWars */,
|
110360D1244B101A008610AF /* GoldWars */,
|
||||||
110360EC244B101B008610AF /* GoldWarsTests */,
|
110360EC244B101B008610AF /* GoldWarsTests */,
|
||||||
110360F7244B101B008610AF /* GoldWarsUITests */,
|
|
||||||
110360D0244B101A008610AF /* Products */,
|
110360D0244B101A008610AF /* Products */,
|
||||||
|
9E78ACB4245C9A5300526FF7 /* Frameworks */,
|
||||||
);
|
);
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
@ -101,7 +139,6 @@
|
|||||||
children = (
|
children = (
|
||||||
110360CF244B101A008610AF /* GoldWars.app */,
|
110360CF244B101A008610AF /* GoldWars.app */,
|
||||||
110360E9244B101B008610AF /* GoldWarsTests.xctest */,
|
110360E9244B101B008610AF /* GoldWarsTests.xctest */,
|
||||||
110360F4244B101B008610AF /* GoldWarsUITests.xctest */,
|
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -109,16 +146,20 @@
|
|||||||
110360D1244B101A008610AF /* GoldWars */ = {
|
110360D1244B101A008610AF /* GoldWars */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
11738A3C24508F8C004426F1 /* Unit */,
|
9ECD3699245C91F7008DEEBD /* GoldWars.entitlements */,
|
||||||
ABA03D9E244BD53D00A66916 /* Base */,
|
9E11FF74245CD79100EED3BE /* Partikels */,
|
||||||
11036114244B3E8A008610AF /* Menu */,
|
116060F5245C5709004E5A36 /* Entities */,
|
||||||
1103610F244B3D48008610AF /* Game */,
|
AB1D759E245DD2EA00671525 /* Map */,
|
||||||
|
116060F4245C56EA004E5A36 /* Components */,
|
||||||
|
9EC86BA2245C89B200796EF3 /* Enums */,
|
||||||
|
9EC86BA4245C8A1E00796EF3 /* Scenes */,
|
||||||
|
9EC86BA3245C89F400796EF3 /* Storyboards */,
|
||||||
110360D2244B101A008610AF /* AppDelegate.swift */,
|
110360D2244B101A008610AF /* AppDelegate.swift */,
|
||||||
110360DA244B101A008610AF /* GameViewController.swift */,
|
110360DA244B101A008610AF /* GameViewController.swift */,
|
||||||
110360DC244B101A008610AF /* Main.storyboard */,
|
|
||||||
110360DF244B101B008610AF /* Assets.xcassets */,
|
110360DF244B101B008610AF /* Assets.xcassets */,
|
||||||
110360E1244B101B008610AF /* LaunchScreen.storyboard */,
|
|
||||||
110360E4244B101B008610AF /* Info.plist */,
|
110360E4244B101B008610AF /* Info.plist */,
|
||||||
|
AE151588245F18EF001D363E /* MatchmakingHelper.swift */,
|
||||||
|
3EBD242B245D8044003CECE7 /* GameCenterHelper.swift */,
|
||||||
);
|
);
|
||||||
path = GoldWars;
|
path = GoldWars;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -132,47 +173,93 @@
|
|||||||
path = GoldWarsTests;
|
path = GoldWarsTests;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
110360F7244B101B008610AF /* GoldWarsUITests */ = {
|
116060F4245C56EA004E5A36 /* Components */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
110360F8244B101B008610AF /* GoldWarsUITests.swift */,
|
9E174C81245DD81D00209FF0 /* ButtonNode.swift */,
|
||||||
110360FA244B101B008610AF /* Info.plist */,
|
9EA3ABE8245C6DAA006BC61D /* DefaultBaseComponent.swift */,
|
||||||
|
9EA3ABEC245C8143006BC61D /* ModalBackgroundComponent.swift */,
|
||||||
|
9EA3ABEE245C834B006BC61D /* ModalContentComponent.swift */,
|
||||||
|
9EA3ABEA245C6DFA006BC61D /* BaseNode.swift */,
|
||||||
|
9E78ACB7245CB75B00526FF7 /* TeamComponent.swift */,
|
||||||
|
9E78ACBD245CC9C000526FF7 /* AtkBoostSkillComponent.swift */,
|
||||||
|
9E78ACC3245CCA3600526FF7 /* SpySkillComponent.swift */,
|
||||||
|
9E78ACC1245CC9EE00526FF7 /* DefBoostSkillComponent.swift */,
|
||||||
|
9E174C85245DD91500209FF0 /* ButtonComponent.swift */,
|
||||||
|
9E174C87245DF1FF00209FF0 /* BackgroundComponent.swift */,
|
||||||
|
9E04AFAE245E2B73002D5CFC /* AttackActionComponent.swift */,
|
||||||
|
2086465B2461B66200817C23 /* TimerComponent.swift */,
|
||||||
|
9EBFD7542462CF5A00E1E219 /* SliderComponent.swift */,
|
||||||
|
9EC7E48A2461FBF700396BCD /* SliderNode.swift */,
|
||||||
);
|
);
|
||||||
path = GoldWarsUITests;
|
path = Components;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
1103610F244B3D48008610AF /* Game */ = {
|
116060F5245C5709004E5A36 /* Entities */ = {
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
110360D4244B101A008610AF /* GameScene.sks */,
|
|
||||||
110360D8244B101A008610AF /* GameScene.swift */,
|
|
||||||
);
|
|
||||||
path = Game;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
11036114244B3E8A008610AF /* Menu */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
11036110244B3D6A008610AF /* MenuScene.sks */,
|
|
||||||
11036112244B3E30008610AF /* MenuScene.swift */,
|
|
||||||
);
|
|
||||||
path = Menu;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
11738A3C24508F8C004426F1 /* Unit */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
11738A3A24508F68004426F1 /* Unit.swift */,
|
|
||||||
);
|
|
||||||
path = Unit;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
ABA03D9E244BD53D00A66916 /* Base */ = {
|
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
ABA03D9F244BD54F00A66916 /* Base.swift */,
|
ABA03D9F244BD54F00A66916 /* Base.swift */,
|
||||||
|
9EC86B9E245C88A300796EF3 /* Modal.swift */,
|
||||||
|
116060F6245C57D2004E5A36 /* EntityManager.swift */,
|
||||||
|
9E78ACB9245CBDAF00526FF7 /* HUD.swift */,
|
||||||
|
9E174C83245DD8CE00209FF0 /* Button.swift */,
|
||||||
|
9E174C89245E1A0A00209FF0 /* Background.swift */,
|
||||||
);
|
);
|
||||||
path = Base;
|
path = Entities;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
9E11FF74245CD79100EED3BE /* Partikels */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
9E11FF77245CD81100EED3BE /* Fire.sks */,
|
||||||
|
);
|
||||||
|
path = Partikels;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
9E78ACB4245C9A5300526FF7 /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
9E78ACB5245C9A5300526FF7 /* GameKit.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
9EC86BA2245C89B200796EF3 /* Enums */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
11738A3A24508F68004426F1 /* Unit.swift */,
|
||||||
|
9EC86BA5245C8AD000796EF3 /* ModalType.swift */,
|
||||||
|
3EBD242D245D9332003CECE7 /* Team.swift */,
|
||||||
|
);
|
||||||
|
path = Enums;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
9EC86BA3245C89F400796EF3 /* Storyboards */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
110360DC244B101A008610AF /* Main.storyboard */,
|
||||||
|
110360E1244B101B008610AF /* LaunchScreen.storyboard */,
|
||||||
|
);
|
||||||
|
path = Storyboards;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
9EC86BA4245C8A1E00796EF3 /* Scenes */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
11036112244B3E30008610AF /* MenuScene.swift */,
|
||||||
|
110360D8244B101A008610AF /* GameScene.swift */,
|
||||||
|
);
|
||||||
|
path = Scenes;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
AB1D759E245DD2EA00671525 /* Map */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
AB1D759A245DD18100671525 /* MapProtocol.swift */,
|
||||||
|
AB1D759F245DEC0500671525 /* MapFactory.swift */,
|
||||||
|
AB1D759B245DD18100671525 /* TwoPlayerDefaultTestMap.swift */,
|
||||||
|
);
|
||||||
|
path = Map;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
@ -213,24 +300,6 @@
|
|||||||
productReference = 110360E9244B101B008610AF /* GoldWarsTests.xctest */;
|
productReference = 110360E9244B101B008610AF /* GoldWarsTests.xctest */;
|
||||||
productType = "com.apple.product-type.bundle.unit-test";
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
};
|
};
|
||||||
110360F3244B101B008610AF /* GoldWarsUITests */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = 11036103244B101B008610AF /* Build configuration list for PBXNativeTarget "GoldWarsUITests" */;
|
|
||||||
buildPhases = (
|
|
||||||
110360F0244B101B008610AF /* Sources */,
|
|
||||||
110360F1244B101B008610AF /* Frameworks */,
|
|
||||||
110360F2244B101B008610AF /* Resources */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
110360F6244B101B008610AF /* PBXTargetDependency */,
|
|
||||||
);
|
|
||||||
name = GoldWarsUITests;
|
|
||||||
productName = GoldWarsUITests;
|
|
||||||
productReference = 110360F4244B101B008610AF /* GoldWarsUITests.xctest */;
|
|
||||||
productType = "com.apple.product-type.bundle.ui-testing";
|
|
||||||
};
|
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
/* Begin PBXProject section */
|
/* Begin PBXProject section */
|
||||||
@ -248,14 +317,10 @@
|
|||||||
CreatedOnToolsVersion = 11.3.1;
|
CreatedOnToolsVersion = 11.3.1;
|
||||||
TestTargetID = 110360CE244B101A008610AF;
|
TestTargetID = 110360CE244B101A008610AF;
|
||||||
};
|
};
|
||||||
110360F3244B101B008610AF = {
|
|
||||||
CreatedOnToolsVersion = 11.3.1;
|
|
||||||
TestTargetID = 110360CE244B101A008610AF;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = 110360CA244B101A008610AF /* Build configuration list for PBXProject "GoldWars" */;
|
buildConfigurationList = 110360CA244B101A008610AF /* Build configuration list for PBXProject "GoldWars" */;
|
||||||
compatibilityVersion = "Xcode 9.3";
|
compatibilityVersion = "Xcode 11.4";
|
||||||
developmentRegion = en;
|
developmentRegion = en;
|
||||||
hasScannedForEncodings = 0;
|
hasScannedForEncodings = 0;
|
||||||
knownRegions = (
|
knownRegions = (
|
||||||
@ -269,7 +334,6 @@
|
|||||||
targets = (
|
targets = (
|
||||||
110360CE244B101A008610AF /* GoldWars */,
|
110360CE244B101A008610AF /* GoldWars */,
|
||||||
110360E8244B101B008610AF /* GoldWarsTests */,
|
110360E8244B101B008610AF /* GoldWarsTests */,
|
||||||
110360F3244B101B008610AF /* GoldWarsUITests */,
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
@ -280,8 +344,7 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
110360DE244B101A008610AF /* Main.storyboard in Resources */,
|
110360DE244B101A008610AF /* Main.storyboard in Resources */,
|
||||||
11036111244B3D6A008610AF /* MenuScene.sks in Resources */,
|
9E11FF79245CD81100EED3BE /* Fire.sks in Resources */,
|
||||||
110360D5244B101A008610AF /* GameScene.sks in Resources */,
|
|
||||||
110360E0244B101B008610AF /* Assets.xcassets in Resources */,
|
110360E0244B101B008610AF /* Assets.xcassets in Resources */,
|
||||||
110360E3244B101B008610AF /* LaunchScreen.storyboard in Resources */,
|
110360E3244B101B008610AF /* LaunchScreen.storyboard in Resources */,
|
||||||
);
|
);
|
||||||
@ -294,13 +357,6 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
110360F2244B101B008610AF /* Resources */ = {
|
|
||||||
isa = PBXResourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
@ -308,12 +364,39 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
9E78ACB8245CB75B00526FF7 /* TeamComponent.swift in Sources */,
|
||||||
|
9EA3ABEF245C834B006BC61D /* ModalContentComponent.swift in Sources */,
|
||||||
|
9EC86BA6245C8AD000796EF3 /* ModalType.swift in Sources */,
|
||||||
|
9E78ACBE245CC9C000526FF7 /* AtkBoostSkillComponent.swift in Sources */,
|
||||||
|
9E78ACC4245CCA3600526FF7 /* SpySkillComponent.swift in Sources */,
|
||||||
|
9EA3ABEB245C6DFA006BC61D /* BaseNode.swift in Sources */,
|
||||||
|
9E04AFAF245E2B73002D5CFC /* AttackActionComponent.swift in Sources */,
|
||||||
110360D9244B101A008610AF /* GameScene.swift in Sources */,
|
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 */,
|
11738A3B24508F68004426F1 /* Unit.swift in Sources */,
|
||||||
|
9E174C86245DD91500209FF0 /* ButtonComponent.swift in Sources */,
|
||||||
|
AE151589245F18EF001D363E /* MatchmakingHelper.swift in Sources */,
|
||||||
11036113244B3E30008610AF /* MenuScene.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 */,
|
||||||
|
AB1D75A0245DEC0500671525 /* MapFactory.swift in Sources */,
|
||||||
|
AB1D759D245DD18100671525 /* TwoPlayerDefaultTestMap.swift in Sources */,
|
||||||
|
9EBFD7552462CF5A00E1E219 /* SliderComponent.swift in Sources */,
|
||||||
ABA03DA0244BD54F00A66916 /* Base.swift in Sources */,
|
ABA03DA0244BD54F00A66916 /* Base.swift in Sources */,
|
||||||
|
9E174C82245DD81D00209FF0 /* ButtonNode.swift in Sources */,
|
||||||
|
9EC7E48B2461FBF700396BCD /* SliderNode.swift in Sources */,
|
||||||
|
9E174C84245DD8CE00209FF0 /* Button.swift in Sources */,
|
||||||
110360DB244B101A008610AF /* GameViewController.swift in Sources */,
|
110360DB244B101A008610AF /* GameViewController.swift in Sources */,
|
||||||
|
2086465C2461B66200817C23 /* TimerComponent.swift in Sources */,
|
||||||
110360D3244B101A008610AF /* AppDelegate.swift in Sources */,
|
110360D3244B101A008610AF /* AppDelegate.swift in Sources */,
|
||||||
|
9EC86B9F245C88A300796EF3 /* Modal.swift in Sources */,
|
||||||
|
9E78ACC2245CC9EE00526FF7 /* DefBoostSkillComponent.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -325,14 +408,6 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
110360F0244B101B008610AF /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
110360F9244B101B008610AF /* GoldWarsUITests.swift in Sources */,
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
/* End PBXSourcesBuildPhase section */
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXTargetDependency section */
|
/* Begin PBXTargetDependency section */
|
||||||
@ -341,11 +416,6 @@
|
|||||||
target = 110360CE244B101A008610AF /* GoldWars */;
|
target = 110360CE244B101A008610AF /* GoldWars */;
|
||||||
targetProxy = 110360EA244B101B008610AF /* PBXContainerItemProxy */;
|
targetProxy = 110360EA244B101B008610AF /* PBXContainerItemProxy */;
|
||||||
};
|
};
|
||||||
110360F6244B101B008610AF /* PBXTargetDependency */ = {
|
|
||||||
isa = PBXTargetDependency;
|
|
||||||
target = 110360CE244B101A008610AF /* GoldWars */;
|
|
||||||
targetProxy = 110360F5244B101B008610AF /* PBXContainerItemProxy */;
|
|
||||||
};
|
|
||||||
/* End PBXTargetDependency section */
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
/* Begin PBXVariantGroup section */
|
/* Begin PBXVariantGroup section */
|
||||||
@ -486,14 +556,20 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_ENTITLEMENTS = GoldWars/GoldWars.entitlements;
|
||||||
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
|
CODE_SIGN_STYLE = Manual;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
|
DEVELOPMENT_TEAM = DDKFQG46BQ;
|
||||||
INFOPLIST_FILE = GoldWars/Info.plist;
|
INFOPLIST_FILE = GoldWars/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.hft.stuttgart.GoldWars;
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = de.hft.stuttgart.ip2.goldwars;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "Developer Profile";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = 2;
|
TARGETED_DEVICE_FAMILY = 2;
|
||||||
};
|
};
|
||||||
@ -503,14 +579,20 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_ENTITLEMENTS = GoldWars/GoldWars.entitlements;
|
||||||
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
|
CODE_SIGN_STYLE = Manual;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
|
DEVELOPMENT_TEAM = DDKFQG46BQ;
|
||||||
INFOPLIST_FILE = GoldWars/Info.plist;
|
INFOPLIST_FILE = GoldWars/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.hft.stuttgart.GoldWars;
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = de.hft.stuttgart.ip2.goldwars;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "Developer Profile";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = 2;
|
TARGETED_DEVICE_FAMILY = 2;
|
||||||
};
|
};
|
||||||
@ -521,7 +603,9 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_TEAM = DDKFQG46BQ;
|
||||||
INFOPLIST_FILE = GoldWarsTests/Info.plist;
|
INFOPLIST_FILE = GoldWarsTests/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
@ -542,7 +626,9 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_TEAM = DDKFQG46BQ;
|
||||||
INFOPLIST_FILE = GoldWarsTests/Info.plist;
|
INFOPLIST_FILE = GoldWarsTests/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.2;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
@ -558,44 +644,6 @@
|
|||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
11036104244B101B008610AF /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
INFOPLIST_FILE = GoldWarsUITests/Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"@executable_path/Frameworks",
|
|
||||||
"@loader_path/Frameworks",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.hft.stuttgart.GoldWarsUITests;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
SWIFT_VERSION = 5.0;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
TEST_TARGET_NAME = GoldWars;
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
11036105244B101B008610AF /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
INFOPLIST_FILE = GoldWarsUITests/Info.plist;
|
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
|
||||||
"$(inherited)",
|
|
||||||
"@executable_path/Frameworks",
|
|
||||||
"@loader_path/Frameworks",
|
|
||||||
);
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.hft.stuttgart.GoldWarsUITests;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
SWIFT_VERSION = 5.0;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
|
||||||
TEST_TARGET_NAME = GoldWars;
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
@ -626,15 +674,6 @@
|
|||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
11036103244B101B008610AF /* Build configuration list for PBXNativeTarget "GoldWarsUITests" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
11036104244B101B008610AF /* Debug */,
|
|
||||||
11036105244B101B008610AF /* Release */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = Release;
|
|
||||||
};
|
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
};
|
};
|
||||||
rootObject = 110360C7244B101A008610AF /* Project object */;
|
rootObject = 110360C7244B101A008610AF /* Project object */;
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
"filename" : "base-small.png",
|
"filename" : "base.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "base-medium.png",
|
"filename" : "base-1.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename" : "base-large.png",
|
"filename" : "base-2.png",
|
||||||
"idiom" : "universal",
|
"idiom" : "universal",
|
||||||
"scale" : "3x"
|
"scale" : "3x"
|
||||||
}
|
}
|
||||||
|
BIN
GoldWars/GoldWars/Assets.xcassets/Base.imageset/base-1.png
vendored
Normal file
After Width: | Height: | Size: 202 KiB |
BIN
GoldWars/GoldWars/Assets.xcassets/Base.imageset/base-2.png
vendored
Normal file
After Width: | Height: | Size: 202 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 10 KiB |
BIN
GoldWars/GoldWars/Assets.xcassets/Base.imageset/base.png
vendored
Normal file
After Width: | Height: | Size: 202 KiB |
23
GoldWars/GoldWars/Assets.xcassets/ModalBackground.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "PopUpBackground.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "PopUpBackground-1.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "PopUpBackground-2.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
GoldWars/GoldWars/Assets.xcassets/ModalBackground.imageset/PopUpBackground-1.png
vendored
Normal file
After Width: | Height: | Size: 400 KiB |
BIN
GoldWars/GoldWars/Assets.xcassets/ModalBackground.imageset/PopUpBackground-2.png
vendored
Normal file
After Width: | Height: | Size: 400 KiB |
BIN
GoldWars/GoldWars/Assets.xcassets/ModalBackground.imageset/PopUpBackground.png
vendored
Normal file
After Width: | Height: | Size: 400 KiB |
21
GoldWars/GoldWars/Assets.xcassets/SkyBackground.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "SkyBackground.jpg",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
GoldWars/GoldWars/Assets.xcassets/SkyBackground.imageset/SkyBackground.jpg
vendored
Normal file
After Width: | Height: | Size: 20 KiB |
21
GoldWars/GoldWars/Assets.xcassets/spark.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "spark.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
GoldWars/GoldWars/Assets.xcassets/spark.imageset/spark.png
vendored
Normal file
After Width: | Height: | Size: 5.1 KiB |
@ -1,71 +0,0 @@
|
|||||||
//
|
|
||||||
// Base.swift
|
|
||||||
// GoldWars
|
|
||||||
//
|
|
||||||
// Created by Marcel Schwarz on 18.04.20.
|
|
||||||
// Copyright © 2020 SP2. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SpriteKit
|
|
||||||
import GameplayKit
|
|
||||||
|
|
||||||
class Base : SKSpriteNode{
|
|
||||||
public static let colorSelected = SKColor.yellow
|
|
||||||
var availableBases = [Base]()
|
|
||||||
var defaultColor = SKColor.green
|
|
||||||
var unitType: Unit = Unit.General;
|
|
||||||
var unitCount: Int = 0;
|
|
||||||
|
|
||||||
init(color: UIColor, position: CGPoint, name: String, unitCount: Int = 0, unitType: Unit = Unit.General) {
|
|
||||||
super.init(texture: SKTexture(imageNamed: "Base"),
|
|
||||||
color: color,
|
|
||||||
size: CGSize(width: 50.0, height: 50.0)
|
|
||||||
)
|
|
||||||
|
|
||||||
defaultColor = color
|
|
||||||
self.colorBlendFactor = 1
|
|
||||||
self.name = name
|
|
||||||
self.position = position
|
|
||||||
self.zPosition = 2
|
|
||||||
self.isUserInteractionEnabled = true
|
|
||||||
self.unitCount = unitCount
|
|
||||||
self.unitType = unitType
|
|
||||||
}
|
|
||||||
|
|
||||||
required init?(coder aDecoder: NSCoder) {
|
|
||||||
fatalError("init(coder:) has not been implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
func addAvailableBase(base: Base) {
|
|
||||||
availableBases.append(base)
|
|
||||||
}
|
|
||||||
|
|
||||||
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
|
||||||
self.run(
|
|
||||||
SKAction.sequence(
|
|
||||||
[
|
|
||||||
SKAction.resize(byWidth: 20, height: 20, duration: 0.5),
|
|
||||||
SKAction.resize(byWidth: -20, height: -20, duration: 0.5)
|
|
||||||
]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
|
|
||||||
self.color = SKColor.yellow
|
|
||||||
|
|
||||||
for base in availableBases {
|
|
||||||
base.color = Base.colorSelected
|
|
||||||
base.size = CGSize(width: 60, height: 60)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
|
|
||||||
self.color = defaultColor
|
|
||||||
for base in availableBases {
|
|
||||||
base.color = base.defaultColor
|
|
||||||
base.size = CGSize(width: 50, height: 50)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
33
GoldWars/GoldWars/Components/AtkBoostSkillComponent.swift
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
//
|
||||||
|
// AtkBoostSkillComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class AtkBoostSkillComponent: GKComponent{
|
||||||
|
|
||||||
|
let shapeNode: SKShapeNode
|
||||||
|
let labelNode: SKLabelNode
|
||||||
|
|
||||||
|
init(text: String, texture: SKTexture?, anchorPoint: CGPoint) {
|
||||||
|
self.labelNode = SKLabelNode(text: text)
|
||||||
|
self.shapeNode = SKShapeNode(circleOfRadius: 30)
|
||||||
|
self.shapeNode.position = anchorPoint
|
||||||
|
self.labelNode.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y - 15)
|
||||||
|
if texture != nil {
|
||||||
|
shapeNode.fillTexture = texture
|
||||||
|
}else {
|
||||||
|
shapeNode.fillColor = SKColor.gray
|
||||||
|
}
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
27
GoldWars/GoldWars/Components/AttackActionComponent.swift
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// AttackActionComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 03.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class AttackActionComponent: GKComponent {
|
||||||
|
|
||||||
|
|
||||||
|
init(unitCount: Int, adjacencyList: Array<Base>, position: CGPoint) {
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func action() {
|
||||||
|
// Not implemented yet
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
42
GoldWars/GoldWars/Components/BackgroundComponent.swift
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// BackgroundComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 02.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
34
GoldWars/GoldWars/Components/BaseNode.swift
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
//
|
||||||
|
// BaseNode.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
class BaseNode: SKSpriteNode{
|
||||||
|
|
||||||
|
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||||
|
// TODO: PopUp Einheiten + Close PopUp
|
||||||
|
self.run(
|
||||||
|
SKAction.sequence(
|
||||||
|
[
|
||||||
|
SKAction.resize(byWidth: 20, height: 20, duration: 0.5),
|
||||||
|
SKAction.resize(byWidth: -20, height: -20, duration: 0.5)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||||
|
// TODO: zeige Angirff Effect
|
||||||
|
}
|
||||||
|
|
||||||
|
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||||
|
// TODO: Open Slider PopUp
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
27
GoldWars/GoldWars/Components/ButtonComponent.swift
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// ButtonComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 02.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
}
|
75
GoldWars/GoldWars/Components/ButtonNode.swift
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
//
|
||||||
|
// ButtonNode.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
class ButtonNode: SKSpriteNode {
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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: 0, y: 0)
|
||||||
|
} else {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
self.addChild(label)
|
||||||
|
isUserInteractionEnabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
override func touchesBegan(_ touches: Set<UITouch>, 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")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
33
GoldWars/GoldWars/Components/DefBoostSkillComponent.swift
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
//
|
||||||
|
// DefBoostSkillComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class DefBoostSkillComponent: GKComponent{
|
||||||
|
|
||||||
|
let shapeNode: SKShapeNode
|
||||||
|
let labelNode: SKLabelNode
|
||||||
|
|
||||||
|
init(text: String, texture: SKTexture?, anchorPoint: CGPoint) {
|
||||||
|
self.labelNode = SKLabelNode(text: text)
|
||||||
|
self.shapeNode = SKShapeNode(circleOfRadius: 30)
|
||||||
|
self.shapeNode.position = anchorPoint
|
||||||
|
self.labelNode.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y - 15)
|
||||||
|
if texture != nil {
|
||||||
|
shapeNode.fillTexture = texture
|
||||||
|
}else {
|
||||||
|
shapeNode.fillColor = SKColor.gray
|
||||||
|
}
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
GoldWars/GoldWars/Components/DefaultBaseComponent.swift
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
//
|
||||||
|
// DefaultBaseComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
class DefaultBaseComponent: GKComponent {
|
||||||
|
var spriteNode: BaseNode
|
||||||
|
|
||||||
|
init(texture: SKTexture, position: CGPoint) {
|
||||||
|
spriteNode = BaseNode(texture: texture, size: CGSize(width: 80, height: 80))
|
||||||
|
spriteNode.position = position
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
}
|
26
GoldWars/GoldWars/Components/ModalBackgroundComponent.swift
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// ModalBackgroundComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
class ModalBackgroundComponent: GKComponent {
|
||||||
|
let spriteNode: SKSpriteNode
|
||||||
|
|
||||||
|
init(anchorPoint: CGPoint) {
|
||||||
|
let texture = SKTexture(imageNamed:"ModalBackground")
|
||||||
|
spriteNode = SKSpriteNode(texture: texture, size: texture.size())
|
||||||
|
spriteNode.setScale(2)
|
||||||
|
spriteNode.position = anchorPoint
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
}
|
42
GoldWars/GoldWars/Components/ModalContentComponent.swift
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// ModalComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
class ModalContentComponent: GKComponent{
|
||||||
|
|
||||||
|
var header: SKLabelNode
|
||||||
|
var body: SKLabelNode
|
||||||
|
var footer: SKLabelNode
|
||||||
|
|
||||||
|
init(header: String, body: String, footer: String , anchorPoint: CGPoint) {
|
||||||
|
self.header = SKLabelNode(text: header)
|
||||||
|
self.header.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y + 125)
|
||||||
|
self.header.fontName = "HelveticaNeue-Bold"
|
||||||
|
self.header.fontSize = 40
|
||||||
|
|
||||||
|
self.body = SKLabelNode(text: body)
|
||||||
|
self.body.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y - 20)
|
||||||
|
self.body.numberOfLines = 2
|
||||||
|
self.body.preferredMaxLayoutWidth = 390
|
||||||
|
self.body.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.center
|
||||||
|
self.body.fontName = "HelveticaNeue-Bold"
|
||||||
|
self.body.fontSize = 40
|
||||||
|
|
||||||
|
self.footer = SKLabelNode(text: footer)
|
||||||
|
self.footer.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y - 40)
|
||||||
|
self.footer.fontName = "HelveticaNeue-Bold"
|
||||||
|
self.footer.fontSize = 40
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
}
|
23
GoldWars/GoldWars/Components/SliderComponent.swift
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// SliderComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 05.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class SliderComponent: GKComponent {
|
||||||
|
|
||||||
|
var sliderNode: SliderNode
|
||||||
|
|
||||||
|
init(width: CGFloat, position: CGPoint) {
|
||||||
|
sliderNode = SliderNode(width: width, position: position)
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
}
|
66
GoldWars/GoldWars/Components/SliderNode.swift
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
//
|
||||||
|
// SliderNode.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 05.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
|
||||||
|
class SliderNode :SKNode {
|
||||||
|
|
||||||
|
var sliderLine :SKShapeNode
|
||||||
|
var sliderKnob :SliderKnob
|
||||||
|
var width: CGFloat
|
||||||
|
|
||||||
|
var getValue: CGFloat{
|
||||||
|
get{
|
||||||
|
return ((sliderKnob.position.x.rounded() - sliderKnob.min) / width)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init(width: CGFloat, position: CGPoint) {
|
||||||
|
self.width = width
|
||||||
|
sliderLine = SKShapeNode(rectOf: CGSize(width: width, height: 8))
|
||||||
|
sliderLine.position = position
|
||||||
|
sliderLine.fillColor = SKColor.white
|
||||||
|
sliderKnob = SliderKnob(circleOfRadius: 20)
|
||||||
|
sliderKnob.min = position.x - width / 2
|
||||||
|
sliderKnob.max = position.x + width / 2
|
||||||
|
sliderKnob.fillColor = SKColor.red
|
||||||
|
sliderKnob.zPosition = sliderLine.zPosition + 1
|
||||||
|
sliderKnob.position = CGPoint(x: sliderLine.position.x, y: sliderLine.position.y + 1)
|
||||||
|
super.init()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class SliderKnob: SKShapeNode {
|
||||||
|
var min = CGFloat()
|
||||||
|
var max = CGFloat()
|
||||||
|
|
||||||
|
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||||
|
|
||||||
|
for touch in touches {
|
||||||
|
let touchLocation = touch.location(in: self.scene!)
|
||||||
|
|
||||||
|
if self.position.x >= min - 1 && self.position.x <= max + 1{
|
||||||
|
self.position.x = touchLocation.x
|
||||||
|
}
|
||||||
|
|
||||||
|
if(self.position.x <= min){
|
||||||
|
self.position.x = min
|
||||||
|
}
|
||||||
|
if(self.position.x >= max){
|
||||||
|
self.position.x = max
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
34
GoldWars/GoldWars/Components/SpySkillComponent.swift
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
//
|
||||||
|
// SpySkillComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class SpySkillComponent: GKComponent{
|
||||||
|
|
||||||
|
let shapeNode: SKShapeNode
|
||||||
|
let labelNode: SKLabelNode
|
||||||
|
|
||||||
|
init(text: String, texture: SKTexture?, anchorPoint: CGPoint) {
|
||||||
|
self.labelNode = SKLabelNode(text: text)
|
||||||
|
self.shapeNode = SKShapeNode(circleOfRadius: 30)
|
||||||
|
self.shapeNode.position = anchorPoint
|
||||||
|
self.labelNode.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y - 15)
|
||||||
|
if texture != nil {
|
||||||
|
shapeNode.fillTexture = texture
|
||||||
|
}else {
|
||||||
|
shapeNode.fillColor = SKColor.gray
|
||||||
|
}
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
39
GoldWars/GoldWars/Components/TeamComponent.swift
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
//
|
||||||
|
// TeamComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SpriteKit
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class TeamComponent: GKComponent {
|
||||||
|
let team: Team
|
||||||
|
let fire: SKEmitterNode
|
||||||
|
|
||||||
|
init(team: Team, position: CGPoint) {
|
||||||
|
fire = SKEmitterNode(fileNamed: "Fire")!
|
||||||
|
fire.zPosition = -1
|
||||||
|
fire.position = position
|
||||||
|
fire.name = "fire"
|
||||||
|
fire.particleColorSequence = nil
|
||||||
|
fire.particleColorBlendFactor = 1.0
|
||||||
|
|
||||||
|
switch team {
|
||||||
|
case .team1: fire.particleColor = SKColor.red
|
||||||
|
case .team2: fire.particleColor = SKColor.purple
|
||||||
|
case .team3: fire.particleColor = SKColor.green
|
||||||
|
case .team4: fire.particleColor = SKColor.gray
|
||||||
|
}
|
||||||
|
|
||||||
|
self.team = team
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
56
GoldWars/GoldWars/Components/TimerComponent.swift
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
//
|
||||||
|
// TimerComponent.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Daniel Steckert on 05.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class TimerComponent: GKComponent {
|
||||||
|
|
||||||
|
let labelNode :SKLabelNode
|
||||||
|
var endTime :Date!
|
||||||
|
var duration :Double
|
||||||
|
|
||||||
|
init(text: String, anchorPoint: CGPoint, duration: TimeInterval) {
|
||||||
|
self.labelNode = SKLabelNode(text: text)
|
||||||
|
self.labelNode.fontColor = UIColor.black
|
||||||
|
self.labelNode.fontSize = CGFloat(45)
|
||||||
|
self.labelNode.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y - 15)
|
||||||
|
self.duration = duration + 1
|
||||||
|
super.init()
|
||||||
|
startWithDuration(duration: self.duration)
|
||||||
|
}
|
||||||
|
|
||||||
|
func startWithDuration(duration: TimeInterval){
|
||||||
|
endTime = Date().addingTimeInterval(duration)
|
||||||
|
}
|
||||||
|
|
||||||
|
func timeLeft() -> Int {
|
||||||
|
let remainingSeconds = Int(endTime.timeIntervalSince(Date()))
|
||||||
|
if(remainingSeconds < 0 ){
|
||||||
|
startWithDuration(duration: duration)
|
||||||
|
}
|
||||||
|
return remainingSeconds
|
||||||
|
}
|
||||||
|
|
||||||
|
func isFinished() -> Bool {
|
||||||
|
return timeLeft() == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func update() {
|
||||||
|
self.labelNode.text = String(timeLeft())
|
||||||
|
|
||||||
|
if(isFinished()){
|
||||||
|
self.labelNode.text = "Synching"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
25
GoldWars/GoldWars/Entities/Background.swift
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// Background.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 02.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
}
|
42
GoldWars/GoldWars/Entities/Base.swift
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// Base.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Marcel Schwarz on 18.04.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SpriteKit
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class Base: GKEntity {
|
||||||
|
|
||||||
|
var unitCount: Int
|
||||||
|
var adjacencyList: Array<Base>
|
||||||
|
var changeOwnerShip: Bool
|
||||||
|
|
||||||
|
init(position: CGPoint, team: Team! = nil) {
|
||||||
|
self.unitCount = 0
|
||||||
|
self.adjacencyList = [Base]()
|
||||||
|
self.changeOwnerShip = false
|
||||||
|
super.init()
|
||||||
|
|
||||||
|
addComponent(DefaultBaseComponent(texture: SKTexture(imageNamed: "Base"), position: position))
|
||||||
|
if(team != nil){
|
||||||
|
addComponent(TeamComponent(team: team!, position: position))
|
||||||
|
self.unitCount = 500
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func attackBase(base: Base, units:Int) -> [GKEntity]{
|
||||||
|
base.changeOwnerShip = true
|
||||||
|
self.unitCount -= units
|
||||||
|
base.unitCount += units
|
||||||
|
return [self, base]
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
25
GoldWars/GoldWars/Entities/Button.swift
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// Button.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 02.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
}
|
146
GoldWars/GoldWars/Entities/EntityManager.swift
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
//
|
||||||
|
// EntityManager.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Aldin Duraki on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SpriteKit
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class EntityManager {
|
||||||
|
|
||||||
|
var entities = Set<GKEntity>()
|
||||||
|
let scene: SKScene
|
||||||
|
var isModal: Bool
|
||||||
|
|
||||||
|
init(scene: SKScene) {
|
||||||
|
self.scene = scene
|
||||||
|
isModal = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func add(_ entity: GKEntity) {
|
||||||
|
entities.insert(entity)
|
||||||
|
if let spriteNode = entity.component(ofType: DefaultBaseComponent.self)?.spriteNode {
|
||||||
|
scene.addChild(spriteNode)
|
||||||
|
}
|
||||||
|
if let fire = entity.component(ofType: TeamComponent.self)?.fire{
|
||||||
|
scene.addChild(fire)
|
||||||
|
}
|
||||||
|
if let spriteNode = entity.component(ofType: ModalBackgroundComponent.self)?.spriteNode {
|
||||||
|
scene.addChild(spriteNode)
|
||||||
|
isModal = true
|
||||||
|
}
|
||||||
|
if let modal = entity.component(ofType: ModalContentComponent.self) {
|
||||||
|
scene.addChild(modal.header)
|
||||||
|
scene.addChild(modal.body)
|
||||||
|
scene.addChild(modal.footer)
|
||||||
|
}
|
||||||
|
if let skill = entity.component(ofType: AtkBoostSkillComponent.self) {
|
||||||
|
scene.addChild(skill.shapeNode)
|
||||||
|
scene.addChild(skill.labelNode)
|
||||||
|
}
|
||||||
|
if let skill = entity.component(ofType: DefBoostSkillComponent.self) {
|
||||||
|
scene.addChild(skill.shapeNode)
|
||||||
|
scene.addChild(skill.labelNode)
|
||||||
|
}
|
||||||
|
if let skill = entity.component(ofType: SpySkillComponent.self) {
|
||||||
|
scene.addChild(skill.shapeNode)
|
||||||
|
scene.addChild(skill.labelNode)
|
||||||
|
}
|
||||||
|
if let timer = entity.component(ofType: TimerComponent.self) {
|
||||||
|
scene.addChild(timer.labelNode)
|
||||||
|
}
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let sliderNode = entity.component(ofType: SliderComponent.self)?.sliderNode {
|
||||||
|
scene.addChild(sliderNode.sliderKnob)
|
||||||
|
scene.addChild(sliderNode.sliderLine)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func remove(_ entity: GKEntity) {
|
||||||
|
if let spriteNode = entity.component(ofType: DefaultBaseComponent.self)?.spriteNode {
|
||||||
|
spriteNode.removeFromParent()
|
||||||
|
}
|
||||||
|
if let spriteNode = entity.component(ofType: ModalBackgroundComponent.self)?.spriteNode {
|
||||||
|
spriteNode.removeFromParent()
|
||||||
|
isModal = false
|
||||||
|
}
|
||||||
|
if let modal = entity.component(ofType: ModalContentComponent.self) {
|
||||||
|
modal.header.removeFromParent()
|
||||||
|
modal.body.removeFromParent()
|
||||||
|
modal.footer.removeFromParent()
|
||||||
|
}
|
||||||
|
if let sliderNode = entity.component(ofType: SliderComponent.self)?.sliderNode {
|
||||||
|
sliderNode.sliderKnob.removeFromParent()
|
||||||
|
sliderNode.sliderLine.removeFromParent()
|
||||||
|
}
|
||||||
|
entities.remove(entity)
|
||||||
|
}
|
||||||
|
|
||||||
|
func update(_ entities: [GKEntity]){
|
||||||
|
for entity in entities {
|
||||||
|
self.entities.update(with: entity)
|
||||||
|
let base = (entity as! Base)
|
||||||
|
|
||||||
|
if base.changeOwnerShip {
|
||||||
|
base.addComponent(TeamComponent(team: (entities[0] as! Base).component(ofType: TeamComponent.self)!.team, position: (base.component(ofType: DefaultBaseComponent.self)?.spriteNode.position)!))
|
||||||
|
base.changeOwnerShip = false
|
||||||
|
scene.addChild(base.component(ofType: TeamComponent.self)!.fire)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
func getBaseByTeam(for team: Team) -> GKEntity? {
|
||||||
|
for entity in entities {
|
||||||
|
if let teamComponent = entity.component(ofType: TeamComponent.self),
|
||||||
|
let _ = entity.component(ofType: DefaultBaseComponent.self) {
|
||||||
|
if teamComponent.team == team {
|
||||||
|
return entity
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getBasesByTeam(for team: Team) -> Set<Base> {
|
||||||
|
return entities.filter{$0 is Base && ($0 as! Base).component(ofType: TeamComponent.self)?.team == team } as! Set<Base>
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTeamByBase(base: Base) -> Team? {
|
||||||
|
for entity in entities {
|
||||||
|
if entity is Base && entity == base{
|
||||||
|
for component in entity.components{
|
||||||
|
if component is TeamComponent {
|
||||||
|
return entity.component(ofType: TeamComponent.self)!.team
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
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 is Button && ($0 as! Button).name == buttonName }[0] as! Button
|
||||||
|
}
|
||||||
|
|
||||||
|
func getHUD() -> GKEntity? {
|
||||||
|
return entities.filter{$0 is HUD}[0]
|
||||||
|
}
|
||||||
|
}
|
37
GoldWars/GoldWars/Entities/HUD.swift
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
//
|
||||||
|
// HUD.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class HUD: GKEntity {
|
||||||
|
|
||||||
|
init(size: CGSize) {
|
||||||
|
super.init()
|
||||||
|
addComponent(SpySkillComponent(text: "Spy",
|
||||||
|
texture: nil,
|
||||||
|
anchorPoint: CGPoint(x: size.width * 0.75, y: size.height * 0.1)))
|
||||||
|
|
||||||
|
|
||||||
|
addComponent(AtkBoostSkillComponent(text: "Atk",
|
||||||
|
texture: nil,
|
||||||
|
anchorPoint: CGPoint(x: size.width * 0.85, y: size.height * 0.1)))
|
||||||
|
|
||||||
|
|
||||||
|
addComponent(DefBoostSkillComponent(text: "Def",
|
||||||
|
texture: nil,
|
||||||
|
anchorPoint: CGPoint(x: size.width * 0.95, y: size.height * 0.1)))
|
||||||
|
|
||||||
|
addComponent(TimerComponent(text: "",
|
||||||
|
anchorPoint: CGPoint(x: size.width * 0.5, y: size.height * 0.9), duration: 30))
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
39
GoldWars/GoldWars/Entities/Modal.swift
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
//
|
||||||
|
// Modal.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class Modal: GKEntity{
|
||||||
|
|
||||||
|
var unitCount:Int
|
||||||
|
|
||||||
|
init(modaltype: ModalType, base: Base, anchorPoint: CGPoint) {
|
||||||
|
unitCount = base.unitCount
|
||||||
|
super.init()
|
||||||
|
switch modaltype{
|
||||||
|
case .BaseDetails:
|
||||||
|
addComponent(ModalBackgroundComponent(anchorPoint: anchorPoint))
|
||||||
|
addComponent(ModalContentComponent(header: "Basis Information",
|
||||||
|
body: "Diese Basis enthält \(base.unitCount) Einheiten",
|
||||||
|
footer: "",
|
||||||
|
anchorPoint: anchorPoint))
|
||||||
|
case .BaseAttack:
|
||||||
|
addComponent(ModalBackgroundComponent(anchorPoint: anchorPoint))
|
||||||
|
addComponent(SliderComponent(width: 300, position: CGPoint(x: anchorPoint.x , y: anchorPoint.y - 80)))
|
||||||
|
addComponent(ModalContentComponent(header: "Angriff",
|
||||||
|
body: "Schicke \(unitCount / 2) Einheiten",
|
||||||
|
footer: "",
|
||||||
|
anchorPoint: anchorPoint))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
GoldWars/GoldWars/Enums/ModalType.swift
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// ModalType.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
enum ModalType: String{
|
||||||
|
case BaseDetails
|
||||||
|
case BaseAttack
|
||||||
|
}
|
16
GoldWars/GoldWars/Enums/Team.swift
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// Team.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Jakob Haag on 02.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
enum Team: Int {
|
||||||
|
case team1 = 1
|
||||||
|
case team2 = 2
|
||||||
|
case team3 = 3
|
||||||
|
case team4 = 4
|
||||||
|
|
||||||
|
static let allValues = [team1, team2,team3,team4]
|
||||||
|
}
|
@ -1,254 +0,0 @@
|
|||||||
//
|
|
||||||
// GameScene.swift
|
|
||||||
// GoldWars
|
|
||||||
//
|
|
||||||
// Created by Aldin Duraki on 18.04.20.
|
|
||||||
// Copyright © 2020 SP2. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SpriteKit
|
|
||||||
import GameplayKit
|
|
||||||
|
|
||||||
class GameScene: SKScene, SKPhysicsContactDelegate {
|
|
||||||
|
|
||||||
var entities = [GKEntity]()
|
|
||||||
var graphs = [String : GKGraph]()
|
|
||||||
var bases = [Base]()
|
|
||||||
var player = [Base]()
|
|
||||||
var popUpOnBaseCollision = SKSpriteNode()
|
|
||||||
|
|
||||||
// TODO: Refactoring following as Components in Sprint 2
|
|
||||||
var timer = SKLabelNode()
|
|
||||||
var backBtn = SKShapeNode(circleOfRadius: 40)
|
|
||||||
var backLabel = SKLabelNode()
|
|
||||||
var atkBoostSkill = SKShapeNode(circleOfRadius: 30)
|
|
||||||
var defBoostSkill = SKShapeNode(circleOfRadius: 30)
|
|
||||||
var spySkill = SKShapeNode(circleOfRadius: 30)
|
|
||||||
var atkBoostLabel = SKLabelNode()
|
|
||||||
var defBoostLabel = SKLabelNode()
|
|
||||||
var spyLabel = SKLabelNode()
|
|
||||||
// TODO: END
|
|
||||||
|
|
||||||
struct physicsBodyNumber {
|
|
||||||
static let basePlayer1Number: UInt32 = 0b1
|
|
||||||
static let basePlayer2Number: UInt32 = 0b10
|
|
||||||
static let base5Number: UInt32 = 0b101
|
|
||||||
static let base6Number: UInt32 = 0b110
|
|
||||||
static let base7Number: UInt32 = 0b111
|
|
||||||
static let emptyNumber: UInt32 = 0b100
|
|
||||||
}
|
|
||||||
|
|
||||||
override func sceneDidLoad() {
|
|
||||||
|
|
||||||
self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
|
|
||||||
self.physicsWorld.contactDelegate = self
|
|
||||||
|
|
||||||
let maxX = self.size.width
|
|
||||||
let midY = self.size.height / 2
|
|
||||||
|
|
||||||
let basePlayer1 = Base(color: SKColor.red, position: CGPoint(x: maxX * 0.1, y: midY), name: "Player1", unitCount: 100, unitType: Unit.General)
|
|
||||||
let basePlayer2 = Base(color: SKColor.blue, position: CGPoint(x: maxX * 0.9, y: midY), name: "Player2", unitCount: 100, unitType: Unit.General)
|
|
||||||
basePlayer2.physicsBody = SKPhysicsBody(circleOfRadius: 50)
|
|
||||||
basePlayer2.physicsBody?.categoryBitMask = physicsBodyNumber.basePlayer2Number
|
|
||||||
basePlayer2.physicsBody?.collisionBitMask = physicsBodyNumber.emptyNumber
|
|
||||||
basePlayer2.physicsBody?.contactTestBitMask = physicsBodyNumber.base5Number & physicsBodyNumber.base6Number & physicsBodyNumber.base7Number
|
|
||||||
|
|
||||||
popUpOnBaseCollision = SKSpriteNode(color: SKColor.blue , size: CGSize(width: self.size.width * 0.4, height: self.size.height * 0.4))
|
|
||||||
popUpOnBaseCollision.position = CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.5)
|
|
||||||
popUpOnBaseCollision.zPosition = 2
|
|
||||||
|
|
||||||
self.addChild(basePlayer1)
|
|
||||||
self.addChild(basePlayer2)
|
|
||||||
player.append(basePlayer1)
|
|
||||||
player.append(basePlayer2)
|
|
||||||
createVirginBases()
|
|
||||||
connectBases()
|
|
||||||
addPhysicsBodyToBase()
|
|
||||||
}
|
|
||||||
override func didMove(to view: SKView) {
|
|
||||||
let background = SKSpriteNode(imageNamed: "Background")
|
|
||||||
background.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
|
|
||||||
background.zPosition = -1
|
|
||||||
background.size = self.size
|
|
||||||
self.addChild(background)
|
|
||||||
|
|
||||||
// TODO: Refactor following as Components in Sprint 2
|
|
||||||
timer.text = "Roundtime: 30 Seconds left"
|
|
||||||
timer.fontColor = SKColor.black
|
|
||||||
timer.fontSize = 40
|
|
||||||
timer.position = CGPoint(x: self.size.width/2, y: self.size.height * 0.9)
|
|
||||||
backBtn.position = CGPoint(x: 40, y: self.size.height * 0.9)
|
|
||||||
backBtn.fillColor = SKColor.gray
|
|
||||||
backLabel.text = "Back"
|
|
||||||
backLabel.position = CGPoint(x: backBtn.position.x, y: backBtn.position.y - 15)
|
|
||||||
spySkill.position = CGPoint(x: self.size.width * 0.75, y: 40)
|
|
||||||
spySkill.fillColor = SKColor.gray
|
|
||||||
spyLabel.text = "Spy"
|
|
||||||
spyLabel.position = CGPoint(x: spySkill.position.x, y: spySkill.position.y - 15);
|
|
||||||
atkBoostSkill.position = CGPoint(x: self.size.width * 0.85, y: 40)
|
|
||||||
atkBoostSkill.fillColor = SKColor.gray
|
|
||||||
atkBoostLabel.text = "Atk"
|
|
||||||
atkBoostLabel.position = CGPoint(x: atkBoostSkill.position.x, y: atkBoostSkill.position.y - 15)
|
|
||||||
defBoostSkill.position = CGPoint(x: self.size.width * 0.95, y: 40)
|
|
||||||
defBoostSkill.fillColor = SKColor.gray
|
|
||||||
defBoostLabel.text = "Def"
|
|
||||||
defBoostLabel.position = CGPoint(x: defBoostSkill.position.x, y: defBoostSkill.position.y - 15)
|
|
||||||
self.addChild(timer)
|
|
||||||
self.addChild(backBtn)
|
|
||||||
self.addChild(backLabel)
|
|
||||||
self.addChild(atkBoostSkill)
|
|
||||||
self.addChild(defBoostSkill)
|
|
||||||
self.addChild(spySkill)
|
|
||||||
self.addChild(atkBoostLabel)
|
|
||||||
self.addChild(defBoostLabel)
|
|
||||||
self.addChild(spyLabel)
|
|
||||||
// TODO: END
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
func addPhysicsBodyToBase() {
|
|
||||||
bases[5].physicsBody = SKPhysicsBody(circleOfRadius: 20)
|
|
||||||
bases[5].physicsBody?.categoryBitMask = physicsBodyNumber.base5Number
|
|
||||||
bases[5].physicsBody?.collisionBitMask = physicsBodyNumber.emptyNumber
|
|
||||||
bases[5].physicsBody?.contactTestBitMask = physicsBodyNumber.basePlayer2Number
|
|
||||||
|
|
||||||
bases[6].physicsBody = SKPhysicsBody(circleOfRadius: 20)
|
|
||||||
bases[6].physicsBody?.categoryBitMask = physicsBodyNumber.base6Number
|
|
||||||
bases[6].physicsBody?.collisionBitMask = physicsBodyNumber.emptyNumber
|
|
||||||
bases[6].physicsBody?.contactTestBitMask = physicsBodyNumber.basePlayer2Number
|
|
||||||
|
|
||||||
bases[7].physicsBody = SKPhysicsBody(circleOfRadius: 20)
|
|
||||||
bases[7].physicsBody?.categoryBitMask = physicsBodyNumber.base7Number
|
|
||||||
bases[7].physicsBody?.collisionBitMask = physicsBodyNumber.emptyNumber
|
|
||||||
bases[7].physicsBody?.contactTestBitMask = physicsBodyNumber.basePlayer2Number
|
|
||||||
}
|
|
||||||
|
|
||||||
func createVirginBases() {
|
|
||||||
for i in 0...7 {
|
|
||||||
let base:Base
|
|
||||||
let color = SKColor.green
|
|
||||||
|
|
||||||
var position = CGPoint(x: 0, y: 0)
|
|
||||||
switch i {
|
|
||||||
case 0...2:
|
|
||||||
let width = self.size.width * 0.25
|
|
||||||
|
|
||||||
if i == 0 {
|
|
||||||
position = CGPoint(x: width, y: self.size.height * 0.25)
|
|
||||||
}
|
|
||||||
if i == 1 {
|
|
||||||
position = CGPoint(x: width, y: self.size.height * 0.5)
|
|
||||||
}
|
|
||||||
if i == 2{
|
|
||||||
position = CGPoint(x: width, y: self.size.height * 0.75)
|
|
||||||
}
|
|
||||||
|
|
||||||
case 3...4:
|
|
||||||
let width = self.size.width * 0.5
|
|
||||||
|
|
||||||
if i == 3{
|
|
||||||
position = CGPoint(x: width, y: self.size.height * 0.333)
|
|
||||||
}
|
|
||||||
if i == 4{
|
|
||||||
position = CGPoint(x: width, y: self.size.height * 0.666)
|
|
||||||
}
|
|
||||||
|
|
||||||
case 5...7:
|
|
||||||
let width = self.size.width * 0.75
|
|
||||||
|
|
||||||
if i == 5{
|
|
||||||
position = CGPoint(x: width, y: self.size.height * 0.25)
|
|
||||||
}
|
|
||||||
if i == 6{
|
|
||||||
position = CGPoint(x: width, y: self.size.height * 0.5)
|
|
||||||
}
|
|
||||||
if i == 7{
|
|
||||||
position = CGPoint(x: width, y: self.size.height * 0.75)
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
base = Base(color: color, position: position, name: "Base\(i)")
|
|
||||||
bases.append(base)
|
|
||||||
self.addChild(base)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func addLine(base1: Base , base2: Base){
|
|
||||||
let line = SKShapeNode()
|
|
||||||
let linePath = CGMutablePath()
|
|
||||||
linePath.move(to: base1.position)
|
|
||||||
linePath.addLine(to: base2.position)
|
|
||||||
line.path = linePath
|
|
||||||
line.strokeColor = SKColor.white
|
|
||||||
addChild(line)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func connectBases(){
|
|
||||||
player[0].addAvailableBase(base: bases[0])
|
|
||||||
player[0].addAvailableBase(base: bases[1])
|
|
||||||
player[0].addAvailableBase(base: bases[2])
|
|
||||||
|
|
||||||
bases[0].addAvailableBase(base: bases[3])
|
|
||||||
|
|
||||||
bases[1].addAvailableBase(base: bases[3])
|
|
||||||
bases[1].addAvailableBase(base: bases[4])
|
|
||||||
|
|
||||||
bases[2].addAvailableBase(base: bases[4])
|
|
||||||
|
|
||||||
bases[3].addAvailableBase(base: bases[5])
|
|
||||||
bases[3].addAvailableBase(base: bases[6])
|
|
||||||
|
|
||||||
bases[4].addAvailableBase(base: bases[7])
|
|
||||||
bases[4].addAvailableBase(base: bases[6])
|
|
||||||
|
|
||||||
player[1].addAvailableBase(base: bases[5])
|
|
||||||
player[1].addAvailableBase(base: bases[6])
|
|
||||||
player[1].addAvailableBase(base: bases[7])
|
|
||||||
|
|
||||||
for base in player{
|
|
||||||
for availableBase in base.availableBases{
|
|
||||||
addLine(base1: base, base2: availableBase)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for base in bases{
|
|
||||||
for availableBase in base.availableBases{
|
|
||||||
addLine(base1: base, base2: availableBase)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
|
||||||
for touch in touches {
|
|
||||||
let locationUser = touch.location(in: self)
|
|
||||||
if atPoint(locationUser) == popUpOnBaseCollision {
|
|
||||||
popUpOnBaseCollision.removeFromParent()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
|
|
||||||
for touch in touches {
|
|
||||||
let locationUser = touch.location(in: self)
|
|
||||||
if atPoint(locationUser) == player[1]{
|
|
||||||
player[1].position = locationUser
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
|
|
||||||
let maxX = self.size.width
|
|
||||||
let midY = self.size.height / 2
|
|
||||||
|
|
||||||
player[1].position = CGPoint(x: maxX * 0.9, y: midY)
|
|
||||||
}
|
|
||||||
|
|
||||||
func didBegin(_ contact: SKPhysicsContact) {
|
|
||||||
self.addChild(popUpOnBaseCollision)
|
|
||||||
}
|
|
||||||
}
|
|
45
GoldWars/GoldWars/GameCenterHelper.swift
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
//
|
||||||
|
// GameCenterHelper.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Jakob Haag on 02.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameKit
|
||||||
|
|
||||||
|
final class GameCenterHelper: NSObject {
|
||||||
|
typealias CompletionBlock = (Error?) -> Void
|
||||||
|
|
||||||
|
static let helper = GameCenterHelper()
|
||||||
|
|
||||||
|
var viewController: UIViewController?
|
||||||
|
|
||||||
|
static var isAuthenticated: Bool {
|
||||||
|
return GKLocalPlayer.local.isAuthenticated
|
||||||
|
}
|
||||||
|
|
||||||
|
override init() {
|
||||||
|
super.init()
|
||||||
|
|
||||||
|
GKLocalPlayer.local.authenticateHandler = { gcAuthVC, error in
|
||||||
|
NotificationCenter.default
|
||||||
|
.post(name: .authenticationChanged, object: GKLocalPlayer.local.isAuthenticated)
|
||||||
|
|
||||||
|
if GKLocalPlayer.local.isAuthenticated {
|
||||||
|
print("Authenticated to Game Center!")
|
||||||
|
} else if let vc = gcAuthVC {
|
||||||
|
self.viewController?.present(vc, animated: true)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print("Error authentication to GameCenter: " +
|
||||||
|
"\(error?.localizedDescription ?? "none")")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Notification.Name {
|
||||||
|
static let presentGame = Notification.Name(rawValue: "presentGame")
|
||||||
|
static let authenticationChanged = Notification.Name(rawValue: "authenticationChanged")
|
||||||
|
}
|
@ -16,14 +16,16 @@ class GameViewController: UIViewController {
|
|||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
if let view = self.view as! SKView? {
|
if let view = self.view as! SKView? {
|
||||||
if let scene = SKScene(fileNamed: "MenuScene") {
|
let scene = MenuScene(size: self.view.bounds.size)
|
||||||
//scene.scaleMode = .aspectFill
|
scene.scaleMode = .aspectFill
|
||||||
view.presentScene(scene)
|
view.presentScene(scene)
|
||||||
//TODO: create dev profile or remove on delivery
|
//TODO: create dev profile or remove on delivery
|
||||||
view.showsFPS = true
|
view.showsFPS = true
|
||||||
view.showsNodeCount = true
|
view.showsNodeCount = true
|
||||||
}
|
|
||||||
}
|
GameCenterHelper.helper.viewController = self
|
||||||
|
MatchmakingHelper.sharedInstance.viewController = self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override var shouldAutorotate: Bool {
|
override var shouldAutorotate: Bool {
|
||||||
|
8
GoldWars/GoldWars/GoldWars.entitlements
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>aps-environment</key>
|
||||||
|
<string>development</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -15,9 +15,9 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.0</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
<key>LSRequiresIPhoneOS</key>
|
<key>LSRequiresIPhoneOS</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>UILaunchStoryboardName</key>
|
<key>UILaunchStoryboardName</key>
|
||||||
@ -27,7 +27,10 @@
|
|||||||
<key>UIRequiredDeviceCapabilities</key>
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
<array>
|
<array>
|
||||||
<string>armv7</string>
|
<string>armv7</string>
|
||||||
|
<string>gamekit</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>UIRequiresFullScreen</key>
|
||||||
|
<true/>
|
||||||
<key>UIStatusBarHidden</key>
|
<key>UIStatusBarHidden</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>UISupportedInterfaceOrientations</key>
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
36
GoldWars/GoldWars/Map/MapFactory.swift
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
//
|
||||||
|
// MapFactory.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Marcel Schwarz on 02.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
class MapFactory {
|
||||||
|
|
||||||
|
var twoPlayerMaps: [MapProtocol]!
|
||||||
|
var threePlayerMaps: [MapProtocol]!
|
||||||
|
var fourPlayerMaps: [MapProtocol]!
|
||||||
|
|
||||||
|
init(scene: SKScene, entityManager: EntityManager) {
|
||||||
|
self.twoPlayerMaps = [
|
||||||
|
TwoPlayerDefaultTestMap(scene: scene, entityManager: entityManager)
|
||||||
|
]
|
||||||
|
|
||||||
|
self.threePlayerMaps = [MapProtocol]()
|
||||||
|
self.fourPlayerMaps = [MapProtocol]()
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadMap(playerCount: Int) {
|
||||||
|
if playerCount == 2 {
|
||||||
|
twoPlayerMaps.randomElement()?.load()
|
||||||
|
} else if playerCount == 3 {
|
||||||
|
threePlayerMaps.randomElement()?.load()
|
||||||
|
} else {
|
||||||
|
fourPlayerMaps.randomElement()?.load()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
GoldWars/GoldWars/Map/MapProtocol.swift
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
//
|
||||||
|
// MapProtocoll.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Marcel Schwarz on 02.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
protocol MapProtocol {
|
||||||
|
|
||||||
|
var size: CGSize! {get set}
|
||||||
|
var entityManager: EntityManager! {get set}
|
||||||
|
|
||||||
|
init(scene: SKScene, entityManager: EntityManager)
|
||||||
|
|
||||||
|
func load()
|
||||||
|
}
|
81
GoldWars/GoldWars/Map/TwoPlayerDefaultTestMap.swift
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
//
|
||||||
|
// DefaultTestMap.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Marcel Schwarz on 02.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
class TwoPlayerDefaultTestMap: MapProtocol {
|
||||||
|
|
||||||
|
var entityManager: EntityManager!
|
||||||
|
var size: CGSize!
|
||||||
|
|
||||||
|
required init(scene: SKScene, entityManager: EntityManager) {
|
||||||
|
self.entityManager = entityManager;
|
||||||
|
self.size = scene.size
|
||||||
|
}
|
||||||
|
|
||||||
|
func load() {
|
||||||
|
|
||||||
|
// Create Bases
|
||||||
|
let basePlayerOne = Base(
|
||||||
|
position: CGPoint(x: self.size.width * 0.1, y: self.size.height / 2),
|
||||||
|
team: .team1
|
||||||
|
)
|
||||||
|
|
||||||
|
let column1 = [
|
||||||
|
Base(position: CGPoint(x: self.size.width * 0.25, y: self.size.height * 0.25)),
|
||||||
|
Base(position: CGPoint(x: self.size.width * 0.25, y: self.size.height * 0.5)),
|
||||||
|
Base(position: CGPoint(x: self.size.width * 0.25, y: self.size.height * 0.75))
|
||||||
|
]
|
||||||
|
|
||||||
|
let column2 = [
|
||||||
|
Base(position: CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.333)),
|
||||||
|
Base(position: CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.666))
|
||||||
|
]
|
||||||
|
|
||||||
|
let column3 = [
|
||||||
|
Base(position: CGPoint(x: self.size.width * 0.75, y: self.size.height * 0.25)),
|
||||||
|
Base(position: CGPoint(x: self.size.width * 0.75, y: self.size.height * 0.5)),
|
||||||
|
Base(position: CGPoint(x: self.size.width * 0.75, y: self.size.height * 0.75))
|
||||||
|
]
|
||||||
|
|
||||||
|
let basePlayerTwo = Base(
|
||||||
|
position: CGPoint(x: self.size.width * 0.9, y: self.size.height / 2),
|
||||||
|
team: .team2
|
||||||
|
)
|
||||||
|
|
||||||
|
// Create adjacency Mapping
|
||||||
|
basePlayerOne.adjacencyList.append(contentsOf: column1)
|
||||||
|
|
||||||
|
column1.forEach({currBase in
|
||||||
|
currBase.adjacencyList.append(contentsOf: column2)
|
||||||
|
currBase.adjacencyList.append(basePlayerOne)
|
||||||
|
})
|
||||||
|
|
||||||
|
column2.forEach({currBase in
|
||||||
|
currBase.adjacencyList.append(contentsOf: column3)
|
||||||
|
currBase.adjacencyList.append(contentsOf: column1)
|
||||||
|
})
|
||||||
|
|
||||||
|
column3.forEach({currBase in
|
||||||
|
currBase.adjacencyList.append(basePlayerTwo)
|
||||||
|
currBase.adjacencyList.append(contentsOf: column3)
|
||||||
|
})
|
||||||
|
|
||||||
|
basePlayerTwo.adjacencyList.append(contentsOf: column3)
|
||||||
|
|
||||||
|
// Register bases with the EntityManager
|
||||||
|
entityManager.add(basePlayerOne)
|
||||||
|
|
||||||
|
column1.forEach({base in entityManager.add(base)})
|
||||||
|
column2.forEach({base in entityManager.add(base)})
|
||||||
|
column3.forEach({base in entityManager.add(base)})
|
||||||
|
|
||||||
|
entityManager.add(basePlayerTwo)
|
||||||
|
}
|
||||||
|
}
|
178
GoldWars/GoldWars/MatchmakingHelper.swift
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
//
|
||||||
|
// MatchmakingHelper.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Chauntalle Schüle, Ömer Özel, Eray Kör on 03.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import GameKit
|
||||||
|
|
||||||
|
protocol GameKitHelperDelegate {
|
||||||
|
func matchStarted()
|
||||||
|
func matchEnded()
|
||||||
|
func matchReceivedData(match: GKMatch, data: NSData,
|
||||||
|
fromPlayer player: String)
|
||||||
|
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Diese Klasse wird für das Matchmaking über das Gamecenter gebraucht
|
||||||
|
@param: delegate: erhält alle Multiplayerevents
|
||||||
|
@param: mpMatch: repräsentiert das Netzwerk, alle Mitspieler besitzen ein gemeinsames Spiel
|
||||||
|
@param: viewController: ist nicht der ViewController des Gamecenters, sondern des Spiels
|
||||||
|
@param: mpMatchStarted: gibt an, ob ein Match schon gestartet wurde
|
||||||
|
@param: isServer: gibt an, ob der local player, als der Server fungiert
|
||||||
|
@param: spieler1: ist immer der Spieler, der der Server ist
|
||||||
|
@param: spieler2: ist immer der Spieler, der der Client ist
|
||||||
|
@param: sharedInstance: ist eine geteilte Instanz für alle Spieler
|
||||||
|
*/
|
||||||
|
class MatchmakingHelper: NSObject, GKMatchmakerViewControllerDelegate, GKMatchDelegate {
|
||||||
|
|
||||||
|
var delegate: GameKitHelperDelegate?
|
||||||
|
var mpMatch: GKMatch?
|
||||||
|
var viewController: UIViewController?
|
||||||
|
var mpMatchStarted: Bool
|
||||||
|
var isServer: Bool
|
||||||
|
var spieler1: GKPlayer?
|
||||||
|
var nameSpieler1 = ""
|
||||||
|
var menusc: MenuScene?
|
||||||
|
let localPlayer: GKLocalPlayer = GKLocalPlayer.local
|
||||||
|
|
||||||
|
static let sharedInstance = MatchmakingHelper()
|
||||||
|
|
||||||
|
|
||||||
|
static var isAuthenticated: Bool{
|
||||||
|
return GKLocalPlayer.local.isAuthenticated
|
||||||
|
}
|
||||||
|
|
||||||
|
override init() {
|
||||||
|
mpMatchStarted = false
|
||||||
|
isServer = false
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Diese Methode wechselt von der MenuScene zum GameCenter ViewController. Die Spieler werden hier gesucht und gematcht. Mit minplayers/maxplayers kann bestimmt werden, wie viele Spieler insgesamt zusammen miteinander spielen.
|
||||||
|
*/
|
||||||
|
func presentMatchmaker(scene: MenuScene) {
|
||||||
|
menusc = scene
|
||||||
|
guard GKLocalPlayer.local.isAuthenticated else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let request = GKMatchRequest()
|
||||||
|
|
||||||
|
request.minPlayers = 2
|
||||||
|
request.maxPlayers = 2
|
||||||
|
request.inviteMessage = "Willst du GoldWars spielen?"
|
||||||
|
|
||||||
|
let matchmakerVC = GKMatchmakerViewController.init(matchRequest: request)
|
||||||
|
matchmakerVC!.matchmakerDelegate = self
|
||||||
|
viewController?.present(matchmakerVC!, animated: true, completion: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Der User hat die Verbindung mit "Abbrechen" unterbrochen. GameCenter MatchMaking wird beendet.
|
||||||
|
*/
|
||||||
|
func matchmakerViewControllerWasCancelled(_ viewController: GKMatchmakerViewController) {
|
||||||
|
viewController.dismiss(animated: true, completion: nil)
|
||||||
|
delegate?.matchEnded()
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Wenn GameCenter kein match erstellen kann, wird der viewcontroller dismissed.
|
||||||
|
*/
|
||||||
|
func matchmakerViewController(_ viewController: GKMatchmakerViewController, didFailWithError error: Error) {
|
||||||
|
viewController.dismiss(animated: true, completion: nil)
|
||||||
|
print("Error finding match", error.localizedDescription)
|
||||||
|
delegate?.matchEnded()
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Gamecenter hat erfolgreich ein Match gefunden, das Spiel kann gestartet werden.
|
||||||
|
expectedPlayerCount: Die verbleibende Anzahl von Spielern, die sich noch nicht mit dem Spiel verbunden haben
|
||||||
|
z.B 0 gibt an, dass keine weiteren Spieler benötigt werden um das Match zu starten
|
||||||
|
*/
|
||||||
|
func matchmakerViewController(_ viewController: GKMatchmakerViewController, didFind match: GKMatch) {
|
||||||
|
viewController.dismiss(animated: true, completion: nil)
|
||||||
|
mpMatch = match
|
||||||
|
match.delegate = self
|
||||||
|
if !mpMatchStarted && match.expectedPlayerCount == 0 {
|
||||||
|
startMatch()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Vom match erhaltene Spielerdaten
|
||||||
|
*/
|
||||||
|
private func match(match: GKMatch!, didReceiveData data: NSData!,fromPlayer playerID: String!) {
|
||||||
|
if mpMatch != match { return }
|
||||||
|
delegate?.matchReceivedData(match: match, data: data, fromPlayer: playerID)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Verbindung/Matchmaking ist fehlgeschlagen
|
||||||
|
*/
|
||||||
|
private func match(match: GKMatch!, didFailWithError error: NSError!) {
|
||||||
|
if mpMatch != match {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mpMatchStarted = false
|
||||||
|
delegate?.matchEnded()
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Wird beim ändern des States/Zustands des Spielers aufgerufen udn gibt dessen Zustand zurück.
|
||||||
|
*/
|
||||||
|
func match(_ match: GKMatch, player: GKPlayer, didChange state: GKPlayerConnectionState) {
|
||||||
|
if mpMatch != match {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (state) {
|
||||||
|
case GKPlayerConnectionState.connected:
|
||||||
|
if (!mpMatchStarted && match.expectedPlayerCount == 0) {
|
||||||
|
startMatch()
|
||||||
|
}
|
||||||
|
case GKPlayerConnectionState.disconnected:
|
||||||
|
mpMatchStarted = false
|
||||||
|
delegate?.matchEnded()
|
||||||
|
default:
|
||||||
|
delegate?.matchEnded()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Ein Spieler wird als Host für das Match gewählt. Dieser ist Spieler 1. Im Anschluss wird die GameScene geladen.
|
||||||
|
*/
|
||||||
|
func startMatch() {
|
||||||
|
|
||||||
|
mpMatch!.chooseBestHostingPlayer(completionHandler: {
|
||||||
|
(player) in
|
||||||
|
|
||||||
|
self.mpMatchStarted = true
|
||||||
|
|
||||||
|
if player == GKLocalPlayer.local {
|
||||||
|
self.isServer = true
|
||||||
|
self.spieler1 = player
|
||||||
|
self.nameSpieler1 = self.spieler1!.displayName
|
||||||
|
|
||||||
|
} else {
|
||||||
|
self.isServer = false
|
||||||
|
}
|
||||||
|
|
||||||
|
self.delegate?.matchStarted()
|
||||||
|
self.menusc!.loadScene(scene: GameScene(size: self.menusc!.size))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Trennt die Verbindung vom Match
|
||||||
|
*/
|
||||||
|
func disconnect() {
|
||||||
|
if mpMatch != nil {
|
||||||
|
mpMatch?.disconnect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,36 +0,0 @@
|
|||||||
//
|
|
||||||
// MenuScene.swift
|
|
||||||
// GoldWars
|
|
||||||
//
|
|
||||||
// Created by Aldin Duraki on 18.04.20.
|
|
||||||
// Copyright © 2020 SP2. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SpriteKit
|
|
||||||
|
|
||||||
class MenuScene: SKScene {
|
|
||||||
|
|
||||||
var startGameButtonNode:SKSpriteNode!
|
|
||||||
var settingsButtonNode:SKSpriteNode!
|
|
||||||
|
|
||||||
|
|
||||||
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
|
||||||
guard let touch = touches.first else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let gameScene = GameScene(size: self.size)
|
|
||||||
let location = touch.location(in: self)
|
|
||||||
let frontTouchedNode = atPoint(location).name
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
BIN
GoldWars/GoldWars/Partikels/Fire.sks
Normal file
135
GoldWars/GoldWars/Scenes/GameScene.swift
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
//
|
||||||
|
// GameScene.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Aldin Duraki on 18.04.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SpriteKit
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class GameScene: SKScene{
|
||||||
|
|
||||||
|
var entityManager: EntityManager!
|
||||||
|
var isMoveTouch = false
|
||||||
|
var currentDraggedBasePos = CGPoint()
|
||||||
|
var currentDraggedBase : Base?
|
||||||
|
|
||||||
|
override func sceneDidLoad() {
|
||||||
|
entityManager = EntityManager(scene: self)
|
||||||
|
entityManager.add(HUD(size: self.size))
|
||||||
|
entityManager.add(Background(size: self.size))
|
||||||
|
initMap()
|
||||||
|
}
|
||||||
|
|
||||||
|
func initMap() {
|
||||||
|
MapFactory(scene: self, entityManager: self.entityManager).loadMap(playerCount: 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||||
|
guard let touch = touches.first else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let touchLocation = touch.location(in: self)
|
||||||
|
|
||||||
|
if isMoveTouch{
|
||||||
|
isMoveTouch = false
|
||||||
|
currentDraggedBase!.component(ofType: DefaultBaseComponent.self)?.spriteNode.position = currentDraggedBasePos
|
||||||
|
currentDraggedBase!.component(ofType: TeamComponent.self)?.fire.position = currentDraggedBasePos
|
||||||
|
|
||||||
|
for base in currentDraggedBase!.adjacencyList {
|
||||||
|
if atPoint(touchLocation) == base.component(ofType: DefaultBaseComponent.self)?.spriteNode {
|
||||||
|
// TODO: change interaction based on collision instead of touchlocation
|
||||||
|
|
||||||
|
if !(entityManager.getTeamByBase(base: currentDraggedBase!) == entityManager.getTeamByBase(base: base)){
|
||||||
|
entityManager.add(Modal(modaltype: .BaseAttack,
|
||||||
|
base: currentDraggedBase!,
|
||||||
|
anchorPoint: CGPoint(x: self.size.width / 2 , y: self.size.height / 2)))
|
||||||
|
entityManager.update((currentDraggedBase?.attackBase(base: base, units: 100))!)
|
||||||
|
}else {
|
||||||
|
entityManager.add(Modal(modaltype: .BaseAttack,
|
||||||
|
base: currentDraggedBase!,
|
||||||
|
anchorPoint: CGPoint(x: self.size.width / 2 , y: self.size.height / 2)))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for entity in entityManager.entities {
|
||||||
|
let spriteNode = entity.component(ofType: DefaultBaseComponent.self)?.spriteNode
|
||||||
|
|
||||||
|
if entityManager.isModal && entity.isMember(of: Modal.self) {
|
||||||
|
entityManager.remove(entity)
|
||||||
|
for child in self.children {
|
||||||
|
if(child.name != "fire"){
|
||||||
|
child.alpha = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if atPoint(touchLocation) == spriteNode && !entityManager.isModal {
|
||||||
|
spriteNode?.touchesBegan(touches, with: event)
|
||||||
|
if !entityManager.isModal {
|
||||||
|
for child in self.children {
|
||||||
|
if(child.name != "fire"){
|
||||||
|
child.alpha = 0.3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
entityManager.add(Modal(modaltype: .BaseDetails,
|
||||||
|
base: entity as! Base,
|
||||||
|
anchorPoint: CGPoint(x: self.size.width / 2 , y: self.size.height / 2)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||||
|
guard let touch = touches.first else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let touchLocation = touch.location(in: self)
|
||||||
|
|
||||||
|
for child in children {
|
||||||
|
if atPoint(touchLocation) == child {
|
||||||
|
child.touchesMoved(touches, with: event)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for e in entityManager.entities{
|
||||||
|
if let body = e.component(ofType: ModalContentComponent.self)?.body{
|
||||||
|
body.text = "Schicke \( ((e.component(ofType: SliderComponent.self)?.sliderNode.getValue ?? 0) * CGFloat((e as! Modal).unitCount)).rounded(.up)) Einheiten "
|
||||||
|
} }
|
||||||
|
|
||||||
|
let bases = entityManager.getBasesByTeam(for: .team1)
|
||||||
|
|
||||||
|
for base in bases {
|
||||||
|
if atPoint(touchLocation) == base.component(ofType: DefaultBaseComponent.self)?.spriteNode{
|
||||||
|
if !isMoveTouch {
|
||||||
|
currentDraggedBasePos = base.component(ofType: DefaultBaseComponent.self)!.spriteNode.position
|
||||||
|
currentDraggedBase = base
|
||||||
|
}
|
||||||
|
isMoveTouch = true
|
||||||
|
|
||||||
|
base.component(ofType: DefaultBaseComponent.self)?.spriteNode.position = touchLocation
|
||||||
|
base.component(ofType: TeamComponent.self)?.fire.position = touchLocation
|
||||||
|
for adjacencyBase in base.adjacencyList {
|
||||||
|
let node = adjacencyBase.component(ofType: DefaultBaseComponent.self)?.spriteNode
|
||||||
|
node?.run(SKAction.sequence([
|
||||||
|
SKAction.resize(byWidth: 2, height: 2, duration: 0.5),
|
||||||
|
SKAction.resize(byWidth: -2, height: -2, duration: 0.5)
|
||||||
|
]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func update(_ currentTime: TimeInterval) {
|
||||||
|
entityManager.getBackground()?.update(deltaTime: currentTime)
|
||||||
|
entityManager.getHUD()?.component(ofType: TimerComponent.self)?.update()
|
||||||
|
}
|
||||||
|
}
|
49
GoldWars/GoldWars/Scenes/MenuScene.swift
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
//
|
||||||
|
// MenuScene.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Aldin Duraki on 18.04.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
class MenuScene: SKScene {
|
||||||
|
|
||||||
|
var entityManager: EntityManager!
|
||||||
|
|
||||||
|
override func sceneDidLoad() {
|
||||||
|
entityManager = EntityManager(scene: self)
|
||||||
|
let midX = self.size.width / 2
|
||||||
|
let midY = self.size.height / 2
|
||||||
|
entityManager.add(Button(name: "startGameButton",
|
||||||
|
iconName: "",
|
||||||
|
text: "Start Game",
|
||||||
|
position: CGPoint(x: midX, y: midY),
|
||||||
|
onButtonPress: {
|
||||||
|
if CommandLine.arguments.contains("--no-matchmaking") {
|
||||||
|
self.loadScene(scene: GameScene(size: self.size))
|
||||||
|
} else {
|
||||||
|
MatchmakingHelper.sharedInstance.presentMatchmaker(scene: self)
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
entityManager.add(Button(name: "settingsButton",
|
||||||
|
iconName: "",
|
||||||
|
text: "Settings",
|
||||||
|
position: CGPoint(x: midX, y: midY - 80 ),
|
||||||
|
onButtonPress: {
|
||||||
|
//TODO: create Settings Scene
|
||||||
|
}))
|
||||||
|
entityManager.add(Background(size: self.size))
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadScene(scene: SKScene) {
|
||||||
|
let transition = SKTransition.flipVertical(withDuration: 0.5)
|
||||||
|
self.view?.presentScene(scene, transition: transition)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func update(_ currentTime: TimeInterval) {
|
||||||
|
entityManager.getBackground()!.update(deltaTime: currentTime)
|
||||||
|
entityManager.getButtonByName(buttonName: "startGameButton").component(ofType: ButtonComponent.self)?.buttonNode.isEnabled = GameCenterHelper.isAuthenticated
|
||||||
|
}
|
||||||
|
}
|
@ -1,43 +0,0 @@
|
|||||||
//
|
|
||||||
// GoldWarsUITests.swift
|
|
||||||
// GoldWarsUITests
|
|
||||||
//
|
|
||||||
// Created by Aldin Duraki on 18.04.20.
|
|
||||||
// Copyright © 2020 SP2. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import XCTest
|
|
||||||
|
|
||||||
class GoldWarsUITests: XCTestCase {
|
|
||||||
|
|
||||||
override func setUp() {
|
|
||||||
// Put setup code here. This method is called before the invocation of each test method in the class.
|
|
||||||
|
|
||||||
// In UI tests it is usually best to stop immediately when a failure occurs.
|
|
||||||
continueAfterFailure = false
|
|
||||||
|
|
||||||
// In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
|
|
||||||
}
|
|
||||||
|
|
||||||
override func tearDown() {
|
|
||||||
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
|
||||||
}
|
|
||||||
|
|
||||||
func testExample() {
|
|
||||||
// UI tests must launch the application that they test.
|
|
||||||
let app = XCUIApplication()
|
|
||||||
app.launch()
|
|
||||||
|
|
||||||
// Use recording to get started writing UI tests.
|
|
||||||
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
|
||||||
}
|
|
||||||
|
|
||||||
func testLaunchPerformance() {
|
|
||||||
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) {
|
|
||||||
// This measures how long it takes to launch your application.
|
|
||||||
measure(metrics: [XCTOSSignpostMetric.applicationLaunch]) {
|
|
||||||
XCUIApplication().launch()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundleName</key>
|
|
||||||
<string>$(PRODUCT_NAME)</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>1.0</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>1</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|