extends Node signal new_day var raycasts_count = 100 var raycast_queue = [] var astar: AStar # Need to make more generic var exit_door: Node func _ready(): set_save_slot(0) enum periods {MORNING, DAY, EVENING, NIGHT} var game_day: int = 0 var day_period: int = periods.MORNING var game_hour: int = 0 var game_minute: int = 0 var acc_time:float = 0.0 var time_active = false func _process(delta): if time_active: update_time(delta) func update_time(delta): acc_time += delta if acc_time >= 1.0: game_minute += 1 acc_time -= 1.0 if game_minute == 60: game_minute = 0 game_hour += 1 if game_hour == 24: game_hour = 0 game_day += 1 match(game_hour): 23,0,1,2,3: day_period = periods.NIGHT 4,5,6,7,8,9,10,11: day_period = periods.MORNING 12,13,14,15,16: day_period = periods.DAY 17,18,19,20,21,22: day_period = periods.EVENING func start_time(): time_active = true func stop_time(): time_active = false func visibility_check(ch1, ch2): var direction: Vector3 = -ch1.global_transform.basis[2].normalized() var to_ch2: Vector3 = (ch2.global_transform.origin - ch1.global_transform.origin).normalized() var angle = direction.angle_to(to_ch2) if abs(angle) < PI / 2.0: var space_state = ch1.get_world().direct_space_state var ch1_pos = ch1.global_transform.origin var ch2_pos = ch2.global_transform.origin var up = Vector3(0, 0.6, 0) var front_result = space_state.intersect_ray(ch1_pos + up, ch2_pos + up, [ch1, ch2], 0xffff) if !front_result.has("collider"): return true return false var player = null var smart_object = [] const save_slot_base = "user://save" var save_slot = "" func set_save_slot(id: int): save_slot = save_slot_base + str(id) var save_data: Dictionary = {} func save_characters(): for k in get_tree().get_nodes_in_group("characters"): var spawner = k.get_meta("spawner") var stats = {} for s in rpg.save_stats: stats[s] = k.get_meta(s) spawner.set_meta("stats", stats) func save_game(): print("save game") save_data.game_day = game_day save_data.game_hour = game_hour save_data.day_period = day_period assert(save_slot.length() > 0) var fd = File.new() fd.open(save_slot, File.WRITE) var data = JSON.print(save_data, "\t", true) fd.store_string(data) fd.close() func load_game(): assert(save_slot.length() > 0) var fd = File.new() if fd.open(save_slot, File.READ) == OK: var data = fd.get_as_text() var parse: = JSON.parse(data) save_data = parse.result game_day = save_data.game_day game_hour = save_data.game_hour day_period = save_data.day_period fd.close()