Game of life from bitmasks

This commit is contained in:
Garrett Gunnell 2025-08-10 22:55:53 -07:00
parent e10f10adf9
commit 341ee15f08
5 changed files with 189 additions and 26 deletions

View file

@ -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));
}

View file

@ -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"]

View file

@ -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()

View file

@ -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)

View file

@ -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]