blob: ec9c71b2ae9f5805387637342458c31ac26bfea1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package coffee.liz.ecs.physics
import coffee.liz.ecs.Entity
import coffee.liz.ecs.TickedSystem
import coffee.liz.ecs.World
import kotlin.time.Duration
internal fun interface CollisionResolver<Outside> {
fun resolveCollision(
world: World<Outside>,
a: Entity,
b: Entity,
)
}
abstract class PhysicsSystem<Outside>(
physicsTickRate: Duration,
) : TickedSystem<Outside>(physicsTickRate),
CollisionResolver<Outside> {
private val integrationTick = IntegrationTick<Outside>()
private val collisionTick = CollisionTick(this)
abstract override fun resolveCollision(
world: World<Outside>,
a: Entity,
b: Entity,
)
override fun update(
world: World<Outside>,
state: Outside,
ticks: Int,
) {
for (tick in 1..ticks) {
collisionTick.runTick(world)
integrationTick.runTick(world)
}
}
}
|