Global variables aren't workig

Godot Version

4

Question

i made a global script made to track wich sceneis currently being played but it seems as i don’t have access to any var of said global the text is the global code and the image where im trying to use it thanks

extends Node

@export var first_scene_index: int =0 ;
@export var editor_scenes:Array[PackedScene];

var loadable_scenes : Array[Loadablescene]
var current_scene :LoadedScene
func _ready() → void:
populate_loadable_scenes_list()
load_level_scene_by_index(first_scene_index)
func _process(delta: float) → void:
return

func load_level_scene_by_index(index: int) ->LoadedScene:
if (index< 0 or index>=loadable_scenes.size()-1):
return null
return load_level_scene(loadable_scenes[index], index)
func load_level_scene_by_name(scene_name:String) → LoadedScene:
var i: int=0
while i < loadable_scenes.size():
if scene_name == loadable_scenes[i].scene_name:
return load_level_scene(loadable_scenes[i], i)
i +=1
return null

func load_level_scene(scene_to_load: Loadablescene, index:int) → LoadedScene:
if (not scene_to_load.scene.can_instantiate()):
return null
if (current_scene != null):
current_scene.scene.queue_free()
current_scene=null
var new_scene : Node = scene_to_load.scene.instantiate()

if new_scene==null:
	return null
current_scene=LoadedScene.new()

current_scene.scene=new_scene
current_scene.scene_index=index
current_scene.scene_name=scene_to_load.scene_name

add_child(new_scene)
print(new_scene.name)
return current_scene

class LoadedScene:
var scene_index : int
var scene_name :String
var scene:Node

func populate_loadable_scenes_list() → void:
for scene in editor_scenes:
print(add_level_scene_to_scene_array(scene));

func add_level_scene_to_scene_array(scene:PackedScene) → int:
if (scene==null):
return -1

var scene_name =scene.resource_path.get_file().get_basename()

print(scene_name)

var i : int=0;
while i < loadable_scenes.size():
	if (scene_name==loadable_scenes[i].scene_name):
		printerr("duplicate scene name: "+ name)
		return -1
	i +=1
var loadable_scene :Loadablescene = Loadablescene.new()

loadable_scene.scene_name=scene_name
loadable_scene.scene= scene
loadable_scenes.append(loadable_scene)

return loadable_scenes.size() -1

class Loadablescene:
var scene_name:String
var scene:PackedScene

func remove_level_scene_drom_array_by_index(index: int) → bool :
if (index< 0 or index>loadable_scenes.size()):
return false

loadable_scenes.remove_at(index)
readjust_current_level_scenes_index()

return true

func readjust_current_level_scenes_index() → void:
var i : int=0
while i < loadable_scenes.size():
if loadable_scenes[i].scene_name==current_scene.scene_name:
current_scene.scene_index=i
return
i+=1
func remove_level_scene_drom_array_by_name(scene_name:String) → bool:
var i : int=0
while i < loadable_scenes.size():
if loadable_scenes[i].scene_name==scene_name:
loadable_scenes.remove_at(i)
readjust_current_level_scenes_index()
return true
i +=1
return false

You’re trying to access a variable named index but you never actually declare it.

i am sorry i’m prety new at this shoud i declearit in the global script or the script i want to use it? thanks

If you want the variable to be global - you need to declare it in the global script. That’s kinda the point of having a global script - to host variables that are accessible from everywhere, aka global variables.

Okay thanks!