From 8f5123e8c555426c801abd1645e416853c15178a Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 9 May 2021 12:15:06 -0500 Subject: [PATCH] switched to using builtin immediate_mode module --- site/sand_toy.wasm | Bin 38520 -> 24373 bytes src/build.onyx | 3 ++- src/sand_toy.onyx | 31 ++++++++++++--------------- src/simulation.onyx | 51 ++++++++++++++++++++++++++++++-------------- 4 files changed, 51 insertions(+), 34 deletions(-) diff --git a/site/sand_toy.wasm b/site/sand_toy.wasm index 9b792b797343a297d9874c67729f83303862f131..802890f470ee5701c6974cbf94f3321399b1b306 100644 GIT binary patch delta 8044 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 literal 38520 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 D{ihR3 diff --git a/src/build.onyx b/src/build.onyx index 5ecfa94..2d09ee6 100644 --- a/src/build.onyx +++ b/src/build.onyx @@ -7,8 +7,9 @@ #load "modules/webgl2/module" #load "modules/js_events/module" +#load "modules/immediate_mode/module" -#load "lib/imgui" +// #load "lib/imgui" #load "src/simulation" #load "src/sand_toy" diff --git a/src/sand_toy.onyx b/src/sand_toy.onyx index ee56ab4..7fdd8c8 100644 --- a/src/sand_toy.onyx +++ b/src/sand_toy.onyx @@ -1,5 +1,5 @@ use package core -#private_file imgui :: package imgui +#private_file gfx :: package immediate_mode #private_file events :: package js_events #private_file gl :: package gl @@ -7,10 +7,10 @@ BAR_HEIGHT :: 32.0f particle_board: ParticleBoard; +world_width :: 400 +world_height :: 400 world_texture : gl.GLTexture world_texture_data : [] u8 -world_width := 512 -world_height := 256 window_width := 0 window_height := 0 @@ -36,7 +36,7 @@ init :: () { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.bindTexture(gl.TEXTURE_2D, -1); - imgui.immediate_renderer_init(); + gfx.immediate_renderer_init(); particle_board = create_board(world_width, world_height); } @@ -148,47 +148,44 @@ prepare_world_texture :: () { } draw :: () { - use imgui; - prepare_world_texture(); - use_ortho_projection(0, ~~window_width, 0, ~~window_height); gl.clearColor(0, 0, 0, 1); gl.clear(gl.COLOR_BUFFER_BIT); + gfx.set_texture(); + gfx.use_ortho_projection(0, ~~window_width, 0, ~~window_height); draw_selection_bar(); gl.bindTexture(gl.TEXTURE_2D, world_texture); - immediate_set_texture(0); - immediate_textured_quad(.{ 0, BAR_HEIGHT }, .{ ~~window_width, ~~window_height - BAR_HEIGHT }, .{ 0, 0 }, .{ 1, 1 }, color=.{ 1, 1, 1 }); - immediate_set_texture(); + gfx.set_texture(0); + gfx.use_ortho_projection(0, ~~window_width, 0, ~~window_height); + gfx.textured_quad(.{ 0, BAR_HEIGHT }, .{ ~~window_width, ~~window_height - BAR_HEIGHT }, .{ 0, 0 }, .{ 1, 1 }); - immediate_flush(); + gfx.flush(); gl.bindTexture(gl.TEXTURE_2D, -1); draw_selection_bar :: () { - use imgui; - - immediate_quad(.{ 0, 0 }, .{ ~~window_width, BAR_HEIGHT }, color=.{.2,.2,.2}); + gfx.quad(.{ 0, 0 }, .{ ~~window_width, BAR_HEIGHT }, color=.{.2,.2,.2}); x_off := 4.0f; for type: Particle.types { if type == selected_particle { - immediate_quad(.{ x_off - 4, 0 }, .{ BAR_HEIGHT, BAR_HEIGHT }, color=.{1,1,0}); + gfx.quad(.{ x_off - 4, 0 }, .{ BAR_HEIGHT, BAR_HEIGHT }, color=.{1,1,0}); } color := particle_type_to_color(type) |> convert_color(); - immediate_quad(.{ x_off, 4 }, .{ BAR_HEIGHT - 8, BAR_HEIGHT - 8 }, color=color); + gfx.quad(.{ x_off, 4 }, .{ BAR_HEIGHT - 8, BAR_HEIGHT - 8 }, color=color); x_off += BAR_HEIGHT; } } - convert_color :: (use c: Color) -> imgui.Color4 { + convert_color :: (use c: Color) -> gfx.Color4 { return .{ ~~cast(i32) r / 255.0f, ~~cast(i32) g / 255.0f, diff --git a/src/simulation.onyx b/src/simulation.onyx index 21f7d3f..ea31dd4 100644 --- a/src/simulation.onyx +++ b/src/simulation.onyx @@ -169,13 +169,15 @@ can_sink :: (use board: ^ParticleBoard, below_index: i32) -> bool { update_sand :: (use board: ^ParticleBoard, x: i32, y: i32) { index := get_index(board, x, y); - particles[index].velocity.y += Gravity; + particles[index].velocity.y += Gravity * random.float(0.8, 1.2); - if particles[get_index(board, x, y + 1)].type != .Empty { + directly_below_index := get_index(board, x, y + 1); + if directly_below_index < 0 || particles[directly_below_index].type != .Empty { particles[index].velocity.y = 0; } vy := cast(i32) particles[index].velocity.y; + prev_move_index := -1; for yy: y + 1 .. y + vy + 2 { b_index := get_index(board, x, yy); bl_index := get_index(board, x - 1, yy); @@ -183,16 +185,23 @@ update_sand :: (use board: ^ParticleBoard, x: i32, y: i32) { move_to_index := first_empty(board, b_index, bl_index, br_index); - if move_to_index != -1 { - particle_set(board, move_to_index, particles[index]); + if move_to_index == -1 && prev_move_index != -1 { + particle_set(board, prev_move_index, particles[index]); particle_set(board, index, .{ .Empty }); return; + } else { + prev_move_index = move_to_index; } } - b_index := get_index(board, x, y + 1); - if can_sink(board, b_index) { - particle_switch(board, index, b_index); + if prev_move_index != -1 { + particle_set(board, prev_move_index, particles[index]); + particle_set(board, index, .{ .Empty }); + return; + } + + if can_sink(board, directly_below_index) { + particle_switch(board, index, directly_below_index); } } @@ -200,21 +209,31 @@ update_sand :: (use board: ^ParticleBoard, x: i32, y: i32) { update_water :: (use board: ^ParticleBoard, x: i32, y: i32) { index := get_index(board, x, y); - particles[index].velocity.y += Gravity; + // :CopyPaste from update_sand + particles[index].velocity.y += Gravity * random.float(0.8, 1.2); - if particles[get_index(board, x, y + 1)].type != .Empty { + // :CopyPaste from update_sand + directly_below_index := get_index(board, x, y + 1); + if directly_below_index < 0 || particles[directly_below_index].type != .Empty { particles[index].velocity.y = 0; } - vy := cast(i32) particles[index].velocity.y; - b_index := get_index(board, x, y + vy + 1); - bl_index := get_index(board, x - 1, y + vy + 1); - br_index := get_index(board, x + 1, y + vy + 1); + // :CopyPaste from update_sand + vy := cast(i32) particles[index].velocity.y; + prev_move_index := -1; + for yy: y + 1 .. y + vy + 2 { + b_index := get_index(board, x, yy); + bl_index := get_index(board, x - 1, yy); + br_index := get_index(board, x + 1, yy); + + move_to_index := first_empty(board, b_index, bl_index, br_index); - move_to_index := first_empty(board, b_index, br_index, bl_index); + if move_to_index == -1 do break; + else do prev_move_index = move_to_index; + } - if move_to_index != -1 { - particle_set(board, move_to_index, particles[index]); + if prev_move_index != -1 { + particle_set(board, prev_move_index, particles[index]); particle_set(board, index, .{ .Empty }); return; } -- 2.25.1