diff --git a/Assets/Compute Shaders/automata.acompute b/Assets/Compute Shaders/automata.acompute index dd36a5c..5d64980 100644 --- a/Assets/Compute Shaders/automata.acompute +++ b/Assets/Compute Shaders/automata.acompute @@ -2,6 +2,8 @@ #kernel Automaton #kernel Blit +#extension GL_ARB_gpu_shader_int64 : require + layout(rgba8, set = 0, binding = 0) uniform image2D _RenderTarget; layout(r16f, set = 0, binding = 2) uniform image2D _AutomatonFrom; @@ -31,7 +33,7 @@ void Seed() { if (seed < 0.75) seed = 0.0; else seed = 1.0; - + imageStore(_AutomatonFrom, uv, vec4(seed)); } @@ -41,29 +43,163 @@ void Automaton() { ivec2 size = ivec2(raster_size); if (uv.x >= size.x || uv.y >= size.y) return; - int cell = int(imageLoad(_AutomatonFrom, uv).r);; + int cell = int(imageLoad(_AutomatonFrom, uv).r); + + uint64_t top_row_mask = 18374686479671623680UL; + uint64_t left_column_mask = 9259542123273814144UL; - int neighbor_count = 0; - int neighborhood_size = 5; - for (int x = -neighborhood_size; x <= neighborhood_size; ++x) { - for (int y = -neighborhood_size; y <= neighborhood_size; ++y) { - // if (x == 0 && y == 0) continue; + uint64_t upper_left_mask = 770; + uint64_t upper_right_mask = 49216 & ~(left_column_mask); + uint64_t lower_left_mask = 144959613005987840UL & ~(top_row_mask); + uint64_t lower_right_mask = 4665729213955833856UL & ~(top_row_mask | left_column_mask); - ivec2 texcoords = uv + ivec2(x, y); - texcoords.x = texcoords.x % 512; - texcoords.y = texcoords.y % 512; + uint neighbor_count = 0; + int neighborhood_radius = 1; - neighbor_count += int(imageLoad(_AutomatonFrom, texcoords).r); + + uint64_t upper_left_quadrant_bits = 0; + + // Upper Left Quadrant + for (int y = -1; y <= 0; ++y) { + for (int x = -1; x <= 0; ++x) { + uint bit_index = -x + -y * 8; // Convert to 1D index in 64 bit uint + + ivec2 world_coords = uv + ivec2(x, y); + + uint64_t cell_value = int(imageLoad(_AutomatonFrom, world_coords % 512).r); + + upper_left_quadrant_bits |= (cell_value << bit_index); // Shift cell value to bit index and add it to quadrant bit string } } - // if (neighbor_count <= 1) cell = 0; - // if (neighbor_count == 3) cell = 1; - // if (neighbor_count >= 4) cell = 0; + upper_left_quadrant_bits = upper_left_quadrant_bits & upper_left_mask; // Apply neighborhood mask + + // Sum bits in string to get active cell count of quadrant + while (upper_left_quadrant_bits != 0) { + neighbor_count += uint(upper_left_quadrant_bits & 1); + + upper_left_quadrant_bits = upper_left_quadrant_bits >> 1; + } + + + uint64_t upper_right_quadrant_bits = 0; + + // Upper Right Quadrant + for (int y = -1; y <= 0; ++y) { + for (int x = 0; x <= 1; ++x) { + uint bit_index = (7 - x) + -y * 8; // Convert to 1D index in 64 bit uint + + ivec2 world_coords = uv + ivec2(x, y); + + uint64_t cell_value = int(imageLoad(_AutomatonFrom, world_coords % 512).r); + + upper_right_quadrant_bits |= (cell_value << bit_index); // Shift cell value to bit index and add it to quadrant bit string + } + } + + upper_right_quadrant_bits &= upper_right_mask; + + // Sum bits in string to get active cell count of quadrant + while (upper_right_quadrant_bits != 0) { + neighbor_count += uint(upper_right_quadrant_bits & 1); + + upper_right_quadrant_bits = upper_right_quadrant_bits >> 1; + } + - if (neighbor_count <= 33) cell = 0; - if (34 <= neighbor_count && neighbor_count <= 45) cell = 1; - if (58 <= neighbor_count && neighbor_count <= 121) cell = 0; + + + uint64_t lower_left_quadrant_bits = 0; + + // lower Left Quadrant + for (int y = 0; y <= 1; ++y) { + for (int x = -1; x <= 0; ++x) { + uint bit_index = -x + (7 - y) * 8; // Convert to 1D index in 64 bit uint + + ivec2 world_coords = uv + ivec2(x, y); + + uint64_t cell_value = int(imageLoad(_AutomatonFrom, world_coords % 512).r); + + lower_left_quadrant_bits |= (cell_value << bit_index); // Shift cell value to bit index and add it to quadrant bit string + } + } + + lower_left_quadrant_bits &= lower_left_mask; + + // Sum bits in string to get active cell count of quadrant + while (lower_left_quadrant_bits != 0) { + neighbor_count += uint(lower_left_quadrant_bits & 1); + + lower_left_quadrant_bits = lower_left_quadrant_bits >> 1; + } + + uint64_t lower_right_quadrant_bits = 0; + + // lower Right Quadrant + for (int y = 0; y <= 1; ++y) { + for (int x = 0; x <= 1; ++x) { + uint bit_index = (7 - x) + (7 - y) * 8; // Convert to 1D index in 64 bit uint + + ivec2 world_coords = uv + ivec2(x, y); + + uint64_t cell_value = int(imageLoad(_AutomatonFrom, world_coords % 512).r); + + lower_right_quadrant_bits |= (cell_value << bit_index); // Shift cell value to bit index and add it to quadrant bit string + } + } + + lower_right_quadrant_bits &= lower_right_mask; + + // Sum bits in string to get active cell count of quadrant + while (lower_right_quadrant_bits != 0) { + neighbor_count += uint(lower_right_quadrant_bits & 1); + + lower_right_quadrant_bits = lower_right_quadrant_bits >> 1; + } + + + // Upper Left + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2(-1, -1) % 512)).r); + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2( 0, -1) % 512)).r); + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2(-1, 0) % 512)).r); + + // Upper Right + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2( 0, -1) % 512)).r); + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2( 1, -1) % 512)).r); + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2( 1, 0) % 512)).r); + + // Center + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2( 0, 0) % 512)).r); + + // Lower Left + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2(-1, 0) % 512)).r); + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2(-1, 1) % 512)).r); + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2( 0, 1) % 512)).r); + + // Lower Right + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2( 1, 0) % 512)).r); + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2( 0, 1) % 512)).r); + // neighbor_count += uint(imageLoad(_AutomatonFrom, (uv + ivec2( 1, 1) % 512)).r); + + + // for (int x = -neighborhood_radius; x <= neighborhood_radius; ++x) { + // for (int y = -neighborhood_radius; y <= neighborhood_radius; ++y) { + // if (x == 0 && y == 0) continue; + + // ivec2 texcoords = uv + ivec2(x, y); + // texcoords = texcoords % 512; + + // neighbor_count += int(imageLoad(_AutomatonFrom, texcoords).r); + // } + // } + + if (neighbor_count <= 1) cell = 0; + if (neighbor_count == 3) cell = 1; + if (neighbor_count >= 4) cell = 0; + + // if (neighbor_count <= 33) cell = 0; + // if (34 <= neighbor_count && neighbor_count <= 45) cell = 1; + // if (58 <= neighbor_count && neighbor_count <= 121) cell = 0; imageStore(_AutomatonTo, uv, vec4(cell)); } diff --git a/Assets/Scenes/main.tscn b/Assets/Scenes/main.tscn index 5ca36ae..f5b5504 100644 --- a/Assets/Scenes/main.tscn +++ b/Assets/Scenes/main.tscn @@ -101,8 +101,8 @@ blend_mode = 2 [sub_resource type="ShaderMaterial" id="ShaderMaterial_052nx"] shader = ExtResource("36_l2vhu") -shader_parameter/first_color = Color(0.207512, 0.207512, 0.207512, 1) -shader_parameter/second_color = Color(1, 1, 1, 1) +shader_parameter/first_color = Color(0.0569413, 0.00432596, 0.0484889, 1) +shader_parameter/second_color = Color(0.8597, 0.855266, 0.705303, 1) [node name="Node3D" type="Node3D"] @@ -136,7 +136,7 @@ script = ExtResource("7_uq7jr") [node name="Actual Grid" type="TileMapLayer" parent="UI/Neighborhoods/Neighborhood 1/Grid"] z_index = -1 position = Vector2(182, 183) -tile_map_data = PackedByteArray("AAAAAAAAAQAAAAAAAAD9/wEAAQAAAAAAAAD9/wAAAQAAAAAAAAD8/wAAAQAAAAAAAAD9/wIAAQAAAAAAAAD8/wIAAQAAAAAAAAD8/wEAAQAAAAAAAAD7/wAAAQAAAAAAAAD6/wAAAQAAAAAAAAD5/wAAAQAAAAAAAAADAAAAAQAAAAAAAAAEAAAAAQAAAAAAAAAFAAAAAQAAAAAAAAAGAAAAAQAAAAAAAAAHAAAAAQAAAAAAAAD//wEAAQAAAAAAAAD//wAAAQAAAAAAAAAAAAEAAQAAAAAAAAABAAEAAQAAAAAAAAABAAAAAQAAAAAAAAAAAP//AQAAAAAAAAD/////AQAAAAAAAAABAP//AQAAAAAAAAD9////AQAAAAAAAAD8////AQAAAAAAAAD7////AQAAAAAAAAD6////AQAAAAAAAAD5////AQAAAAAAAAD5//7/AQAAAAAAAAD6//7/AQAAAAAAAAD7//7/AQAAAAAAAAD8//7/AQAAAAAAAAD9//7/AQAAAAAAAAADAP7/AQAAAAAAAAAEAP7/AQAAAAAAAAAFAP7/AQAAAAAAAAAGAP7/AQAAAAAAAAAHAP7/AQAAAAAAAAAHAP//AQAAAAAAAAAGAP//AQAAAAAAAAAFAP//AQAAAAAAAAAEAP//AQAAAAAAAAADAP//AQAAAAAAAAD5//3/AQAAAAAAAAD6//3/AQAAAAAAAAD7//3/AQAAAAAAAAD8//3/AQAAAAAAAAD9//3/AQAAAAAAAAD+//3/AQAAAAAAAAD///3/AQAAAAAAAAAAAP3/AQAAAAAAAAABAP3/AQAAAAAAAAACAP3/AQAAAAAAAAADAP3/AQAAAAAAAAAEAP3/AQAAAAAAAAAFAP3/AQAAAAAAAAAGAP3/AQAAAAAAAAAHAP3/AQAAAAAAAAAHAPz/AQAAAAAAAAAGAPz/AQAAAAAAAAAFAPz/AQAAAAAAAAAEAPz/AQAAAAAAAAADAPz/AQAAAAAAAAACAPz/AQAAAAAAAAABAPz/AQAAAAAAAAAAAPz/AQAAAAAAAAD///z/AQAAAAAAAAD+//z/AQAAAAAAAAD9//z/AQAAAAAAAAD8//z/AQAAAAAAAAD7//z/AQAAAAAAAAD6//z/AQAAAAAAAAD5//z/AQAAAAAAAAD5//v/AQAAAAAAAAD6//v/AQAAAAAAAAD7//v/AQAAAAAAAAD8//v/AQAAAAAAAAD9//v/AQAAAAAAAAD+//v/AQAAAAAAAAD///v/AQAAAAAAAAAAAPv/AQAAAAAAAAABAPv/AQAAAAAAAAACAPv/AQAAAAAAAAADAPv/AQAAAAAAAAAEAPv/AQAAAAAAAAAFAPv/AQAAAAAAAAAGAPv/AQAAAAAAAAAHAPv/AQAAAAAAAAAHAPr/AQAAAAAAAAAGAPr/AQAAAAAAAAAFAPr/AQAAAAAAAAAEAPr/AQAAAAAAAAADAPr/AQAAAAAAAAACAPr/AQAAAAAAAAABAPr/AQAAAAAAAAAAAPr/AQAAAAAAAAD///r/AQAAAAAAAAD+//r/AQAAAAAAAAD9//r/AQAAAAAAAAD8//r/AQAAAAAAAAD7//r/AQAAAAAAAAD6//r/AQAAAAAAAAD5//r/AQAAAAAAAAD5//n/AQAAAAAAAAD6//n/AQAAAAAAAAD7//n/AQAAAAAAAAD8//n/AQAAAAAAAAD9//n/AQAAAAAAAAD+//n/AQAAAAAAAAD///n/AQAAAAAAAAAAAPn/AQAAAAAAAAABAPn/AQAAAAAAAAACAPn/AQAAAAAAAAADAPn/AQAAAAAAAAAEAPn/AQAAAAAAAAAFAPn/AQAAAAAAAAAGAPn/AQAAAAAAAAAHAPn/AQAAAAAAAAAHAAEAAQAAAAAAAAAGAAEAAQAAAAAAAAAFAAEAAQAAAAAAAAAEAAEAAQAAAAAAAAADAAEAAQAAAAAAAAD7/wEAAQAAAAAAAAD6/wEAAQAAAAAAAAD5/wEAAQAAAAAAAAD5/wIAAQAAAAAAAAD6/wIAAQAAAAAAAAD7/wIAAQAAAAAAAAADAAIAAQAAAAAAAAAEAAIAAQAAAAAAAAAFAAIAAQAAAAAAAAAGAAIAAQAAAAAAAAAHAAIAAQAAAAAAAAAHAAMAAQAAAAAAAAAGAAMAAQAAAAAAAAAFAAMAAQAAAAAAAAAEAAMAAQAAAAAAAAABAAMAAQAAAAAAAAAAAAMAAQAAAAAAAAD//wMAAQAAAAAAAAD+/wMAAQAAAAAAAAD9/wMAAQAAAAAAAAD8/wMAAQAAAAAAAAD7/wMAAQAAAAAAAAD6/wMAAQAAAAAAAAD5/wMAAQAAAAAAAAD5/wQAAQAAAAAAAAD6/wQAAQAAAAAAAAD7/wQAAQAAAAAAAAD8/wQAAQAAAAAAAAD9/wQAAQAAAAAAAAD+/wQAAQAAAAAAAAD//wQAAQAAAAAAAAAAAAQAAQAAAAAAAAABAAQAAQAAAAAAAAACAAQAAQAAAAAAAAAEAAQAAQAAAAAAAAAFAAQAAQAAAAAAAAAGAAQAAQAAAAAAAAAHAAQAAQAAAAAAAAAHAAUAAQAAAAAAAAAGAAUAAQAAAAAAAAAFAAUAAQAAAAAAAAAEAAUAAQAAAAAAAAADAAUAAQAAAAAAAAACAAUAAQAAAAAAAAABAAUAAQAAAAAAAAAAAAUAAQAAAAAAAAD//wUAAQAAAAAAAAD+/wUAAQAAAAAAAAD9/wUAAQAAAAAAAAD8/wUAAQAAAAAAAAD7/wUAAQAAAAAAAAD6/wUAAQAAAAAAAAD5/wUAAQAAAAAAAAD5/wYAAQAAAAAAAAD6/wYAAQAAAAAAAAD7/wYAAQAAAAAAAAD8/wYAAQAAAAAAAAD9/wYAAQAAAAAAAAD+/wYAAQAAAAAAAAD//wYAAQAAAAAAAAAAAAYAAQAAAAAAAAABAAYAAQAAAAAAAAACAAYAAQAAAAAAAAADAAYAAQAAAAAAAAAEAAYAAQAAAAAAAAAFAAYAAQAAAAAAAAAGAAYAAQAAAAAAAAAHAAYAAQAAAAAAAAAHAAcAAQAAAAAAAAAGAAcAAQAAAAAAAAAFAAcAAQAAAAAAAAAEAAcAAQAAAAAAAAADAAcAAQAAAAAAAAACAAcAAQAAAAAAAAABAAcAAQAAAAAAAAAAAAcAAQAAAAAAAAD//wcAAQAAAAAAAAD+/wcAAQAAAAAAAAD9/wcAAQAAAAAAAAD8/wcAAQAAAAAAAAD7/wcAAQAAAAAAAAD6/wcAAQAAAAAAAAD5/wcAAQAAAAAAAAADAAQAAQAAAAAAAAADAAMAAQAAAAAAAAACAAMAAQAAAAAAAAACAAIAAQAAAAAAAAACAAEAAQAAAAAAAAACAAAAAQAAAAAAAAACAP7/AQAAAAAAAAACAP//AQAAAAAAAAABAP7/AQAAAAAAAAAAAP7/AQAAAAAAAAD///7/AQAAAAAAAAD+//7/AQAAAAAAAAD+////AQAAAAAAAAD+/wAAAQAAAAAAAAD+/wEAAQAAAAAAAAD+/wIAAQAAAAAAAAD//wIAAQAAAAAAAAAAAAIAAQAAAAAAAAABAAIAAQAAAAAAAAA=") +tile_map_data = PackedByteArray("AAAAAAAAAQAAAAAAAAD9/wEAAQAAAAAAAAD9/wAAAQAAAAAAAAD8/wAAAQAAAAAAAAD9/wIAAQAAAAAAAAD8/wIAAQAAAAAAAAD8/wEAAQAAAAAAAAD7/wAAAQAAAAAAAAD6/wAAAQAAAAAAAAD5/wAAAQAAAAAAAAADAAAAAQAAAAAAAAAEAAAAAQAAAAAAAAAFAAAAAQAAAAAAAAAGAAAAAQAAAAAAAAAHAAAAAQAAAAAAAAD//wEAAQABAAAAAAD//wAAAQABAAAAAAAAAAEAAQABAAAAAAABAAEAAQABAAAAAAABAAAAAQABAAAAAAAAAP//AQABAAAAAAD/////AQABAAAAAAABAP//AQABAAAAAAD9////AQAAAAAAAAD8////AQAAAAAAAAD7////AQAAAAAAAAD6////AQAAAAAAAAD5////AQAAAAAAAAD5//7/AQAAAAAAAAD6//7/AQAAAAAAAAD7//7/AQAAAAAAAAD8//7/AQAAAAAAAAD9//7/AQAAAAAAAAADAP7/AQAAAAAAAAAEAP7/AQAAAAAAAAAFAP7/AQAAAAAAAAAGAP7/AQAAAAAAAAAHAP7/AQAAAAAAAAAHAP//AQAAAAAAAAAGAP//AQAAAAAAAAAFAP//AQAAAAAAAAAEAP//AQAAAAAAAAADAP//AQAAAAAAAAD5//3/AQAAAAAAAAD6//3/AQAAAAAAAAD7//3/AQAAAAAAAAD8//3/AQAAAAAAAAD9//3/AQAAAAAAAAD+//3/AQAAAAAAAAD///3/AQAAAAAAAAAAAP3/AQAAAAAAAAABAP3/AQAAAAAAAAACAP3/AQAAAAAAAAADAP3/AQAAAAAAAAAEAP3/AQAAAAAAAAAFAP3/AQAAAAAAAAAGAP3/AQAAAAAAAAAHAP3/AQAAAAAAAAAHAPz/AQAAAAAAAAAGAPz/AQAAAAAAAAAFAPz/AQAAAAAAAAAEAPz/AQAAAAAAAAADAPz/AQAAAAAAAAACAPz/AQAAAAAAAAABAPz/AQAAAAAAAAAAAPz/AQAAAAAAAAD///z/AQAAAAAAAAD+//z/AQAAAAAAAAD9//z/AQAAAAAAAAD8//z/AQAAAAAAAAD7//z/AQAAAAAAAAD6//z/AQAAAAAAAAD5//z/AQAAAAAAAAD5//v/AQAAAAAAAAD6//v/AQAAAAAAAAD7//v/AQAAAAAAAAD8//v/AQAAAAAAAAD9//v/AQAAAAAAAAD+//v/AQAAAAAAAAD///v/AQAAAAAAAAAAAPv/AQAAAAAAAAABAPv/AQAAAAAAAAACAPv/AQAAAAAAAAADAPv/AQAAAAAAAAAEAPv/AQAAAAAAAAAFAPv/AQAAAAAAAAAGAPv/AQAAAAAAAAAHAPv/AQAAAAAAAAAHAPr/AQAAAAAAAAAGAPr/AQAAAAAAAAAFAPr/AQAAAAAAAAAEAPr/AQAAAAAAAAADAPr/AQAAAAAAAAACAPr/AQAAAAAAAAABAPr/AQAAAAAAAAAAAPr/AQAAAAAAAAD///r/AQAAAAAAAAD+//r/AQAAAAAAAAD9//r/AQAAAAAAAAD8//r/AQAAAAAAAAD7//r/AQAAAAAAAAD6//r/AQAAAAAAAAD5//r/AQAAAAAAAAD5//n/AQAAAAAAAAD6//n/AQAAAAAAAAD7//n/AQAAAAAAAAD8//n/AQAAAAAAAAD9//n/AQAAAAAAAAD+//n/AQAAAAAAAAD///n/AQAAAAAAAAAAAPn/AQAAAAAAAAABAPn/AQAAAAAAAAACAPn/AQAAAAAAAAADAPn/AQAAAAAAAAAEAPn/AQAAAAAAAAAFAPn/AQAAAAAAAAAGAPn/AQAAAAAAAAAHAPn/AQAAAAAAAAAHAAEAAQAAAAAAAAAGAAEAAQAAAAAAAAAFAAEAAQAAAAAAAAAEAAEAAQAAAAAAAAADAAEAAQAAAAAAAAD7/wEAAQAAAAAAAAD6/wEAAQAAAAAAAAD5/wEAAQAAAAAAAAD5/wIAAQAAAAAAAAD6/wIAAQAAAAAAAAD7/wIAAQAAAAAAAAADAAIAAQAAAAAAAAAEAAIAAQAAAAAAAAAFAAIAAQAAAAAAAAAGAAIAAQAAAAAAAAAHAAIAAQAAAAAAAAAHAAMAAQAAAAAAAAAGAAMAAQAAAAAAAAAFAAMAAQAAAAAAAAAEAAMAAQAAAAAAAAABAAMAAQAAAAAAAAAAAAMAAQAAAAAAAAD//wMAAQAAAAAAAAD+/wMAAQAAAAAAAAD9/wMAAQAAAAAAAAD8/wMAAQAAAAAAAAD7/wMAAQAAAAAAAAD6/wMAAQAAAAAAAAD5/wMAAQAAAAAAAAD5/wQAAQAAAAAAAAD6/wQAAQAAAAAAAAD7/wQAAQAAAAAAAAD8/wQAAQAAAAAAAAD9/wQAAQAAAAAAAAD+/wQAAQAAAAAAAAD//wQAAQAAAAAAAAAAAAQAAQAAAAAAAAABAAQAAQAAAAAAAAACAAQAAQAAAAAAAAAEAAQAAQAAAAAAAAAFAAQAAQAAAAAAAAAGAAQAAQAAAAAAAAAHAAQAAQAAAAAAAAAHAAUAAQAAAAAAAAAGAAUAAQAAAAAAAAAFAAUAAQAAAAAAAAAEAAUAAQAAAAAAAAADAAUAAQAAAAAAAAACAAUAAQAAAAAAAAABAAUAAQAAAAAAAAAAAAUAAQAAAAAAAAD//wUAAQAAAAAAAAD+/wUAAQAAAAAAAAD9/wUAAQAAAAAAAAD8/wUAAQAAAAAAAAD7/wUAAQAAAAAAAAD6/wUAAQAAAAAAAAD5/wUAAQAAAAAAAAD5/wYAAQAAAAAAAAD6/wYAAQAAAAAAAAD7/wYAAQAAAAAAAAD8/wYAAQAAAAAAAAD9/wYAAQAAAAAAAAD+/wYAAQAAAAAAAAD//wYAAQAAAAAAAAAAAAYAAQAAAAAAAAABAAYAAQAAAAAAAAACAAYAAQAAAAAAAAADAAYAAQAAAAAAAAAEAAYAAQAAAAAAAAAFAAYAAQAAAAAAAAAGAAYAAQAAAAAAAAAHAAYAAQAAAAAAAAAHAAcAAQAAAAAAAAAGAAcAAQAAAAAAAAAFAAcAAQAAAAAAAAAEAAcAAQAAAAAAAAADAAcAAQAAAAAAAAACAAcAAQAAAAAAAAABAAcAAQAAAAAAAAAAAAcAAQAAAAAAAAD//wcAAQAAAAAAAAD+/wcAAQAAAAAAAAD9/wcAAQAAAAAAAAD8/wcAAQAAAAAAAAD7/wcAAQAAAAAAAAD6/wcAAQAAAAAAAAD5/wcAAQAAAAAAAAADAAQAAQAAAAAAAAADAAMAAQAAAAAAAAACAAMAAQAAAAAAAAACAAIAAQAAAAAAAAACAAEAAQAAAAAAAAACAAAAAQAAAAAAAAACAP7/AQAAAAAAAAACAP//AQAAAAAAAAABAP7/AQAAAAAAAAAAAP7/AQAAAAAAAAD///7/AQAAAAAAAAD+//7/AQAAAAAAAAD+////AQAAAAAAAAD+/wAAAQAAAAAAAAD+/wEAAQAAAAAAAAD+/wIAAQAAAAAAAAD//wIAAQAAAAAAAAAAAAIAAQAAAAAAAAABAAIAAQAAAAAAAAA=") tile_set = SubResource("TileSet_ltoj3") [node name="Cursor Grid" type="TileMapLayer" parent="UI/Neighborhoods/Neighborhood 1/Grid"] @@ -218,7 +218,6 @@ modulate = Color(0.769432, 0.769432, 0.769432, 1) z_index = -1 texture_filter = 1 position = Vector2(354.5, 437) -scale = Vector2(1, 1) texture = ExtResource("15_l2vhu") [node name="Spawn Lower Bound" type="RichTextLabel" parent="UI/Neighborhoods/Neighborhood 1/Tool Bar"] @@ -411,7 +410,6 @@ modulate = Color(0.769432, 0.769432, 0.769432, 1) z_index = -1 texture_filter = 1 position = Vector2(354.5, 437) -scale = Vector2(1, 1) texture = ExtResource("15_l2vhu") [node name="Spawn Lower Bound" type="RichTextLabel" parent="UI/Neighborhoods/Neighborhood 2/Tool Bar"] @@ -604,7 +602,6 @@ modulate = Color(0.769432, 0.769432, 0.769432, 1) z_index = -1 texture_filter = 1 position = Vector2(354.5, 437) -scale = Vector2(1, 1) texture = ExtResource("15_l2vhu") [node name="Spawn Lower Bound" type="RichTextLabel" parent="UI/Neighborhoods/Neighborhood 3/Tool Bar"] @@ -797,7 +794,6 @@ modulate = Color(0.769432, 0.769432, 0.769432, 1) z_index = -1 texture_filter = 1 position = Vector2(354.5, 437) -scale = Vector2(1, 1) texture = ExtResource("15_l2vhu") [node name="Spawn Lower Bound" type="RichTextLabel" parent="UI/Neighborhoods/Neighborhood 4/Tool Bar"] @@ -1074,6 +1070,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 [connection signal="gui_input" from="UI/Neighborhoods/Neighborhood 1/Grid" to="UI/Neighborhoods/Neighborhood 1/Grid" method="_on_gui_input"] [connection signal="mouse_entered" from="UI/Neighborhoods/Neighborhood 1/Grid" to="UI/Neighborhoods/Neighborhood 1/Grid" method="_on_mouse_entered"] diff --git a/Assets/Scripts/UI/Tool Buttons/power_button.gd b/Assets/Scripts/UI/Tool Buttons/power_button.gd index 1c309ea..1be9f81 100644 --- a/Assets/Scripts/UI/Tool Buttons/power_button.gd +++ b/Assets/Scripts/UI/Tool Buttons/power_button.gd @@ -1,4 +1,4 @@ extends AcerolaPanel func on_pressed() -> void: - get_node("/root/Node3D/Game Master").queue_reseed() + get_node("../../.").encode_grid_to_bit_string() diff --git a/Assets/Scripts/neighborhood_wizard.gd b/Assets/Scripts/neighborhood_wizard.gd index e591c5c..79d6d28 100644 --- a/Assets/Scripts/neighborhood_wizard.gd +++ b/Assets/Scripts/neighborhood_wizard.gd @@ -2,8 +2,11 @@ extends Node var neighborhood : Neighborhood +var grid : TileMapLayer + func _ready() -> void: neighborhood = Neighborhood.new() + grid = get_node("Grid/Actual Grid") func get_spawn_range() -> Vector2i: @@ -20,3 +23,31 @@ func add_to_spawn_range(v : Vector2i) -> void: func add_to_stable_range(v : Vector2i) -> void: neighborhood.add_to_stable_range(v) + + +func encode_grid_to_bit_string() -> void: + var bit_string = "" + var full_bit_string = "" + var byte_array = PackedByteArray() + byte_array.resize(8) + + # Top Left Quadrant + var row = 0; + for y in range(-7, 1): + bit_string = "" + for x in range(-7, 1): + var grid_coord = Vector2i(x, y) + + var cell = grid.get_cell_atlas_coords(grid_coord).x + + bit_string += "0" if cell == 0 else "1" + + + print(bit_string + " -> " + str(bit_string.bin_to_int())) + byte_array.encode_u8(row, bit_string.bin_to_int()) + row += 1 + full_bit_string += bit_string + + + print(byte_array) + print(full_bit_string) diff --git a/project.godot b/project.godot index 16ec046..fe61c8f 100644 --- a/project.godot +++ b/project.godot @@ -13,7 +13,6 @@ config_version=5 config/name="god-machine" run/main_scene="uid://cfsgy7huubpok" config/features=PackedStringArray("4.4", "Forward Plus") -run/max_fps=30 config/icon="res://icon.svg" [autoload]