From 812f5891af6cd02c08fc6b2dd91dc39cd49439db Mon Sep 17 00:00:00 2001 From: Luke Hubmayer-Werner Date: Sun, 24 Jan 2021 16:18:10 +1030 Subject: [PATCH] Decouple NoteHandler from InputHandler --- RadialGame.tscn | 8 +++++--- scripts/InputHandler.gd | 25 +++++++++++++++++++++---- scripts/NoteHandler.gd | 26 +++++++------------------- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/RadialGame.tscn b/RadialGame.tscn index 0644ed4..185bc04 100644 --- a/RadialGame.tscn +++ b/RadialGame.tscn @@ -28,7 +28,7 @@ shader_param/px = 0.00108696 shader_param/px2 = 0.00217391 shader_param/alpha = 1.0 -[sub_resource type="ArrayMesh" id=7] +[sub_resource type="ArrayMesh" id=2] surfaces/0 = { "aabb": AABB( -481.834, -481.834, 0, 963.667, 963.667, 0 ), "array_data": PoolByteArray( 0, 0, 220, 67, 0, 0, 0, 0, 166, 59, 0, 0, 177, 234, 240, 67, 0, 0, 0, 0, 48, 60, 0, 0, 95, 168, 216, 67, 118, 207, 152, 66, 137, 59, 80, 49, 183, 65, 237, 67, 202, 86, 167, 66, 32, 60, 210, 49, 125, 187, 206, 67, 38, 125, 22, 67, 48, 59, 60, 53, 64, 99, 226, 67, 249, 203, 36, 67, 223, 59, 187, 53, 141, 134, 190, 67, 0, 0, 92, 67, 160, 58, 166, 55, 217, 163, 208, 67, 177, 234, 112, 67, 65, 59, 48, 56, 159, 135, 168, 67, 204, 105, 141, 67, 220, 57, 235, 56, 142, 141, 184, 67, 186, 219, 154, 67, 107, 58, 98, 57, 204, 105, 141, 67, 159, 135, 168, 67, 235, 56, 220, 57, 186, 219, 154, 67, 142, 141, 184, 67, 98, 57, 107, 58, 0, 0, 92, 67, 141, 134, 190, 67, 166, 55, 160, 58, 177, 234, 112, 67, 217, 163, 208, 67, 48, 56, 65, 59, 38, 125, 22, 67, 125, 187, 206, 67, 60, 53, 48, 59, 249, 203, 36, 67, 64, 99, 226, 67, 187, 53, 223, 59, 118, 207, 152, 66, 95, 168, 216, 67, 80, 49, 137, 59, 202, 86, 167, 66, 183, 65, 237, 67, 210, 49, 32, 60, 141, 172, 242, 40, 0, 0, 220, 67, 0, 0, 166, 59, 143, 223, 4, 41, 177, 234, 240, 67, 0, 0, 48, 60, 118, 207, 152, 194, 95, 168, 216, 67, 80, 177, 137, 59, 202, 86, 167, 194, 183, 65, 237, 67, 210, 177, 32, 60, 38, 125, 22, 195, 125, 187, 206, 67, 60, 181, 48, 59, 249, 203, 36, 195, 64, 99, 226, 67, 187, 181, 223, 59, 0, 0, 92, 195, 141, 134, 190, 67, 166, 183, 160, 58, 177, 234, 112, 195, 217, 163, 208, 67, 48, 184, 65, 59, 204, 105, 141, 195, 159, 135, 168, 67, 235, 184, 220, 57, 186, 219, 154, 195, 142, 141, 184, 67, 98, 185, 107, 58, 159, 135, 168, 195, 204, 105, 141, 67, 220, 185, 235, 56, 142, 141, 184, 195, 186, 219, 154, 67, 107, 186, 98, 57, 141, 134, 190, 195, 0, 0, 92, 67, 160, 186, 166, 55, 217, 163, 208, 195, 177, 234, 112, 67, 65, 187, 48, 56, 125, 187, 206, 195, 38, 125, 22, 67, 48, 187, 60, 53, 64, 99, 226, 195, 249, 203, 36, 67, 223, 187, 187, 53, 95, 168, 216, 195, 118, 207, 152, 66, 137, 187, 80, 49, 183, 65, 237, 195, 202, 86, 167, 66, 32, 188, 210, 49, 0, 0, 220, 195, 141, 172, 114, 41, 166, 187, 0, 0, 177, 234, 240, 195, 143, 223, 132, 41, 48, 188, 0, 0, 95, 168, 216, 195, 118, 207, 152, 194, 137, 187, 80, 177, 183, 65, 237, 195, 202, 86, 167, 194, 32, 188, 210, 177, 125, 187, 206, 195, 38, 125, 22, 195, 48, 187, 60, 181, 64, 99, 226, 195, 249, 203, 36, 195, 223, 187, 187, 181, 141, 134, 190, 195, 0, 0, 92, 195, 160, 186, 166, 183, 217, 163, 208, 195, 177, 234, 112, 195, 65, 187, 48, 184, 159, 135, 168, 195, 204, 105, 141, 195, 220, 185, 235, 184, 142, 141, 184, 195, 186, 219, 154, 195, 107, 186, 98, 185, 204, 105, 141, 195, 159, 135, 168, 195, 235, 184, 220, 185, 186, 219, 154, 195, 142, 141, 184, 195, 98, 185, 107, 186, 0, 0, 92, 195, 141, 134, 190, 195, 166, 183, 160, 186, 177, 234, 112, 195, 217, 163, 208, 195, 48, 184, 65, 187, 38, 125, 22, 195, 125, 187, 206, 195, 60, 181, 48, 187, 249, 203, 36, 195, 64, 99, 226, 195, 187, 181, 223, 187, 118, 207, 152, 194, 95, 168, 216, 195, 80, 177, 137, 187, 202, 86, 167, 194, 183, 65, 237, 195, 210, 177, 32, 188, 106, 1, 182, 169, 0, 0, 220, 195, 0, 0, 166, 187, 87, 79, 199, 169, 177, 234, 240, 195, 0, 0, 48, 188, 118, 207, 152, 66, 95, 168, 216, 195, 80, 49, 137, 187, 202, 86, 167, 66, 183, 65, 237, 195, 210, 49, 32, 188, 38, 125, 22, 67, 125, 187, 206, 195, 60, 53, 48, 187, 249, 203, 36, 67, 64, 99, 226, 195, 187, 53, 223, 187, 0, 0, 92, 67, 141, 134, 190, 195, 166, 55, 160, 186, 177, 234, 112, 67, 217, 163, 208, 195, 48, 56, 65, 187, 204, 105, 141, 67, 159, 135, 168, 195, 235, 56, 220, 185, 186, 219, 154, 67, 142, 141, 184, 195, 98, 57, 107, 186, 159, 135, 168, 67, 204, 105, 141, 195, 220, 57, 235, 184, 142, 141, 184, 67, 186, 219, 154, 195, 107, 58, 98, 185, 141, 134, 190, 67, 0, 0, 92, 195, 160, 58, 166, 183, 217, 163, 208, 67, 177, 234, 112, 195, 65, 59, 48, 184, 125, 187, 206, 67, 38, 125, 22, 195, 48, 59, 60, 181, 64, 99, 226, 67, 249, 203, 36, 195, 223, 59, 187, 181, 95, 168, 216, 67, 118, 207, 152, 194, 137, 59, 80, 177, 183, 65, 237, 67, 202, 86, 167, 194, 32, 60, 210, 177, 0, 0, 220, 67, 0, 0, 0, 0, 166, 59, 0, 0, 177, 234, 240, 67, 0, 0, 0, 0, 48, 60, 0, 0 ), @@ -124,14 +124,13 @@ __meta__ = { [node name="Receptors" type="MeshInstance2D" parent="Center"] material = SubResource( 1 ) -mesh = SubResource( 7 ) +mesh = SubResource( 2 ) script = ExtResource( 9 ) [node name="Tween" type="Tween" parent="Center/Receptors"] [node name="NoteHandler" type="Node2D" parent="Center"] script = ExtResource( 8 ) -MusicPlayerPath = NodePath("") [node name="Viewport" type="Viewport" parent="Center/NoteHandler"] size = Vector2( 1080, 1080 ) @@ -185,3 +184,6 @@ script = ExtResource( 1 ) __meta__ = { "_edit_use_anchors_": false } + +[connection signal="column_pressed" from="InputHandler" to="Center/NoteHandler" method="_on_InputHandler_column_pressed"] +[connection signal="column_released" from="InputHandler" to="Center/NoteHandler" method="_on_InputHandler_column_released"] diff --git a/scripts/InputHandler.gd b/scripts/InputHandler.gd index 8695839..6e323ce 100644 --- a/scripts/InputHandler.gd +++ b/scripts/InputHandler.gd @@ -2,10 +2,12 @@ extends Control var buttons_pressed := PoolByteArray() var touchbuttons_pressed := PoolByteArray() -signal button_pressed(index) # Add int type to these once Godot supports typed signals -signal button_released(index) -signal touchbutton_pressed(index) -signal touchbutton_released(index) +signal button_pressed(column) # Add int type to these once Godot supports typed signals +signal button_released(column) +signal touchbutton_pressed(column) +signal touchbutton_released(column) +signal column_pressed(column) # This will trigger when either is pressed +signal column_released(column) # This will trigger when both are released const TOUCHBUTTON_MIN_DIST := 0.8 const TOUCHBUTTON_MAX_DIST := 1.075 const BUTTON_MIN_DIST := 0.925 @@ -20,6 +22,10 @@ func _init(): for i in Rules.COLS: buttons_pressed[i] = 0 touchbuttons_pressed[i] = 0 + connect('button_pressed', self, '_on_button_pressed') + connect('touchbutton_pressed', self, '_on_button_pressed') + connect('button_released', self, '_on_button_released') + connect('touchbutton_released', self, '_on_touchbutton_released') func print_pressed(col: int): print('Pressed %d'%col) @@ -68,3 +74,14 @@ func set_touchbutton_state(index: int, state: bool): -1: emit_signal('touchbutton_released', index) touchbuttons_pressed[index] = new_state + +func _on_button_pressed(column: int): + emit_signal('column_pressed', column) + +func _on_button_released(column: int): + if touchbuttons_pressed[column] == 0: + emit_signal('column_released', column) + +func _on_touchbutton_released(column: int): + if buttons_pressed[column] == 0: + emit_signal('column_released', column) diff --git a/scripts/NoteHandler.gd b/scripts/NoteHandler.gd index f043410..f8a5ef5 100644 --- a/scripts/NoteHandler.gd +++ b/scripts/NoteHandler.gd @@ -7,12 +7,9 @@ signal finished_song(song_key, score_data) var running := false var song_key = '' -export var MusicPlayerPath := @'../../music' export var VideoPlayerPath := @'../../video' -export var InputHandlerPath := @'../../InputHandler' onready var MusicPlayer := SFXPlayer.music_player onready var VideoPlayer := get_node(VideoPlayerPath) -onready var InputHandler := get_node(InputHandlerPath) onready var Painter = $Painter onready var SlideTrailHandler = $'Viewport/Center/SlideTrailHandler' @@ -257,8 +254,6 @@ func button_pressed(col): if -hit_delta <= Rules.JUDGEMENT_TIMES_PRE[i]: activate_note(note, -i) return -func touchbutton_pressed(col): - button_pressed(col) func do_hold_release(note): @@ -299,15 +294,6 @@ func check_hold_release(col): if note.is_held == true: do_hold_release(note) # Separate function since there's no need to 'consume' releases -func button_released(col): - # We only care about hold release. - # For that particular case, we want both to be unheld. - if InputHandler.touchbuttons_pressed[col] == 0: - check_hold_release(col) -func touchbutton_released(col): - if InputHandler.buttons_pressed[col] == 0: - check_hold_release(col) - #---------------------------------------------------------------------------------------------------------------------------------------------- const arr_div := Vector3(2.0, float(Rules.COLS), TAU) func _draw(): @@ -471,11 +457,6 @@ func _ready(): noteline_array_image.fill(Color(0.0, 0.0, 0.0)) # Format: first 15 rows are for hit events, last row is for releases only (no ring glow) - InputHandler.connect('button_pressed', self, 'button_pressed') - InputHandler.connect('touchbutton_pressed', self, 'touchbutton_pressed') - InputHandler.connect('button_released', self, 'button_released') - InputHandler.connect('touchbutton_released', self, 'touchbutton_released') - meshinstance.material.set_shader_param('star_color', GameTheme.COLOR_STAR) meshinstance.material.set_shader_param('held_color', GameTheme.COLOR_HOLD_HELD) meshinstance.material.set_shader_param('bps', bpm/60.0) @@ -648,3 +629,10 @@ func _process(delta): meshinstance.material.set_shader_param('screen_size', get_viewport().get_size()) update() Painter.update() + + +func _on_InputHandler_column_pressed(column) -> void: + button_pressed(column) + +func _on_InputHandler_column_released(column) -> void: + check_hold_release(column)