I have a function where I set two RichTextLabels to the name of the enemy and how much health it has, but every time I call this function from another script it says its null. Even though in the same script in the _ready() func Its not.
I think it might be because my global var are being set to null when I create a reference to the script but idk.
Also please excuse my spaghetti code.
extends Node2D
var enemy_manager_instance
var end_turn_instance
var level
var level_round
func _ready():
enemy_manager_instance = preload("res://scripts/EnemyManager.gd").new()
enemy_manager_instance.get_label_nodes()
end_turn_instance = preload("res://scripts/EndTurn.gd").new()
level = 1
level_round = 1
func enemy_turn():
print("ENEMY TURN")
if !enemy_manager_instance and !end_turn_instance: #_ready wasnt running because
enemy_manager_instance = preload("res://scripts/EnemyManager.gd").new() #This does not run _ready() which has been causing my issues
enemy_manager_instance.get_label_nodes()
end_turn_instance = preload("res://scripts/EndTurn.gd").new()
level = 1
level_round = 1
enemy_manager_instance.enemy_picker(level)
if enemy_manager_instance.enemy_health <= 0: #If dead
level += 1
level_round = 1
enemy_manager_instance.enemy_picker(level)
else: #not dead
enemy_manager_instance.enemy_move_picker()
extends Node2D
#Picks decides what enemy is at each round and assigns stats
#Also picks what move they are going to do
var CARD_DATABASE_REF
var PLAYER_MANAGER_REF
var rng : RandomNumberGenerator
var center_of_screen_x
var enemy_name
var enemy_health
var enemy_block
var enemy_health_stat
var enemy_damage_stat
var enemy_block_stat
@onready var enemy_name_node: RichTextLabel = $enemy_name_value
@onready var health_value_node: RichTextLabel = $health_value
var rich_label_text_temp
var db_ref_flag = true
func _ready():
CARD_DATABASE_REF = preload("res://scripts/CardDatabase.gd").new()
PLAYER_MANAGER_REF = preload("res://scripts/Player_Manager.gd").new()
rng = RandomNumberGenerator.new()
var enemy = $"."
center_of_screen_x = get_viewport_rect().size.x / 2
enemy.position = Vector2(center_of_screen_x, 250)
#enemy_name_node = get_node("enemy_name_value")
#health_value_node = get_node("health_value")
set_intial_text_stats("Example", 56)
func get_label_nodes():
if !enemy_name_node:
enemy_name_node = $enemy_name_value
if !enemy_name_node:
print("enemy_name_value node not found!")
else:
print("enemy_name_value node found:", enemy_name_node)
if !health_value_node:
health_value_node = $health_value
if !health_value_node:
print("health_value node not found!")
else:
print("health_value node found:", health_value_node)
func enemy_picker(level):
if level == 1:
enemy_name = "LilGoblinBro"
assign_enemy_stats(enemy_name)
elif level == 2:
enemy_name = "GhostyWosty"
assign_enemy_stats(enemy_name)
elif level == 3:
enemy_name = "FlyingMongoose"
assign_enemy_stats(enemy_name)
else:
level = 1
func assign_enemy_stats(name):
while db_ref_flag == true:
if CARD_DATABASE_REF:
db_ref_flag = false
enemy_block = 0
enemy_health = CARD_DATABASE_REF.ENEMIES[name][0]
enemy_damage_stat = CARD_DATABASE_REF.ENEMIES[name][1]
enemy_block_stat = CARD_DATABASE_REF.ENEMIES[name][2]
call_deferred("set_intial_text_stats", name, enemy_health)
else:
CARD_DATABASE_REF = preload("res://scripts/CardDatabase.gd").new()
PLAYER_MANAGER_REF = preload("res://scripts/Player_Manager.gd").new()
func enemy_move_picker(): #Random number decides what enemy does
if rng:
var move_decider = floor(rng.randi_range(1, 3))
if move_decider == 1:
PLAYER_MANAGER_REF.update_health(enemy_damage_stat)
update_intension("Attack", enemy_damage_stat)
elif move_decider == 2:
enemy_block = enemy_block + enemy_block_stat
update_intension("Block", enemy_block)
else:
rng = RandomNumberGenerator.new()
func _update_health(damage_taken):
if enemy_block_stat - damage_taken <= 0:
var damage_to_health = abs(enemy_block - damage_taken)
enemy_health = enemy_health - damage_to_health
enemy_block = 0
#ealth_value_node.text = str(enemy_health)
else:
enemy_block = enemy_block - damage_taken
$block_value.text = str(enemy_block)
func update_intension(intension_type, intension_value): #Shows player what the enemys next move is
$intension_type.text = str(intension_type)
$intension_value.text = str(intension_value)
func set_intial_text_stats(input_name, health):
if enemy_name_node and health_value_node:
enemy_name_node.text = str(input_name)
health_value_node.text = str(health)
else:
print("error, pain")