diff --git a/resources/materials/key_mat.tres b/resources/materials/key_mat.tres index 3a0dd20..534966b 100644 --- a/resources/materials/key_mat.tres +++ b/resources/materials/key_mat.tres @@ -2,4 +2,4 @@ [resource] albedo_color = Color(0.125911, 0.125911, 0.125911, 1) -roughness = 0.5 +roughness = 0.6 diff --git a/scenes/debug_key_display.tscn b/scenes/debug_key_display.tscn index a34eaf0..f547a3b 100644 --- a/scenes/debug_key_display.tscn +++ b/scenes/debug_key_display.tscn @@ -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 diff --git a/scripts/game_key.gd b/scripts/game_key.gd index 2276062..6de1b31 100644 --- a/scripts/game_key.gd +++ b/scripts/game_key.gd @@ -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 diff --git a/scripts/game_keyboard.gd b/scripts/game_keyboard.gd index 83d4914..dfbdc2e 100644 --- a/scripts/game_keyboard.gd +++ b/scripts/game_keyboard.gd @@ -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)