mirror of
https://github.com/GarrettGunnell/God-Machine.git
synced 2025-10-19 06:43:15 +00:00
Game of life from bitmasks
This commit is contained in:
parent
e10f10adf9
commit
341ee15f08
5 changed files with 189 additions and 26 deletions
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue