From d16867f367c0e87f4286cf810c01f4404c964369 Mon Sep 17 00:00:00 2001 From: Niko Jochim <82joni1bif@hft-stuttgart.de> Date: Thu, 21 May 2020 17:59:19 +0200 Subject: [PATCH 1/2] add label with 100000000 changes --- GoldWars/GoldWars.xcodeproj/project.pbxproj | 8 ++- GoldWars/GoldWars/CancelBtnComponent.swift | 1 + .../GoldWars/Components/ButtonComponent.swift | 1 + .../Components/DefaultBaseComponent.swift | 12 ++++ .../Components/DefaultWayComponent.swift | 2 +- .../Components/ModalBackgroundComponent.swift | 1 + .../Components/ModalContentComponent.swift | 3 + .../Components/PlayerInfoComponent.swift | 70 +++++++++++++++++++ .../GoldWars/Components/SliderComponent.swift | 1 + GoldWars/GoldWars/Components/SliderNode.swift | 1 + .../GoldWars/Components/TeamComponent.swift | 2 +- GoldWars/GoldWars/Entities/Base.swift | 4 ++ .../GoldWars/Entities/EntityManager.swift | 11 ++- GoldWars/GoldWars/Entities/HUD.swift | 2 + 14 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 GoldWars/GoldWars/Components/PlayerInfoComponent.swift 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) { From b2f84bc3f4c00d47663aefb307b4de84f0d810e2 Mon Sep 17 00:00:00 2001 From: Niko Jochim <82joni1bif@hft-stuttgart.de> Date: Thu, 21 May 2020 19:40:46 +0200 Subject: [PATCH 2/2] set zPosistion on all Nodes update host and peer Label Nodes --- .../Components/DefaultBaseComponent.swift | 23 ++++++----- .../Components/PlayerInfoComponent.swift | 39 +++++++------------ GoldWars/GoldWars/Entities/Base.swift | 5 ++- .../GoldWars/Entities/EntityManager.swift | 21 ++++++++-- GoldWars/GoldWars/Entities/HUD.swift | 1 + GoldWars/GoldWars/Scenes/GameScene.swift | 3 +- 6 files changed, 51 insertions(+), 41 deletions(-) diff --git a/GoldWars/GoldWars/Components/DefaultBaseComponent.swift b/GoldWars/GoldWars/Components/DefaultBaseComponent.swift index 021df02..2510ad8 100644 --- a/GoldWars/GoldWars/Components/DefaultBaseComponent.swift +++ b/GoldWars/GoldWars/Components/DefaultBaseComponent.swift @@ -11,26 +11,25 @@ import SpriteKit import GameKit class DefaultBaseComponent: GKComponent { - var spriteNode: BaseNode + var spriteNode: BaseNode var labelNode : SKLabelNode? - - init(texture: SKTexture, position: CGPoint) { - spriteNode = BaseNode(texture: texture, size: CGSize(width: 80, height: 80)) - spriteNode.position = position + init(texture: SKTexture, position: CGPoint) { + spriteNode = BaseNode(texture: texture, size: CGSize(width: 80, height: 80)) + spriteNode.position = position spriteNode.zPosition = 2 - super.init() + 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?.position = CGPoint(x: position.x + 30 , y: position.y - 50 ) labelNode?.zPosition = spriteNode.zPosition - 1 - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } } diff --git a/GoldWars/GoldWars/Components/PlayerInfoComponent.swift b/GoldWars/GoldWars/Components/PlayerInfoComponent.swift index d9e8234..d48b6e9 100644 --- a/GoldWars/GoldWars/Components/PlayerInfoComponent.swift +++ b/GoldWars/GoldWars/Components/PlayerInfoComponent.swift @@ -15,46 +15,37 @@ class PlayerInfoComponent: GKComponent { var hostLabel:SKLabelNode var hostUnitsLabel:SKLabelNode - + var peerLabel:SKLabelNode var peerUnitsLabel:SKLabelNode - - - + var host: GKPlayer? + var peer: GKPlayer? init(size: CGSize) { - var host: String? - var peer: String? - if MatchmakingHelper.sharedInstance.isServer { - host = GKLocalPlayer.local.displayName - peer = MatchmakingHelper.sharedInstance.mpMatch?.players[0].displayName - + host = GKLocalPlayer.local + peer = MatchmakingHelper.sharedInstance.mpMatch?.players[0] } else { - host = MatchmakingHelper.sharedInstance.mpMatch?.players[0].displayName - peer = GKLocalPlayer.local.displayName - + host = MatchmakingHelper.sharedInstance.mpMatch?.players[0] + peer = GKLocalPlayer.local } - - - hostLabel = SKLabelNode(text: host) - hostUnitsLabel = SKLabelNode(text: "500") - peerLabel = SKLabelNode(text: peer) + hostLabel = SKLabelNode(text: host?.displayName) + hostUnitsLabel = SKLabelNode(text: "500" ) + peerLabel = SKLabelNode(text: peer?.displayName) 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 update(){ + hostUnitsLabel.text = "\(EntityManager.sharedInstance.getUnitSum(by: host!))" + peerUnitsLabel.text = "\(EntityManager.sharedInstance.getUnitSum(by: peer!))" } func setColor(labelNodes: [SKLabelNode]) -> Void { diff --git a/GoldWars/GoldWars/Entities/Base.swift b/GoldWars/GoldWars/Entities/Base.swift index ccdae32..41078fa 100644 --- a/GoldWars/GoldWars/Entities/Base.swift +++ b/GoldWars/GoldWars/Entities/Base.swift @@ -37,8 +37,11 @@ class Base: GKEntity{ addComponent(TeamComponent(team: team!, player: player!, position: spritePos)) self.unitCount = 500 } + if ownershipPlayer == GKLocalPlayer.local { + self.component(ofType: DefaultBaseComponent.self)?.labelNode?.text = "\(unitCount)" + } + - self.component(ofType: DefaultBaseComponent.self)?.labelNode?.text = "\(unitCount)" } func doPlayerMoveTypeToBase(base: Base, playerMoveType: PlayerMoveType, units: Int) -> [GKEntity]{ diff --git a/GoldWars/GoldWars/Entities/EntityManager.swift b/GoldWars/GoldWars/Entities/EntityManager.swift index 737b278..a1c69d3 100644 --- a/GoldWars/GoldWars/Entities/EntityManager.swift +++ b/GoldWars/GoldWars/Entities/EntityManager.swift @@ -150,13 +150,18 @@ 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!) } else { entity.removeComponent(ofType: TeamComponent.self) } if getOwnerBySnapBase != nil { + if getOwnerBySnapBase == GKLocalPlayer.local { + base.component(ofType: DefaultBaseComponent.self)?.labelNode?.text = "\(base.unitCount)" + }else { + base.component(ofType: DefaultBaseComponent.self)?.labelNode?.text = "" + } base.changeOwnership = true base.ownershipPlayer = getOwnerBySnapBase if (entity.component(ofType: TeamComponent.self) != nil) { @@ -174,6 +179,9 @@ class EntityManager { } } } + + getHUD()?.component(ofType: PlayerInfoComponent.self)?.update() + } func getSnapshotBaseById(baseId: Int, snapshotModel: SnapshotModel) -> BaseEntityModel{ @@ -254,8 +262,6 @@ class EntityManager { return entities.filter{$0 is HUD}[0] } - - func getSnapshotModel() -> SnapshotModel { let bases = entities.filter{$0 is Base} var snapBase: [BaseEntityModel] = [] @@ -271,4 +277,13 @@ class EntityManager { func getTimer() -> TimerComponent { return entities.filter{$0 is HUD}[0].component(ofType: TimerComponent.self)! } + func getUnitSum(by player: GKPlayer) -> Int{ + let bases = getBasesByPlayer(for: player) + + var sum = 0 + for base in bases { + sum += base.unitCount + } + return sum + } } diff --git a/GoldWars/GoldWars/Entities/HUD.swift b/GoldWars/GoldWars/Entities/HUD.swift index 4f4a517..e2da8bf 100644 --- a/GoldWars/GoldWars/Entities/HUD.swift +++ b/GoldWars/GoldWars/Entities/HUD.swift @@ -26,6 +26,7 @@ class HUD: GKEntity { anchorPoint: CGPoint(x: size.width * 0.5, y: size.height * 0.9), duration: 30)) addComponent(PlayerInfoComponent(size: size)) + } required init?(coder: NSCoder) { diff --git a/GoldWars/GoldWars/Scenes/GameScene.swift b/GoldWars/GoldWars/Scenes/GameScene.swift index 8a967a0..7618d1a 100644 --- a/GoldWars/GoldWars/Scenes/GameScene.swift +++ b/GoldWars/GoldWars/Scenes/GameScene.swift @@ -46,7 +46,7 @@ class GameScene: SKScene{ isMoveTouch = false currentDraggedBase!.component(ofType: DefaultBaseComponent.self)?.spriteNode.position = currentDraggedBase!.position currentDraggedBase!.component(ofType: TeamComponent.self)?.fire.position = currentDraggedBase!.position - + currentDraggedBase!.component(ofType: DefaultBaseComponent.self)?.labelNode?.position = CGPoint(x: currentDraggedBase!.position.x + 30, y: currentDraggedBase!.position.y - 50) addAttackDetails(touchLocation: touchLocation) } else { @@ -152,6 +152,7 @@ class GameScene: SKScene{ func moveFireAndBase(base: Base, touchLocation: CGPoint){ base.component(ofType: DefaultBaseComponent.self)?.spriteNode.position = touchLocation base.component(ofType: TeamComponent.self)?.fire.position = touchLocation + base.component(ofType: DefaultBaseComponent.self)?.labelNode?.position = CGPoint(x:touchLocation.x + 30, y: touchLocation.y - 50) } func showNearestBases(base: Base){