1
This commit is contained in:
@@ -27,7 +27,7 @@ namespace BITKit.Entities.Player.Character
|
||||
private readonly List<Renderer> fpvRenderer = new();
|
||||
private readonly List<Renderer> tpvRenderer = new();
|
||||
private readonly List<Renderer> fpvOverrideRenderers = new();
|
||||
private readonly List<Renderer> tpvRendererGroup = new();
|
||||
private readonly List<Renderer> tpvOverrideRenderers = new();
|
||||
|
||||
[Header(Constant.Header.Reference)]
|
||||
[SerializeReference, SubclassSelector] public IReference getDamage;
|
||||
@@ -44,29 +44,31 @@ namespace BITKit.Entities.Player.Character
|
||||
|
||||
[Inject(true)] private IEntityMovement _movement;
|
||||
|
||||
private Renderer[] _tpvRendererGroup;
|
||||
|
||||
private readonly ValidHandle allowFPVOverride = new();
|
||||
private readonly IntervalUpdate _freezeInterval=new (0.01f);
|
||||
private bool _isDirty;
|
||||
private bool _lock;
|
||||
|
||||
private void OnCosmeticsChange()
|
||||
{
|
||||
_lock = true;
|
||||
}
|
||||
|
||||
public override void OnAwake()
|
||||
{
|
||||
base.OnAwake();
|
||||
if(cosmeticService is not null)
|
||||
cosmeticService.OnCosmeticsChanged += Rebuild;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
if (cosmeticService is not null)
|
||||
{
|
||||
cosmeticService.OnCosmeticsChange += OnCosmeticsChange;
|
||||
cosmeticService.OnCosmeticsChanged += OnCosmeticsChanged;
|
||||
}
|
||||
|
||||
if (_health is not null)
|
||||
{
|
||||
_health.OnSetAlive += _ => UpdateMeshState();
|
||||
_health.OnSetAlive += SetDirty;
|
||||
_health.OnDamageRelease += OnDamageRelease;
|
||||
}
|
||||
|
||||
if (_cameraService is not null)
|
||||
_cameraService.OnCameraActivated += _ => UpdateMeshState();
|
||||
_cameraService.OnCameraActivated += SetDirty;
|
||||
|
||||
if (_entityOverride is not null)
|
||||
_entityOverride.OnOverride += _ =>
|
||||
@@ -74,7 +76,8 @@ namespace BITKit.Entities.Player.Character
|
||||
UpdateMeshState();
|
||||
allowFPVOverride.SetElements(_entityOverride, _);
|
||||
};
|
||||
_tpvRendererGroup = tpvRendererGroup.SelectMany(x => x.GetComponentsInChildren<Renderer>(true)).ToArray();
|
||||
|
||||
|
||||
|
||||
if (_equipment is not null)
|
||||
{
|
||||
@@ -108,31 +111,38 @@ namespace BITKit.Entities.Player.Character
|
||||
{
|
||||
foreach (var x in fpvOverrideRenderers)
|
||||
{
|
||||
x.enabled = value;
|
||||
try
|
||||
{
|
||||
x.enabled = value;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
BIT4Log.LogException(e);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// if (_equipment is not null)
|
||||
// allowFPVOverride.AddElement(_equipment);
|
||||
|
||||
Rebuild();
|
||||
}
|
||||
|
||||
public override void OnPlayerInitialized()
|
||||
public override void OnDestroyComponent()
|
||||
{
|
||||
base.OnDestroyComponent();
|
||||
if (cosmeticService is null) return;
|
||||
cosmeticService.OnCosmeticsChange -= OnCosmeticsChange;
|
||||
cosmeticService.OnCosmeticsChanged -= OnCosmeticsChanged;
|
||||
}
|
||||
|
||||
public override void OnUpdate(float deltaTime)
|
||||
{
|
||||
if (!_isDirty || _lock || !_freezeInterval.AllowUpdateWithoutReset) return;
|
||||
_isDirty = false;
|
||||
UpdateMeshState();
|
||||
}
|
||||
public override void OnPlayerDispose()
|
||||
{
|
||||
SetFPV(false);
|
||||
}
|
||||
// private void OnSetHP(int hp)
|
||||
// {
|
||||
// UnityEntity.Invoke<string>(Constant.Animation.Play, getDamage.Value);
|
||||
// }
|
||||
|
||||
private void OnDamageRelease(DamageMessage damageMessage)
|
||||
{
|
||||
UnityEntity.Invoke<string>(Constant.Animation.Play, getDamage.Value);
|
||||
if (getDamage is not null)
|
||||
UnityEntity.Invoke<string>(Constant.Animation.Play, getDamage.Value);
|
||||
}
|
||||
|
||||
private void UpdateMeshState()
|
||||
@@ -170,7 +180,7 @@ namespace BITKit.Entities.Player.Character
|
||||
{
|
||||
x.shadowCastingMode = shadowMode;
|
||||
}
|
||||
foreach (var x in _tpvRendererGroup)
|
||||
foreach (var x in tpvOverrideRenderers)
|
||||
{
|
||||
x.shadowCastingMode =
|
||||
_entityOverride is not null
|
||||
@@ -179,33 +189,44 @@ namespace BITKit.Entities.Player.Character
|
||||
}
|
||||
}
|
||||
[BIT]
|
||||
private async void Rebuild()
|
||||
private void OnCosmeticsChanged()
|
||||
{
|
||||
_lock = true;
|
||||
BITAppForUnity.ThrowIfNotPlaying();
|
||||
await UniTask.Delay(100);
|
||||
await UniTask.SwitchToMainThread();
|
||||
if (destroyCancellationToken.IsCancellationRequested) return;
|
||||
fpvRenderer.Clear();
|
||||
tpvRenderer.Clear();
|
||||
fpvOverrideRenderers.Clear();
|
||||
tpvRendererGroup.Clear();
|
||||
tpvOverrideRenderers.Clear();
|
||||
|
||||
var _tpvOverrideRenderers = new List<Transform>();
|
||||
foreach (var _tag in GetComponentsInChildren<Tag>(true))
|
||||
{
|
||||
if (_tag.TryGetComponent<Renderer>(out var _renderer) is false) continue;
|
||||
var tags = _tag.GetTags();
|
||||
if (tags.Contains(Player_Mesh_Type_TPV_Group))
|
||||
_tpvOverrideRenderers.Add(_tag.transform);
|
||||
if (_tag.TryGetComponent<Renderer>(out var _renderer) is false) continue;
|
||||
if (tags.Contains(Player_Mesh_Type_FPV))
|
||||
fpvRenderer.Add(_renderer);
|
||||
if (tags.Contains(Player_Mesh_Type_TPV))
|
||||
tpvRenderer.Add(_renderer);
|
||||
if (tags.Contains(Player_Mesh_Type_FPVOverride))
|
||||
fpvOverrideRenderers.Add(_renderer);
|
||||
if (tags.Contains(Player_Mesh_Type_TPV_Group))
|
||||
tpvRendererGroup.Add(_renderer);
|
||||
}
|
||||
|
||||
var tpvRenderers = _tpvOverrideRenderers.SelectMany(x => x.GetComponentsInChildren<Renderer>(true));
|
||||
tpvOverrideRenderers.Clear();
|
||||
tpvOverrideRenderers.AddRange(tpvRenderers);
|
||||
UpdateMeshState();
|
||||
allowFPVOverride.Invoke();
|
||||
|
||||
_lock = false;
|
||||
_isDirty = false;
|
||||
}
|
||||
|
||||
private void SetDirty(bool any) => SetDirty();
|
||||
private void SetDirty()
|
||||
{
|
||||
_freezeInterval.Reset();
|
||||
_isDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user