refactor pressing and position handling
This commit is contained in:
parent
1a407859e3
commit
5e5c71d2d1
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
albedo_color = Color(0.125911, 0.125911, 0.125911, 1)
|
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")
|
_layout_label = NodePath("LayoutLabel")
|
||||||
|
|
||||||
[node name="InputLabel" type="RichTextLabel" parent="."]
|
[node name="InputLabel" type="RichTextLabel" parent="."]
|
||||||
visible = false
|
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 13
|
anchors_preset = 13
|
||||||
anchor_left = 0.5
|
anchor_left = 0.5
|
||||||
|
|||||||
@ -114,16 +114,9 @@ func _unhandled_input(event: InputEvent) -> void:
|
|||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
_is_pressed = event_key.is_pressed()
|
_set_pressing(event_key.is_pressed())
|
||||||
|
|
||||||
if _is_pressed:
|
if LayoutConfig.is_configuring and event_key.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 not keyboard.alt_layout:
|
if not keyboard.alt_layout:
|
||||||
if not event_key.shift_pressed:
|
if not event_key.shift_pressed:
|
||||||
_input_event_main = event_key
|
_input_event_main = event_key
|
||||||
@ -138,12 +131,19 @@ func _unhandled_input(event: InputEvent) -> void:
|
|||||||
_set_labels()
|
_set_labels()
|
||||||
|
|
||||||
|
|
||||||
|
func _exit_tree() -> void:
|
||||||
|
_set_keyboard_pressed_position(false)
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region public
|
#region public
|
||||||
func load_props(_props: KeyProps, default_position: Vector3) -> void:
|
func load_props(_props: KeyProps, default_position: Vector3) -> void:
|
||||||
|
_set_keyboard_pressed_position(false)
|
||||||
_default_position = default_position
|
_default_position = default_position
|
||||||
|
if _is_pressed:
|
||||||
|
_set_keyboard_pressed_position(true)
|
||||||
|
|
||||||
if props:
|
if props:
|
||||||
_props.chars_from_dict(props.chars_to_dict())
|
_props.chars_from_dict(props.chars_to_dict())
|
||||||
@ -157,6 +157,31 @@ func load_props(_props: KeyProps, default_position: Vector3) -> void:
|
|||||||
#endregion
|
#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
|
#region labels
|
||||||
func _set_labels() -> void:
|
func _set_labels() -> void:
|
||||||
_upper_left_label.text = ""
|
_upper_left_label.text = ""
|
||||||
@ -318,4 +343,5 @@ func _animate_light(delta: float) -> void:
|
|||||||
#region sounds
|
#region sounds
|
||||||
func _play_sfx(stream: AudioStream) -> void:
|
func _play_sfx(stream: AudioStream) -> void:
|
||||||
_polyphonic.play_stream(stream)
|
_polyphonic.play_stream(stream)
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@ -99,9 +99,7 @@ func _generate_row(
|
|||||||
var key_pos := _get_row_key_starting_pos(row_index, rows_amount, row_width)
|
var key_pos := _get_row_key_starting_pos(row_index, rows_amount, row_width)
|
||||||
|
|
||||||
for key_props in row:
|
for key_props in row:
|
||||||
var key_default_pos := Vector3(
|
var key_default_pos := _get_row_key_pos_with_offset(key_pos, key_props)
|
||||||
key_pos.x + _get_row_key_pos_offset(key_props), key_pos.y, key_pos.z
|
|
||||||
)
|
|
||||||
var game_key := GameKey.instantiate_with_props(key_props, key_default_pos, self)
|
var game_key := GameKey.instantiate_with_props(key_props, key_default_pos, self)
|
||||||
_keys_holder.add_child(game_key, true)
|
_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)
|
return Vector3(key_pos_x, 0, key_pos_z)
|
||||||
|
|
||||||
|
|
||||||
func _get_row_key_pos_offset(key_props: KeyProps) -> float:
|
func _get_row_key_pos_with_offset(key_pos: Vector3, key_props: KeyProps) -> Vector3:
|
||||||
return (key_size * key_props.width - key_size) / 2 + key_size * key_props.x
|
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:
|
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())
|
LayoutConfig.swap_layout(LayoutPlanck.name_static())
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
_regenerate_keys(LayoutConfig.layout_rows)
|
_regenerate_keys(LayoutConfig.layout_rows)
|
||||||
_play_sfx(_layout_swap_sfx)
|
_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)
|
var key_pos := _get_row_key_starting_pos(row_index, rows_amount, row_width)
|
||||||
|
|
||||||
for key_props in row:
|
for key_props in row:
|
||||||
var key_default_pos := Vector3(
|
var key_default_pos := _get_row_key_pos_with_offset(key_pos, key_props)
|
||||||
key_pos.x + (key_size * key_props.width - key_size) / 2,
|
|
||||||
key_pos.y,
|
|
||||||
key_pos.z
|
|
||||||
)
|
|
||||||
var dict_key := Vector2i(key_props.physical_keycode, key_props.location)
|
var dict_key := Vector2i(key_props.physical_keycode, key_props.location)
|
||||||
|
|
||||||
if current_keys.has(dict_key):
|
if current_keys.has(dict_key):
|
||||||
var game_key := current_keys[dict_key]
|
var game_key := current_keys[dict_key]
|
||||||
game_key.load_props(key_props, key_default_pos)
|
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)
|
current_keys.erase(dict_key)
|
||||||
else:
|
else:
|
||||||
if config:
|
if config:
|
||||||
@ -233,9 +227,6 @@ func _regenerate_row(
|
|||||||
var game_key := GameKey.instantiate_with_props(
|
var game_key := GameKey.instantiate_with_props(
|
||||||
key_props, key_default_pos, self
|
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)
|
_keys_holder.add_child(game_key, true)
|
||||||
|
|
||||||
key_pos.x += _get_row_key_step(key_props)
|
key_pos.x += _get_row_key_step(key_props)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user