No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DialogicSingleton.gd 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. extends Node
  2. var current_definitions := {}
  3. var default_definitions := {}
  4. var current_timeline := ''
  5. func _init() -> void:
  6. # Load saves on script init
  7. init(false)
  8. func init(reset: bool=false) -> void:
  9. # Loads saved definitions into memory
  10. DialogicResources.init_saves(reset)
  11. current_definitions = DialogicResources.get_saved_definitions()
  12. default_definitions = DialogicResources.get_default_definitions()
  13. current_timeline = DialogicResources.get_saved_state_general_key('timeline')
  14. func get_definitions_list() -> Array:
  15. return DialogicDefinitionsUtil.definitions_json_to_array(current_definitions)
  16. func get_definitions() -> Dictionary:
  17. return current_definitions
  18. func get_default_definitions() -> Dictionary:
  19. return default_definitions
  20. func get_default_definitions_list() -> Array:
  21. return DialogicDefinitionsUtil.definitions_json_to_array(default_definitions)
  22. func save_definitions():
  23. return DialogicResources.save_saved_definitions(current_definitions)
  24. func get_variable(name: String) -> String:
  25. for d in current_definitions['variables']:
  26. if d['name'] == name:
  27. return d['value']
  28. return ''
  29. func set_variable(name: String, value) -> void:
  30. for d in current_definitions['variables']:
  31. if d['name'] == name:
  32. d['value'] = str(value)
  33. func set_variable_from_id(id: String, value: String, operation: String) -> void:
  34. var target_def: Dictionary;
  35. for d in current_definitions['variables']:
  36. if d['id'] == id:
  37. target_def = d;
  38. if target_def != null:
  39. var converted_set_value = value
  40. var converted_target_value = target_def['value']
  41. var is_number = converted_set_value.is_valid_float() and converted_target_value.is_valid_float()
  42. if is_number:
  43. converted_set_value = float(value)
  44. converted_target_value = float(target_def['value'])
  45. var result = target_def['value']
  46. # Do nothing for -, * and / operations on string
  47. match operation:
  48. '=':
  49. result = converted_set_value
  50. '+':
  51. result = converted_target_value + converted_set_value
  52. '-':
  53. if is_number:
  54. result = converted_target_value - converted_set_value
  55. '*':
  56. if is_number:
  57. result = converted_target_value * converted_set_value
  58. '/':
  59. if is_number:
  60. result = converted_target_value / converted_set_value
  61. target_def['value'] = str(result)
  62. func get_glossary(name: String) -> Dictionary:
  63. for d in current_definitions['glossary']:
  64. if d['name'] == name:
  65. return d
  66. return {
  67. 'title': '',
  68. 'text': '',
  69. 'extra': ''
  70. }
  71. func set_glossary(name: String, title: String, text: String, extra: String) -> void:
  72. for d in current_definitions['glossary']:
  73. if d['name'] == name:
  74. d['title'] = title
  75. d['text'] = text
  76. d['extra'] = extra
  77. func set_current_timeline(timeline: String):
  78. current_timeline = timeline
  79. DialogicResources.set_saved_state_general_key('timeline', timeline)
  80. func get_current_timeline() -> String:
  81. return current_timeline