refactor pressing and position handling

This commit is contained in:
Teatov 2025-07-30 14:56:15 +10:00
parent 1a407859e3
commit 5e5c71d2d1
4 changed files with 43 additions and 27 deletions

View File

@ -2,4 +2,4 @@
[resource]
albedo_color = Color(0.125911, 0.125911, 0.125911, 1)
roughness = 0.5
roughness = 0.6

View File

@ -20,7 +20,6 @@ _input_label = NodePath("InputLabel")
_layout_label = NodePath("LayoutLabel")
[node name="InputLabel" type="RichTextLabel" parent="."]
visible = false
layout_mode = 1
anchors_preset = 13
anchor_left = 0.5

View File

@ -114,16 +114,9 @@ func _unhandled_input(event: InputEvent) -> void:
):
return
_is_pressed = event_key.is_pressed()
_set_pressing(event_key.is_pressed())
if _is_pressed:
_play_sfx(_press_sfx)
else:
_play_sfx(_release_sfx)
keyboard.pressed_positions[_default_position] = _is_pressed
if LayoutConfig.is_configuring and _is_pressed:
if LayoutConfig.is_configuring and event_key.is_pressed():
if not keyboard.alt_layout:
if not event_key.shift_pressed:
_input_event_main = event_key
@ -138,12 +131,19 @@ func _unhandled_input(event: InputEvent) -> void:
_set_labels()
func _exit_tree() -> void:
_set_keyboard_pressed_position(false)
#endregion
#region public
func load_props(_props: KeyProps, default_position: Vector3) -> void:
_set_keyboard_pressed_position(false)
_default_position = default_position
if _is_pressed:
_set_keyboard_pressed_position(true)
if props:
_props.chars_from_dict(props.chars_to_dict())
@ -157,6 +157,31 @@ func load_props(_props: KeyProps, default_position: Vector3) -> void:
#endregion
#region pressing
func _set_pressing(new_is_pressed: bool) -> void:
if _is_pressed == new_is_pressed:
return
_is_pressed = new_is_pressed
_set_keyboard_pressed_position(_is_pressed)
if _is_pressed:
_play_sfx(_press_sfx)
else:
_play_sfx(_release_sfx)
func _set_keyboard_pressed_position(pressed: bool) -> void:
if pressed:
keyboard.pressed_positions[_default_position] = pressed
else:
keyboard.pressed_positions.erase(_default_position)
#endregion
#region labels
func _set_labels() -> void:
_upper_left_label.text = ""
@ -318,4 +343,5 @@ func _animate_light(delta: float) -> void:
#region sounds
func _play_sfx(stream: AudioStream) -> void:
_polyphonic.play_stream(stream)
#endregion

View File

@ -99,9 +99,7 @@ func _generate_row(
var key_pos := _get_row_key_starting_pos(row_index, rows_amount, row_width)
for key_props in row:
var key_default_pos := Vector3(
key_pos.x + _get_row_key_pos_offset(key_props), key_pos.y, key_pos.z
)
var key_default_pos := _get_row_key_pos_with_offset(key_pos, key_props)
var game_key := GameKey.instantiate_with_props(key_props, key_default_pos, self)
_keys_holder.add_child(game_key, true)
@ -142,8 +140,9 @@ func _get_row_key_starting_pos(
return Vector3(key_pos_x, 0, key_pos_z)
func _get_row_key_pos_offset(key_props: KeyProps) -> float:
return (key_size * key_props.width - key_size) / 2 + key_size * key_props.x
func _get_row_key_pos_with_offset(key_pos: Vector3, key_props: KeyProps) -> Vector3:
key_pos.x += (key_size * key_props.width - key_size) / 2 + key_size * key_props.x
return key_pos
func _get_row_key_step(key_props: KeyProps) -> float:
@ -167,6 +166,7 @@ func _swap_layout(kp_key: Key) -> void:
LayoutConfig.swap_layout(LayoutPlanck.name_static())
else:
return
_regenerate_keys(LayoutConfig.layout_rows)
_play_sfx(_layout_swap_sfx)
@ -209,18 +209,12 @@ func _regenerate_row(
var key_pos := _get_row_key_starting_pos(row_index, rows_amount, row_width)
for key_props in row:
var key_default_pos := Vector3(
key_pos.x + (key_size * key_props.width - key_size) / 2,
key_pos.y,
key_pos.z
)
var key_default_pos := _get_row_key_pos_with_offset(key_pos, key_props)
var dict_key := Vector2i(key_props.physical_keycode, key_props.location)
if current_keys.has(dict_key):
var game_key := current_keys[dict_key]
game_key.load_props(key_props, key_default_pos)
game_key._default_position = Vector3(
key_pos.x + _get_row_key_pos_offset(key_props), key_pos.y, key_pos.z
)
current_keys.erase(dict_key)
else:
if config:
@ -233,9 +227,6 @@ func _regenerate_row(
var game_key := GameKey.instantiate_with_props(
key_props, key_default_pos, self
)
game_key.position = Vector3(
key_pos.x + _get_row_key_pos_offset(key_props), key_pos.y, key_pos.z
)
_keys_holder.add_child(game_key, true)
key_pos.x += _get_row_key_step(key_props)