extends CanvasLayer signal button_click # Local imports @onready var click_target = $ClickTarget # Other scene imports @onready var messages = $"../Messages" #@onready var narration = $"../Messages/Narration" @onready var generators = $"../Generators" @onready var analyzers = $"../Analyzers" # Global variables @onready var line_thresholds = [1, 5, 10, 25, 75, 300] @onready var next_threshold: int @onready var autoclicker_cost: int = 10 @onready var current_per_second_score: float = 0.0 @onready var second_scores = [] @export var energy_creator_click_value = 1 @export var l1_generator_initial_cost = 10 @export var l1_generator_click_value = 1 @export var l1_analyzer_initial_cost = 25 @export var l1_analyzer_click_cost = -1 signal interface_ready signal score_update(value) # Called when the node enters the scene tree for the first time. func _ready(): # SETUP # This is set in inspector options, but just in case. messages.narration.json_content = get_json_file_content(messages.narration.lines_file_path) click_target.buy_l1.visible = false click_target.buy_l1.text = "Add L1 Generator (costs " + str(generators.l1.cost) + ")" print("Emitting interface_ready signal.") interface_ready.emit() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): pass func update_score(new_score): messages.score.update(new_score) if messages.score.total_score == 1: await get_tree().create_timer(0.5).timeout messages.message.show_message_by_id(2) await get_tree().create_timer(1).timeout messages.message.show_message_by_id(3) elif messages.score.total_score == 10: await get_tree().create_timer(0.5).timeout messages.message.show_message_by_id(4) await get_tree().create_timer(1).timeout messages.message.show_message_by_id(5) await get_tree().create_timer(1).timeout messages.message.show_message_by_id(6) await get_tree().create_timer(1).timeout messages.message.show_message_by_id(7) await get_tree().create_timer(1).timeout messages.message.show_message_by_id(8) await get_tree().create_timer(1).timeout click_target.buy_l1.visible = true messages.message.show_message_by_id(9) func _on_add_item_target_pressed(): if messages.score.current_score < autoclicker_cost: pass else: generators.l1.click_value += 1 if not generators.l1.l1_auto_display.visible: generators.l1.l1_auto_text.text = generators.l1.text1 + str(generators.l1.click_value) + "x" + generators.l1.text2 generators.l1.l1_auto_display.show() generators.l1.start_clicking() messages.message.show_message_by_id(10) messages.score.update(0 - autoclicker_cost) autoclicker_cost = (autoclicker_cost * 1 + (generators.l1.click_value)) * 1.5 click_target.buy_l1.text = "Buy Autoclicker (costs " + str(autoclicker_cost) + ")" func _on_sps_timer_timeout(): if len(messages.score.prev_second_scores) >= 5: messages.score.prev_second_scores.pop_at(0) messages.score.prev_second_scores.append(messages.score.current_second_score) messages.score.current_second_score = 0 var avg_score: float = messages.score.prev_second_scores.reduce(func(acc, c): return acc + c, 0) current_per_second_score = avg_score / len(messages.score.prev_second_scores) messages.sps.text = str(current_per_second_score) + " per second" messages.sps_timer.start() func get_text_file_content(file_path): var file = FileAccess.open(file_path, FileAccess.READ) var content = file.get_as_text() return content func get_json_file_content(file_path): var file = FileAccess.open(file_path, FileAccess.READ) var content = file.get_as_text() var json_content = JSON.parse_string(content) return json_content func _on_message_timer_timeout(): pass # Replace with function body. func update_second_score(new_score): pass func _on_narration_end_introduction(): click_target.energy_creator.visible = true func _on_energy_creator_pressed(): messages.sps.visible = true update_score(energy_creator_click_value) func _on_buy_l_1_generator_pressed(): update_score(l1_generator_initial_cost) func _on_buy_l_1_analyzer_pressed(): update_score(l1_analyzer_initial_cost)