This commit is contained in:
CortexCore
2024-03-18 18:20:23 +08:00
parent a87aa47882
commit 8acd61ea57
412 changed files with 1799371 additions and 31676 deletions

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BITFALL.Cosmetic;
using BITFALL.Entities.Equipment;
using BITFALL.Player.Movement;
using BITKit.PlayerCamera;
@@ -10,13 +11,27 @@ namespace BITKit.Entities.Player.Character
{
public class EntityCharacter : EntityPlayerBehavior
{
[Header(Constant.Header.Components)]
[SerializeField] private Renderer[] fpvRenderer = Array.Empty<Renderer>();
[SerializeField] private Renderer[] tpvRenderer = Array.Empty<Renderer>();
[SerializeField] private Renderer[] fpvOverrideRenderers = Array.Empty<Renderer>();
[SerializeField] private Transform[] tpvRendererGroup = Array.Empty<Transform>();
[DictionaryReferenceConfig(nameof(Player_Mesh_Type_FPV))]
public const string Player_Mesh_Type_FPV = nameof(Player_Mesh_Type_FPV);
[DictionaryReferenceConfig(nameof(Player_Mesh_Type_TPV))]
public const string Player_Mesh_Type_TPV = nameof(Player_Mesh_Type_TPV);
[DictionaryReferenceConfig(nameof(Player_Mesh_Type_FPVOverride))]
public const string Player_Mesh_Type_FPVOverride = nameof(Player_Mesh_Type_FPVOverride);
[DictionaryReferenceConfig(nameof(Player_Mesh_Type_TPV_Group))]
public const string Player_Mesh_Type_TPV_Group = nameof(Player_Mesh_Type_TPV_Group);
private readonly List<Renderer> fpvRenderer = new();
private readonly List<Renderer> tpvRenderer = new();
private readonly List<Renderer> fpvOverrideRenderers = new();
private readonly List<Renderer> tpvRendererGroup = new();
[Header(Constant.Header.Reference)]
[SerializeReference, SubclassSelector] public IReference getDamage;
[Inject(true)] private ICosmeticService cosmeticService;
[Inject(true)] private IHealth _health;
@@ -32,6 +47,15 @@ namespace BITKit.Entities.Player.Character
private readonly ValidHandle allowFPVOverride = new();
public override void OnAwake()
{
base.OnAwake();
if(cosmeticService is not null)
cosmeticService.OnCosmeticsChanged += Rebuild;
}
public override void OnStart()
{
if (_health is not null)
@@ -93,7 +117,8 @@ namespace BITKit.Entities.Player.Character
});
allowFPVOverride.AddElement(_equipment);
allowFPVOverride.Invoke();
Rebuild();
}
public override void OnPlayerInitialized()
{
@@ -153,5 +178,29 @@ namespace BITKit.Entities.Player.Character
: shadowMode;
}
}
[BIT]
private void Rebuild()
{
fpvRenderer.Clear();
tpvRenderer.Clear();
fpvOverrideRenderers.Clear();
tpvRendererGroup.Clear();
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_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);
}
UpdateMeshState();
allowFPVOverride.Invoke();
}
}
}