ableos/sysdata/programs/render_example/src/examples/surface.hb

48 lines
1.4 KiB
Plaintext
Raw Normal View History

.{Vec2} := @use("../../../../libraries/stn/src/lib.hb").math;
.{random} := @use("../../../../libraries/stn/src/lib.hb")
2024-10-14 19:24:29 -05:00
render := @use("../../../../libraries/render/src/lib.hb")
/* expected result:
the square example bounces around the screen */
2024-10-14 19:24:29 -05:00
example := fn(): void {
screen := render.init(true)
2024-10-15 15:43:23 -05:00
image := render.new_surface(screen.width / 3, screen.height / 3)
vel := Vec2(int).(-1, -1)
2024-10-14 19:24:29 -05:00
pos := Vec2(int).(100, 100)
2024-10-15 15:43:23 -05:00
side := image.width / 8
vel_inner := Vec2(int).(1, 1)
2024-10-15 15:43:23 -05:00
pos_inner := Vec2(int).((image.width - side) / 2, (image.height - side) / 2)
color := random.range(render.Color, render.black, render.white)
2024-10-14 19:24:29 -05:00
loop {
render.clear(image, render.black)
render.clear(screen, render.black)
2024-10-15 15:43:23 -05:00
render.put_filled_rect(image, pos_inner, .(side, side), color)
render.put_rect(image, .(0, 0), .(image.width - 1, image.height - 1), render.white)
2024-10-14 19:24:29 -05:00
render.put_surface(screen, image, pos)
render.sync(screen)
2024-10-15 15:43:23 -05:00
if pos_inner.x == 0 | pos_inner.x == image.width - side {
vel_inner.x = -vel_inner.x
2024-10-15 15:43:23 -05:00
color = random.range(render.Color, render.black, render.white)
}
2024-10-15 15:43:23 -05:00
if pos_inner.y == 0 | pos_inner.y == image.height - side {
vel_inner.y = -vel_inner.y
2024-10-15 15:43:23 -05:00
color = random.range(render.Color, render.black, render.white)
}
2024-10-14 19:24:29 -05:00
if pos.x == 0 | pos.x == screen.width - image.width {
vel.x = -vel.x
}
if pos.y == 0 | pos.y == screen.height - image.height {
vel.y = -vel.y
}
pos += vel
pos_inner += vel_inner
2024-10-14 19:24:29 -05:00
}
return
}