Revert "Merge branch '33-basisownership-anhand-des-gkplayers' into 'development'"

This reverts merge request !54
This commit is contained in:
Marcel Schwarz 2020-05-10 16:48:04 +00:00 committed by Jakob Haag
parent bd5d142a43
commit 4189d0f634
30 changed files with 454 additions and 465 deletions

View File

@ -10,32 +10,32 @@ import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
}

View File

@ -9,25 +9,25 @@
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")
}
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")
}
}

View File

@ -9,19 +9,19 @@
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
}
}

View File

@ -9,10 +9,10 @@
import GameplayKit
class BackgroundComponent: GKComponent{
var nodes = [SKSpriteNode]()
let size: CGSize
init(size: CGSize) {
self.size = size
for i in 0...2 {
@ -24,8 +24,8 @@ class BackgroundComponent: GKComponent{
nodes.append(sky)
}
super.init()
}
}
func update(){
for node in nodes{
node.position.x -= 2
@ -34,9 +34,9 @@ class BackgroundComponent: GKComponent{
}
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

View File

@ -9,26 +9,26 @@
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
}
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
}
}

View File

@ -9,9 +9,9 @@
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,

View File

@ -9,7 +9,7 @@
import SpriteKit
class ButtonNode: SKSpriteNode {
var isEnabled: Bool{
didSet{
if isEnabled {
@ -18,19 +18,19 @@ class ButtonNode: SKSpriteNode {
} 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
@ -38,7 +38,7 @@ class ButtonNode: SKSpriteNode {
label.verticalAlignmentMode = .center
label.text = text
label.name = "label"
if iconName.isEmpty {
label.position = CGPoint(x: 0, y: 0)
} else {
@ -50,26 +50,26 @@ class ButtonNode: SKSpriteNode {
}
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()
}
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")
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

View File

@ -9,25 +9,25 @@
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")
}
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")
}
}

View File

@ -10,15 +10,15 @@ 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")
}
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")
}
}

View File

@ -10,17 +10,17 @@ 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")
}
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")
}
}

View File

@ -10,33 +10,33 @@ 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")
}
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")
}
}

View File

@ -9,15 +9,15 @@
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")
}
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")
}
}

View File

@ -10,57 +10,57 @@ 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")
}
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
}
}
}
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
}
}
}
}

View File

@ -9,26 +9,26 @@
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")
}
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")
}
}

View File

@ -24,17 +24,17 @@ class TeamComponent: GKComponent {
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
}
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
self.player = player
super.init()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

View File

@ -9,12 +9,12 @@
import GameplayKit
class TimerComponent: GKComponent {
let labelNode :SKLabelNode
var endTime :Date!
var duration :Double
init(text: String, anchorPoint: CGPoint, duration: TimeInterval) {
init(text: String, anchorPoint: CGPoint, duration: TimeInterval) {
self.labelNode = SKLabelNode(text: text)
self.labelNode.fontColor = UIColor.black
self.labelNode.fontSize = CGFloat(45)
@ -51,6 +51,6 @@ class TimerComponent: GKComponent {
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

View File

@ -9,16 +9,16 @@
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()
component(ofType: BackgroundComponent.self)?.update()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

View File

@ -8,7 +8,6 @@
import SpriteKit
import GameplayKit
import GameKit
class Base: GKEntity {
@ -17,7 +16,7 @@ class Base: GKEntity {
var changeOwnership: Bool
var ownershipPlayer: GKPlayer?
init(position: CGPoint, player: GKPlayer? = nil, team: Team? = nil) {
init(position: CGPoint, team: Team! = nil) {
self.unitCount = 0
self.adjacencyList = [Base]()
self.changeOwnership = false

View File

@ -12,7 +12,7 @@ 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()

View File

@ -14,42 +14,42 @@ class EntityManager {
var entities = Set<GKEntity>()
let scene: SKScene
var isModal: Bool
var isModal: Bool
init(scene: SKScene) {
self.scene = scene
isModal = false
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 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)
}
@ -61,29 +61,29 @@ class EntityManager {
scene.addChild(node)
}
}
if let sliderNode = entity.component(ofType: SliderComponent.self)?.sliderNode {
scene.addChild(sliderNode.sliderKnob)
scene.addChild(sliderNode.sliderLine)
}
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()
}
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)
}
@ -115,37 +115,37 @@ class EntityManager {
let _ = entity.component(ofType: DefaultBaseComponent.self) {
if teamComponent.team == team {
return entity
}
}
}
return nil
}
}
}
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 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 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
}

View File

@ -9,29 +9,29 @@
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)))
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")
}
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")
}
}

View File

@ -9,41 +9,31 @@
import GameplayKit
class Modal: GKEntity{
var unitCount:Int
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")
}
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")
}
}

View File

@ -7,6 +7,6 @@
//
enum ModalType: String{
case BaseDetails
case BaseAttack
case BaseDetails
case BaseAttack
}

View File

@ -11,6 +11,6 @@ enum Team: Int {
case team2 = 2
case team3 = 3
case team4 = 4
static let allValues = [team1, team2,team3,team4]
}

View File

@ -12,20 +12,20 @@ final class GameCenterHelper: NSObject {
typealias CompletionBlock = (Error?) -> Void
static let helper = GameCenterHelper()
var viewController: UIViewController?
static var isAuthenticated: Bool {
return GKLocalPlayer.local.isAuthenticated
return GKLocalPlayer.local.isAuthenticated
}
override init() {
super.init()
GKLocalPlayer.local.authenticateHandler = { gcAuthVC, error in
NotificationCenter.default
.post(name: .authenticationChanged, object: GKLocalPlayer.local.isAuthenticated)
.post(name: .authenticationChanged, object: GKLocalPlayer.local.isAuthenticated)
if GKLocalPlayer.local.isAuthenticated {
print("Authenticated to Game Center!")
} else if let vc = gcAuthVC {

View File

@ -11,10 +11,10 @@ import SpriteKit
import GameplayKit
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
let scene = MenuScene(size: self.view.bounds.size)
scene.scaleMode = .aspectFill
@ -22,16 +22,16 @@ class GameViewController: UIViewController {
//TODO: create dev profile or remove on delivery
view.showsFPS = true
view.showsNodeCount = true
GameCenterHelper.helper.viewController = self
MatchmakingHelper.sharedInstance.viewController = self
}
GameCenterHelper.helper.viewController = self
MatchmakingHelper.sharedInstance.viewController = self
}
}
override var shouldAutorotate: Bool {
return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
if UIDevice.current.userInterfaceIdiom == .phone {
return .allButUpsideDown
@ -39,7 +39,7 @@ class GameViewController: UIViewController {
return .all
}
}
override var prefersStatusBarHidden: Bool {
return true
}

View File

@ -71,15 +71,15 @@ class MatchmakingHelper: NSObject, GKMatchmakerViewControllerDelegate, GKMatchDe
/*
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.
*/
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)
@ -90,7 +90,7 @@ class MatchmakingHelper: NSObject, GKMatchmakerViewControllerDelegate, GKMatchDe
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
@ -101,8 +101,8 @@ class MatchmakingHelper: NSObject, GKMatchmakerViewControllerDelegate, GKMatchDe
}
/*
Vom match erhaltene Spielerdaten
*/
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)
@ -142,15 +142,15 @@ class MatchmakingHelper: NSObject, GKMatchmakerViewControllerDelegate, GKMatchDe
}
/*
Ein Spieler wird als Host für das Match gewählt. Dieser ist Spieler 1. Im Anschluss wird die GameScene geladen.
*/
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
} else {
@ -160,7 +160,7 @@ class MatchmakingHelper: NSObject, GKMatchmakerViewControllerDelegate, GKMatchDe
self.menusc!.loadScene(scene: GameScene(size: self.menusc!.size))
})
}
/*
Trennt die Verbindung vom Match

View File

@ -23,45 +23,45 @@ class GameScene: SKScene{
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
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)))
}
}
}
}
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 {
@ -70,7 +70,7 @@ class GameScene: SKScene{
}
}
}
if atPoint(touchLocation) == spriteNode && !entityManager.isModal {
spriteNode?.touchesBegan(touches, with: event)
if !entityManager.isModal {
@ -86,9 +86,9 @@ class GameScene: SKScene{
}
}
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else {
return
@ -115,7 +115,7 @@ class GameScene: SKScene{
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 {

View File

@ -9,9 +9,9 @@
import SpriteKit
class MenuScene: SKScene {
var entityManager: EntityManager!
override func sceneDidLoad() {
entityManager = EntityManager(scene: self)
let midX = self.size.width / 2
@ -24,24 +24,24 @@ class MenuScene: SKScene {
if CommandLine.arguments.contains("--no-matchmaking") {
self.loadScene(scene: GameScene(size: self.size))
} else {
MatchmakingHelper.sharedInstance.presentMatchmaker(scene: self)
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

View File

@ -10,25 +10,25 @@ import XCTest
@testable import GoldWars
class GoldWarsTests: XCTestCase {
override func setUp() {
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}