Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | Luckynormi |
Hello community,
I have an AutoLoad Script “GlobaleVariable.gd” that has two dictionaries dictPersons and dictFriends. Both dictionaries are empty at start and get filled by function. dictPersons by a CSV reading function and dictFriends by values in code. This works good. Both globals are filled.
BUT:
I also assigned some (local) varables on different places in the main script “TestVars.gd” (outside/inside of “func _ready():” ) in the style: onready var test = GlobaleVariable.dictPersons.
I expected, these variables are identical to the global ones (like pointers to same memory address) but they aren’t.
The local variables, that have been assigned to “dictPersons” before the filling function was called, are empty. The one, that was called after, is filled correctly.
I thought: Ok, maybe a lag in the update of the local variables.
BUT:
The variable, that has been assigned to GlobaleVariable.dictFriends before its filling function has been executed, is filled correctly.
Shortform: Why is Test_A1 empty and Test_F1 isn’t.
Has someone an explanation?
Code: GlobaleVariable.gd
extends Node
onready var dictPersons = {}
onready var dictFriends = {}
Code: TestVars.gd
extends Node
onready var Test_A1 = GlobaleVariable.dictPersons
onready var Test_F1 = GlobaleVariable.dictFriends
var ScriptDict = {}
onready var Test_B1 = ScriptDict
func _ready():
var Test_A2 = GlobaleVariable.dictPersons
var Test_B2 = ScriptDict
var FunctionDict = {}
var Test_C2 = FunctionDict
FunctionDict = fun_Read_CSV_To_Dict()
var Test_C3 = FunctionDict
fun_Add_Friends()
print("After_Read_CSV_To_Dict")
print("\n\r")
print("Singleton: GlobaleVariable.dictPersons: ")
print(GlobaleVariable.dictPersons)
print("\n\r")
print("Test_A1, member variable, assigned before .csv read: ")
print(Test_A1)
print("\n\r")
print("Test_A2, function variable, assigned before read .csv:")
print(Test_A2)
print("\n\r")
print("Member: ScriptDict: ")
print(ScriptDict)
print("\n\r")
print("Test_B1, member variable, assigned before .csv read: ")
print(Test_B1)
print("\n\r")
print("Test_B2, function variable, assigned before read .csv:")
print(Test_B2)
print("\n\r")
print("Inside Function: FunctionDict: ")
print(FunctionDict)
print("\n\r")
print("Test_C2, function variable, assigned before read .csv:")
print(Test_C2)
print("\n\r")
print("Test_C3, function variable, assigned after read .csv:")
print(Test_C3)
print("\n\r")
print("Test_F1, member variable, assigned before the singleton has been changed. Similar to Test_A1 but not reading from .csv: ")
print(Test_F1)
func fun_Add_Friends():
GlobaleVariable.dictFriends["Name"]=["Tom", "Tina"]
GlobaleVariable.dictFriends["Age"]=[12, 14]
func fun_Read_CSV_To_Dict():
var file = File.new()
var bolFirstLine = true
var arrReadLine = []
var dictDB = {}
var arrHeadLine = []
var strColumn = ""
var strAgesFile = "res://Ages.csv"
file.open(strAgesFile, file.READ)
while !file.eof_reached():
arrReadLine = file.get_csv_line("\t")
if bolFirstLine == true: #Headline
arrHeadLine = arrReadLine
for intIndex in arrHeadLine.size():
strColumn = arrHeadLine[intIndex]
dictDB[strColumn] = []
bolFirstLine = false
else: #Dataline
for intIndex in arrReadLine.size():
if arrReadLine.size() == arrHeadLine.size(): #don't read empty or wrong lines
strColumn = arrHeadLine[intIndex]
dictDB[strColumn].append(arrReadLine[intIndex])
file.close()
GlobaleVariable.dictPersons = dictDB
ScriptDict = dictDB
return dictDB
Output:
— Debugging process started —
Godot Engine v3.2.3.stable.official - https://godotengine.org
OpenGL ES 3.0 Renderer: Intel(R) HD Graphics 620
After_Read_CSV_To_Dict
Singleton: GlobaleVariable.dictPersons:
{Age:[55, 48], Name:[Harry, Lisa]}
Test_A1, member variable, assigned before .csv read:
{}
Test_A2, function variable, assigned before read .csv:
{}
Member: ScriptDict:
{Age:[55, 48], Name:[Harry, Lisa]}
Test_B1, member variable, assigned before .csv read:
{}
Test_B2, function variable, assigned before read .csv:
{}
Inside Function: FunctionDict:
{Age:[55, 48], Name:[Harry, Lisa]}
Test_C2, function variable, assigned before read .csv:
{}
Test_C3, function variable, assigned after read .csv:
{Age:[55, 48], Name:[Harry, Lisa]}
Test_F1, member variable, assigned before the singleton has been changed. Similar to Test_A1 but not reading from .csv:
{Age:[12, 14], Name:[Tom, Tina]}
— Debugging process stopped —