pong



using AbstractPlotting

xyvec = rand(Point2f0, (2)) .* 5 .+ 1
velvec = rand(Point2f0, (2)) .* 10
# define some other parameters
t = 0
ts = 0.03
balldiameter = 1
origin = Point2f0(0, 0)
xybounds = Point2f0(10, 10)
N = 200
scene = scatter(
    xyvec,
    markersize = balldiameter,
    color = rand(RGBf0, 2),
    limits = FRect(0, 0, xybounds)
)
s = scene[end] # last plot in scene

record(scene, "output.mp4", 1:N) do i
    # calculate new ball position
    global t = t + ts
    global xyvec = xyvec .+ velvec .* ts
    global velvec = map(xyvec, xybounds, origin, velvec) do p, b, o, vel
        boolvec = ((p .+ balldiameter/2) .> b) .| ((p .- balldiameter/2) .< o)
        velvec = map(boolvec, vel) do b, v
            b ? -v : v
        end
    end
    # plot
    s[1] = xyvec
end