extends Node #全局数据json的加载 var texture_json_path:String="res://json/texture.json" var texture_data:Dictionary var card_json_path:String="res://json/card.json" var card_data:Dictionary var script_json_path:String="res://json/script.json" var script_data:Dictionary var script_type_divide_data:Array=[] var event_json_path:String="res://json/event.json" var event_data:Dictionary var scene_json_path:String="res://json/scene.json" var scene_data:Dictionary var character_json_path:String="res://json/character.json" var character_data:Dictionary var map_json_path:String="res://json/map.json" var map_data:Dictionary var npc_json_path:String="res://json/npc.json" var npc_data:Dictionary var system_config_data:Dictionary={ } var system_game_data:Dictionary={ "unlock_character":["test_character_01","test_character_02"] } var now_game_data:Dictionary={ "character_data":{ }, "script_data":{ }, "now_scene":"scene_01", "difficulty":0, "gold":9999, "health":100, "spirit":999, "map":"map_01", "move_ability":1, "time_unix":0 } func get_move_ability(): return now_game_data["move_ability"] func get_time_dictionary(): var time_unix=int(now_game_data["time_unix"]) return Time.get_datetime_dict_from_unix_time(time_unix) #year、month、day、weekday、hour、minute 和 second func flow_time(data:Dictionary): var date=get_time_dictionary() var change_unix:float=0 if data.has("day"): var day=data["year"] change_unix+=day*86400 if data.has("hour"): var hour=data["hour"] change_unix+=3600*hour if data.has("minute"): var minute=data["minute"] change_unix+=minute*60 now_game_data["time_unix"]+=change_unix time_changed.emit() signal time_changed var triger:Dictionary={ "change_event":func (data):now_game_flow.show_event(data), "change_texture": func (data):now_game_flow.event_panel.change_texture(data), "change_text":func(data):now_game_flow.event_panel.change_text(data), "change_choice":func(data):now_game_flow.event_panel.change_choice(data), "increase_health":func (data):now_game_data.health-=data, "end_event":func(data):now_game_flow.event_panel.hide(), "flow_time":func (data):flow_time(data) } func call_triger(triger_type:String,data): if triger.has(triger_type): return triger[triger_type].call(data) else: return null var condition_triger:Dictionary={ "date_limit":"", "time_limit":"", "rand":"", } func move_scene(scene_id:String,distance): if scene_id==get_now_scene(): return false flow_time({ "minute":distance/get_move_ability() }) now_game_flow.change_scene(scene_id,distance) set_now_scene(scene_id) return true pass func get_now_scene(): return now_game_data["now_scene"] func set_now_scene(scene_id:String): now_game_data["now_scene"]=scene_id var now_game_flow:GameFlow func get_now_character_data(): return now_game_data["character_data"] func _ready() -> void: load_texture_data() load_script_data() load_event_data() load_scene_data() load_character_data() load_map_data() load_npc_data() func load_texture_data(): var file=FileAccess.open(texture_json_path,FileAccess.READ) var str=file.get_as_text() var dictionary:Dictionary=JSON.parse_string(str) for i in dictionary.keys(): var texture=load(dictionary[i]) if texture is Texture2D: dictionary[i]=texture texture_data=dictionary func load_script_data(): var file=FileAccess.open(script_json_path,FileAccess.READ) var str=file.get_as_text() var dictionary:Dictionary=JSON.parse_string(str) script_type_divide_data=[{},{},{},{}] for i in dictionary.keys(): dictionary[i]["id"]=i var data=dictionary[i] if data.has("type"): var type:int=int(data["type"]) script_type_divide_data[type][i]=data script_data=dictionary func load_event_data(): var file=FileAccess.open(event_json_path,FileAccess.READ) var str=file.get_as_text() var dictionary:Dictionary=JSON.parse_string(str) for i in dictionary.keys(): dictionary[i]["id"]=i event_data=dictionary func load_scene_data(): var file=FileAccess.open(scene_json_path,FileAccess.READ) var str=file.get_as_text() var dictionary:Dictionary=JSON.parse_string(str) for i in dictionary.keys(): dictionary[i]["id"]=i scene_data=dictionary pass func load_character_data(): var file=FileAccess.open(character_json_path,FileAccess.READ) var str=file.get_as_text() var dictionary:Dictionary=JSON.parse_string(str) for i in dictionary.keys(): dictionary[i]["id"]=i character_data=dictionary func load_map_data(): var file=FileAccess.open(map_json_path,FileAccess.READ) var str=file.get_as_text() var dictionary:Dictionary=JSON.parse_string(str) for i in dictionary.keys(): dictionary[i]["id"]=i map_data=dictionary func load_npc_data(): var file=FileAccess.open(npc_json_path,FileAccess.READ) var str=file.get_as_text() var dictionary:Dictionary=JSON.parse_string(str) for i in dictionary.keys(): dictionary[i]["id"]=i npc_data=dictionary func get_texture(id:String): if texture_data.has(id): return texture_data[id] else: return null func get_script_data(id:String): if script_data.has(id): var dictionary:Dictionary=script_data[id] return dictionary.duplicate() else: return null func get_all_script_data(): return script_type_divide_data.duplicate() func get_event_data(id:String): if event_data.has(id): var dictionary:Dictionary=event_data[id] return dictionary.duplicate() else: return null func get_scene_data(id:String): if scene_data.has(id): var dictionary:Dictionary=scene_data[id] return dictionary.duplicate() else: return null func get_character_data(id:String): if character_data.has(id): var dictionary:Dictionary=character_data[id] return dictionary.duplicate() else: return null func get_map_data(id:String): if map_data.has(id): var dictionary:Dictionary=map_data[id] return dictionary.duplicate() else: return null pass func get_npc_data(id:String): if npc_data.has(id): var dictionary:Dictionary=npc_data[id] return dictionary.duplicate() else: return null pass