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

52 lines
1.4 KiB
C#
Raw Normal View History

2023-09-01 14:33:54 +08:00
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;
2023-10-02 23:24:56 +08:00
using Cysharp.Threading.Tasks;
2023-09-01 14:33:54 +08:00
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;
2023-10-02 23:24:56 +08:00
private readonly ConcurrentDictionary<IPlayerSurvivalElement,UXContainer> spawnedSurvivalEvents = new();
private IPlayerSurvivalService _playerSurvival;
private void Start()
2023-09-01 14:33:54 +08:00
{
playerService.OnPlayerInitialized += OnPlayerInitialized;
}
2023-10-02 23:24:56 +08:00
private async void OnPlayerInitialized(Entity obj)
2023-09-01 14:33:54 +08:00
{
2023-10-02 23:24:56 +08:00
await UniTask.Yield();
_playerSurvival = obj.Get<IPlayerSurvivalService>();
foreach (var x in _playerSurvival.Elements)
2023-09-01 14:33:54 +08:00
{
2023-10-02 23:24:56 +08:00
spawnedSurvivalEvents.GetOrAdd(x, Create);
2023-09-01 14:33:54 +08:00
}
}
2023-10-02 23:24:56 +08:00
private UXContainer Create(IPlayerSurvivalElement arg)
2023-09-01 14:33:54 +08:00
{
var container = survivalEventBuilder.BuildAsContainer();
2023-10-02 23:24:56 +08:00
container.Get<Label>(0).text = arg.Name;
container.SetProcess(arg.Value);
arg.OnValueChanged += value => container.SetProcess(value*0.01f);
spawnedSurvivalEvents.TryAdd(arg,container);
2023-09-01 14:33:54 +08:00
return container;
}
}
}