lobby: wire character sheet form — archetypes, modifier spinboxes, auto-sync RPC
This commit is contained in:
@@ -3,6 +3,63 @@ extends Node3D
|
||||
var _local_role: String = ""
|
||||
var _pending_player_name: String = ""
|
||||
|
||||
const ARCHETYPES := {
|
||||
"Krieger": {"race": "Mensch", "class": "Krieger", "STR": 3, "DEX": 1, "CON": 2, "INT": 0, "WIS": 0, "CHA": 0},
|
||||
"Magier": {"race": "Elf", "class": "Magier", "STR":-1, "DEX": 2, "CON": 0, "INT": 4, "WIS": 2, "CHA": 1},
|
||||
"Kleriker": {"race": "Zwerg", "class": "Kleriker", "STR": 1, "DEX": 0, "CON": 2, "INT": 1, "WIS": 3, "CHA": 0},
|
||||
"Schurke": {"race": "Halbelf", "class": "Schurke", "STR": 0, "DEX": 4, "CON": 1, "INT": 1, "WIS": 1, "CHA": 2},
|
||||
"Druide": {"race": "Mensch", "class": "Druide", "STR": 0, "DEX": 1, "CON": 1, "INT": 1, "WIS": 3, "CHA": 0},
|
||||
"Barbar": {"race": "Halbork", "class": "Barbar", "STR": 4, "DEX": 2, "CON": 3, "INT":-1, "WIS": 0, "CHA":-1},
|
||||
}
|
||||
|
||||
func _collect_char_data() -> Dictionary:
|
||||
var race_opt := $CanvasLayer/WaitPanel/CharSheet/CharGrid/RaceOption as OptionButton
|
||||
var class_opt := $CanvasLayer/WaitPanel/CharSheet/CharGrid/ClassOption as OptionButton
|
||||
return {
|
||||
"race": race_opt.get_item_text(race_opt.selected),
|
||||
"class": class_opt.get_item_text(class_opt.selected),
|
||||
"STR": int($CanvasLayer/WaitPanel/CharSheet/ModGrid/SpinSTR.value),
|
||||
"DEX": int($CanvasLayer/WaitPanel/CharSheet/ModGrid/SpinDEX.value),
|
||||
"CON": int($CanvasLayer/WaitPanel/CharSheet/ModGrid/SpinCON.value),
|
||||
"INT": int($CanvasLayer/WaitPanel/CharSheet/ModGrid/SpinINT.value),
|
||||
"WIS": int($CanvasLayer/WaitPanel/CharSheet/ModGrid/SpinWIS.value),
|
||||
"CHA": int($CanvasLayer/WaitPanel/CharSheet/ModGrid/SpinCHA.value),
|
||||
}
|
||||
|
||||
func _send_char_data() -> void:
|
||||
NetworkManager.request_update_character.rpc_id(1, _collect_char_data())
|
||||
|
||||
func _setup_char_sheet() -> void:
|
||||
var race_opt := $CanvasLayer/WaitPanel/CharSheet/CharGrid/RaceOption as OptionButton
|
||||
var class_opt := $CanvasLayer/WaitPanel/CharSheet/CharGrid/ClassOption as OptionButton
|
||||
for race in ["Mensch", "Elf", "Zwerg", "Halbork", "Halbelf", "Tiefling"]:
|
||||
race_opt.add_item(race)
|
||||
for cls in ["Krieger", "Magier", "Kleriker", "Schurke", "Druide", "Barbar"]:
|
||||
class_opt.add_item(cls)
|
||||
for archetype_name: String in ARCHETYPES:
|
||||
var btn := $CanvasLayer/WaitPanel/CharSheet/ArchetypeRow.get_node(
|
||||
NodePath("Btn" + archetype_name)) as Button
|
||||
var preset: Dictionary = ARCHETYPES[archetype_name]
|
||||
btn.pressed.connect(func():
|
||||
var r_opt := $CanvasLayer/WaitPanel/CharSheet/CharGrid/RaceOption as OptionButton
|
||||
var c_opt := $CanvasLayer/WaitPanel/CharSheet/CharGrid/ClassOption as OptionButton
|
||||
for i in r_opt.item_count:
|
||||
if r_opt.get_item_text(i) == preset["race"]:
|
||||
r_opt.selected = i
|
||||
for i in c_opt.item_count:
|
||||
if c_opt.get_item_text(i) == preset["class"]:
|
||||
c_opt.selected = i
|
||||
for stat: String in ["STR", "DEX", "CON", "INT", "WIS", "CHA"]:
|
||||
($CanvasLayer/WaitPanel/CharSheet/ModGrid.get_node(
|
||||
NodePath("Spin" + stat)) as SpinBox).value = preset[stat]
|
||||
_send_char_data()
|
||||
)
|
||||
for spin_name: String in ["SpinSTR", "SpinDEX", "SpinCON", "SpinINT", "SpinWIS", "SpinCHA"]:
|
||||
($CanvasLayer/WaitPanel/CharSheet/ModGrid.get_node(NodePath(spin_name)) as SpinBox
|
||||
).value_changed.connect(func(_v: float): _send_char_data())
|
||||
(race_opt as OptionButton).item_selected.connect(func(_i: int): _send_char_data())
|
||||
(class_opt as OptionButton).item_selected.connect(func(_i: int): _send_char_data())
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
$CanvasLayer/JoinPanel/RoleOption.add_item("Spieler")
|
||||
@@ -16,6 +73,7 @@ func _ready() -> void:
|
||||
NetworkManager.player_joined.connect(_on_player_joined)
|
||||
NetworkManager.player_left.connect(_on_player_left)
|
||||
NetworkManager.player_list_synced.connect(_rebuild_player_list)
|
||||
_setup_char_sheet()
|
||||
|
||||
|
||||
func _on_join_pressed() -> void:
|
||||
@@ -32,6 +90,7 @@ func _on_connected() -> void:
|
||||
$CanvasLayer/JoinPanel.visible = false
|
||||
$CanvasLayer/WaitPanel.visible = true
|
||||
$CanvasLayer/WaitPanel/StartButton.visible = (_local_role == "dm")
|
||||
$CanvasLayer/WaitPanel/CharSheet.visible = true
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
|
||||
Reference in New Issue
Block a user