55 lines
1.5 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
}
|