init { scene := { "entities": { "1": { "eid": "1", "transform": { "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, "scale": { "x": 1.0, "y": 1.0, "z": 1.0 }, "position": { "x": 570.0, "y": 321.0, "z": 0.0 } }, "move": { "type": straight, "speed": 5.0 }, "mesh": { "sprite": "GameEngine/resources/enemy1.png", "type": "sprite" } } } } player := { "transform": { "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, "scale": { "x": 1.0, "y": 1.0, "z": 1.0 }, "position": { "x": 0.0, "y": 0.0, "z": 0.0 } }, "mesh": { "sprite": "GameEngine/resources/enemy1.png", "type": "sprite" } } enemy1 := { "eid": "1", "transform": { "rotation": { "x": 0.0, "y": 0.0, "z": 0.0 }, "scale": { "x": 1.0, "y": 1.0, "z": 1.0 }, "position": { "x": 570.0, "y": 321.0, "z": 0.0 } }, "move": { "type": straight, "speed": 5.0 }, "mesh": { "sprite": "GameEngine/resources/enemy1.png", "type": "sprite" } } } native channel KeyEvent(kno:Int) { out scene.keys.{kno:Int}.state(curState:Int,keyEvent(nextState)) = nextState } native channel SceneUpdateEvent { out scene.time(time:Long,updateEvent(dt:Long)) = (time+dt) } native channel TimerEvent(tid:Str) { out timers.{tid:Str}.count(count:Long,tick()) = (count+1) } channel ClearTimer { out timers(timers:Map,clearTimer(tid:Str)) = delete(timers,tid) } channel StartTimer { out timers(timers:Map,startTimer(tid:Str,interval:Long)) = insert(timers,tid,{ "count": 0, "interval": interval }) } channel UpdateCameraPosition { out scene.camera.transform.position(curPos:Json,updateCameraPosition(x:Double,y:Double,z:Double)) = { "x": x, "y": y, "z": z } } native channel EntityPositionUpdate(eid:Str) { in scene.entities.{eid:Str}.transform.position(curPos:Json,updatePosition(nextPos.x,nextPos.y,nextPos.z)) = nextPos } channel MoveEnemy1 { in enemy1.transform.position(curPos:Json,moveEnemy1(nextPos,eid)) = nextPos ref enemy1.eid(eid,moveEnemy1(nextPos,eid)) out scene.entities.{eid:Str}.transform.position(curPos:Json,moveEnemy1(nextPos,eid)) = nextPos } native channel CameraProjectionUpdate { in scene.camera.projection(curProj:Json,updateProjection(curProj,nextProj)) = nextProj } native channel CameraScaleUpdate { in scene.camera.transform.scale(curScale:Json,updateScale(nextScale.x,nextScale.y,nextScale.z)) = nextScale } channel UpdateEnemy1(tid:Str) { in timers.{tid:Str}.count(curCount:Long,updateEnemy1(type,speed)) = nextCount ref enemy1.move.type(type:Str,updateEnemy1(type,speed)) ref enemy1.move.speed(speed:Float,updateEnemy1(type,speed)) out enemy1.transform.position(curPos:Json,updateEnemy1(type,speed)) = { "x": curPos.x, "y": (curPos.y+speed), "z": curPos.z } } native channel EntitySpriteUpdate(eid:Str) { in scene.entities.{eid:Str}.mesh(curMesh:Json,updateSprite(spritePath:Str)) = { "sprite": spritePath, "type": "sprite" } } native channel EntityScaleUpdate(eid:Str) { in scene.entities.{eid:Str}.transform.scale(curScale:Json,updateScale(nextScale.x,nextScale.y,nextScale.z)) = nextScale } native channel TimersUpdated { in timers(curTimers:Map,update(curTimers,nextTimers)) = nextTimers } channel RotateEnemy1 { in enemy1.transform.rotation(curRot:Json,rotateEnemy1(nextRot,eid)) = nextRot ref enemy1.eid(eid,rotateEnemy1(nextRot,eid)) out scene.entities.{eid:Str}.transform.rotation(curRot:Json,rotateEnemy1(nextRot,eid)) = nextRot } native channel CameraPositionUpdate { in scene.camera.transform.position(curPos:Json,updatePosition(nextPos.x,nextPos.y,nextPos.z)) = nextPos } native channel SceneUpdate { in scene(curSc:Json,update(curSc,nextSc)) = nextSc } native channel EntityRotationUpdate(eid:Str) { in scene.entities.{eid:Str}.transform.rotation(curRot:Json,updateRotation(nextRot.x,nextRot.y,nextRot.z)) = nextRot } native channel CameraRotationUpdate { in scene.camera.transform.rotation(curRot:Json,updateRotation(nextRot.x,nextRot.y,nextRot.z)) = nextRot }