Newer
Older
AlgebraicDataflowArchitectureModel / GameEngine / resources / GameEngineTest.model
init {
enemy := {
    "001": {
        "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
            }
        },
        "move": {
            "type": straight,
            "speed": 5.0
        },
        "mesh": {
            "sprite": "GameEngine/resources/enemy1.png",
            "type": "sprite"
        }
    },
    "002": {
        "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
            }
        },
        "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"
    }
}
timers := {
    "000": {
        "count": 0,
        "interval": 100
    }
}
}
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 MoveEnemy(eid:Str) {
	 in enemies.{eid:Str}.transform.position(curPos:Json,moveEnemy(nextPos)) = nextPos
	 out scene.entities.{eid:Str}.transform.position(curPos:Json,moveEnemy(nextPos)) = 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
}
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
}
channel RotateEnemy(eid:Str) {
	 in enemies.{eid:Str}.transform.rotation(curRot:Json,rotateEnemy(nextRot)) = nextRot
	 out enemies.{eid:Str}.transform.rotation(curRot:Json,rotateEnemy(nextRot)) = nextRot
}
channel UpdateEnemy(tid:Str, eid:Str) {
	 in timers.{tid:Str}.count(curCount:Long,updateEnemy(type,speed)) = nextCount
	 ref enemies.{eid:Str}.move.speed(speed:Float,updateEnemy(type,speed))
	 ref enemies.{eid:Str}.move.type(type:Str,updateEnemy(type,speed))
	 out enemies.{eid:Str}.transform.position(curPos:Json,updateEnemy(type,speed)) = {
    "x": curPos.x,
    "y": (curPos.y+speed),
    "z": curPos.z
}
}
native channel TimersUpdated {
	 in timers(curTimers:Map,update(curTimers,nextTimers)) = nextTimers
}
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
}