diff options
Diffstat (limited to 'v_windows/v/examples/gg/bezier_anim.v')
-rw-r--r-- | v_windows/v/examples/gg/bezier_anim.v | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/v_windows/v/examples/gg/bezier_anim.v b/v_windows/v/examples/gg/bezier_anim.v new file mode 100644 index 0000000..2f54ac9 --- /dev/null +++ b/v_windows/v/examples/gg/bezier_anim.v @@ -0,0 +1,68 @@ +module main + +import gg +import gx + +const rate = f32(1) / 60 * 10 + +struct App { +mut: + gg &gg.Context + anim &Anim +} + +struct Anim { +mut: + time f32 + reverse bool +} + +fn (mut anim Anim) advance() { + if anim.reverse { + anim.time -= 1 * rate + } else { + anim.time += 1 * rate + } + // Use some arbitrary value that fits 60 fps + if anim.time > 80 * rate || anim.time < -80 * rate { + anim.reverse = !anim.reverse + } +} + +fn main() { + mut app := &App{ + gg: 0 + anim: &Anim{} + } + app.gg = gg.new_context( + bg_color: gx.rgb(174, 198, 255) + width: 600 + height: 400 + window_title: 'Animated cubic Bézier curve' + frame_fn: frame + user_data: app + ) + app.gg.run() +} + +fn frame(mut app App) { + time := app.anim.time + + p1_x := f32(200.0) + p1_y := f32(200.0) + (10 * time) + + p2_x := f32(400.0) + p2_y := f32(200.0) + (10 * time) + + ctrl_p1_x := f32(200.0) + (40 * time) + ctrl_p1_y := f32(100.0) + ctrl_p2_x := f32(400.0) + (-40 * time) + ctrl_p2_y := f32(100.0) + + points := [p1_x, p1_y, ctrl_p1_x, ctrl_p1_y, ctrl_p2_x, ctrl_p2_y, p2_x, p2_y] + + app.gg.begin() + app.gg.draw_cubic_bezier(points, gx.blue) + app.gg.end() + app.anim.advance() +} |