BITFALL/Assets/Artists/Scripts/UX/UXSurvival.cs

55 lines
1.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using BITFALL.Player.Survival;
using BITKit.Entities;
using BITKit.Entities.Player;
using BITKit.UX;
using Cysharp.Threading.Tasks;
using RotaryHeart.Lib.SerializableDictionary;
using UnityEngine;
using UnityEngine.TextCore.Text;
using UnityEngine.UIElements;
namespace BITFALL.UX
{
public class UXSurvival : MonoBehaviour
{
[SerializeReference,SubclassSelector] private IPlayerService playerService;
[SerializeField] private UXBuilder survivalEventBuilder;
private readonly ConcurrentDictionary<IPlayerSurvivalElement,UXContainer> spawnedSurvivalEvents = new();
private IPlayerSurvivalService _playerSurvival;
private void Start()
{
playerService.OnPlayerInitialized += OnPlayerInitialized;
}
private async void OnPlayerInitialized(Entity obj)
{
await UniTask.Yield();
_playerSurvival = obj.Get<IPlayerSurvivalService>();
survivalEventBuilder.Clear();
spawnedSurvivalEvents.Clear();
foreach (var x in _playerSurvival.Elements)
{
spawnedSurvivalEvents.GetOrAdd(x, Create);
}
}
private UXContainer Create(IPlayerSurvivalElement arg)
{
var container = survivalEventBuilder.BuildAsContainer();
container.Get<Label>(0).text = arg.Name;
container.SetProcess(arg.Value);
arg.OnValueChanged += value => container.SetProcess(value*0.01f);
spawnedSurvivalEvents.TryAdd(arg,container);
return container;
}
}
}