Playground

In this Playground you could experiment with KECS, you could run and edit the example bellow.

Sometimes the play button will take some time to show, please wait.

import com.juanmedina.kecs.dsl.add
import com.juanmedina.kecs.dsl.world
import com.juanmedina.kecs.system.System
import com.juanmedina.kecs.world.World

data class GameObject(val name: String)

data class Velocity(val x: Float, val y: Float)

data class Position(var x: Float, var y: Float) {
    operator fun plusAssign(velocity: Velocity) {
        x += velocity.x
        y += velocity.y
    }
}

class MoveSystem : System() {
    override fun update(delta: Float, total: Float, world: World) {
        world.pairs<Velocity, Position> { (vel, pos) ->
            pos += vel
        }
    }
}

fun main() {
    val world = world {
        +MoveSystem()
    }

    world.add {
        +GameObject("player1")
        +Position(0.0f, 0.0f)
        +Velocity(1.0f, 2.0f)
    }

    world.add {
        +GameObject("player2")
        +Position(0.0f, 0.0f)
        +Velocity(1.5f, 2.5f)
    }

    world.add {
        +GameObject("item1")
        +Position(0.0f, 0.0f)
    }

    world.update()

    world.pairs<GameObject, Position> { (obj, pos) ->
        println("$obj $pos")
    }
}