This commit is contained in:
CortexCore
2024-03-29 00:58:24 +08:00
parent 967ad8eacf
commit 05315ef4a8
232 changed files with 53368 additions and 8539 deletions

View File

@@ -13,37 +13,52 @@ namespace BITFALL.Entities.Cosmetic
public class CosmeticModelBehaviour : EntityBehavior
{
[Inject(true)] private ICosmeticService _cosmeticService;
[SerializeField] private SkinnedMeshRenderer[] currentRenderers;
[SerializeField] private Transform armature;
[SerializeField] private Transform current;
[SerializeField] private Transform meshRoot;
[SerializeField] private Animator animator;
public override void OnAwake()
{
if (_cosmeticService is null) return;
_cosmeticService.OnCosmeticsChange += OnCosmeticsChange;
_cosmeticService.OnCosmeticsChanged += OnCosmeticsChanged;
destroyCancellationToken.Register(() => _cosmeticService.OnCosmeticsChanged -= OnCosmeticsChanged);
}
public override void OnStart()
{
base.OnStart();
OnCosmeticsChanged();
destroyCancellationToken.Register(() =>
{
_cosmeticService.OnCosmeticsChange -= OnCosmeticsChange;
_cosmeticService.OnCosmeticsChanged -= OnCosmeticsChanged;
});
}
private void OnCosmeticsChanged()
{
animator.Rebind();
}
public override void OnStart()
{
base.OnStart();
if(current.TryGetComponent<Animator>(out var newAnimator))
{
Destroy(newAnimator);
}
OnCosmeticsChange();
OnCosmeticsChanged();
}
private void OnCosmeticsChange()
{
foreach (var cosmetic in _cosmeticService.Modified.Values.OfType<ICosmetic>())
{
foreach (var content in cosmetic.Contents.OfType<CosmeticModelContent>())
{
foreach (var _renderer in currentRenderers)
var instance = Instantiate(content.Model,meshRoot);
instance.transform.localPosition = Vector3.zero;
instance.transform.localRotation = Quaternion.identity;
if (instance.TryGetComponent<Animator>(out var newAnimator))
{
Destroy(_renderer.gameObject);
animator.avatar = newAnimator.avatar;
Destroy(newAnimator);
}
var instance = Instantiate(content.Model);
currentRenderers = instance.GetComponentsInChildren<SkinnedMeshRenderer>(true);
TransferSkinnedMeshes(currentRenderers, meshRoot, armature);
Destroy(instance);
Destroy(current.gameObject);
current = instance.transform;
}
}
}
@@ -80,7 +95,7 @@ namespace BITFALL.Entities.Cosmetic
}
}
private static Transform GetRootBoneByName(Component parentTransform, string name)
public static Transform GetRootBoneByName(Component parentTransform, string name)
{
return parentTransform.GetComponentsInChildren<Transform>().FirstOrDefault(transformChild => transformChild.name == name);
}