Implement directional buttons

This commit is contained in:
Garrett Gunnell 2025-08-14 02:19:29 -07:00
parent 6bf0a1566a
commit f05064608e
14 changed files with 67 additions and 11 deletions

View file

@ -23,8 +23,7 @@ layout(binding = 1) uniform UniformBufferObject {
ivec4 _RuleRanges4; ivec4 _RuleRanges4;
int _Seed; int _Seed;
int _Zoom; int _Zoom;
int _Pad2; ivec2 _Offset;
int _Pad3;
}; };
layout(push_constant, std430) uniform Params { layout(push_constant, std430) uniform Params {
@ -210,7 +209,7 @@ void Automaton() {
void Blit() { void Blit() {
ivec2 uv = ivec2(gl_GlobalInvocationID.xy); ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
float automata = imageLoad(_AutomatonFrom, uv / _Zoom).r; float automata = imageLoad(_AutomatonFrom, ((uv + _Offset * _Zoom) / _Zoom) % 1024).r;
imageStore(_RenderTarget, uv, vec4(automata, 0, 0, 1.0)); imageStore(_RenderTarget, uv, vec4(automata, 0, 0, 1.0));
} }

View file

@ -0,0 +1,5 @@
extends AcerolaPanel
func on_pressed() -> void:
GameMaster.move(Vector2i(0, -1))

View file

@ -0,0 +1 @@
uid://bamfdhdbb8wim

View file

@ -0,0 +1,5 @@
extends AcerolaPanel
func on_pressed() -> void:
GameMaster.move(Vector2i(-1, 0))

View file

@ -0,0 +1 @@
uid://frngf0psnuck

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=48 format=4 uid="uid://cfsgy7huubpok"] [gd_scene load_steps=53 format=4 uid="uid://cfsgy7huubpok"]
[ext_resource type="Script" uid="uid://drfxlavovcgta" path="res://Assets/Scripts/automata_compositor_effect.gd" id="1_vlji8"] [ext_resource type="Script" uid="uid://drfxlavovcgta" path="res://Assets/Scripts/automata_compositor_effect.gd" id="1_vlji8"]
[ext_resource type="Script" uid="uid://bjuwof03jt0ds" path="res://Assets/Scripts/draw_world_compositor_effect.gd" id="2_ttgh6"] [ext_resource type="Script" uid="uid://bjuwof03jt0ds" path="res://Assets/Scripts/draw_world_compositor_effect.gd" id="2_ttgh6"]
@ -34,7 +34,12 @@
[ext_resource type="Script" uid="uid://cbxol4ngxuqsp" path="res://Assets/Scripts/UI/new_seed_button.gd" id="17_tm25p"] [ext_resource type="Script" uid="uid://cbxol4ngxuqsp" path="res://Assets/Scripts/UI/new_seed_button.gd" id="17_tm25p"]
[ext_resource type="Script" uid="uid://bj4mhuarslaom" path="res://Assets/Scripts/UI/Tool Buttons/stable_lower_button.gd" id="19_2whn1"] [ext_resource type="Script" uid="uid://bj4mhuarslaom" path="res://Assets/Scripts/UI/Tool Buttons/stable_lower_button.gd" id="19_2whn1"]
[ext_resource type="Script" uid="uid://dnos8f2lfqq4t" path="res://Assets/Scripts/UI/Tool Buttons/stable_upper_button.gd" id="21_qvima"] [ext_resource type="Script" uid="uid://dnos8f2lfqq4t" path="res://Assets/Scripts/UI/Tool Buttons/stable_upper_button.gd" id="21_qvima"]
[ext_resource type="Script" uid="uid://csran21uqb4ik" path="res://Assets/Scenes/right_button.gd" id="28_e7l2l"]
[ext_resource type="Script" uid="uid://bamfdhdbb8wim" path="res://Assets/Scenes/down_button.gd" id="30_snioh"]
[ext_resource type="Script" uid="uid://dn6pyw303yaas" path="res://Assets/Scenes/play_button.gd" id="31_l2vhu"] [ext_resource type="Script" uid="uid://dn6pyw303yaas" path="res://Assets/Scenes/play_button.gd" id="31_l2vhu"]
[ext_resource type="Script" uid="uid://3nx16dgm23ms" path="res://Assets/Scenes/zoom_button.gd" id="33_052nx"]
[ext_resource type="Script" uid="uid://frngf0psnuck" path="res://Assets/Scenes/left_button.gd" id="35_sld5i"]
[ext_resource type="Script" uid="uid://bjimcn3qcxim1" path="res://Assets/Scenes/up_button.gd" id="36_ews5c"]
[ext_resource type="Shader" uid="uid://bmeyydltsvw3p" path="res://Assets/Shaders/color_palette.gdshader" id="36_l2vhu"] [ext_resource type="Shader" uid="uid://bmeyydltsvw3p" path="res://Assets/Shaders/color_palette.gdshader" id="36_l2vhu"]
[sub_resource type="Environment" id="Environment_0xm2m"] [sub_resource type="Environment" id="Environment_0xm2m"]
@ -938,7 +943,7 @@ offset_top = -14.0
offset_right = 13.5 offset_right = 13.5
offset_bottom = 14.0 offset_bottom = 14.0
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
script = ExtResource("13_4qkp8") script = ExtResource("28_e7l2l")
[node name="Down Button Sprite" type="Sprite2D" parent="UI"] [node name="Down Button Sprite" type="Sprite2D" parent="UI"]
texture_filter = 1 texture_filter = 1
@ -953,7 +958,7 @@ offset_top = -14.0
offset_right = 13.5 offset_right = 13.5
offset_bottom = 13.0 offset_bottom = 13.0
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
script = ExtResource("13_4qkp8") script = ExtResource("30_snioh")
[node name="Play Button Sprite" type="Sprite2D" parent="UI"] [node name="Play Button Sprite" type="Sprite2D" parent="UI"]
texture_filter = 1 texture_filter = 1
@ -983,7 +988,7 @@ offset_top = -14.0
offset_right = 13.5 offset_right = 13.5
offset_bottom = 14.0 offset_bottom = 14.0
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
script = ExtResource("13_4qkp8") script = ExtResource("33_052nx")
[node name="Left Button Sprite" type="Sprite2D" parent="UI"] [node name="Left Button Sprite" type="Sprite2D" parent="UI"]
texture_filter = 1 texture_filter = 1
@ -998,7 +1003,7 @@ offset_top = -14.0
offset_right = 13.5 offset_right = 13.5
offset_bottom = 14.0 offset_bottom = 14.0
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
script = ExtResource("13_4qkp8") script = ExtResource("35_sld5i")
[node name="Up Button Sprite" type="Sprite2D" parent="UI"] [node name="Up Button Sprite" type="Sprite2D" parent="UI"]
texture_filter = 1 texture_filter = 1
@ -1013,7 +1018,7 @@ offset_top = -14.0
offset_right = 13.5 offset_right = 13.5
offset_bottom = 14.0 offset_bottom = 14.0
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
script = ExtResource("13_4qkp8") script = ExtResource("36_ews5c")
[node name="Reseed Button" type="Panel" parent="UI"] [node name="Reseed Button" type="Panel" parent="UI"]
offset_left = 223.0 offset_left = 223.0

View file

@ -0,0 +1,5 @@
extends AcerolaPanel
func on_pressed() -> void:
GameMaster.move(Vector2i(1, 0))

View file

@ -0,0 +1 @@
uid://csran21uqb4ik

View file

@ -0,0 +1,5 @@
extends AcerolaPanel
func on_pressed() -> void:
GameMaster.move(Vector2i(0, 1))

View file

@ -0,0 +1 @@
uid://bjimcn3qcxim1

View file

@ -0,0 +1,4 @@
extends AcerolaPanel
func on_pressed() -> void:
GameMaster.cycle_zoom()

View file

@ -0,0 +1 @@
uid://3nx16dgm23ms

View file

@ -115,7 +115,7 @@ func _render_callback(p_effect_callback_type, p_render_data):
for view in range(render_scene_buffers.get_view_count()): for view in range(render_scene_buffers.get_view_count()):
# Pack the exposure vector into a byte array # Pack the exposure vector into a byte array
var uniform_array = PackedInt32Array(automaton.get_rule_ranges()) var uniform_array = PackedInt32Array(automaton.get_rule_ranges())
uniform_array.append_array([GameMaster.get_seed(), 1, 0, 0]) uniform_array.append_array([GameMaster.get_seed(), GameMaster.get_zoom_setting(), GameMaster.get_horizontal_offset(), GameMaster.get_vertical_offset()])
# ACompute handles uniform caching under the hood, as long as the exposure value doesn't change or the render target doesn't change, these functions will only do work once # ACompute handles uniform caching under the hood, as long as the exposure value doesn't change or the render target doesn't change, these functions will only do work once
exposure_compute.set_texture(0, world_texture) exposure_compute.set_texture(0, world_texture)

View file

@ -10,6 +10,11 @@ var needs_reseed : bool = true
var paused = false var paused = false
var zoom_setting = 0
var zoom_settings : Array = Array([1, 2, 4, 8])
var world_offset : Vector2i = Vector2i.ZERO
func _ready() -> void: func _ready() -> void:
active_automaton = Automaton.new() active_automaton = Automaton.new()
@ -48,4 +53,22 @@ func pause_automaton() -> void:
paused = !paused paused = !paused
func is_paused() -> bool: func is_paused() -> bool:
return paused return paused
func cycle_zoom() -> void:
zoom_setting += 1
if zoom_setting > zoom_settings.size() - 1: zoom_setting = 0
func get_zoom_setting() -> int:
return zoom_settings[zoom_setting]
func get_horizontal_offset() -> int:
return world_offset.x
func get_vertical_offset() -> int:
return world_offset.y
func move(v : Vector2i) -> void:
world_offset += v