blob: 703e614c9b77cd5e4023667a7465b1642c46dd15 (
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
|
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)
}
}
}
|