diff --git a/scenes/ui/ability_container.tscn b/scenes/ui/ability_container.tscn index dc60156..e703f50 100644 --- a/scenes/ui/ability_container.tscn +++ b/scenes/ui/ability_container.tscn @@ -11,5 +11,21 @@ layout_mode = 2 size_flags_horizontal = 3 text = "AbilityName: " -[node name="AbilityScore" type="OptionButton" parent="." unique_id=1479575024] +[node name="AbilityScoreBox" type="SpinBox" parent="." unique_id=380291644] layout_mode = 2 +min_value = 1.0 +max_value = 20.0 +value = 7.0 +alignment = 1 + +[node name="ModifierLabel" type="Label" parent="." unique_id=607373909] +layout_mode = 2 +text = "Mod: " + +[node name="ModifierBox" type="SpinBox" parent="." unique_id=1458861204] +layout_mode = 2 +size_flags_horizontal = 3 +min_value = -5.0 +max_value = 10.0 +alignment = 1 +editable = false diff --git a/scenes/ui/character_creator.tscn b/scenes/ui/character_creator.tscn index 4a03d53..aaf0bcc 100644 --- a/scenes/ui/character_creator.tscn +++ b/scenes/ui/character_creator.tscn @@ -12,90 +12,143 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_humxe") -[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=830349662] -layout_mode = 0 -offset_right = 40.0 -offset_bottom = 40.0 +[node name="CenterContainer" type="CenterContainer" parent="." unique_id=926782341] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 -[node name="TitleLabel" type="Label" parent="VBoxContainer" unique_id=1313428113] +[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer" unique_id=830349662] +layout_mode = 2 + +[node name="TitleLabel" type="Label" parent="CenterContainer/VBoxContainer" unique_id=1313428113] layout_mode = 2 theme_override_font_sizes/font_size = 64 -text = "Character/Player Creation" +text = "Player Creation" +horizontal_alignment = 1 -[node name="HSeparator" type="HSeparator" parent="VBoxContainer" unique_id=1671161209] +[node name="HSeparator" type="HSeparator" parent="CenterContainer/VBoxContainer" unique_id=1671161209] layout_mode = 2 -[node name="VitalsSection" type="VBoxContainer" parent="VBoxContainer" unique_id=1979705440] +[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/VBoxContainer" unique_id=528245991] layout_mode = 2 -[node name="SectionLabelVitals" type="Label" parent="VBoxContainer/VitalsSection" unique_id=361033131] +[node name="VitalsSection" type="VBoxContainer" parent="CenterContainer/VBoxContainer/HBoxContainer" unique_id=1979705440] +custom_minimum_size = Vector2(300, 0) +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="SectionLabelVitals" type="Label" parent="CenterContainer/VBoxContainer/HBoxContainer/VitalsSection" unique_id=361033131] layout_mode = 2 theme_override_font_sizes/font_size = 32 text = "Vitals" horizontal_alignment = 1 -[node name="CharacterNameField" type="HBoxContainer" parent="VBoxContainer/VitalsSection" unique_id=1144305927] +[node name="CharacterNameField" type="HBoxContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/VitalsSection" unique_id=1144305927] layout_mode = 2 -[node name="CharacterNameLabel" type="Label" parent="VBoxContainer/VitalsSection/CharacterNameField" unique_id=377396273] +[node name="CharacterNameLabel" type="Label" parent="CenterContainer/VBoxContainer/HBoxContainer/VitalsSection/CharacterNameField" unique_id=377396273] layout_mode = 2 text = "Name: " -[node name="CharacterNameEntry" type="LineEdit" parent="VBoxContainer/VitalsSection/CharacterNameField" unique_id=768350209] +[node name="CharacterNameEntry" type="LineEdit" parent="CenterContainer/VBoxContainer/HBoxContainer/VitalsSection/CharacterNameField" unique_id=768350209] layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "Shaq the Enormous" -[node name="CharacterClassField" type="HBoxContainer" parent="VBoxContainer/VitalsSection" unique_id=285886400] +[node name="CharacterClassField" type="HBoxContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/VitalsSection" unique_id=285886400] layout_mode = 2 -[node name="CharacterClassLabel" type="Label" parent="VBoxContainer/VitalsSection/CharacterClassField" unique_id=1412992125] +[node name="CharacterClassLabel" type="Label" parent="CenterContainer/VBoxContainer/HBoxContainer/VitalsSection/CharacterClassField" unique_id=1412992125] layout_mode = 2 text = "Class: " -[node name="CharacterClassOptions" type="OptionButton" parent="VBoxContainer/VitalsSection/CharacterClassField" unique_id=1792788958] +[node name="CharacterClassOptions" type="OptionButton" parent="CenterContainer/VBoxContainer/HBoxContainer/VitalsSection/CharacterClassField" unique_id=1792788958] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 -[node name="HSeparator2" type="HSeparator" parent="VBoxContainer" unique_id=2049688047] +[node name="AbilitiesSection" type="VBoxContainer" parent="CenterContainer/VBoxContainer/HBoxContainer" unique_id=8891070] layout_mode = 2 -[node name="AbilitiesSection" type="VBoxContainer" parent="VBoxContainer" unique_id=8891070] -layout_mode = 2 - -[node name="SectionLabelAbilities" type="Label" parent="VBoxContainer/AbilitiesSection" unique_id=1587217776] +[node name="SectionLabelAbilities" type="Label" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection" unique_id=1587217776] layout_mode = 2 theme_override_font_sizes/font_size = 32 text = "Abilities" horizontal_alignment = 1 -[node name="AbilitiesGrid" type="GridContainer" parent="VBoxContainer/AbilitiesSection" unique_id=650359354] +[node name="Titles" type="HBoxContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection" unique_id=370884680] +layout_mode = 2 + +[node name="PhysicalAbilitiesTitle" type="Label" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/Titles" unique_id=200817169] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_font_sizes/font_size = 24 +text = "Physical" +horizontal_alignment = 1 + +[node name="MentalAbilitiesTitle" type="Label" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/Titles" unique_id=896416382] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_font_sizes/font_size = 24 +text = "Mental" +horizontal_alignment = 1 + +[node name="AbilitiesGrid" type="HBoxContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection" unique_id=1451988317] unique_name_in_owner = true layout_mode = 2 -columns = 2 -[node name="AbilityContainer" parent="VBoxContainer/AbilitiesSection/AbilitiesGrid" unique_id=711596663 instance=ExtResource("2_50a5s")] +[node name="PhysicalAbilities" type="VBoxContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/AbilitiesGrid" unique_id=70778278] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="STRContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/AbilitiesGrid/PhysicalAbilities" unique_id=711596663 groups=["ability_containers"] instance=ExtResource("2_50a5s")] +layout_mode = 2 +tooltip_text = "Strength" +ability_name = "STR" +ability_score = 14 + +[node name="DEXContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/AbilitiesGrid/PhysicalAbilities" unique_id=875091191 groups=["ability_containers"] instance=ExtResource("2_50a5s")] +layout_mode = 2 +tooltip_text = "Dexterity" +ability_name = "DEX" +ability_score = 13 + +[node name="CONContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/AbilitiesGrid/PhysicalAbilities" unique_id=148762443 groups=["ability_containers"] instance=ExtResource("2_50a5s")] +layout_mode = 2 +tooltip_text = "Constitution" +ability_name = "CON" +ability_score = 12 + +[node name="VSeparator" type="VSeparator" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/AbilitiesGrid" unique_id=288608324] layout_mode = 2 -[node name="AbilityContainer2" parent="VBoxContainer/AbilitiesSection/AbilitiesGrid" unique_id=875091191 instance=ExtResource("2_50a5s")] +[node name="MentalAbilities" type="VBoxContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/AbilitiesGrid" unique_id=1265879662] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="INTContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/AbilitiesGrid/MentalAbilities" unique_id=742929374 groups=["ability_containers"] instance=ExtResource("2_50a5s")] +layout_mode = 2 +tooltip_text = "Intelligence" +ability_name = "INT" +ability_score = 8 + +[node name="WISContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/AbilitiesGrid/MentalAbilities" unique_id=1462506418 groups=["ability_containers"] instance=ExtResource("2_50a5s")] +layout_mode = 2 +tooltip_text = "Wisdom" +ability_name = "WIS" +ability_score = 11 + +[node name="CHAContainer" parent="CenterContainer/VBoxContainer/HBoxContainer/AbilitiesSection/AbilitiesGrid/MentalAbilities" unique_id=113539656 groups=["ability_containers"] instance=ExtResource("2_50a5s")] +layout_mode = 2 +tooltip_text = "Charisma" +ability_name = "CHA" + +[node name="HSeparator3" type="HSeparator" parent="CenterContainer/VBoxContainer" unique_id=1942684785] layout_mode = 2 -[node name="AbilityContainer3" parent="VBoxContainer/AbilitiesSection/AbilitiesGrid" unique_id=148762443 instance=ExtResource("2_50a5s")] -layout_mode = 2 - -[node name="AbilityContainer4" parent="VBoxContainer/AbilitiesSection/AbilitiesGrid" unique_id=742929374 instance=ExtResource("2_50a5s")] -layout_mode = 2 - -[node name="AbilityContainer5" parent="VBoxContainer/AbilitiesSection/AbilitiesGrid" unique_id=1462506418 instance=ExtResource("2_50a5s")] -layout_mode = 2 - -[node name="AbilityContainer6" parent="VBoxContainer/AbilitiesSection/AbilitiesGrid" unique_id=113539656 instance=ExtResource("2_50a5s")] -layout_mode = 2 - -[node name="HSeparator3" type="HSeparator" parent="VBoxContainer" unique_id=1942684785] -layout_mode = 2 - -[node name="FinishButton" type="Button" parent="VBoxContainer" unique_id=586398404] +[node name="FinishButton" type="Button" parent="CenterContainer/VBoxContainer" unique_id=586398404] layout_mode = 2 text = "Finish" diff --git a/scripts/autoloads/classes.gd b/scripts/autoloads/classes.gd index 56c3b87..7a77ed1 100644 --- a/scripts/autoloads/classes.gd +++ b/scripts/autoloads/classes.gd @@ -40,7 +40,7 @@ var class_info: Dictionary[CharacterClass, Dictionary] = { } }, CharacterClass.BARD: { - "known_for": "Razzle-dazzle", + "known_for": "Performance", "primary_abilities": [ Abilities.Ability.CHARISMA ], @@ -75,7 +75,7 @@ var class_info: Dictionary[CharacterClass, Dictionary] = { } }, CharacterClass.CLERIC: { - "known_for": "Devotion", + "known_for": "Miracles", "primary_abilities": [ Abilities.Ability.WISDOM ], @@ -97,7 +97,7 @@ var class_info: Dictionary[CharacterClass, Dictionary] = { } }, CharacterClass.DRUID: { - "known_for": "Vibes", + "known_for": "Primal power; vibes", "primary_abilities": [ Abilities.Ability.WISDOM ], @@ -122,123 +122,123 @@ var class_info: Dictionary[CharacterClass, Dictionary] = { }, }, CharacterClass.FIGHTER: { - "known_for": "...fighting?", + "known_for": "Fighting", "primary_abilities": [], "primary_abilities_number_to_choose": 1, "skill_proficiencies": [], "skill_proficiencies_number_to_choose": 1, "default_ability_scores": { - Abilities.Ability.STRENGTH: 1, - Abilities.Ability.DEXTERITY: 1, - Abilities.Ability.CONSTITUTION: 1, - Abilities.Ability.INTELLIGENCE: 1, - Abilities.Ability.WISDOM: 1, - Abilities.Ability.CHARISMA: 1, + Abilities.Ability.STRENGTH: 15, + Abilities.Ability.DEXTERITY: 14, + Abilities.Ability.CONSTITUTION: 13, + Abilities.Ability.INTELLIGENCE: 8, + Abilities.Ability.WISDOM: 10, + Abilities.Ability.CHARISMA: 12, }, }, CharacterClass.MONK: { - "known_for": "", + "known_for": "Focus; Tim Duncan", "primary_abilities": [], "primary_abilities_number_to_choose": 1, "skill_proficiencies": [], "skill_proficiencies_number_to_choose": 1, "default_ability_scores": { - Abilities.Ability.STRENGTH: 1, - Abilities.Ability.DEXTERITY: 1, - Abilities.Ability.CONSTITUTION: 1, - Abilities.Ability.INTELLIGENCE: 1, - Abilities.Ability.WISDOM: 1, - Abilities.Ability.CHARISMA: 1, + Abilities.Ability.STRENGTH: 12, + Abilities.Ability.DEXTERITY: 15, + Abilities.Ability.CONSTITUTION: 13, + Abilities.Ability.INTELLIGENCE: 10, + Abilities.Ability.WISDOM: 14, + Abilities.Ability.CHARISMA: 8, }, }, CharacterClass.PALADIN: { - "known_for": "", + "known_for": "Devotion", "primary_abilities": [], "primary_abilities_number_to_choose": 1, "skill_proficiencies": [], "skill_proficiencies_number_to_choose": 1, "default_ability_scores": { - Abilities.Ability.STRENGTH: 1, - Abilities.Ability.DEXTERITY: 1, - Abilities.Ability.CONSTITUTION: 1, - Abilities.Ability.INTELLIGENCE: 1, - Abilities.Ability.WISDOM: 1, - Abilities.Ability.CHARISMA: 1, + Abilities.Ability.STRENGTH: 15, + Abilities.Ability.DEXTERITY: 10, + Abilities.Ability.CONSTITUTION: 13, + Abilities.Ability.INTELLIGENCE: 8, + Abilities.Ability.WISDOM: 12, + Abilities.Ability.CHARISMA: 14, }, }, CharacterClass.RANGER: { - "known_for": "", + "known_for": "Instincts; primal magic", "primary_abilities": [], "primary_abilities_number_to_choose": 1, "skill_proficiencies": [], "skill_proficiencies_number_to_choose": 1, "default_ability_scores": { - Abilities.Ability.STRENGTH: 1, - Abilities.Ability.DEXTERITY: 1, - Abilities.Ability.CONSTITUTION: 1, - Abilities.Ability.INTELLIGENCE: 1, - Abilities.Ability.WISDOM: 1, - Abilities.Ability.CHARISMA: 1, + Abilities.Ability.STRENGTH: 12, + Abilities.Ability.DEXTERITY: 15, + Abilities.Ability.CONSTITUTION: 13, + Abilities.Ability.INTELLIGENCE: 8, + Abilities.Ability.WISDOM: 14, + Abilities.Ability.CHARISMA: 10, }, }, CharacterClass.ROGUE: { - "known_for": "", + "known_for": "Stealth, subterfuge", "primary_abilities": [], "primary_abilities_number_to_choose": 1, "skill_proficiencies": [], "skill_proficiencies_number_to_choose": 1, "default_ability_scores": { - Abilities.Ability.STRENGTH: 1, - Abilities.Ability.DEXTERITY: 1, - Abilities.Ability.CONSTITUTION: 1, - Abilities.Ability.INTELLIGENCE: 1, - Abilities.Ability.WISDOM: 1, - Abilities.Ability.CHARISMA: 1, + Abilities.Ability.STRENGTH: 12, + Abilities.Ability.DEXTERITY: 15, + Abilities.Ability.CONSTITUTION: 13, + Abilities.Ability.INTELLIGENCE: 14, + Abilities.Ability.WISDOM: 10, + Abilities.Ability.CHARISMA: 8, }, }, CharacterClass.SORCERER: { - "known_for": "", + "known_for": "Raw power; natural talent", "primary_abilities": [], "primary_abilities_number_to_choose": 1, "skill_proficiencies": [], "skill_proficiencies_number_to_choose": 1, "default_ability_scores": { - Abilities.Ability.STRENGTH: 1, - Abilities.Ability.DEXTERITY: 1, - Abilities.Ability.CONSTITUTION: 1, - Abilities.Ability.INTELLIGENCE: 1, - Abilities.Ability.WISDOM: 1, - Abilities.Ability.CHARISMA: 1, + Abilities.Ability.STRENGTH: 10, + Abilities.Ability.DEXTERITY: 13, + Abilities.Ability.CONSTITUTION: 14, + Abilities.Ability.INTELLIGENCE: 8, + Abilities.Ability.WISDOM: 12, + Abilities.Ability.CHARISMA: 15, }, }, CharacterClass.WARLOCK: { - "known_for": "", + "known_for": "Occult; Kyrie or Rodman", "primary_abilities": [], "primary_abilities_number_to_choose": 1, "skill_proficiencies": [], "skill_proficiencies_number_to_choose": 1, "default_ability_scores": { - Abilities.Ability.STRENGTH: 1, - Abilities.Ability.DEXTERITY: 1, - Abilities.Ability.CONSTITUTION: 1, - Abilities.Ability.INTELLIGENCE: 1, - Abilities.Ability.WISDOM: 1, - Abilities.Ability.CHARISMA: 1, + Abilities.Ability.STRENGTH: 8, + Abilities.Ability.DEXTERITY: 14, + Abilities.Ability.CONSTITUTION: 13, + Abilities.Ability.INTELLIGENCE: 12, + Abilities.Ability.WISDOM: 10, + Abilities.Ability.CHARISMA: 15, }, }, CharacterClass.WIZARD: { - "known_for": "", + "known_for": "Studying; Kobe?", "primary_abilities": [], "primary_abilities_number_to_choose": 1, "skill_proficiencies": [], "skill_proficiencies_number_to_choose": 1, "default_ability_scores": { - Abilities.Ability.STRENGTH: 1, - Abilities.Ability.DEXTERITY: 1, - Abilities.Ability.CONSTITUTION: 1, - Abilities.Ability.INTELLIGENCE: 1, - Abilities.Ability.WISDOM: 1, - Abilities.Ability.CHARISMA: 1, + Abilities.Ability.STRENGTH: 8, + Abilities.Ability.DEXTERITY: 12, + Abilities.Ability.CONSTITUTION: 13, + Abilities.Ability.INTELLIGENCE: 15, + Abilities.Ability.WISDOM: 14, + Abilities.Ability.CHARISMA: 10, }, } } diff --git a/scripts/ui/ability_container.gd b/scripts/ui/ability_container.gd index 449236c..ae228cd 100644 --- a/scripts/ui/ability_container.gd +++ b/scripts/ui/ability_container.gd @@ -1,21 +1,39 @@ +@tool class_name AbilityContainer extends HBoxContainer -var ability_name: String = "SomeAbility": set = set_ability_name -var ability_score: int: set = set_ability_score +@export var ability_name: String = "AbilityName"#: set = set_ability_name +@export var ability_score: int = 10: set = set_ability_score + +var modifier_value: int = 0 +var _modifier_box_display_value: int @onready var ability_label: Label = $AbilityLabel -@onready var ability_score_button: OptionButton = $AbilityScore +@onready var ability_score_box: SpinBox = $AbilityScoreBox +@onready var modifier_box: SpinBox = $ModifierBox func _ready() -> void: - for score in 20: - ability_score_button.add_item(str(score + 1)) + _connect_signals() + ability_score_box.value = ability_score + ability_label.text = ability_name + ": " -func set_ability_name(a_n: String) -> void: - print_debug("Creating an Ability Container for %s" % a_n) - ability_name = a_n - ability_label.text = ability_name +func on_ability_score_value_changed(value: float) -> void: + modifier_value = floor((value - 10.0) / 2.0) + _modifier_box_display_value = abs(floor((value - 10.0) / 2.0)) + modifier_box.value = _modifier_box_display_value + if modifier_value < 0: + modifier_box.prefix = "-" + else: + modifier_box.prefix = "+" -func set_ability_score(a_s: int) -> void: - ability_score = a_s - ability_score_button.select(a_s - 1) +#func set_ability_name(new_name: String) -> void: + #ability_name = new_name + #ability_label.text = ability_name + ": " + +func set_ability_score(score: int) -> void: + ability_score = score + if ability_score_box: + ability_score_box.value = score + +func _connect_signals() -> void: + ability_score_box.connect("value_changed", on_ability_score_value_changed) diff --git a/scripts/ui/character_creator.gd b/scripts/ui/character_creator.gd index 3c11af1..6f113f1 100644 --- a/scripts/ui/character_creator.gd +++ b/scripts/ui/character_creator.gd @@ -5,17 +5,18 @@ const ABILITY_CONTAINER = preload("uid://cj2817cl63cf") var ability_containers: Array[Node] @onready var character_class_options: OptionButton = %CharacterClassOptions -@onready var abilities_grid: GridContainer = %AbilitiesGrid +@onready var abilities_grid: HBoxContainer = %AbilitiesGrid func _ready() -> void: _connect_signals() + for character_class in Classes.CharacterClass: character_class_options.add_item(str(character_class).to_pascal_case()) var character_class_info: Dictionary = Classes.class_info[Classes.CharacterClass[character_class]] if character_class_info.get("known_for"): character_class_options.set_item_tooltip(Classes.CharacterClass[character_class], character_class_info.get("known_for")) - ability_containers = abilities_grid.get_children() + ability_containers = get_tree().get_nodes_in_group("ability_containers") for ability in Abilities.Ability: var ability_container: AbilityContainer = ability_containers[Abilities.Ability[ability]] ability_container.ability_name = str(ability).to_pascal_case()