FIXME solved by extending the TeamComponent behavior

This commit is contained in:
Aldin Duraki 2020-05-20 22:59:32 +02:00
parent 604001a365
commit 458d50e4b3
2 changed files with 40 additions and 29 deletions

View File

@ -23,20 +23,29 @@ class TeamComponent: GKComponent {
fire.particleColorSequence = nil
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
}
self.team = team
self.player = player
super.init()
fire.particleColor = getColor(by: team)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func getColor(by team: Team) -> SKColor {
switch team {
case .team1: return SKColor.red
case .team2: return SKColor.purple
case .team3: return SKColor.green
case .team4: return SKColor.gray
}
}
func change(to team: Team, to player: GKPlayer) -> Void {
self.team = team
self.player = player
self.fire.particleColor = getColor(by: team)
}
}

View File

@ -119,17 +119,18 @@ class EntityManager {
let base = (entity as! Base)
if base.changeOwnership {
//FIX-ME: Find a way to update the Component without deleting it upfront
//TODO: outsource component handling to a generic function
//base.removeComponent(ofType: TeamComponent.self)
base.addComponent(TeamComponent(
team: (entities[0] as! Base).component(ofType: TeamComponent.self)!.team,
player: (entities[0] as! Base).component(ofType: TeamComponent.self)!.player,
position: (base.component(ofType: DefaultBaseComponent.self)?.spriteNode.position)!
if (entity.component(ofType: TeamComponent.self) != nil) {
entity.component(ofType: TeamComponent.self)!.change(to: (entities[0] as! Base).component(ofType: TeamComponent.self)!.team, to: (entities[0] as! Base).component(ofType: TeamComponent.self)!.player)
} else {
base.addComponent(TeamComponent(
team: (entities[0] as! Base).component(ofType: TeamComponent.self)!.team,
player: (entities[0] as! Base).component(ofType: TeamComponent.self)!.player,
position: (base.component(ofType: DefaultBaseComponent.self)?.spriteNode.position)!
)
)
)
if let fire = entity.component(ofType: TeamComponent.self)?.fire{
scene.addChild(fire)
if let fire = entity.component(ofType: TeamComponent.self)?.fire{
scene.addChild(fire)
}
}
base.changeOwnership = false
}
@ -150,17 +151,18 @@ class EntityManager {
if getOwnerBySnapBase != nil {
base.changeOwnership = true
base.ownershipPlayer = getOwnerBySnapBase
//FIX-ME: Find a way to update the Component without deleting it upfront
//TODO: outsource component handling to a generic function
//entity.removeComponent(ofType: TeamComponent.self)
entity.addComponent(TeamComponent(
team: getTeamByPlayer(playerName: snapBase.ownership!),
player: getOwnerBySnapBase!,
position: (entity.component(ofType: DefaultBaseComponent.self)?.spriteNode.position)!
if (entity.component(ofType: TeamComponent.self) != nil) {
entity.component(ofType: TeamComponent.self)!.change(to: getTeamByPlayer(playerName: snapBase.ownership!), to: getOwnerBySnapBase!)
} else {
entity.addComponent(TeamComponent(
team: getTeamByPlayer(playerName: snapBase.ownership!),
player: getOwnerBySnapBase!,
position: (entity.component(ofType: DefaultBaseComponent.self)?.spriteNode.position)!
)
)
)
if let fire = entity.component(ofType: TeamComponent.self)?.fire{
scene.addChild(fire)
if let fire = entity.component(ofType: TeamComponent.self)?.fire{
scene.addChild(fire)
}
}
}
}