Skip to content

Commit

Permalink
Merge pull request #96 from JohnSundell/actor-added-removed-events
Browse files Browse the repository at this point in the history
Scene: Add events for when an actor is added or removed
  • Loading branch information
JohnSundell authored Nov 18, 2017
2 parents 697e3b4 + b08daf6 commit b3cc30f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Sources/Core/API/Scene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,15 @@ open class Scene: Pluggable, Activatable {
grid.add(actor, in: self)
actor.addLayer(to: layer)
game.map(actor.activate)

events.actorAdded.trigger(with: actor)
}

/// Remove an actor from the scene
public func remove(_ actor: Actor) {
deactivate(actor)
grid.remove(actor)
events.actorRemoved.trigger(with: actor)
}

/// Get all actors which rects intersect a given point
Expand Down
4 changes: 4 additions & 0 deletions Sources/Core/API/SceneEventCollection.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ import Foundation
public final class SceneEventCollection: EventCollection<Scene> {
/// Event that gets triggered when the scene was clicked or tapped
public private(set) lazy var clicked = makeClickedEvent()
/// Event that gets triggered when an actor was added to the scene
public private(set) lazy var actorAdded = Event<Scene, Actor>(object: object)
/// Event that gets triggered when an actor was removed from the scene
public private(set) lazy var actorRemoved = Event<Scene, Actor>(object: object)
/// Event that gets triggered when its safe area insets changed
public private(set) lazy var safeAreaInsetsChanged = Event<Scene, Void>(object: object)

Expand Down
13 changes: 13 additions & 0 deletions Tests/ImagineEngineTests/SceneTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,28 @@ final class SceneTests: XCTestCase {
}

func testAddingAndRemovingActor() {
var addedActor: Actor?
var removedActor: Actor?

game.scene.events.actorAdded.observe { _, actor in
addedActor = actor
}

game.scene.events.actorRemoved.observe { _, actor in
removedActor = actor
}

let actor = Actor()

game.scene.add(actor)
XCTAssertEqual(game.scene.actors, [actor])
assertSameInstance(game.scene, actor.scene)
assertSameInstance(addedActor, actor)

actor.remove()
XCTAssertEqual(game.scene.actors, [])
XCTAssertNil(actor.scene)
assertSameInstance(removedActor, actor)
}

func testAddingAndRemovingMultipleActors() {
Expand Down

0 comments on commit b3cc30f

Please sign in to comment.