StatPanel.gd 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. extends WindowPanel
  2. @onready var lName : Label = $Scroll/Margin/Layout/Stats/Information/Name
  3. @onready var tGender : TextureRect = $Scroll/Margin/Layout/Stats/Information/Gender
  4. @onready var lLevel : Label = $Scroll/Margin/Layout/Stats/Information/Level
  5. @onready var lSpirit : Label = $Scroll/Margin/Layout/Stats/Information/Spirit
  6. @onready var pExperience : Control = $Scroll/Margin/Layout/Stats/PreciseStats/ActiveStatsBox/ExperienceBox/ProgressBar
  7. @onready var pHealth : Control = $Scroll/Margin/Layout/Stats/PreciseStats/ActiveStatsBox/HealthBox/ProgressBar
  8. @onready var pMana : Control = $Scroll/Margin/Layout/Stats/PreciseStats/ActiveStatsBox/ManaBox/ProgressBar
  9. @onready var pStamina : Control = $Scroll/Margin/Layout/Stats/PreciseStats/ActiveStatsBox/StaminaBox/ProgressBar
  10. @onready var pWeight : Control = $Scroll/Margin/Layout/Stats/PreciseStats/ActiveStatsBox/WeightBox/ProgressBar
  11. @onready var lGP : Label = $Scroll/Margin/Layout/Stats/PreciseStats/ActiveStatsBox/GPBox/Value
  12. @onready var lStrength : Label = $Scroll/Margin/Layout/Stats/StatBox/StrengthBox/Current
  13. @onready var lVitality : Label = $Scroll/Margin/Layout/Stats/StatBox/VitalityBox/Current
  14. @onready var lAgility : Label = $Scroll/Margin/Layout/Stats/StatBox/AgilityBox/Current
  15. @onready var lEndurance : Label = $Scroll/Margin/Layout/Stats/StatBox/EnduranceBox/Current
  16. @onready var lConcentration : Label = $Scroll/Margin/Layout/Stats/StatBox/ConcentrationBox/Current
  17. @onready var lAvailablePoints : Label = $Scroll/Margin/Layout/Stats/StatBox/AvailablePointsBox/Value
  18. @onready var bStrength : Button = $Scroll/Margin/Layout/Stats/StatBox/StrengthBox/Button
  19. @onready var bVitality : Button = $Scroll/Margin/Layout/Stats/StatBox/VitalityBox/Button
  20. @onready var bAgility : Button = $Scroll/Margin/Layout/Stats/StatBox/AgilityBox/Button
  21. @onready var bEndurance : Button = $Scroll/Margin/Layout/Stats/StatBox/EnduranceBox/Button
  22. @onready var bConcentration : Button = $Scroll/Margin/Layout/Stats/StatBox/ConcentrationBox/Button
  23. @onready var lAtk : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/AtkBox/Value
  24. @onready var lDef : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/DefBox/Value
  25. @onready var lMAtk : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/MAtkBox/Value
  26. @onready var lMDef : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/MDefBox/Value
  27. @onready var lAtkRange : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/AtkRangeBox/Value
  28. @onready var lCastDelay : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/CastDelayBox/Value
  29. @onready var lCooldownDelay : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/CooldownDelayBox/Value
  30. @onready var lCritRate : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/CritRateBox/Value
  31. @onready var lDodgeRate : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/DodgeRateBox/Value
  32. @onready var lWalkSpeed : Label = $Scroll/Margin/Layout/Stats/PreciseStats/AdvancedStatsBox/WalkBox/Value
  33. #
  34. func IncreaseStrength():
  35. Network.AddAttribute(ActorCommons.Attribute.STRENGTH)
  36. func IncreaseVitality():
  37. Network.AddAttribute(ActorCommons.Attribute.VITALITY)
  38. func IncreaseAgility():
  39. Network.AddAttribute(ActorCommons.Attribute.AGILITY)
  40. func IncreaseEndurance():
  41. Network.AddAttribute(ActorCommons.Attribute.ENDURANCE)
  42. func IncreaseConcentration():
  43. Network.AddAttribute(ActorCommons.Attribute.CONCENTRATION)
  44. #
  45. func Init(entity : Entity):
  46. Callback.PlugCallback(entity.stat.vital_stats_updated, RefreshVitalStats.bind(entity))
  47. Callback.PlugCallback(entity.stat.attributes_updated, RefreshAttributes.bind(entity))
  48. Callback.PlugCallback(entity.stat.entity_stats_updated, RefreshEntityStats.bind(entity))
  49. RefreshVitalStats(entity)
  50. RefreshAttributes(entity)
  51. RefreshEntityStats(entity)
  52. func RefreshGender(entity : Entity):
  53. var texture : Texture2D = null
  54. match entity.gender:
  55. ActorCommons.Gender.MALE:
  56. texture = ActorCommons.GenderMaleTexture
  57. ActorCommons.Gender.FEMALE:
  58. texture = ActorCommons.GenderFemaleTexture
  59. ActorCommons.Gender.NONBINARY:
  60. texture = ActorCommons.GenderNonBinaryTexture
  61. tGender.set_texture(texture)
  62. func RefreshVitalStats(entity : Entity):
  63. if not entity:
  64. pass
  65. RefreshGender(entity)
  66. lName.set_text(entity.nick)
  67. lLevel.set_text("Lv. %d" % entity.stat.level)
  68. var spiritData : EntityData = DB.EntitiesDB.get(entity.stat.spirit, null)
  69. if spiritData:
  70. lSpirit.set_text(spiritData._name)
  71. pExperience.SetStat(entity.stat.experience, Experience.GetNeededExperienceForNextLevel(entity.stat.level))
  72. pHealth.SetStat(entity.stat.health, entity.stat.current.maxHealth)
  73. pMana.SetStat(entity.stat.mana, entity.stat.current.maxMana)
  74. pStamina.SetStat(entity.stat.stamina, entity.stat.current.maxStamina)
  75. pWeight.SetStat(entity.stat.weight, entity.stat.current.weightCapacity)
  76. lGP.set_text("%s GP" % Util.GetFormatedText(str(entity.stat.gp)))
  77. func RefreshAttributes(entity : Entity):
  78. if not entity:
  79. pass
  80. lStrength.set_text(str(entity.stat.strength))
  81. lVitality.set_text(str(entity.stat.vitality))
  82. lAgility.set_text(str(entity.stat.agility))
  83. lEndurance.set_text(str(entity.stat.endurance))
  84. lConcentration.set_text(str(entity.stat.concentration))
  85. var availablePoints : int = Formula.GetMaxAttributePoints(entity.stat.level) - Formula.GetAssignedAttributePoints(entity.stat)
  86. lAvailablePoints.set_text(str(availablePoints))
  87. bStrength.set_disabled(availablePoints <= 0 or entity.stat.strength >= ActorCommons.MaxPointPerAttributes)
  88. bVitality.set_disabled(availablePoints <= 0 or entity.stat.vitality >= ActorCommons.MaxPointPerAttributes)
  89. bAgility.set_disabled(availablePoints <= 0 or entity.stat.agility >= ActorCommons.MaxPointPerAttributes)
  90. bEndurance.set_disabled(availablePoints <= 0 or entity.stat.endurance >= ActorCommons.MaxPointPerAttributes)
  91. bConcentration.set_disabled(availablePoints <= 0 or entity.stat.concentration >= ActorCommons.MaxPointPerAttributes)
  92. func RefreshEntityStats(entity : Entity):
  93. if not entity:
  94. pass
  95. lAtk.set_text(str(entity.stat.current.attack))
  96. lDef.set_text(str(entity.stat.current.defense))
  97. lMAtk.set_text(str(entity.stat.current.mattack))
  98. lMDef.set_text(str(entity.stat.current.mdefense))
  99. lAtkRange.set_text(str(entity.stat.current.attackRange))
  100. lCastDelay.set_text("%0.2fs" % entity.stat.current.castAttackDelay)
  101. lCooldownDelay.set_text("%0.2fs" % entity.stat.current.cooldownAttackDelay)
  102. lCritRate.set_text("%.d%%" % (entity.stat.current.critRate * 100.0))
  103. lDodgeRate.set_text("%.d%%" % (entity.stat.current.dodgeRate * 100.0))
  104. lWalkSpeed.set_text(GetPercentString(entity.stat.current.walkSpeed, entity.stat.morphStat.walkSpeed))
  105. #
  106. func GetPercentString(current : float, base : float) -> String:
  107. return "%d%%" % (int(current / base * 100.0) if base > 0 else 100)