44 lines
1.2 KiB
GDScript
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
|