Created
February 7, 2024 21:18
-
-
Save lad1337/5ffc1b070611db32b912b9bba02a189e to your computer and use it in GitHub Desktop.
csv to resource godot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@tool | |
extends EditorPlugin | |
@export_file(".csv") var csv_path = "res://data/elements/elements.csv" | |
@export_dir var tres_dir = "res://resources/elements/" | |
const converter_path = preload("res://addons/elementimporter/ElementImporter.tscn") | |
var dockedScene | |
func _enter_tree(): | |
dockedScene = converter_path.instantiate() | |
dockedScene.CSV_path = csv_path | |
dockedScene.tres_dir = tres_dir | |
add_control_to_dock(DOCK_SLOT_RIGHT_UR, dockedScene) | |
func _exit_tree(): | |
remove_control_from_docks(dockedScene) | |
dockedScene.queue_free() | |
func read(): | |
print("Loading...") | |
func _on_button_pressed(): | |
read() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@tool | |
extends Control | |
@onready var e_list = $VBoxContainer/ScrollContainer/VBoxContainer | |
var CSV_path : String | |
var tres_dir : String | |
func main(): | |
print('Reading CSV: %s' % CSV_path) | |
for old in e_list.get_children(): | |
old.queue_free() | |
var csv = FileAccess.open(CSV_path, FileAccess.READ) | |
var elements : Array = read(csv) | |
for e in elements: | |
var e_label : Label = Label.new() | |
#print(e) | |
e = convert_to_element(e) | |
e_label.text = "%s %s" % [e.atomic_number, e.name] | |
e_list.add_child(e_label) | |
var location = "%s%s.tres" % [tres_dir, e.atomic_number] | |
print("Creating %s " % location) | |
ResourceSaver.save(e, location) | |
func convert_to_element(data : Dictionary) -> ElementResource: | |
printt(data["AtomicNumber"], data["Element"]) | |
var e = ElementResource.new() | |
e.atomic_number = int(data["AtomicNumber"]) | |
e.name = data["Element"] | |
e.symbol = data["Symbol"] | |
e.atomic_mass = float(data["AtomicMass"]) | |
e.group = int(data["Group"]) | |
e.period = int(data["Period"]) | |
e.n_neutrons = int(data["NumberofNeutrons"]) | |
e.n_protons = int(data["NumberofProtons"]) | |
e.n_electrons = int(data["NumberofElectrons"]) | |
e.radioactive = data["Radioactive"] == "True" | |
e.reactiveness = float(data["Reactiveness"]) | |
e.electronegativity = float(data["Electronegativity"]) | |
e.l = float(data["l"]) | |
e.n = float(data["n"]) | |
e.type = data["Type"] | |
match data["Phase"]: | |
"solid": | |
e.phase = ElementResource.PHASE.SOLID | |
"gas": | |
e.phase = ElementResource.PHASE.GAS | |
"liq": | |
e.phase = ElementResource.PHASE.LIQUID | |
"artificial": | |
e.phase = ElementResource.PHASE.ARTIFICIAL | |
match [data["Metal"], data["Nonmetal"], data["Metalloid"]]: | |
["True", ..]: | |
e.meatal_type = ElementResource.METAL_TYPE.METAL | |
["False", "True", ..]: | |
e.meatal_type = ElementResource.METAL_TYPE.NONE_METAL | |
["False", "False", "True"]: | |
e.meatal_type = ElementResource.METAL_TYPE.METALLOID | |
return e | |
func read(file : FileAccess) -> Array: | |
var out = [] | |
var header : Array | |
while file.get_position() < file.get_length(): | |
var row = file.get_csv_line() | |
if not header: | |
header = row | |
continue | |
#print(row) | |
var e = _create_dict(header, row) | |
#print(e) | |
out.append(e) | |
return out | |
func _create_dict(header : Array, data : Array) -> Dictionary: | |
var e : Dictionary | |
for i in header.size(): | |
e[header[i]] = data[i] | |
return e | |
func _on_button_pressed(): | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment