diff --git a/GoldWars/GoldWars.xcodeproj/project.pbxproj b/GoldWars/GoldWars.xcodeproj/project.pbxproj index f44c10e..186e912 100644 --- a/GoldWars/GoldWars.xcodeproj/project.pbxproj +++ b/GoldWars/GoldWars.xcodeproj/project.pbxproj @@ -23,9 +23,9 @@ 3E6785442472CC27007B9DE4 /* DefaultWayComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E6785432472CC27007B9DE4 /* DefaultWayComponent.swift */; }; 3EBD242C245D8044003CECE7 /* GameCenterHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBD242B245D8044003CECE7 /* GameCenterHelper.swift */; }; 3EBD242E245D9332003CECE7 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBD242D245D9332003CECE7 /* Team.swift */; }; - 8BB6FF402472B8F000162BBD /* SkillButtonNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BB6FF3F2472B8F000162BBD /* SkillButtonNode.swift */; }; 3F745DF0246F48FC00CE7375 /* PlayerMoveType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F745DEF246F48FC00CE7375 /* PlayerMoveType.swift */; }; 3FE19DB5246C7A22004827AB /* RoundCalculatorService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FE19DB4246C7A22004827AB /* RoundCalculatorService.swift */; }; + 8BB6FF402472B8F000162BBD /* SkillButtonNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BB6FF3F2472B8F000162BBD /* SkillButtonNode.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 */; }; @@ -45,6 +45,7 @@ 9EA3ABEF245C834B006BC61D /* ModalContentComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA3ABEE245C834B006BC61D /* ModalContentComponent.swift */; }; 9EBFD7552462CF5A00E1E219 /* SliderComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EBFD7542462CF5A00E1E219 /* SliderComponent.swift */; }; 9EC239E1246878A900952F74 /* MultiplayerNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC239E0246878A900952F74 /* MultiplayerNetwork.swift */; }; + 9EC2FBA72476B1EC00ABF11F /* PlayerInfoComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC2FBA62476B1EC00ABF11F /* PlayerInfoComponent.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 */; }; @@ -97,9 +98,9 @@ 3E6785432472CC27007B9DE4 /* DefaultWayComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultWayComponent.swift; sourceTree = ""; }; 3EBD242B245D8044003CECE7 /* GameCenterHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameCenterHelper.swift; sourceTree = ""; }; 3EBD242D245D9332003CECE7 /* Team.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Team.swift; sourceTree = ""; }; - 8BB6FF3F2472B8F000162BBD /* SkillButtonNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillButtonNode.swift; sourceTree = ""; }; 3F745DEF246F48FC00CE7375 /* PlayerMoveType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerMoveType.swift; sourceTree = ""; }; 3FE19DB4246C7A22004827AB /* RoundCalculatorService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundCalculatorService.swift; sourceTree = ""; }; + 8BB6FF3F2472B8F000162BBD /* SkillButtonNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkillButtonNode.swift; sourceTree = ""; }; 9E04AFAE245E2B73002D5CFC /* AttackActionComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttackActionComponent.swift; sourceTree = ""; }; 9E11FF77245CD81100EED3BE /* Fire.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Fire.sks; sourceTree = ""; }; 9E174C81245DD81D00209FF0 /* ButtonNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ButtonNode.swift; sourceTree = ""; }; @@ -119,6 +120,7 @@ 9EA3ABEE245C834B006BC61D /* ModalContentComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalContentComponent.swift; sourceTree = ""; }; 9EBFD7542462CF5A00E1E219 /* SliderComponent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SliderComponent.swift; sourceTree = ""; }; 9EC239E0246878A900952F74 /* MultiplayerNetwork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiplayerNetwork.swift; sourceTree = ""; }; + 9EC2FBA62476B1EC00ABF11F /* PlayerInfoComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerInfoComponent.swift; sourceTree = ""; }; 9EC7E48A2461FBF700396BCD /* SliderNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SliderNode.swift; sourceTree = ""; }; 9EC86B9E245C88A300796EF3 /* Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modal.swift; sourceTree = ""; }; 9EC86BA5245C8AD000796EF3 /* ModalType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalType.swift; sourceTree = ""; }; @@ -241,6 +243,7 @@ 9EC7E48A2461FBF700396BCD /* SliderNode.swift */, 3E6785432472CC27007B9DE4 /* DefaultWayComponent.swift */, 8BB6FF3F2472B8F000162BBD /* SkillButtonNode.swift */, + 9EC2FBA62476B1EC00ABF11F /* PlayerInfoComponent.swift */, ); path = Components; sourceTree = ""; @@ -436,6 +439,7 @@ 3EBD242E245D9332003CECE7 /* Team.swift in Sources */, 9E174C88245DF1FF00209FF0 /* BackgroundComponent.swift in Sources */, 9E78ACBA245CBDAF00526FF7 /* HUD.swift in Sources */, + 9EC2FBA72476B1EC00ABF11F /* PlayerInfoComponent.swift in Sources */, 9EEDE02D246FCD770096C735 /* SpinningLogoEntity.swift in Sources */, 11738A3B24508F68004426F1 /* UnitType.swift in Sources */, 9E174C86245DD91500209FF0 /* ButtonComponent.swift in Sources */, diff --git a/GoldWars/GoldWars/CancelBtnComponent.swift b/GoldWars/GoldWars/CancelBtnComponent.swift index 7d15f68..ae7d6a2 100644 --- a/GoldWars/GoldWars/CancelBtnComponent.swift +++ b/GoldWars/GoldWars/CancelBtnComponent.swift @@ -18,6 +18,7 @@ class CancelBtnComponent: GKComponent { isEnabled: isEnabled, position: position, onButtonPress: onButtonPress) + cancelBtnNode.zPosition = 4 super.init() } diff --git a/GoldWars/GoldWars/Components/ButtonComponent.swift b/GoldWars/GoldWars/Components/ButtonComponent.swift index 0fe059f..2c2d82a 100644 --- a/GoldWars/GoldWars/Components/ButtonComponent.swift +++ b/GoldWars/GoldWars/Components/ButtonComponent.swift @@ -18,6 +18,7 @@ class ButtonComponent: GKComponent { isEnabled: isEnabled, position: position, onButtonPress: onButtonPress) + buttonNode.zPosition = 4 super.init() } diff --git a/GoldWars/GoldWars/Components/DefaultBaseComponent.swift b/GoldWars/GoldWars/Components/DefaultBaseComponent.swift index 715840b..021df02 100644 --- a/GoldWars/GoldWars/Components/DefaultBaseComponent.swift +++ b/GoldWars/GoldWars/Components/DefaultBaseComponent.swift @@ -8,14 +8,26 @@ import GameplayKit import SpriteKit +import GameKit class DefaultBaseComponent: GKComponent { var spriteNode: BaseNode + var labelNode : SKLabelNode? + init(texture: SKTexture, position: CGPoint) { spriteNode = BaseNode(texture: texture, size: CGSize(width: 80, height: 80)) spriteNode.position = position + spriteNode.zPosition = 2 super.init() + labelNode = SKLabelNode(text: "") + labelNode?.fontColor = SKColor.black + labelNode?.horizontalAlignmentMode = .left + labelNode?.verticalAlignmentMode = .center + labelNode?.fontName = "AvenirNext-Bold" + labelNode?.fontSize = 15 + labelNode?.position = CGPoint(x: position.x + 20 , y: position.y - 40 ) + labelNode?.zPosition = spriteNode.zPosition - 1 } required init?(coder aDecoder: NSCoder) { diff --git a/GoldWars/GoldWars/Components/DefaultWayComponent.swift b/GoldWars/GoldWars/Components/DefaultWayComponent.swift index f72044c..045ac04 100644 --- a/GoldWars/GoldWars/Components/DefaultWayComponent.swift +++ b/GoldWars/GoldWars/Components/DefaultWayComponent.swift @@ -18,7 +18,7 @@ class DefaultWayComponent: GKComponent { shapeNode.path = pathToDraw shapeNode.strokeColor = UIColor(red: 0.852, green: 0.649, blue: 0.123, alpha: 1) shapeNode.lineWidth = 10 - shapeNode.zPosition = -1 + shapeNode.zPosition = 0 super.init() } diff --git a/GoldWars/GoldWars/Components/ModalBackgroundComponent.swift b/GoldWars/GoldWars/Components/ModalBackgroundComponent.swift index e81fcf9..c7edfae 100644 --- a/GoldWars/GoldWars/Components/ModalBackgroundComponent.swift +++ b/GoldWars/GoldWars/Components/ModalBackgroundComponent.swift @@ -17,6 +17,7 @@ class ModalBackgroundComponent: GKComponent { spriteNode = SKSpriteNode(texture: texture, size: texture.size()) spriteNode.setScale(2) spriteNode.position = anchorPoint + spriteNode.zPosition = 3 super.init() } diff --git a/GoldWars/GoldWars/Components/ModalContentComponent.swift b/GoldWars/GoldWars/Components/ModalContentComponent.swift index df004a3..23c301e 100644 --- a/GoldWars/GoldWars/Components/ModalContentComponent.swift +++ b/GoldWars/GoldWars/Components/ModalContentComponent.swift @@ -20,6 +20,7 @@ class ModalContentComponent: GKComponent{ self.header.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y + 125) self.header.fontName = "HelveticaNeue-Bold" self.header.fontSize = 40 + self.header.zPosition = 4 self.body = SKLabelNode(text: body) self.body.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y - 20) @@ -28,11 +29,13 @@ class ModalContentComponent: GKComponent{ self.body.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.center self.body.fontName = "HelveticaNeue-Bold" self.body.fontSize = 40 + self.body.zPosition = 4 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 + self.footer.zPosition = 4 super.init() } diff --git a/GoldWars/GoldWars/Components/PlayerInfoComponent.swift b/GoldWars/GoldWars/Components/PlayerInfoComponent.swift new file mode 100644 index 0000000..d9e8234 --- /dev/null +++ b/GoldWars/GoldWars/Components/PlayerInfoComponent.swift @@ -0,0 +1,70 @@ +// +// PlayerInfoComponent.swift +// GoldWars +// +// Created by Niko Jochim on 21.05.20. +// Copyright © 2020 SP2. All rights reserved. +// + +import Foundation +import GameplayKit +import GameKit + + +class PlayerInfoComponent: GKComponent { + + var hostLabel:SKLabelNode + var hostUnitsLabel:SKLabelNode + + var peerLabel:SKLabelNode + var peerUnitsLabel:SKLabelNode + + + + + init(size: CGSize) { + var host: String? + var peer: String? + + if MatchmakingHelper.sharedInstance.isServer { + host = GKLocalPlayer.local.displayName + peer = MatchmakingHelper.sharedInstance.mpMatch?.players[0].displayName + + } else { + host = MatchmakingHelper.sharedInstance.mpMatch?.players[0].displayName + peer = GKLocalPlayer.local.displayName + + } + + + hostLabel = SKLabelNode(text: host) + hostUnitsLabel = SKLabelNode(text: "500") + peerLabel = SKLabelNode(text: peer) + peerUnitsLabel = SKLabelNode(text: "500") + + super.init() + + hostLabel.position = CGPoint(x: size.width * 0.02, y: size.height * 0.95) + hostLabel.horizontalAlignmentMode = .left + + peerLabel.position = CGPoint(x: size.width * 0.98, y: size.height * 0.95) + peerLabel.horizontalAlignmentMode = .right + + hostUnitsLabel.position = CGPoint(x: size.width * 0.05, y: size.height * 0.9) + peerUnitsLabel.position = CGPoint(x: size.width * 0.95, y: size.height * 0.9) + + setColor(labelNodes: [hostLabel,hostUnitsLabel,peerLabel,peerUnitsLabel]) + + } + + func setColor(labelNodes: [SKLabelNode]) -> Void { + for label in labelNodes { + label.fontColor = SKColor.black + } + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/GoldWars/GoldWars/Components/SliderComponent.swift b/GoldWars/GoldWars/Components/SliderComponent.swift index dc46145..9682f10 100644 --- a/GoldWars/GoldWars/Components/SliderComponent.swift +++ b/GoldWars/GoldWars/Components/SliderComponent.swift @@ -14,6 +14,7 @@ class SliderComponent: GKComponent { init(width: CGFloat, position: CGPoint) { sliderNode = SliderNode(width: width, position: position) + sliderNode.zPosition = 4 super.init() } diff --git a/GoldWars/GoldWars/Components/SliderNode.swift b/GoldWars/GoldWars/Components/SliderNode.swift index 93f42d2..2ae988e 100644 --- a/GoldWars/GoldWars/Components/SliderNode.swift +++ b/GoldWars/GoldWars/Components/SliderNode.swift @@ -26,6 +26,7 @@ class SliderNode :SKNode { sliderLine = SKShapeNode(rectOf: CGSize(width: width, height: 8)) sliderLine.position = position sliderLine.fillColor = SKColor.white + sliderLine.zPosition = 4 sliderKnob = SliderKnob(circleOfRadius: 20) sliderKnob.min = position.x - width / 2 sliderKnob.max = position.x + width / 2 diff --git a/GoldWars/GoldWars/Components/TeamComponent.swift b/GoldWars/GoldWars/Components/TeamComponent.swift index db67deb..5662b62 100644 --- a/GoldWars/GoldWars/Components/TeamComponent.swift +++ b/GoldWars/GoldWars/Components/TeamComponent.swift @@ -17,7 +17,7 @@ class TeamComponent: GKComponent { init(team: Team, player: GKPlayer, position: CGPoint) { fire = SKEmitterNode(fileNamed: "Fire")! - fire.zPosition = -1 + fire.zPosition = 1 fire.position = position fire.name = "fire" fire.particleColorSequence = nil diff --git a/GoldWars/GoldWars/Entities/Base.swift b/GoldWars/GoldWars/Entities/Base.swift index 4f695c9..3754a92 100644 --- a/GoldWars/GoldWars/Entities/Base.swift +++ b/GoldWars/GoldWars/Entities/Base.swift @@ -36,6 +36,8 @@ class Base: GKEntity{ addComponent(TeamComponent(team: team!, player: player!, position: position)) self.unitCount = 500 } + + self.component(ofType: DefaultBaseComponent.self)?.labelNode?.text = "\(unitCount)" } func doPlayerMoveTypeToBase(base: Base, playerMoveType: PlayerMoveType, units: Int) -> [GKEntity]{ @@ -43,6 +45,8 @@ class Base: GKEntity{ base.ownershipPlayer = self.ownershipPlayer self.unitCount -= units base.unitCount += units + self.component(ofType: DefaultBaseComponent.self)?.labelNode?.text = "\(self.unitCount)" + base.component(ofType: DefaultBaseComponent.self)?.labelNode?.text = "\(base.unitCount)" DataService.sharedInstance.addMove(playerMove: PlayerMove(fromBase: self.baseID, toBase: base.baseID, unitCount: units * playerMoveType.rawValue)) diff --git a/GoldWars/GoldWars/Entities/EntityManager.swift b/GoldWars/GoldWars/Entities/EntityManager.swift index cbeb114..ec65d7f 100644 --- a/GoldWars/GoldWars/Entities/EntityManager.swift +++ b/GoldWars/GoldWars/Entities/EntityManager.swift @@ -33,6 +33,9 @@ class EntityManager { if let spriteNode = entity.component(ofType: DefaultBaseComponent.self)?.spriteNode { scene.addChild(spriteNode) } + if let label = entity.component(ofType: DefaultBaseComponent.self)?.labelNode { + scene.addChild(label) + } if let fire = entity.component(ofType: TeamComponent.self)?.fire{ scene.addChild(fire) } @@ -84,6 +87,12 @@ class EntityManager { if let wayNode = entity.component(ofType: DefaultWayComponent.self)?.shapeNode { scene.addChild(wayNode) } + if let playerInfos = entity.component(ofType: PlayerInfoComponent.self) { + scene.addChild(playerInfos.hostLabel) + scene.addChild(playerInfos.hostUnitsLabel) + scene.addChild(playerInfos.peerLabel) + scene.addChild(playerInfos.peerUnitsLabel) + } } func remove(_ entity: GKEntity) { @@ -143,7 +152,7 @@ class EntityManager { let snapBase = self.getSnapshotBaseById(baseId: base.baseID, snapshotModel: snapshotModel) var getOwnerBySnapBase: GKPlayer? = nil base.unitCount = snapBase.unitCount - + base.component(ofType: DefaultBaseComponent.self)?.labelNode?.text = "\(base.unitCount)" if snapBase.ownership != nil { getOwnerBySnapBase = MatchmakingHelper.sharedInstance.getGKPlayerByUsername(displayName: snapBase.ownership!) } diff --git a/GoldWars/GoldWars/Entities/HUD.swift b/GoldWars/GoldWars/Entities/HUD.swift index 42c213c..4f4a517 100644 --- a/GoldWars/GoldWars/Entities/HUD.swift +++ b/GoldWars/GoldWars/Entities/HUD.swift @@ -24,6 +24,8 @@ class HUD: GKEntity { addComponent(TimerComponent(text: "", anchorPoint: CGPoint(x: size.width * 0.5, y: size.height * 0.9), duration: 30)) + + addComponent(PlayerInfoComponent(size: size)) } required init?(coder: NSCoder) {