Issue With Progress Bar, The Hud Only Updates Text At Start Of Game!

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

LevelClass := class {
    AgentOB : agent
    HUD : hud_message_device
    CSD : cinematic_sequence_device

    var Level : int = 0
    MaxLevel : int = 150

    var CompletedLevels : int = 0
    var BaseDifficulty : float = 1.0
    var DifficultyScaling : float = 1.0

    var UpdateQueue : []int = array{}
    var IsProcessingQueue : logic = false

    var DifficultyMultiplerInClass : float = 1.0

    GetCurrentDifficulty()<transacts> : float =
        return BaseDifficulty + (DifficultyScaling * (CompletedLevels * DifficultyMultiplerInClass))

    MessageFromString<localizes>(InValue : string)<transacts> : message = "{InValue}"

    UpdateHUDText() : void = {
        Calc := (Level * 1.0) / (MaxLevel * 1.0)

        if (ProgressValue := Int[(Calc * 100)]) {
            HUD.SetText(MessageFromString("Progress: {ProgressValue}%"))
        }
    }
} 

level_class_data_persistable := class <persistable><final> {
    Level : int = 0
    MaxLevel : int = 0
}

level_class_data_update<constructor>(OldStat : level_class_data_persistable)<transacts> := level_class_data_persistable {
    Level := OldStat.Level
    MaxLevel := OldStat.MaxLevel
}

var Data:weak_map(player, level_class_data_persistable) = map{}


level_device := class(creative_device):

    @editable CSD_A : []cinematic_sequence_device = array{}
    @editable HUD_A : []hud_message_device = array{}
    @editable TriggerDeviceTest : trigger_device = trigger_device{}

    @editable WantDifficulty : logic = false

    @editable WantPersistance : logic = false
    @editable DifficultyMultipler : float = 1.0
    
    var PlayerHUDMap : [agent]LevelClass = map{}

    OnBegin<override>()<suspends>:void=
        AllPlayers := GetPlayspace().GetPlayers()

        for (Index -> Player : AllPlayers) {
            spawn{OnPlayerJoined(Player)}
        }

        Sleep(0.3)

        GetPlayspace().PlayerAddedEvent().Subscribe(PlayerJoinedNonSuspends)
        GetPlayspace().PlayerRemovedEvent().Subscribe(OnPlayerRemoved)

        TriggerDeviceTest.TriggeredEvent.Subscribe(TriggerFunction)
        
    PlayerJoinedNonSuspends(Player : player) : void = {
        spawn{OnPlayerJoined(Player)}
    }

    OnPlayerJoined(Player : player) <suspends>: void = {
        for (Index -> PlayerP : GetPlayspace().GetPlayers()) {
            if (PlayerP = Player) {
                if (HUD_I := HUD_A[Index], CSD_I := CSD_A[Index]) {
                    NewPlayerClass := LevelClass {
                        AgentOB := Player
                        HUD := HUD_I
                        CSD := CSD_I
                    }
            
                    if (set PlayerHUDMap[Player] = NewPlayerClass) {}

                    if (not Data[Player]) {
                        if (set Data[Player] = level_class_data_persistable{}) {}
                    }

                    if (WantPersistance = true) {
                        if (PlayerPersistanceData := Data[Player]) {
                            Print("Persistance Data: {PlayerPersistanceData.Level}")
                            set NewPlayerClass.Level = PlayerPersistanceData.Level
                        }
                    }

                    set NewPlayerClass.DifficultyMultiplerInClass = DifficultyMultipler

                    NewPlayerClass.UpdateHUDText()

                    CSD_I.Play(Player)
                    CSD_I.Pause(Player)
                    Sleep(0.5)
                    HUD_I.Show(Player)
                    AnimateBar(Player, NewPlayerClass)
                }
            }
        }
    }

    OnPlayerRemoved(PlayerLeft : agent): void = {
        if (Agent := agent[PlayerLeft]) {
            if (ActualPlayer := PlayerHUDMap[Agent]) {
                var TempPlayerMap : [agent]LevelClass = map{}
                
                for (Key -> Value : PlayerHUDMap, Key <> Agent) {
                    set TempPlayerMap = ConcatenateMaps(TempPlayerMap, map{Key => Value})
                }

                set PlayerHUDMap = TempPlayerMap
            }
        }
    }

    TriggerFunction(PossibleAgent : ?agent) : void = {
        if (Agent := PossibleAgent?) {
            if (Player := player[Agent], PlayerClass := PlayerHUDMap[Player]) {
                Print("Should Do The Thing")
                
                UpdateProgress(Player, 10)
            }
        }
    }

    UpdateProgress<public>(Player : player, BaseProgress : int) : void = {
        if (PlayerClass := PlayerHUDMap[Player]) {
            var CurrentDifficulty : float = 0.0

            if (WantDifficulty = true) {
               set  CurrentDifficulty = PlayerClass.GetCurrentDifficulty()
            } else {
               set CurrentDifficulty = 1.0
            }
    
            if (AdjustedProgressIF := Int[(BaseProgress * 1.0) / CurrentDifficulty]) {
                var AdjustedProgress : int = AdjustedProgressIF
                
                if (AdjustedProgress < 1) { set AdjustedProgress = 1 }
            
                spawn{UpdateProgressBarQueue(Player, PlayerClass, AdjustedProgress)}
            }
        }
    }

    UpdateProgressBarQueue<public>(Player : player, PlayerClass : LevelClass, ChangeLevel : int) <suspends>: void = {
        set PlayerClass.UpdateQueue += array{ChangeLevel}

        if (PlayerClass.IsProcessingQueue = false) {
            set PlayerClass.IsProcessingQueue = true
        
            loop:
                if (PlayerClass.UpdateQueue.Length > 0) {
                    if (Update := PlayerClass.UpdateQueue[0], RemovedArray := PlayerClass.UpdateQueue.Slice[1]) {
                        set PlayerClass.UpdateQueue = RemovedArray
                        
                        if (PlayerClass.Level + Update >= PlayerClass.MaxLevel) {
                            set PlayerClass.CompletedLevels += 1
                            set PlayerClass.Level = 0
                            PlayerClass.CSD.SetPlaybackFrame(0)
                            Print("Level Complete! New Difficulty: {PlayerClass.GetCurrentDifficulty()}")
                        } else {
                            set PlayerClass.Level += Update
                        }

                        Print("Level: {PlayerClass.Level}, Difficulty: {PlayerClass.GetCurrentDifficulty()}")
                        AnimateBar(Player, PlayerClass)
                    }
                } else {
                    set PlayerClass.IsProcessingQueue = false

                    if (PlayerData := Data[Player]) {
                        if:
                            OldData := Data[Player]
    
                            set Data[Player] = level_class_data_persistable {
                                level_class_data_update<constructor>(OldData)
    
                                Level := PlayerClass.Level
                            }
                        then:
                            
                    }

                    PlayerClass.UpdateHUDText()

                    break
                }
        }
    }

    AnimateBar<public>(Player : player, PlayerClass : LevelClass) <suspends>: void = {
        Print("{PlayerClass.Level}")

        CSD := PlayerClass.CSD
        HUD := PlayerClass.HUD

        Level := PlayerClass.Level
        MaxLevel := PlayerClass.MaxLevel
        
        Calc := (Level * 1.0) / (MaxLevel * 1.0)
        Calc2 := Calc * MaxLevel

        Print("{Calc2}")

        if (FullCalc := Int[Calc2]) {
            var Number : int = CSD.GetPlaybackFrame()
            
            if (FullCalc > Number) {
                loop:
                    Sleep(0.0)
                    CSD.SetPlaybackFrame(Number)
                    if (Number = FullCalc) {
                        if (Number = 150) {
                            set PlayerClass.CompletedLevels += 1
                            Print("Level Complete! New Difficulty: {PlayerClass.GetCurrentDifficulty()}")

                            set PlayerClass.Level = 0
                            CSD.SetPlaybackFrame(0)
                        }
                        break
                    } else {
                        set Number += 1
                    }
            } else {
                loop:
                    Sleep(0.0)
                    CSD.SetPlaybackFrame(Number)
                    if (Number = FullCalc) {
                        break
                    } else {
                        set Number -= 1
                    }
            }
        }
    }