#How Can I Sort UI Elements Properly

1 messages · Page 1 of 1 (latest)

rotund vigil
#

this mech status ui

class_name MechStatusUI extends Node

var mech_id: int = 0
@onready var mech_avatar: TextureRect = %Avatar
@onready var mech_name: Label = %Name
@onready var mech_health: TextureProgressBar = %Health
@onready var mech_shield: TextureProgressBar = %Shield
@onready var number = %Number

func set_mech(_mech_id: int, mech_data: MechData) -> void:
    print("Setting mech data", mech_data.avatar)
    print("mech_avatar", mech_avatar)
    self.mech_id = _mech_id
    mech_avatar.texture = mech_data.avatar
    number.text = str(1 + mech_id)
    mech_health.max_value = mech_data.max_health
    mech_health.value = mech_data.max_health
    mech_shield.max_value = mech_data.max_shield
    mech_shield.value = mech_data.max_shield

func update_health(new_health: int) -> void:
    mech_health.value = new_health

func update_shield(new_shield: int) -> void:
    mech_shield.value = new_shield


func _on_button_pressed():
    get_tree().change_scene_to_file("res://scenes/mech_status_ui/mech_status_expanded_ui.tscn")
```
#

and this is mech status manager

extends Control

var mech_status_scene: PackedScene = preload("res://scenes/mech_status_ui/mech_status_ui.tscn")
var mech_expanded_status: PackedScene = preload("res://scenes/mech_status_ui/mech_status_expanded_ui.tscn")
var status_nodes: Array[MechStatusUI] = []

func spawn_mech(mech_id: int, mech: MechData):
    print("Spawning mech status for mech_id: ", mech_id)
    var mech_status = mech_status_scene.instantiate()
    add_child(mech_status)
    if mech_status is MechStatusUI:
        mech_status.set_mech(mech_id, mech)
    else:
        print("mech_status is not a MechStatusUI instance")
    mech_status.set_mech(mech_id, mech)
    status_nodes.append(mech_status)
    
func spawn_expanded_mech(mech_id: int, mech: MechData):
    print("Spawning mech status for mech_id: ", mech_id)
    var mech_status = mech_expanded_status.instantiate()
    add_child(mech_status)
    mech_status.set_mech(mech_id, mech)
    status_nodes.append(mech_status)

func update_health(mech_id: int, new_health: int):
    for status_node in status_nodes:
        if status_node.mech_id == mech_id:
            status_node.update_health(new_health)

func update_shield(mech_id: int, new_shield: int):
    for status_node in status_nodes:
        if status_node.mech_id == mech_id:
            status_node.update_shield(new_shield)
#

this is mech data

class_name MechData extends Resource

enum PILOT {
    HUMAN,
    AI,
    NONE
}

@export var model_name: String = ""
@export_range(2000, 7000, 100, "suffix:mm/s") var speed: int = 5000
@export var slug: String = ""
@export var scene: PackedScene = null
# Faction
@export var faction: NexusRift.FACTION = NexusRift.FACTION.RM
@export var left_weapon: WeaponData = null
@export var left_weapon_position: Vector3 = Vector3(0, 1, 0)
@export var right_weapon: WeaponData = null
@export var right_weapon_position: Vector3 = Vector3(0, 1, 0)
@export var shoulder_weapon: WeaponData = null

@export var avatar: Texture2D = null
@export var max_health: int = 100
@export var max_shield: int = 100
@export var mech_name: String = "TEST MECH NAME"


# RM
# LH - 3.195, 6.251, 3.96
# RH3.195, 6.251, 3.96

# ZHI
# LH 0.667,1.098,0.488
# RH null

# BC
# LH 3.124,5.877,0
# RH null