keebie/scripts/game_keyboard.gd

44 lines
1.2 KiB
GDScript

class_name GameKeyboard extends Node3D
@export var _game_key_scene: PackedScene
@export var _key_size: float = 0.25
@export var _key_gap: float = 0.1
func _ready() -> void:
_generate_keys()
func _generate_keys() -> void:
var layout_rows := LayoutAnsi.rows()
var rows_amount := layout_rows.size()
for i in range(rows_amount):
var row_keys := layout_rows[i] as Array[KeyProps]
_generate_row(row_keys as Array[KeyProps], i, rows_amount)
func _generate_row(keys: Array[KeyProps], row_index: int, rows_amount: int) -> void:
var keys_amount: int = keys.size()
var offset_x: float = (
((keys_amount - 1) * _key_size + (keys_amount - 1) * _key_gap) / 2
)
var offset_z: float = (
((rows_amount - 1) * _key_size + (rows_amount - 1) * _key_gap) / 2
)
var key_pos_x: float = -offset_x
var key_pos_z: float = row_index * _key_size + row_index * _key_gap - offset_z
for key_props in keys:
var game_key_node := _game_key_scene.instantiate()
add_child(game_key_node)
game_key_node.position.x = (
key_pos_x + (_key_size * key_props.width_ratio - _key_size) / 2
)
game_key_node.position.z = key_pos_z
key_pos_x += _key_size * key_props.width_ratio + _key_gap