Merge branch '23-arc-architektur-des-projektes' into 'development'
Resolve "[ARC] Architektur des Projektes" Closes #23 See merge request marcel.schwarz/software-projekt-2!24
This commit is contained in:
commit
579eae6c57
@ -18,7 +18,11 @@
|
|||||||
110360F9244B101B008610AF /* GoldWarsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360F8244B101B008610AF /* GoldWarsUITests.swift */; };
|
110360F9244B101B008610AF /* GoldWarsUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110360F8244B101B008610AF /* GoldWarsUITests.swift */; };
|
||||||
11036111244B3D6A008610AF /* MenuScene.sks in Resources */ = {isa = PBXBuildFile; fileRef = 11036110244B3D6A008610AF /* MenuScene.sks */; };
|
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 */; };
|
||||||
|
9E286A88245C6C6800EB32B8 /* TeamComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E286A87245C6C6800EB32B8 /* TeamComponent.swift */; };
|
||||||
|
9EA3ABE9245C6DAA006BC61D /* DefaultBaseComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA3ABE8245C6DAA006BC61D /* DefaultBaseComponent.swift */; };
|
||||||
|
9EA3ABEB245C6DFA006BC61D /* BaseNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA3ABEA245C6DFA006BC61D /* BaseNode.swift */; };
|
||||||
ABA03DA0244BD54F00A66916 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA03D9F244BD54F00A66916 /* Base.swift */; };
|
ABA03DA0244BD54F00A66916 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA03D9F244BD54F00A66916 /* Base.swift */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
@ -57,7 +61,11 @@
|
|||||||
110360FA244B101B008610AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; 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>"; };
|
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>"; };
|
||||||
|
9E286A87245C6C6800EB32B8 /* TeamComponent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TeamComponent.swift; path = ../../../../MonsterWars/MonsterWars/Components/TeamComponent.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>"; };
|
||||||
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>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
@ -109,7 +117,8 @@
|
|||||||
110360D1244B101A008610AF /* GoldWars */ = {
|
110360D1244B101A008610AF /* GoldWars */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
ABA03D9F244BD54F00A66916 /* Base.swift */,
|
116060F5245C5709004E5A36 /* Entities */,
|
||||||
|
116060F4245C56EA004E5A36 /* Components */,
|
||||||
11738A3A24508F68004426F1 /* Unit.swift */,
|
11738A3A24508F68004426F1 /* Unit.swift */,
|
||||||
11036112244B3E30008610AF /* MenuScene.swift */,
|
11036112244B3E30008610AF /* MenuScene.swift */,
|
||||||
11036110244B3D6A008610AF /* MenuScene.sks */,
|
11036110244B3D6A008610AF /* MenuScene.sks */,
|
||||||
@ -121,6 +130,7 @@
|
|||||||
110360DF244B101B008610AF /* Assets.xcassets */,
|
110360DF244B101B008610AF /* Assets.xcassets */,
|
||||||
110360E1244B101B008610AF /* LaunchScreen.storyboard */,
|
110360E1244B101B008610AF /* LaunchScreen.storyboard */,
|
||||||
110360E4244B101B008610AF /* Info.plist */,
|
110360E4244B101B008610AF /* Info.plist */,
|
||||||
|
116060F6245C57D2004E5A36 /* EntityManager.swift */,
|
||||||
);
|
);
|
||||||
path = GoldWars;
|
path = GoldWars;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -143,6 +153,24 @@
|
|||||||
path = GoldWarsUITests;
|
path = GoldWarsUITests;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
116060F4245C56EA004E5A36 /* Components */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
9E286A87245C6C6800EB32B8 /* TeamComponent.swift */,
|
||||||
|
9EA3ABE8245C6DAA006BC61D /* DefaultBaseComponent.swift */,
|
||||||
|
9EA3ABEA245C6DFA006BC61D /* BaseNode.swift */,
|
||||||
|
);
|
||||||
|
path = Components;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
116060F5245C5709004E5A36 /* Entities */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
ABA03D9F244BD54F00A66916 /* Base.swift */,
|
||||||
|
);
|
||||||
|
path = Entities;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
@ -276,10 +304,14 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
9EA3ABEB245C6DFA006BC61D /* BaseNode.swift in Sources */,
|
||||||
110360D9244B101A008610AF /* GameScene.swift in Sources */,
|
110360D9244B101A008610AF /* GameScene.swift in Sources */,
|
||||||
|
116060F7245C57D2004E5A36 /* EntityManager.swift in Sources */,
|
||||||
11738A3B24508F68004426F1 /* Unit.swift in Sources */,
|
11738A3B24508F68004426F1 /* Unit.swift in Sources */,
|
||||||
11036113244B3E30008610AF /* MenuScene.swift in Sources */,
|
11036113244B3E30008610AF /* MenuScene.swift in Sources */,
|
||||||
|
9EA3ABE9245C6DAA006BC61D /* DefaultBaseComponent.swift in Sources */,
|
||||||
ABA03DA0244BD54F00A66916 /* Base.swift in Sources */,
|
ABA03DA0244BD54F00A66916 /* Base.swift in Sources */,
|
||||||
|
9E286A88245C6C6800EB32B8 /* TeamComponent.swift in Sources */,
|
||||||
110360DB244B101A008610AF /* GameViewController.swift in Sources */,
|
110360DB244B101A008610AF /* GameViewController.swift in Sources */,
|
||||||
110360D3244B101A008610AF /* AppDelegate.swift in Sources */,
|
110360D3244B101A008610AF /* AppDelegate.swift in Sources */,
|
||||||
);
|
);
|
||||||
@ -455,6 +487,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_TEAM = DDKFQG46BQ;
|
||||||
INFOPLIST_FILE = GoldWars/Info.plist;
|
INFOPLIST_FILE = GoldWars/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -472,6 +505,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_TEAM = DDKFQG46BQ;
|
||||||
INFOPLIST_FILE = GoldWars/Info.plist;
|
INFOPLIST_FILE = GoldWars/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
|
@ -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
BIN
GoldWars/GoldWars/Assets.xcassets/Base.imageset/base-1.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 202 KiB |
BIN
GoldWars/GoldWars/Assets.xcassets/Base.imageset/base-2.png
vendored
Normal file
BIN
GoldWars/GoldWars/Assets.xcassets/Base.imageset/base-2.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 202 KiB |
Binary file not shown.
Before Width: | Height: | Size: 54 KiB |
Binary file not shown.
Before Width: | Height: | Size: 29 KiB |
Binary file not shown.
Before Width: | Height: | Size: 10 KiB |
BIN
GoldWars/GoldWars/Assets.xcassets/Base.imageset/base.png
vendored
Normal file
BIN
GoldWars/GoldWars/Assets.xcassets/Base.imageset/base.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 202 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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
37
GoldWars/GoldWars/Components/BaseNode.swift
Normal file
37
GoldWars/GoldWars/Components/BaseNode.swift
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
//
|
||||||
|
// BaseNode.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Niko Jochim on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
24
GoldWars/GoldWars/Components/DefaultBaseComponent.swift
Normal file
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 Foundation
|
||||||
|
import GameplayKit
|
||||||
|
import SpriteKit
|
||||||
|
|
||||||
|
class DefaultBaseComponent: GKComponent {
|
||||||
|
var spriteNode: BaseNode
|
||||||
|
|
||||||
|
init(texture: SKTexture) {
|
||||||
|
spriteNode = BaseNode(texture: texture, size: CGSize(width: 80, height: 80))
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder aDecoder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
}
|
26
GoldWars/GoldWars/Entities/Base.swift
Normal file
26
GoldWars/GoldWars/Entities/Base.swift
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// Base.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Marcel Schwarz on 18.04.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SpriteKit
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class Base : GKEntity{
|
||||||
|
|
||||||
|
init(textureName:String, team: Team? ) {
|
||||||
|
super.init()
|
||||||
|
addComponent(DefaultBaseComponent(texture: SKTexture(imageNamed: textureName)))
|
||||||
|
if(team != nil){
|
||||||
|
addComponent(TeamComponent(team: team!))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
52
GoldWars/GoldWars/EntityManager.swift
Normal file
52
GoldWars/GoldWars/EntityManager.swift
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
//
|
||||||
|
// EntityManager.swift
|
||||||
|
// GoldWars
|
||||||
|
//
|
||||||
|
// Created by Aldin Duraki on 01.05.20.
|
||||||
|
// Copyright © 2020 SP2. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import SpriteKit
|
||||||
|
import GameplayKit
|
||||||
|
|
||||||
|
class EntityManager {
|
||||||
|
|
||||||
|
var entities = Set<GKEntity>()
|
||||||
|
let scene: SKScene
|
||||||
|
|
||||||
|
init(scene: SKScene) {
|
||||||
|
self.scene = scene
|
||||||
|
}
|
||||||
|
|
||||||
|
func add(_ entity: GKEntity) {
|
||||||
|
entities.insert(entity)
|
||||||
|
if let spriteNode = entity.component(ofType: DefaultBaseComponent.self)?.spriteNode {
|
||||||
|
scene.addChild(spriteNode)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func remove(_ entity: GKEntity) {
|
||||||
|
if let spriteNode = entity.component(ofType: DefaultBaseComponent.self)?.spriteNode {
|
||||||
|
spriteNode.removeFromParent()
|
||||||
|
}
|
||||||
|
entities.remove(entity)
|
||||||
|
}
|
||||||
|
|
||||||
|
func base(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 baseNode(for team: Team) -> SKSpriteNode?{
|
||||||
|
return base(for: team)?.component(ofType: DefaultBaseComponent.self)?.spriteNode
|
||||||
|
}
|
||||||
|
}
|
@ -9,246 +9,94 @@
|
|||||||
import SpriteKit
|
import SpriteKit
|
||||||
import GameplayKit
|
import GameplayKit
|
||||||
|
|
||||||
class GameScene: SKScene, SKPhysicsContactDelegate {
|
class GameScene: SKScene{
|
||||||
|
|
||||||
var entities = [GKEntity]()
|
var entityManager: EntityManager!
|
||||||
var graphs = [String : GKGraph]()
|
|
||||||
var bases = [Base]()
|
|
||||||
var player = [Base]()
|
|
||||||
var popUpOnBaseCollision = SKSpriteNode()
|
|
||||||
|
|
||||||
// TODO: Refactoring following as Components in Sprint 2
|
override func sceneDidLoad() {
|
||||||
var timer = SKLabelNode()
|
entityManager = EntityManager(scene: self)
|
||||||
var backBtn = SKShapeNode(circleOfRadius: 40)
|
entityManager.add(Base(textureName: "Base", team: .team1))
|
||||||
var backLabel = SKLabelNode()
|
entityManager.add(Base(textureName: "Base", team: .team2))
|
||||||
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 {
|
initMap()
|
||||||
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() {
|
// TODO: Issue #24 create Map generation Service
|
||||||
|
func initMap() {
|
||||||
|
|
||||||
self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
|
entityManager.baseNode(for: .team1)?.position = CGPoint(x: self.size.width * 0.1, y: self.size.height / 2)
|
||||||
self.physicsWorld.contactDelegate = self
|
entityManager.baseNode(for: .team2)?.position = CGPoint(x: self.size.width * 0.9, y: self.size.height / 2)
|
||||||
|
createVirginBases()
|
||||||
|
}
|
||||||
|
|
||||||
let maxX = self.size.width
|
func createVirginBases() {
|
||||||
let midY = self.size.height / 2
|
for i in 0...7 {
|
||||||
|
let base:Base
|
||||||
|
var position = CGPoint(x: 0, y: 0)
|
||||||
|
switch i {
|
||||||
|
case 0...2:
|
||||||
|
let width = self.size.width * 0.25
|
||||||
|
|
||||||
let basePlayer1 = Base(color: SKColor.red, position: CGPoint(x: maxX * 0.1, y: midY), name: "Player1", unitCount: 100, unitType: Unit.General)
|
if i == 0 {
|
||||||
let basePlayer2 = Base(color: SKColor.blue, position: CGPoint(x: maxX * 0.9, y: midY), name: "Player2", unitCount: 100, unitType: Unit.General)
|
position = CGPoint(x: width, y: self.size.height * 0.25)
|
||||||
basePlayer2.physicsBody = SKPhysicsBody(circleOfRadius: 50)
|
}
|
||||||
basePlayer2.physicsBody?.categoryBitMask = physicsBodyNumber.basePlayer2Number
|
if i == 1 {
|
||||||
basePlayer2.physicsBody?.collisionBitMask = physicsBodyNumber.emptyNumber
|
position = CGPoint(x: width, y: self.size.height * 0.5)
|
||||||
basePlayer2.physicsBody?.contactTestBitMask = physicsBodyNumber.base5Number & physicsBodyNumber.base6Number & physicsBodyNumber.base7Number
|
}
|
||||||
|
if i == 2{
|
||||||
|
position = CGPoint(x: width, y: self.size.height * 0.75)
|
||||||
|
}
|
||||||
|
|
||||||
popUpOnBaseCollision = SKSpriteNode(color: SKColor.blue , size: CGSize(width: self.size.width * 0.4, height: self.size.height * 0.4))
|
case 3...4:
|
||||||
popUpOnBaseCollision.position = CGPoint(x: self.size.width * 0.5, y: self.size.height * 0.5)
|
let width = self.size.width * 0.5
|
||||||
popUpOnBaseCollision.zPosition = 2
|
|
||||||
|
|
||||||
self.addChild(basePlayer1)
|
if i == 3{
|
||||||
self.addChild(basePlayer2)
|
position = CGPoint(x: width, y: self.size.height * 0.333)
|
||||||
player.append(basePlayer1)
|
}
|
||||||
player.append(basePlayer2)
|
if i == 4{
|
||||||
createVirginBases()
|
position = CGPoint(x: width, y: self.size.height * 0.666)
|
||||||
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
|
case 5...7:
|
||||||
timer.text = "Roundtime: 30 Seconds left"
|
let width = self.size.width * 0.75
|
||||||
timer.fontColor = SKColor.black
|
|
||||||
timer.fontSize = 40
|
if i == 5{
|
||||||
timer.position = CGPoint(x: self.size.width/2, y: self.size.height * 0.9)
|
position = CGPoint(x: width, y: self.size.height * 0.25)
|
||||||
backBtn.position = CGPoint(x: 40, y: self.size.height * 0.9)
|
}
|
||||||
backBtn.fillColor = SKColor.gray
|
if i == 6{
|
||||||
backLabel.text = "Back"
|
position = CGPoint(x: width, y: self.size.height * 0.5)
|
||||||
backLabel.position = CGPoint(x: backBtn.position.x, y: backBtn.position.y - 15)
|
}
|
||||||
spySkill.position = CGPoint(x: self.size.width * 0.75, y: 40)
|
if i == 7{
|
||||||
spySkill.fillColor = SKColor.gray
|
position = CGPoint(x: width, y: self.size.height * 0.75)
|
||||||
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)
|
default:
|
||||||
atkBoostSkill.fillColor = SKColor.gray
|
break
|
||||||
atkBoostLabel.text = "Atk"
|
}
|
||||||
atkBoostLabel.position = CGPoint(x: atkBoostSkill.position.x, y: atkBoostSkill.position.y - 15)
|
base = Base(textureName: "Base", team: nil)
|
||||||
defBoostSkill.position = CGPoint(x: self.size.width * 0.95, y: 40)
|
base.component(ofType: DefaultBaseComponent.self)?.spriteNode.position = position
|
||||||
defBoostSkill.fillColor = SKColor.gray
|
entityManager.add(base)
|
||||||
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)
|
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||||
bases[6].physicsBody?.categoryBitMask = physicsBodyNumber.base6Number
|
guard let touch = touches.first else {
|
||||||
bases[6].physicsBody?.collisionBitMask = physicsBodyNumber.emptyNumber
|
return
|
||||||
bases[6].physicsBody?.contactTestBitMask = physicsBodyNumber.basePlayer2Number
|
}
|
||||||
|
let touchLocation = touch.location(in: self)
|
||||||
|
|
||||||
bases[7].physicsBody = SKPhysicsBody(circleOfRadius: 20)
|
for entity in entityManager.entities {
|
||||||
bases[7].physicsBody?.categoryBitMask = physicsBodyNumber.base7Number
|
let spriteNode = entity.component(ofType: DefaultBaseComponent.self)?.spriteNode
|
||||||
bases[7].physicsBody?.collisionBitMask = physicsBodyNumber.emptyNumber
|
|
||||||
bases[7].physicsBody?.contactTestBitMask = physicsBodyNumber.basePlayer2Number
|
|
||||||
}
|
|
||||||
|
|
||||||
func createVirginBases() {
|
if atPoint(touchLocation) == spriteNode {
|
||||||
for i in 0...7 {
|
spriteNode?.touchesBegan(touches, with: event)
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user