ActorCommons.gd 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. extends Object
  2. class_name ActorCommons
  3. #
  4. enum Type
  5. {
  6. PLAYER = 0,
  7. MONSTER,
  8. NPC
  9. }
  10. enum Gender
  11. {
  12. MALE = 0,
  13. FEMALE,
  14. NONBINARY,
  15. COUNT
  16. }
  17. enum State
  18. {
  19. UNKNOWN = -1,
  20. IDLE = 0,
  21. WALK,
  22. SIT,
  23. ATTACK,
  24. DEATH,
  25. TO_TRIGGER,
  26. TRIGGER,
  27. FROM_TRIGGER,
  28. COUNT
  29. }
  30. enum Slot
  31. {
  32. BODY = 0,
  33. HAIR,
  34. CHEST,
  35. LEGS,
  36. FEET,
  37. HANDS,
  38. HEAD,
  39. FACE,
  40. WEAPON,
  41. SHIELD,
  42. COUNT
  43. }
  44. enum Attribute
  45. {
  46. STRENGTH = 0,
  47. VITALITY,
  48. AGILITY,
  49. ENDURANCE,
  50. CONCENTRATION,
  51. }
  52. const playbackParameter : String = "parameters/playback"
  53. # Skip TO_TRIGGER & FROM_TRIGGER as they are only used as transition steps between idle/trigger.
  54. const stateTransitions : Array[Array] = [
  55. # IDLE WALK SIT ATTACK DEATH TO_TRIGGER TRIGGER FROM_TRIGGER < To/From v
  56. [State.IDLE, State.WALK, State.SIT, State.ATTACK, State.DEATH, State.IDLE, State.TRIGGER, State.IDLE], # IDLE
  57. [State.IDLE, State.WALK, State.WALK, State.ATTACK, State.DEATH, State.IDLE, State.TRIGGER, State.IDLE], # WALK
  58. [State.SIT, State.WALK, State.IDLE, State.ATTACK, State.DEATH, State.IDLE, State.TRIGGER, State.IDLE], # SIT
  59. [State.IDLE, State.WALK, State.ATTACK, State.ATTACK, State.DEATH, State.IDLE, State.TRIGGER, State.IDLE], # ATTACK
  60. [State.DEATH, State.DEATH, State.DEATH, State.DEATH, State.DEATH, State.DEATH, State.DEATH, State.DEATH], # DEATH
  61. [], # TO_TRIGGER
  62. [State.TRIGGER, State.TRIGGER, State.SIT, State.ATTACK, State.DEATH, State.TRIGGER, State.IDLE, State.TRIGGER], # TRIGGER
  63. [] # FROM_TRIGGER
  64. ]
  65. const stateIdle : String = "Idle"
  66. const stateWalk : String = "Walk"
  67. const stateSit : String = "Sit"
  68. const stateAttack : String = "Attack"
  69. const stateDeath : String = "Death"
  70. const stateToTrigger : String = "To Trigger"
  71. const stateTrigger : String = "Trigger"
  72. const stateFromTrigger : String = "From Trigger"
  73. # State
  74. static func GetNextTransition(currentState : State, newState : State) -> State:
  75. return stateTransitions[currentState][newState]
  76. static func GetStateName(state : State) -> String:
  77. match state:
  78. State.IDLE: return stateIdle
  79. State.WALK: return stateWalk
  80. State.SIT: return stateSit
  81. State.ATTACK: return stateAttack
  82. State.DEATH: return stateDeath
  83. State.TO_TRIGGER: return stateToTrigger
  84. State.TRIGGER: return stateTrigger
  85. State.FROM_TRIGGER: return stateFromTrigger
  86. _: return stateIdle
  87. static func IsAlive(agent : Actor) -> bool:
  88. return agent and agent.state != State.DEATH
  89. static func IsAttacking(agent : Actor) -> bool:
  90. return agent and agent.state == State.ATTACK
  91. static func IsSitting(agent : Actor) -> bool:
  92. return agent and agent.state == State.SIT
  93. static func IsTriggering(agent : Actor) -> bool:
  94. return agent and agent.state == State.TRIGGER
  95. #
  96. const slotBody : String = "Body"
  97. const slotHair : String = "Hair"
  98. const slotChest : String = "Chest"
  99. const slotLegs : String = "Legs"
  100. const slotFeet : String = "Feet"
  101. const slotHands : String = "Hands"
  102. const slotHead : String = "Head"
  103. const slotFace : String = "Face"
  104. const slotWeapon : String = "Weapon"
  105. const slotShield : String = "Shield"
  106. static func GetSlotName(slot : Slot) -> String:
  107. match slot:
  108. Slot.BODY: return slotBody
  109. Slot.HAIR: return slotHair
  110. Slot.CHEST: return slotChest
  111. Slot.LEGS: return slotLegs
  112. Slot.FEET: return slotFeet
  113. Slot.HANDS: return slotHands
  114. Slot.HEAD: return slotHead
  115. Slot.FACE: return slotFace
  116. Slot.WEAPON: return slotWeapon
  117. Slot.SHIELD: return slotShield
  118. _: return slotBody
  119. static func GetSlotID(slot : String) -> Slot:
  120. match slot:
  121. slotBody: return Slot.BODY
  122. slotHair: return Slot.HAIR
  123. slotChest: return Slot.CHEST
  124. slotLegs: return Slot.LEGS
  125. slotFeet: return Slot.FEET
  126. slotHands: return Slot.HANDS
  127. slotHead: return Slot.HEAD
  128. slotFace: return Slot.FACE
  129. slotWeapon: return Slot.WEAPON
  130. slotShield: return Slot.SHIELD
  131. _: return Slot.BODY
  132. # Visual
  133. const AllyTarget : Resource = preload("res://presets/entities/components/targets/Ally.tres")
  134. const EnemyTarget : Resource = preload("res://presets/entities/components/targets/Enemy.tres")
  135. const AlterationLabel : PackedScene = preload("res://presets/gui/AlterationLabel.tscn")
  136. const SpeechLabel : PackedScene = preload("res://presets/gui/chat/SpeechBubble.tscn")
  137. const MorphFx : PackedScene = preload("res://presets/effects/particles/Morph.tscn")
  138. const LevelUpFx : PackedScene = preload("res://presets/effects/particles/LevelUp.tscn")
  139. const GenderMaleTexture = preload("res://data/graphics/gui/stat/gender-male.png")
  140. const GenderFemaleTexture = preload("res://data/graphics/gui/stat/gender-female.png")
  141. const GenderNonBinaryTexture = preload("res://data/graphics/gui/stat/gender-nonbinary.png")
  142. # Skill
  143. enum Alteration
  144. {
  145. HIT = 0,
  146. CRIT,
  147. MISS,
  148. DODGE,
  149. HEAL,
  150. PROJECTILE,
  151. }
  152. # Colors
  153. const DodgeAttackColor : float = 0.15
  154. const HealColor : float = 0.42
  155. const LocalAttackColor : float = 0.35
  156. const MissAttackColor : float = 0.2
  157. const MonsterAttackColor : float = 0.0
  158. const PlayerAttackColor : float = 0.6
  159. const LevelDifferenceColor : float = 5.0
  160. # Interactive
  161. const interactionDisplayOffset : int = 32
  162. const emoteDelay : float = 4.0
  163. const morphDelay : float = 1.2
  164. const speechDelay : float = 6.0
  165. const speechDecreaseDelay : float = 1.5
  166. const speechIncreaseThreshold : int = 15
  167. const speechMaxWidth : int = 256
  168. const speechExtraWidth : int = 20
  169. const TargetMaxSquaredDistance : float = 512 * 512 # ~15 Tile squared length
  170. # Lifetime
  171. const AttackTimestampLimit : int = 1000 * 60 * 5 # 5 minutes
  172. const RegenDelay : float = 3.0
  173. const DeathDelay : float = 10.0
  174. const DisplayHPDelay : float = 7.0
  175. const MapProcessingToggleDelay : float = 10.0
  176. const MapProcessingToggleExtraDelay : float = 60.0
  177. # Drop
  178. const DropDelay : float = 60.0
  179. const PickupSquaredDistance : float = 48 * 48 # 1.5 Tile squared length
  180. # Stats
  181. const MaxPointPerAttributes : int = 20
  182. const InventorySize : int = 100
  183. # Explore
  184. static var SailingDestination : Destination = Destination.new("Ocean", Vector2(71 * 32, 55 * 32))
  185. # Navigation
  186. const DisplacementVector : Vector2 = Vector2(32, 32)
  187. const MaxDisplacementSquareLength : float = 64 * 64
  188. const InputApproximationUnit : int = 12
  189. const MaxEntityRadiusSize : int = 256
  190. # New player
  191. const DefaultAttributes : Dictionary = {
  192. "strength": 10,
  193. "vitality": 3
  194. }
  195. static var DefaultInventory : Dictionary = {
  196. "Apple".hash(): 5
  197. }