Skip to content

Commit

Permalink
Added entities to the arguments for lifecycle methods (#105)
Browse files Browse the repository at this point in the history
  • Loading branch information
geist-2501 authored Jul 14, 2023
1 parent 01e46dc commit fd03a9d
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 14 deletions.
10 changes: 5 additions & 5 deletions src/commonMain/kotlin/com/github/quillraven/fleks/component.kt
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ interface Component<T> {
/**
* Lifecycle method that gets called whenever a [component][Component] gets set for an [entity][Entity].
*/
fun World.onAddComponent() = Unit
fun World.onAddComponent(entity: Entity) = Unit

/**
* Lifecycle method that gets called whenever a [component][Component] gets removed from an [entity][Entity].
*/
fun World.onRemoveComponent() = Unit
fun World.onRemoveComponent(entity: Entity) = Unit
}

/**
Expand Down Expand Up @@ -99,14 +99,14 @@ class ComponentsHolder<T : Component<*>>(
// method to correctly return false
components[entity.id] = null
existingCmp.run {
world.onRemoveComponent()
world.onRemoveComponent(entity)
}
}

// set component and call lifecycle method
components[entity.id] = component
component.run {
world.onAddComponent()
world.onAddComponent(entity)
}
}

Expand All @@ -124,7 +124,7 @@ class ComponentsHolder<T : Component<*>>(
// assign null before running the lifecycle method in order for 'contains' calls to correctly return false
components[entity.id] = null
existingCmp?.run {
world.onRemoveComponent()
world.onRemoveComponent(entity)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,21 @@ internal class ComponentTest {

private data class ComponentTestWithLifecycleComponent(
val expectedWorld: World,
val expectedEntity: Entity,
var numAddCalls: Int = 0,
var numRemoveCalls: Int = 0
) : Component<ComponentTestWithLifecycleComponent> {
override fun type() = ComponentTestWithLifecycleComponent

override fun World.onAddComponent() {
override fun World.onAddComponent(entity: Entity) {
assertEquals(expectedWorld, this)
assertEquals(expectedEntity, entity)
numAddCalls++
}

override fun World.onRemoveComponent() {
override fun World.onRemoveComponent(entity: Entity) {
assertEquals(expectedWorld, this)
assertEquals(expectedEntity, entity)
numRemoveCalls++
}

Expand Down Expand Up @@ -149,7 +152,7 @@ internal class ComponentTest {
@Test
fun addAndRemoveComponentWithLifecycleMethod() {
val expectedEntity = Entity(1)
val expectedComp = ComponentTestWithLifecycleComponent(testWorld)
val expectedComp = ComponentTestWithLifecycleComponent(testWorld, expectedEntity)

val testHolderForLifecycleComponent = testService.holder(ComponentTestWithLifecycleComponent)

Expand All @@ -166,8 +169,8 @@ internal class ComponentTest {
@Test
fun addAndReplaceComponentWithLifecycleMethod() {
val expectedEntity = Entity(1)
val expectedComp1 = ComponentTestWithLifecycleComponent(testWorld)
val expectedComp2 = ComponentTestWithLifecycleComponent(testWorld)
val expectedComp1 = ComponentTestWithLifecycleComponent(testWorld, expectedEntity)
val expectedComp2 = ComponentTestWithLifecycleComponent(testWorld, expectedEntity)

val testHolderForLifecycleComponent = testService.holder(ComponentTestWithLifecycleComponent)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ private data class Collider(

var colliderId: String? = null

override fun World.onAddComponent() {
override fun World.onAddComponent(entity: Entity) {
val provider = inject<ColliderService>()
colliderId = provider.getId()
}

override fun World.onRemoveComponent() {
override fun World.onRemoveComponent(entity: Entity) {
colliderId = null
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ private data class WorldTestComponent(
var numAddCalls: Int = 0
var numRemoveCalls: Int = 0

override fun World.onAddComponent() { numAddCalls++ }
override fun World.onRemoveComponent() { numAddCalls-- }
override fun World.onAddComponent(entity: Entity) { numAddCalls++ }
override fun World.onRemoveComponent(entity: Entity) { numAddCalls-- }

companion object : ComponentType<WorldTestComponent>()

Expand Down

0 comments on commit fd03a9d

Please sign in to comment.