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.

Main Interface.gd 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. extends CanvasLayer
  2. signal button_click
  3. # Local imports
  4. @onready var click_target = $ClickTarget
  5. # Other scene imports
  6. @onready var messages = $"../Messages"
  7. #@onready var narration = $"../Messages/Narration"
  8. @onready var generators = $"../Generators"
  9. @onready var analyzers = $"../Analyzers"
  10. # Global variables
  11. #@onready var line_thresholds = [1, 5, 10, 25, 75, 300]
  12. @onready var next_threshold: int
  13. @onready var autoclicker_cost: int = 10
  14. @onready var current_per_second_score: float = 0.0
  15. @onready var second_scores = []
  16. @export var energy_creator_click_value = 1
  17. @export var l1_generator_purchase_cost = -10
  18. @export var l1_generator_click_value = 1
  19. @export var l1_generator_mult = 1.15
  20. @export var l1_generator_num = 0
  21. @export var l1_analyzer_purchase_cost = -25
  22. @export var l1_analyzer_click_cost = -2.5
  23. @export var l1_analyzer_mult = 1.25
  24. @export var l1_analyzer_num = 0
  25. signal interface_ready
  26. signal score_update(value: float)
  27. # Called when the node enters the scene tree for the first time.
  28. func _ready():
  29. # SETUP
  30. # This is set in inspector options, but just in case.
  31. click_target.buy_l1_generator.visible = false
  32. messages.narration.json_content = get_json_file_content(messages.narration.lines_file_path)
  33. print("Emitting interface_ready signal.")
  34. interface_ready.emit()
  35. # Called every frame. 'delta' is the elapsed time since the previous frame.
  36. func _process(delta):
  37. pass
  38. func update_score(new_score):
  39. score_update.emit(new_score)
  40. for seq in messages.narration.sequences:
  41. if seq["type"] == "score":
  42. if messages.score.total_score >= seq["value"] and seq["seen"] == false:
  43. messages.narration.display_message_section(seq["name"])
  44. seq["seen"] = true
  45. func _on_message_timer_timeout():
  46. pass # Replace with function body.
  47. func update_second_score(new_score):
  48. pass
  49. func _on_energy_creator_pressed():
  50. messages.sps.visible = true
  51. update_score(energy_creator_click_value)
  52. func _on_buy_l_1_generator_pressed():
  53. if messages.score.current_score < l1_generator_purchase_cost:
  54. pass
  55. update_score(l1_generator_purchase_cost)
  56. l1_generator_purchase_cost *= l1_generator_mult
  57. l1_generator_purchase_cost = floor(l1_generator_purchase_cost)
  58. generators.l1.add_generator()
  59. func _on_buy_l_1_analyzer_pressed():
  60. if messages.score.current_score < l1_analyzer_purchase_cost:
  61. pass
  62. update_score(l1_analyzer_purchase_cost)
  63. l1_analyzer_purchase_cost *= l1_analyzer_mult
  64. l1_analyzer_purchase_cost = floor(l1_analyzer_purchase_cost)
  65. analyzers.l1.add_analyzer()
  66. # UTILITY FUNCTIONS
  67. func get_text_file_content(file_path):
  68. var file = FileAccess.open(file_path, FileAccess.READ)
  69. var content = file.get_as_text()
  70. return content
  71. func get_json_file_content(file_path):
  72. var file = FileAccess.open(file_path, FileAccess.READ)
  73. var content = file.get_as_text()
  74. var json_content = JSON.parse_string(content)
  75. return json_content
  76. func _on_narration_section_ended(section_name):
  77. if section_name == "introduction":
  78. click_target.energy_creator.visible = true
  79. elif section_name == "explain_mechanism":
  80. click_target.buy_l1_generator.visible = true
  81. elif section_name == "afford_analyzer":
  82. click_target.buy_l1_analyzer.visible = true