summaryrefslogtreecommitdiff
path: root/composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/game/Game.kt
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-10-26 17:25:13 -0700
committerElizabeth Hunt <me@liz.coffee>2025-10-26 17:25:13 -0700
commit395aa7d1c312e495517701be11c21425d9a5838e (patch)
tree4ad184b082838c56149cc1d1efe191cfd3d0679b /composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/game/Game.kt
parent64f825465de9fa30c4dfe2707067efdb96110db8 (diff)
downloadabstraction-engine-kt-395aa7d1c312e495517701be11c21425d9a5838e.tar.gz
abstraction-engine-kt-395aa7d1c312e495517701be11c21425d9a5838e.zip
Checkpoint
Diffstat (limited to 'composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/game/Game.kt')
-rw-r--r--composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/game/Game.kt37
1 files changed, 4 insertions, 33 deletions
diff --git a/composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/game/Game.kt b/composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/game/Game.kt
index 9490f83..0c3a007 100644
--- a/composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/game/Game.kt
+++ b/composeApp/src/commonMain/kotlin/coffee/liz/abstractionengine/game/Game.kt
@@ -6,64 +6,35 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import coffee.liz.ecs.World
import kotlinx.coroutines.isActive
+import kotlin.time.Duration.Companion.nanoseconds
/**
- * Manages the game loop for an ECS world.
- * Syncs with Compose's frame rate (like requestAnimationFrame) and provides
- * the world to child content for custom rendering/UI.
- *
- * @param world The ECS world containing entities and systems
- * @param content Composable content that can use the world for rendering
+ * Manages and paints the [World].
*/
@Composable
fun Game(
world: World,
content: @Composable () -> Unit
) {
- // Trigger recomposition when we need to redraw
var frameCount by remember { mutableStateOf(0) }
- // Game loop - syncs with Compose's frame rate like requestAnimationFrame
LaunchedEffect(world) {
- var lastFrameTimeNanos = 0L
+ var lastUpdate: Long? = null
while (isActive) {
- // Wait for next frame (like requestAnimationFrame)
withFrameNanos { frameTimeNanos ->
- val deltaTime = if (lastFrameTimeNanos != 0L) {
- (frameTimeNanos - lastFrameTimeNanos) / 1_000_000_000f
- } else {
- 0f
- }
- lastFrameTimeNanos = frameTimeNanos
-
- // Update ECS world (runs all systems)
- if (deltaTime > 0f) {
- world.update(deltaTime)
- }
-
- // Trigger recomposition to redraw
frameCount++
}
}
}
- // Render content
content()
}
-/**
- * A Canvas that renders sprites from an ECS world using a RenderSystem.
- *
- * @param world The ECS world containing entities to render
- * @param renderSystem The system responsible for rendering sprites
- * @param backgroundColor Background color for the canvas
- * @param modifier Modifier for the Canvas
- */
@Composable
fun GameCanvas(
world: World,
- renderSystem: RenderSystem,
+ renderSystem: Renderer,
backgroundColor: Color = Color.Transparent,
modifier: Modifier = Modifier
) {