1

My code:

bunnyE = MyEntity()
var wsc : WrappableSpriteComponent = WrappableSpriteComponent()
wsc.setSprite(sprite: bunny!)
bunnyE?.addComponent(wsc)
wrappableComponentSystem = GKComponentSystem<WrappableSpriteComponent>()
wrappableComponentSystem!.addComponent(foundIn: bunnyE!)

self.lastUpdateTime = 0 //Break point here

When I step through my code to the break point, I find that in Xcode if I execute the command:

po bunnyE?.components 

Then I can see that bunnyE has the component I added.

But if I do:

 po self.wrappableComponentSystem?.components

Then it seems that the wrappableComponentSystem has no components.

I checked in my scenes update function and found the same result:

override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered

    // Initialize _lastUpdateTime if it has not already been
    if (self.lastUpdateTime == 0) {
        self.lastUpdateTime = currentTime
    }

    // Calculate time since last update
    let dt = currentTime - self.lastUpdateTime

    // Update entities
    for entity in self.entities {
        entity.update(deltaTime: dt)
    }

    self.lastUpdateTime = currentTime
    self.wrappableComponentSystem?.update(deltaTime: currentTime) // Breakpoint
}

At this breakpoint as well, I can see that my bunnyE entity has the component, but my wrappableComponentSystem does not. I have verified that my wrappableComponentSystem is not nil.

I am using swift5, Xcode 11.4, iOS 13.4

What is the mistake I am making ?

Rahul Iyer
  • 19,924
  • 21
  • 96
  • 190

1 Answers1

1

I have discovered a problem in this line:

wrappableComponentSystem = GKComponentSystem<WrappableSpriteComponent>()

If I change it to:

wrappableComponentSystem = GKComponentSystem(componentClass: WrappableSpriteComponent.self)

Then in the same block when I add a component, and do po wrappableComponentSystem, I can see a single element has been added.

The problem is, by the time the update method of my scene is triggered, it appears that my wrappableComponentSystem doesn't contain any components anymore.

Then I changed the declaration line in my class from:

private var wrappableComponentSystem : GKComponentSystem<WrappableSpriteComponent>?

where WrappableSpriteComponent inherits from GKComponent, to:

private var wrappableComponentSystem : GKComponentSystem<GKComponent>?

Now when I add a component, it persists.

Rahul Iyer
  • 19,924
  • 21
  • 96
  • 190