Traits.gd 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. extends PanelContainer
  2. #
  3. @onready var hairstyleLabel : Label = $Margin/VBox/Hairstyle/Name
  4. @onready var hairstylePrev : Button = $Margin/VBox/Hairstyle/Previous
  5. @onready var hairstyleNext : Button = $Margin/VBox/Hairstyle/Next
  6. @onready var haircolorLabel : Label = $Margin/VBox/HairColor/Name
  7. @onready var haircolorPrev : Button = $Margin/VBox/HairColor/Previous
  8. @onready var haircolorNext : Button = $Margin/VBox/HairColor/Next
  9. @onready var genderLabel : Label = $Margin/VBox/Gender/Name
  10. @onready var genderPrev : Button = $Margin/VBox/Gender/Previous
  11. @onready var genderNext : Button = $Margin/VBox/Gender/Next
  12. @onready var raceLabel : Label = $Margin/VBox/Race/Name
  13. @onready var racePrev : Button = $Margin/VBox/Race/Previous
  14. @onready var raceNext : Button = $Margin/VBox/Race/Next
  15. @onready var skintoneLabel : Label = $Margin/VBox/SkinTone/Name
  16. @onready var skintonePrev : Button = $Margin/VBox/SkinTone/Previous
  17. @onready var skintoneNext : Button = $Margin/VBox/SkinTone/Next
  18. @onready var hairstylesCount : int = DB.HairstylesDB.size()
  19. @onready var haircolorsCount : int = DB.PalettesDB[DB.Palette.HAIR].size()
  20. @onready var raceCount : int = DB.RacesDB.size()
  21. var skintoneCount : int = 0
  22. var hairstyleValue : int = 0
  23. var haircolorValue : int = 0
  24. var genderValue : int = 0
  25. var raceValue : int = 0
  26. var skintoneValue : int = 0
  27. signal bodyUpdate
  28. signal hairUpdate
  29. #
  30. func GetValues():
  31. var hairstyles : Array = DB.HairstylesDB.keys()
  32. var haircolors : Array = DB.PalettesDB[DB.Palette.HAIR].keys()
  33. var races : Array = DB.RacesDB.keys()
  34. var race : RaceData = DB.GetRace(races[raceValue])
  35. var skins : Dictionary = race._skins if race else {}
  36. var skinsKeys : Array = skins.keys()
  37. return {
  38. "hairstyle" = hairstyles[hairstyleValue],
  39. "haircolor" = haircolors[haircolorValue],
  40. "race" = races[raceValue],
  41. "skintone" = skinsKeys[skintoneValue],
  42. "gender" = genderValue
  43. }
  44. # Hairstyle
  45. func RefreshHairstyle():
  46. var hairstyles : Array = DB.HairstylesDB.keys()
  47. if hairstyleValue >= 0 and hairstyleValue < hairstylesCount:
  48. hairstyleLabel.set_text(DB.GetHairstyle(hairstyles[hairstyleValue])._name)
  49. hairUpdate.emit()
  50. func _on_hairstyle_prev_button():
  51. hairstyleValue = hairstyleValue - 1 if hairstyleValue > 0 else hairstylesCount - 1
  52. RefreshHairstyle()
  53. func _on_hairstyle_next_button():
  54. hairstyleValue = hairstyleValue + 1 if hairstyleValue < hairstylesCount - 1 else 0
  55. RefreshHairstyle()
  56. # Haircolor
  57. func RefreshHaircolor():
  58. var palettes : Array = DB.PalettesDB[DB.Palette.HAIR].keys()
  59. if haircolorValue >= 0 and haircolorValue < haircolorsCount:
  60. haircolorLabel.set_text(DB.GetPalette(DB.Palette.HAIR, palettes[haircolorValue])._name)
  61. hairUpdate.emit()
  62. func _on_haircolor_prev_button():
  63. haircolorValue = haircolorValue - 1 if haircolorValue > 0 else haircolorsCount - 1
  64. RefreshHaircolor()
  65. func _on_haircolor_next_button():
  66. haircolorValue = haircolorValue + 1 if haircolorValue < haircolorsCount - 1 else 0
  67. RefreshHaircolor()
  68. # Gender
  69. func RefreshGender():
  70. genderLabel.set_text(ActorCommons.GetGenderName(genderValue))
  71. bodyUpdate.emit()
  72. func _on_gender_prev_button():
  73. genderValue = genderValue - 1 if genderValue > 0 else ActorCommons.Gender.COUNT - 1
  74. RefreshGender()
  75. func _on_gender_next_button():
  76. genderValue = genderValue + 1 if genderValue < ActorCommons.Gender.COUNT - 1 else 0
  77. RefreshGender()
  78. # Race
  79. func RefreshRace():
  80. var races : Array = DB.RacesDB.keys()
  81. if raceValue >= 0 and raceValue < raceCount:
  82. var data : RaceData = DB.GetRace(races[raceValue])
  83. raceLabel.set_text(data._name)
  84. RefreshSkintone()
  85. bodyUpdate.emit()
  86. func _on_race_prev_button():
  87. raceValue = raceValue - 1 if raceValue > 0 else raceCount - 1
  88. RefreshRace()
  89. func _on_race_next_button():
  90. raceValue = raceValue + 1 if raceValue < raceCount - 1 else 0
  91. RefreshRace()
  92. # Skin tone
  93. func RefreshSkintone():
  94. var races : Array = DB.RacesDB.keys()
  95. if raceValue >= 0 and raceValue < raceCount:
  96. var data : RaceData = DB.GetRace(races[raceValue])
  97. var skins : Dictionary = data._skins
  98. var skinsKeys : Array = skins.keys()
  99. skintoneCount = data._skins.size()
  100. if skintoneValue < 0 or skintoneValue >= skintoneCount:
  101. skintoneValue = 0
  102. if skintoneValue >= 0 and skintoneValue < skintoneCount:
  103. skintoneLabel.set_text(skins[skinsKeys[skintoneValue]]._name)
  104. bodyUpdate.emit()
  105. func _on_skintone_prev_button():
  106. skintoneValue = skintoneValue - 1 if skintoneValue > 0 else skintoneCount - 1
  107. RefreshSkintone()
  108. func _on_skintone_next_button():
  109. skintoneValue = skintoneValue + 1 if skintoneValue < skintoneCount - 1 else 0
  110. RefreshSkintone()
  111. #
  112. func Randomize():
  113. hairstyleValue = randi() % hairstylesCount
  114. RefreshHairstyle()
  115. haircolorValue = randi() % haircolorsCount
  116. RefreshHaircolor()
  117. genderValue = randi() % ActorCommons.Gender.COUNT
  118. RefreshGender()
  119. raceValue = randi() % raceCount
  120. RefreshRace()
  121. skintoneValue = randi() % skintoneCount
  122. RefreshSkintone()
  123. #
  124. func _ready():
  125. Randomize()