diff --git a/scripts/autoloads/classes.gd b/scripts/autoloads/classes.gd index ce7df29..56c3b87 100644 --- a/scripts/autoloads/classes.gd +++ b/scripts/autoloads/classes.gd @@ -17,11 +17,10 @@ enum CharacterClass { var class_info: Dictionary[CharacterClass, Dictionary] = { CharacterClass.BARBARIAN: { - "description": "Rage", + "known_for": "Rage", "primary_abilities": [ Abilities.Ability.STRENGTH ], - "primary_abilities_number_to_choose": 1, "skill_proficiencies": [ Skills.Skill.ANIMAL_HANDLING, Skills.Skill.ATHLETICS, @@ -30,7 +29,7 @@ var class_info: Dictionary[CharacterClass, Dictionary] = { Skills.Skill.PERCEPTION, Skills.Skill.SURVIVAL, ], - "skill_proficiency_number_to_choose": 2, + "skill_proficiencies_number_to_choose": 2, "default_ability_scores": { Abilities.Ability.STRENGTH: 15, Abilities.Ability.DEXTERITY: 13, @@ -41,11 +40,10 @@ var class_info: Dictionary[CharacterClass, Dictionary] = { } }, CharacterClass.BARD: { - "description": "Razzle-dazzle", + "known_for": "Razzle-dazzle", "primary_abilities": [ Abilities.Ability.CHARISMA ], - "primary_abilities_number_to_choose": 1, "skill_proficiencies": [ Skills.Skill.ACROBATICS, Skills.Skill.ANIMAL_HANDLING, @@ -66,7 +64,7 @@ var class_info: Dictionary[CharacterClass, Dictionary] = { Skills.Skill.STEALTH, Skills.Skill.SURVIVAL, ], - "skill_proficiency_number_to_choose": 3, + "skill_proficiencies_number_to_choose": 3, "default_ability_scores": { Abilities.Ability.STRENGTH: 8, Abilities.Ability.DEXTERITY: 14, @@ -75,5 +73,172 @@ var class_info: Dictionary[CharacterClass, Dictionary] = { Abilities.Ability.WISDOM: 10, Abilities.Ability.CHARISMA: 15 } + }, + CharacterClass.CLERIC: { + "known_for": "Devotion", + "primary_abilities": [ + Abilities.Ability.WISDOM + ], + "skill_proficiencies": [ + Skills.Skill.HISTORY, + Skills.Skill.INSIGHT, + Skills.Skill.MEDICINE, + Skills.Skill.PERSUASION, + Skills.Skill.RELIGION, + ], + "skill_proficiencies_number_to_choose": 2, + "default_ability_scores": { + Abilities.Ability.STRENGTH: 14, + Abilities.Ability.DEXTERITY: 8, + Abilities.Ability.CONSTITUTION: 13, + Abilities.Ability.INTELLIGENCE: 10, + Abilities.Ability.WISDOM: 15, + Abilities.Ability.CHARISMA: 12, + } + }, + CharacterClass.DRUID: { + "known_for": "Vibes", + "primary_abilities": [ + Abilities.Ability.WISDOM + ], + "skill_proficiencies": [ + Skills.Skill.ANIMAL_HANDLING, + Skills.Skill.ARCANA, + Skills.Skill.INSIGHT, + Skills.Skill.MEDICINE, + Skills.Skill.NATURE, + Skills.Skill.PERCEPTION, + Skills.Skill.RELIGION, + Skills.Skill.SURVIVAL, + ], + "skill_proficiencies_number_to_choose": 1, + "default_ability_scores": { + Abilities.Ability.STRENGTH: 8, + Abilities.Ability.DEXTERITY: 12, + Abilities.Ability.CONSTITUTION: 14, + Abilities.Ability.INTELLIGENCE: 13, + Abilities.Ability.WISDOM: 15, + Abilities.Ability.CHARISMA: 10, + }, + }, + CharacterClass.FIGHTER: { + "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, + }, + }, + CharacterClass.MONK: { + "known_for": "", + "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, + }, + }, + CharacterClass.PALADIN: { + "known_for": "", + "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, + }, + }, + CharacterClass.RANGER: { + "known_for": "", + "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, + }, + }, + CharacterClass.ROGUE: { + "known_for": "", + "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, + }, + }, + CharacterClass.SORCERER: { + "known_for": "", + "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, + }, + }, + CharacterClass.WARLOCK: { + "known_for": "", + "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, + }, + }, + CharacterClass.WIZARD: { + "known_for": "", + "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, + }, } } diff --git a/scripts/ui/ability_container.gd b/scripts/ui/ability_container.gd index 4dc7609..449236c 100644 --- a/scripts/ui/ability_container.gd +++ b/scripts/ui/ability_container.gd @@ -1,16 +1,21 @@ class_name AbilityContainer extends HBoxContainer -var ability_name : String = "SomeAbility": set = set_ability_name +var ability_name: String = "SomeAbility": set = set_ability_name +var ability_score: int: set = set_ability_score @onready var ability_label: Label = $AbilityLabel -@onready var ability_score: OptionButton = $AbilityScore +@onready var ability_score_button: OptionButton = $AbilityScore func _ready() -> void: for score in 20: - ability_score.add_item(str(score + 1)) + ability_score_button.add_item(str(score + 1)) 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 set_ability_score(a_s: int) -> void: + ability_score = a_s + ability_score_button.select(a_s - 1) diff --git a/scripts/ui/character_creator.gd b/scripts/ui/character_creator.gd index e0ae1de..3c11af1 100644 --- a/scripts/ui/character_creator.gd +++ b/scripts/ui/character_creator.gd @@ -2,18 +2,32 @@ extends Control const ABILITY_CONTAINER = preload("uid://cj2817cl63cf") +var ability_containers: Array[Node] + @onready var character_class_options: OptionButton = %CharacterClassOptions @onready var abilities_grid: GridContainer = %AbilitiesGrid func _ready() -> void: - var ability_containers = abilities_grid.get_children() + _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() for ability in Abilities.Ability: var ability_container: AbilityContainer = ability_containers[Abilities.Ability[ability]] ability_container.ability_name = str(ability).to_pascal_case() - #var new_container: AbilityContainer = ABILITY_CONTAINER.instantiate() - #new_container.ability_name = str(ability).to_pascal_case() - #abilities_grid.add_child(new_container) - - for character_class in Classes.CharacterClass: - print_debug(character_class) - character_class_options.add_item(str(character_class).to_pascal_case()) + +func on_class_selected(index_of_class_selected: int) -> void: + print_debug("You chose %s" % index_of_class_selected) + var selected_class_info: Dictionary = Classes.class_info[index_of_class_selected] + var selected_class_ability_scores = selected_class_info.get("default_ability_scores") + print_debug("Here's the stats: %s" % selected_class_ability_scores) + for index_of_default_ability_score in selected_class_ability_scores: + var ability_container = ability_containers[index_of_default_ability_score] as AbilityContainer + ability_container.ability_score = selected_class_ability_scores[index_of_default_ability_score] + +func _connect_signals() -> void: + character_class_options.connect("item_selected", on_class_selected)