package coffee.liz.abstractionengine.game import androidx.compose.foundation.Canvas import androidx.compose.runtime.* 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 and paints the [World]. */ @Composable fun Game( world: World, content: @Composable () -> Unit, ) { var frameCount by remember { mutableStateOf(0) } LaunchedEffect(world) { var lastUpdate: Long? = null while (isActive) { withFrameNanos { frameTimeNanos -> frameCount++ } } } content() } @Composable fun GameCanvas( world: World, renderSystem: Renderer, backgroundColor: Color = Color.Transparent, modifier: Modifier = Modifier, ) { Canvas(modifier = modifier) { // Clear background drawRect(backgroundColor) // Render all sprites renderSystem.render(world, this) } }