extends Node var raycasts_count = 100 var raycast_queue = [] func _ready(): set_save_slot(0) 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(): 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 fd.close()