75 lines
2.3 KiB
C#
75 lines
2.3 KiB
C#
![]() |
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using BITKit;
|
||
|
using BITKit.UX;
|
||
|
using Net.Project.B.Buff;
|
||
|
using Net.Project.B.UX;
|
||
|
using Project.B.Entities;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.UIElements;
|
||
|
|
||
|
namespace Net.Project.B
|
||
|
{
|
||
|
public class UXSurvival<TPanel> : UIToolkitSubPanel<TPanel>,IDisposable, IUXSurvival where TPanel : IUXPanel
|
||
|
{
|
||
|
private readonly ITicker _ticker;
|
||
|
|
||
|
private readonly IPlayerFactory _playerFactory;
|
||
|
|
||
|
[UXBindPath("survival-container")]
|
||
|
private VisualElement _survivalContainer;
|
||
|
|
||
|
private VisualTreeAsset _template;
|
||
|
|
||
|
private readonly Dictionary<int, ProgressBar> _dictionary = new();
|
||
|
|
||
|
public UXSurvival(IServiceProvider serviceProvider, IPlayerFactory playerFactory, ITicker ticker) : base(serviceProvider)
|
||
|
{
|
||
|
_playerFactory = playerFactory;
|
||
|
_ticker = ticker;
|
||
|
|
||
|
_ticker.Add(Tick);
|
||
|
}
|
||
|
|
||
|
protected override void OnInitiated()
|
||
|
{
|
||
|
base.OnInitiated();
|
||
|
_template = _survivalContainer.Q<TemplateContainer>().templateSource;
|
||
|
_survivalContainer.Clear();
|
||
|
foreach (var buff in SurvivalBuffs)
|
||
|
{
|
||
|
var container = _survivalContainer.Create(_template);
|
||
|
container.Get<Label>().text = buff.GetType().Name;
|
||
|
_dictionary[buff.GetType().GetHashCode()] = container.Get<ProgressBar>();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Dispose()
|
||
|
{
|
||
|
_ticker.Remove(Tick);
|
||
|
}
|
||
|
|
||
|
private void Tick(float obj)
|
||
|
{
|
||
|
foreach (var entity in _playerFactory.Entities.Values)
|
||
|
{
|
||
|
entity.ServiceProvider.QueryComponents(out IBuffComponent buffComponent);
|
||
|
var buffers = buffComponent.Buffs.Span;
|
||
|
for (var i = 0; i < buffers.Length; i++)
|
||
|
{
|
||
|
ref var buff =ref buffers[i];
|
||
|
if (_dictionary.TryGetValue(buff.GetType().GetHashCode(), out var ve))
|
||
|
{
|
||
|
ve.value = buff.Value;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public IReadOnlyCollection<IBuff> SurvivalBuffs { get; set; }=ArraySegment<IBuff>.Empty;
|
||
|
}
|
||
|
|
||
|
}
|