Advertisement
01lifeleft

validate property example

Jun 18th, 2024
535
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Godot GLSL 2.97 KB | Source Code | 0 0
  1. @tool
  2. class_name StatusEffectDB extends Resource
  3.  
  4.  
  5. @export var display_name := "Status Effect Name"
  6. @export_multiline var display_desc := "This Status Effect does stuffs."
  7. @export var display_icon: CompressedTexture2D = null
  8. @export var display_hidden := false
  9.  
  10. @export_category("Data")
  11. @export var data_status_effect_type := TYPES.STATUS_EFFECT_TYPE.DEBUFF:
  12.     set(value):
  13.         data_status_effect_type = value
  14.         notify_property_list_changed()
  15. @export var data_stats_modifier: StatsModifier = null
  16. @export var data_stack_enabled := false:
  17.     set(value):
  18.         data_stack_enabled = value
  19.         notify_property_list_changed()
  20. @export var data_stack_max_count := 1
  21. @export var data_stack_expire_enabled := true:
  22.     set(value):
  23.         data_stack_expire_enabled = value
  24.         notify_property_list_changed()
  25. @export var data_stack_expire_time := 5.0
  26. @export var data_stack_expire_simultaneously := true
  27.  
  28. @export_category("DOT")
  29. @export var DOT_damage_type := TYPES.DAMAGE_TYPE.MAGICAL
  30. @export var DOT_damage_value_type := TYPES.DAMAGE_VALUE_TYPE.FLAT:
  31.     set(value):
  32.         DOT_damage_value_type = value
  33.         notify_property_list_changed()
  34. @export var DOT_damage_value_flat := 0.0
  35. @export var DOT_damage_value_scale := 1.0
  36.  
  37. @export_category("Removal")
  38. @export var removal_enabled := true:
  39.     set(value):
  40.         removal_enabled = value
  41.         notify_property_list_changed()
  42. @export var removal_by_cleanse := true
  43. @export var removal_by_purify := true
  44. @export var removal_by_damage_hit := false
  45. @export var removal_by_attack_hit := false
  46. @export var removal_by_skill_hit := false
  47. @export var removal_clear_all_stacks := true
  48.  
  49.  
  50. func _validate_property(property: Dictionary):
  51.     var property_name: String = property.name
  52.  
  53.     if property_name.contains("data_stack") and property_name != "data_stack_enabled":
  54.         if data_stack_enabled:
  55.             property.usage = PROPERTY_USAGE_DEFAULT
  56.             if property_name.contains("data_stack_expire") and property_name != "data_stack_expire_enabled":
  57.                 if data_stack_expire_enabled: property.usage = PROPERTY_USAGE_DEFAULT
  58.                 else: property.usage = PROPERTY_USAGE_NO_EDITOR
  59.         else: property.usage = PROPERTY_USAGE_NO_EDITOR
  60.    
  61.     if property_name.contains("DOT_damage_value") and property_name != "DOT_damage_value_type":
  62.         if property_name.contains("flat"):
  63.             if DOT_damage_value_type == TYPES.DAMAGE_VALUE_TYPE.FLAT: property.usage = PROPERTY_USAGE_DEFAULT
  64.             else: property.usage = PROPERTY_USAGE_NO_EDITOR
  65.         if property_name.contains("scale"):
  66.             if DOT_damage_value_type in [TYPES.DAMAGE_VALUE_TYPE.SCALE_ATK, TYPES.DAMAGE_VALUE_TYPE.SCALE_HP, TYPES.DAMAGE_VALUE_TYPE.SCALE_MAX_HP, TYPES.DAMAGE_VALUE_TYPE.SCALE_ARMOR]:
  67.                 property.usage = PROPERTY_USAGE_DEFAULT
  68.             else: property.usage = PROPERTY_USAGE_NO_EDITOR
  69.    
  70.     if property_name.contains("removal") and property_name != "removal_enabled":
  71.         if data_status_effect_type == TYPES.STATUS_EFFECT_TYPE.INNATE: removal_enabled = false
  72.         if removal_enabled: property.usage = PROPERTY_USAGE_DEFAULT
  73.         else: property.usage = PROPERTY_USAGE_NO_EDITOR
  74.  
Tags: Godot Gdscript
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement