From 8e9b468509ea12db0421d71a77399c419dbf5f78 Mon Sep 17 00:00:00 2001 From: Synthasmagoria Date: Sat, 22 Aug 2026 22:46:38 +0200 Subject: [PATCH] matrix move --- program.odin | 70 +++++++++++++++++++--------------------------------- 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/program.odin b/program.odin index 20beb8a..aa823dd 100644 --- a/program.odin +++ b/program.odin @@ -311,9 +311,7 @@ program_get_master_matrix :: proc() -> mat3 { } program_set_transformation_state :: proc(state: AnimationState) { - if program.animation_state == state { - return - } + if program.animation_state == state do return previous_state := program.animation_state program.animation_state = state switch program.animation_state { @@ -671,9 +669,7 @@ program_render_ui_and_handle_focus :: proc(ctx: ^ui.Context, focus_element_id: u } case .Button: if (rl.GuiButton(area, element.label)) { - if element.data == nil { - break - } + if element.data == nil do break data := cast(^UiElementData_Button)element.data switch data.type { case .Nothing: @@ -726,45 +722,11 @@ program_render_ui_and_handle_focus :: proc(ctx: ^ui.Context, focus_element_id: u } program.matrix_count = max(program.matrix_count - 1, 0) case .MatrixMoveUp: - if data.target_matrix <= 0 { - break; - } - floats := program.matrix_float_pool - inputs := program.matrix_value_string_pool - floats_values_size := size_of(f32) * 9 - inputs_buffer_size := size_of(InputFloatField) * 9 - floats_moving_matrix := &floats[data.target_matrix * 9] - inputs_moving_matrix := &inputs[data.target_matrix * 9][0] - floats_moved_to_matrix := &floats[data.target_matrix * 9 - 9] - inputs_moved_to_matrix := &inputs[data.target_matrix * 9 - 9][0] - floats_temp := [9]f32{} - inputs_temp := [9]InputFloatField{} - mem.copy(&floats_temp[0], floats_moving_matrix, floats_values_size) - mem.copy(&inputs_temp[0][0], inputs_moving_matrix, inputs_buffer_size) - mem.copy(floats_moving_matrix, floats_moved_to_matrix, floats_values_size) - mem.copy(inputs_moving_matrix, inputs_moved_to_matrix, inputs_buffer_size) - mem.copy(floats_moved_to_matrix, &floats_temp[0], floats_values_size) - mem.copy(inputs_moved_to_matrix, &inputs_temp[0][0], inputs_buffer_size) + if data.target_matrix <= 0 do break; + matrix_move_to(program.matrix_float_pool, program.matrix_value_string_pool, data.target_matrix, data.target_matrix - 1) case .MatrixMoveDown: - if data.target_matrix + 1 >= program.matrix_count { - break; - } - floats := program.matrix_float_pool - inputs := program.matrix_value_string_pool - floats_values_size := size_of(f32) * 9 - inputs_buffer_size := size_of(InputFloatField) * 9 - floats_moving_matrix := &floats[data.target_matrix * 9] - inputs_moving_matrix := &inputs[data.target_matrix * 9][0] - floats_moved_to_matrix := &floats[data.target_matrix * 9 + 9] - inputs_moved_to_matrix := &inputs[data.target_matrix * 9 + 9][0] - floats_temp := [9]f32{} - inputs_temp := [9]InputFloatField{} - mem.copy(&floats_temp[0], floats_moving_matrix, floats_values_size) - mem.copy(&inputs_temp[0][0], inputs_moving_matrix, inputs_buffer_size) - mem.copy(floats_moving_matrix, floats_moved_to_matrix, floats_values_size) - mem.copy(inputs_moving_matrix, inputs_moved_to_matrix, inputs_buffer_size) - mem.copy(floats_moved_to_matrix, &floats_temp[0], floats_values_size) - mem.copy(inputs_moved_to_matrix, &inputs_temp[0][0], inputs_buffer_size) + if data.target_matrix + 1 >= program.matrix_count do break; + matrix_move_to(program.matrix_float_pool, program.matrix_value_string_pool, data.target_matrix, data.target_matrix + 1) } if data.type in UiButtonRecalculateFinishGroup { animation_update_last(&program.animation, program_get_master_matrix()) @@ -830,6 +792,26 @@ program_render_ui_and_handle_focus :: proc(ctx: ^ui.Context, focus_element_id: u return focus_element_id } +matrix_move_to :: proc(floats: []f32, inputs: []InputFloatField, from, to: int) { + if from == to do return + floats := program.matrix_float_pool + inputs := program.matrix_value_string_pool + floats_values_size := size_of(f32) * 9 + inputs_buffer_size := size_of(InputFloatField) * 9 + floats_moving_matrix := &floats[from * 9] + inputs_moving_matrix := &inputs[from * 9][0] + floats_moved_to_matrix := &floats[to * 9] + inputs_moved_to_matrix := &inputs[to * 9][0] + floats_temp := [9]f32{} + inputs_temp := [9]InputFloatField{} + mem.copy(&floats_temp[0], floats_moving_matrix, floats_values_size) + mem.copy(&inputs_temp[0][0], inputs_moving_matrix, inputs_buffer_size) + mem.copy(floats_moving_matrix, floats_moved_to_matrix, floats_values_size) + mem.copy(inputs_moving_matrix, inputs_moved_to_matrix, inputs_buffer_size) + mem.copy(floats_moved_to_matrix, &floats_temp[0], floats_values_size) + mem.copy(inputs_moved_to_matrix, &inputs_temp[0][0], inputs_buffer_size) +} + ui_add_matrix_footer_buttons :: proc(button_type_add: UiButtonType, margin: f32) { button_data: ^UiElementData_Button button_data = new(UiElementData_Button, context.temp_allocator)