intouch := @use("lib:intouch")
render := @use("lib:render")
stn := @use("stn")

example := fn(): void {
	screen := render.init(true)
	mouse_pos := stn.math.Vec2(int).(0, 0)
	bg_colour := render.BLACK
	pen_colour := render.WHITE
	loop {
		mouse := intouch.recieve_mouse_event()
		if mouse != null {
			mouse_pos.x = stn.math.clamp(int, mouse_pos.x + mouse.x_change, 10, @bitcast(screen.width) - 10)
			mouse_pos.y = stn.math.clamp(int, mouse_pos.y - mouse.y_change, 10, @bitcast(screen.height) - 10)

			if mouse.left {
				screen.put_filled_circle(@bitcast(mouse_pos), 10, pen_colour)
			} else if mouse.right {
				screen.put_filled_circle(@bitcast(mouse_pos), 10, bg_colour)
			} else if mouse.middle {
				pen_colour = stn.random.any(render.Color)
			}
		}

		kb := intouch.recieve_key_event()
		if kb != null {
			if kb.just_triggered {
				bg_colour = stn.random.any(render.Color)
				screen.clear(bg_colour)
			}
		}

		screen.sync()
	}
}