На этот раз меня укусили общие ресурсы в интерфейсе Godot. У каждого юнита в моём маленьком прототипе есть сцена полоски здоровья, это ProgressBar с переопределённым StyleBoxFlat для заливки. Когда здоровье падает ниже 25, я хотел, чтобы краснела только эта полоска, и написал вот так.
func _on_health_changed(value: float) -> void:
$Bar.value = value
var fill := $Bar.get_theme_stylebox("fill") as StyleBoxFlat
fill.bg_color = Color.RED if value < 25.0 else Color.GREEN
Первый юнит получает удар, и краснеют все полоски на экране. Переопределение было подресурсом, сохранённым внутри сцены полоски, и каждый экземпляр сцены получил один и тот же объект StyleBoxFlat. Меняешь у него свойство, и оно меняется у всех. Очевидно, когда видишь, объект-то один.
Не уверен я в исправлении. Вызвать duplicate() в _ready, включить resource_local_to_scene или вообще перестать писать в стайлбокс?
