refactor pressing and position handling
This commit is contained in:
parent
1a407859e3
commit
5e5c71d2d1
@ -2,4 +2,4 @@
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(0.125911, 0.125911, 0.125911, 1)
|
||||
roughness = 0.5
|
||||
roughness = 0.6
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user