extends Control onready var header_container = $"%HeaderContent" onready var body_container = $"%BodyContent" var nav_history = [] class nav_history_item: var screen_name var data_model_type var lookup_method var lookup_args func _init(screen_name, data_model_type, lookup_method, lookup_args): self.screen_name = screen_name self.data_model_type = data_model_type self.lookup_method = lookup_method self.lookup_args = lookup_args func nav_screen(screen_name, data_model_type, lookup_method, lookup_args): var screen = nav_history_item.new(screen_name, data_model_type, lookup_method, lookup_args) nav_history.push_back(screen) swap_screen(screen) func nav_back(): if nav_history.size() > 1: nav_history.pop_back() swap_screen(nav_history[-1]) func swap_screen(screen): #queue cleanup of old screen if header_container.get_child_count() > 0: header_container.get_child(0).queue_free() if body_container.get_child_count() > 0: body_container.get_child(0).queue_free() #load new screen var header = load("res://screens/"+screen.screen_name+"/Header.tscn").instance() var body = load("res://screens/"+screen.screen_name+"/Body.tscn").instance() #load data var data = screen.data_model_type.callv(screen.lookup_method,screen.lookup_args) header.populate(data) body.populate(data) #set new screen header_container.add_child(header) body_container.add_child(body) func _ready(): nav_screen("Schedule", TimeSlot, "get_by_schedule_name", ["default"])