EntityData.gd 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. extends Resource
  2. class_name EntityData
  3. @export var _id : int = DB.UnknownHash
  4. @export var _name : String = ""
  5. @export var _spritePreset : String = ""
  6. @export var _collision : String = ""
  7. @export var _radius : int = 0
  8. @export var _equipments : Array[ItemCell] = []
  9. @export var _customTextures : Array[String] = []
  10. @export var _customShaders : Array[FileData] = []
  11. @export var _displayName : bool = false
  12. @export var _behaviour : int = AICommons.Behaviour.NEUTRAL
  13. @export var _stats : Dictionary = ActorCommons.DefaultStats.duplicate()
  14. @export var _skillSet : Array[int] = []
  15. @export var _skillProba : Dictionary[int, float]= {}
  16. @export var _drops : Array[int] = []
  17. @export var _dropsProba : Dictionary[int, float]= {}
  18. @export var _spawns : Dictionary[int, int] = {}
  19. const hashedStats : PackedStringArray = ["race", "skintone", "hairstyle", "haircolor"]
  20. func _init():
  21. _customTextures.resize(ActorCommons.SlotModifierCount)
  22. _customShaders.resize(ActorCommons.SlotModifierCount)
  23. _equipments.resize(ActorCommons.SlotEquipmentCount)
  24. static func Create(result : Dictionary) -> EntityData:
  25. var entity : EntityData = EntityData.new()
  26. entity._id = result.Name.hash()
  27. entity._name = result.Name
  28. if "SpritePreset" in result:
  29. entity._spritePreset = result.SpritePreset
  30. if "Collision" in result:
  31. entity._collision = result.Collision
  32. if "Radius" in result:
  33. entity._radius = clampi(result.Radius.to_int(), 0, ActorCommons.MaxEntityRadiusSize)
  34. if "Equipments" in result:
  35. for itemName in result.Equipments:
  36. var itemID : int = DB.GetCellHash(itemName)
  37. if itemID != DB.UnknownHash:
  38. var itemCell : ItemCell = DB.GetItem(itemID)
  39. if itemCell and itemCell.slot != ActorCommons.Slot.NONE:
  40. entity._equipments[itemCell.slot] = itemCell
  41. if "Textures" in result:
  42. for texture in result.Textures:
  43. entity._customTextures[ActorCommons.GetSlotID(texture) - ActorCommons.Slot.FIRST_MODIFIER] = result.Textures[texture]
  44. if "Shaders" in result:
  45. for shader in result.Shaders:
  46. var paletteId : int = DB.GetCellHash(result.Shaders[shader])
  47. entity._customShaders[ActorCommons.GetSlotID(shader) - ActorCommons.Slot.FIRST_MODIFIER] = DB.GetPalette(DB.Palette.SKIN, paletteId)
  48. if "DisplayName" in result:
  49. entity._displayName = result.DisplayName
  50. if "Behaviour" in result:
  51. entity._behaviour = AICommons.GetBehaviourFlags(result.Behaviour)
  52. if "Stat" in result:
  53. for statName in result.Stat:
  54. if statName in hashedStats:
  55. entity._stats[statName] = result.Stat[statName].hash()
  56. elif statName == "gender":
  57. entity._stats[statName] = ActorCommons.GetGenderID(result.Stat[statName])
  58. else:
  59. entity._stats[statName] = result.Stat[statName]
  60. if "SkillSet" in result:
  61. for skillName in result.SkillSet:
  62. var skillID : int = DB.GetCellHash(skillName)
  63. if DB.SkillsDB.has(skillID):
  64. entity._skillSet.append(skillID)
  65. entity._skillProba[skillID] = result.SkillSet[skillName]
  66. if "Drops" in result:
  67. for itemName in result.Drops:
  68. var itemID : int = DB.GetCellHash(itemName)
  69. if DB.ItemsDB.has(itemID):
  70. entity._drops.append(itemID)
  71. entity._dropsProba[itemID] = result.Drops[itemName]
  72. if "Spawns" in result:
  73. for entityName in result.Spawns:
  74. var entityID : int = entityName.hash()
  75. entity._spawns[entityID] = int(result.Spawns[entityName])
  76. return entity