Slides for the Reactive 3D Game Engine presented at ScalaDays 2014.
Shows the demo of the 3D engine, followed by the description of the reactive 3D game engine - how reactive dependencies between input, time and game logic are expressed, how to deal with GC issues, how to model game state using Reactive Collections.
44. 44
val rotate: Signal[Boolean]
val ticks: Reactive[Long]
val viewAngle: Signal[Double] =
ticks.scanPast(0.0) {
(a, _) =>
if (rotate()) a + 1 else a
}
ticks
rotate
viewAngle
55. 55
val mids = mouse
.filter(_.button == MIDDLE)
val up = mids.filter(!_.down)
val down = mids.filter(_.down)
mids ↓ ↓ ↓
up
down ↓ ↓ ↓
↑ ↑ ↑
↑ ↑ ↑
56. 56
val mids = mouse
.filter(_.button == MIDDLE)
val up = mids.filter(!_.down)
val down = mids.filter(_.down)
val drags = down
.map(_ => mouse)
up
down ↓ ↓ ↓
↑ ↑ ↑
57. 57
val mids = mouse
.filter(_.button == MIDDLE)
val up = mids.filter(!_.down)
val down = mids.filter(_.down)
val drags = down
.map(_ => mouse)
up
down ↓ ↓ ↓
↑ ↑ ↑
Reactive[Reactive[MouseEvent]]
58. 58
val mids = mouse
.filter(_.button == MIDDLE)
val up = mids.filter(!_.down)
val down = mids.filter(_.down)
val drags = down
.map(_ => mouse)
up
down ↓ ↓ ↓
↑ ↑ ↑
drags
59. drags
up ↑ ↑ ↑
59
val mids = mouse
.filter(_.button == MIDDLE)
val up = mids.filter(!_.down)
val down = mids.filter(_.down)
val drags = down
.map(_ => mouse.until(up))
down ↓ ↓ ↓
mouse.until(up)
60. 60
val mids = mouse
.filter(_.button == MIDDLE)
val up = mids.filter(!_.down)
val down = mids.filter(_.down)
val drags = down
.map(_ => mouse.until(up))
down ↓ ↓ ↓
up ↑ ↑ ↑
drags