Extract default test map, add map protocol to game scene

This commit is contained in:
Marcel Schwarz 2020-05-02 18:48:23 +02:00
parent df58c822a1
commit ffc4c05a46
3 changed files with 159 additions and 139 deletions

View File

@ -7,9 +7,13 @@
// //
import Foundation import Foundation
import SpriteKit
protocol MapProtocoll { protocol MapProtocoll {
var size: CGSize! {get set}
func create()
func adjacent(base: Base) -> Array<Base> func adjacent(base: Base) -> Array<Base>
} }

View File

@ -7,13 +7,78 @@
// //
import Foundation import Foundation
import SpriteKit
class TwoPlayerDefaultTestMap: MapProtocoll { class TwoPlayerDefaultTestMap: MapProtocoll {
func adjacent(base: Base) -> Array<Base> { var entityManager: EntityManager!
return Array() var size: CGSize!
var adjacencyList: Dictionary<Base, Array<Base>>!
init(scene: SKScene, entityManager: EntityManager) {
self.entityManager = entityManager;
self.size = scene.size
} }
func adjacent(base: Base) -> Array<Base> {
return adjacencyList[base]!
}
func create() {
createNodes()
createNeighbourMapping()
}
func createNodes() {
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
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(textureName: "Base", team: nil, position: position)
entityManager.add(base)
}
}
func createNeighbourMapping() {
}
} }

View File

@ -10,140 +10,91 @@ import SpriteKit
import GameplayKit import GameplayKit
class GameScene: SKScene{ class GameScene: SKScene{
var entityManager: EntityManager! var entityManager: EntityManager!
var map: MapProtocoll!
override func sceneDidLoad() {
entityManager = EntityManager(scene: self) override func sceneDidLoad() {
entityManager.add(Base(textureName: "Base", entityManager = EntityManager(scene: self)
team: .team1 , entityManager.add(Base(textureName: "Base",
position: CGPoint(x: self.size.width * 0.1, y: self.size.height / 2))) team: .team1 ,
position: CGPoint(x: self.size.width * 0.1, y: self.size.height / 2)))
entityManager.add(Base(textureName: "Base",
team: .team2 , entityManager.add(Base(textureName: "Base",
position: CGPoint(x: self.size.width * 0.9, y: self.size.height / 2))) team: .team2 ,
entityManager.add(HUD(size: self.size)) position: CGPoint(x: self.size.width * 0.9, y: self.size.height / 2)))
initMap() entityManager.add(HUD(size: self.size))
createBackground() initMap()
createBackground()
}
}
func createBackground() {
for i in 0...2 { func createBackground() {
let sky = SKSpriteNode(imageNamed: "SkyBackground") for i in 0...2 {
sky.name = "clouds" let sky = SKSpriteNode(imageNamed: "SkyBackground")
sky.zPosition = -1 sky.name = "clouds"
sky.size = CGSize(width: (self.scene?.size.width)!, height: (self.scene?.size.height)!) sky.zPosition = -1
sky.position = CGPoint(x: CGFloat(i) * sky.size.width , y: (self.frame.size.height / 2)) sky.size = CGSize(width: (self.scene?.size.width)!, height: (self.scene?.size.height)!)
sky.position = CGPoint(x: CGFloat(i) * sky.size.width , y: (self.frame.size.height / 2))
self.addChild(sky)
} self.addChild(sky)
} }
}
// TODO: Issue #24 create Map generation Service
func initMap() { // TODO: Issue #24 create Map generation Service
func initMap() {
createVirginBases() self.map = TwoPlayerDefaultTestMap(scene: self, entityManager: self.entityManager)
} self.map.create()
}
func createVirginBases() {
for i in 0...7 {
let base:Base override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
var position = CGPoint(x: 0, y: 0) guard let touch = touches.first else {
switch i { return
case 0...2: }
let width = self.size.width * 0.25
let touchLocation = touch.location(in: self)
if i == 0 {
position = CGPoint(x: width, y: self.size.height * 0.25) for entity in entityManager.entities {
}
if i == 1 { let spriteNode = entity.component(ofType: DefaultBaseComponent.self)?.spriteNode
position = CGPoint(x: width, y: self.size.height * 0.5)
} if entityManager.isModal && entity.isMember(of: Modal.self) {
if i == 2{ entityManager.remove(entity)
position = CGPoint(x: width, y: self.size.height * 0.75) for child in self.children {
} if(child.name != "fire"){
child.alpha = 1
case 3...4: }
let width = self.size.width * 0.5 }
if i == 3{ }
position = CGPoint(x: width, y: self.size.height * 0.333)
} if atPoint(touchLocation) == spriteNode && !entityManager.isModal {
if i == 4{ spriteNode?.touchesBegan(touches, with: event)
position = CGPoint(x: width, y: self.size.height * 0.666) if !entityManager.isModal {
} for child in self.children {
if(child.name != "fire"){
case 5...7: child.alpha = 0.3
let width = self.size.width * 0.75 }
if i == 5{ }
position = CGPoint(x: width, y: self.size.height * 0.25) entityManager.add(Modal(modaltype: .BaseDetails,
} base: entity as! Base,
if i == 6{ anchorPoint: CGPoint(x: self.size.width / 2 , y: self.size.height / 2)))
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 override func update(_ currentTime: TimeInterval) {
} self.enumerateChildNodes(withName: "clouds", using: ({
base = Base(textureName: "Base", team: nil, position: position) (node, error) in
entityManager.add(base) node.position.x -= 2
} if node.position.x < -(self.scene?.size.width)! {
node.position.x += (self.scene?.size.width)! * 3
}
} }))
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else {
return
}
let touchLocation = touch.location(in: self)
for entity in entityManager.entities {
let spriteNode = entity.component(ofType: DefaultBaseComponent.self)?.spriteNode
if entityManager.isModal && entity.isMember(of: Modal.self) {
entityManager.remove(entity)
for child in self.children {
if(child.name != "fire"){
child.alpha = 1
}
}
}
if atPoint(touchLocation) == spriteNode && !entityManager.isModal {
spriteNode?.touchesBegan(touches, with: event)
if !entityManager.isModal {
for child in self.children {
if(child.name != "fire"){
child.alpha = 0.3
}
}
entityManager.add(Modal(modaltype: .BaseDetails,
base: entity as! Base,
anchorPoint: CGPoint(x: self.size.width / 2 , y: self.size.height / 2)))
}
}
}
}
override func update(_ currentTime: TimeInterval) {
self.enumerateChildNodes(withName: "clouds", using: ({
(node, error) in
node.position.x -= 2
if node.position.x < -(self.scene?.size.width)! {
node.position.x += (self.scene?.size.width)! * 3
}
}))
}
} }