BITFALL/Assets/Artists/Scripts/Entities/Cosmetic/CosmeticArmModelBehaviour.cs

64 lines
1.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BITFALL.Cosmetic;
using BITKit;
using BITKit.Entities;
using UnityEngine;
namespace BITFALL.Entities.Cosmetic
{
public class CosmeticArmModelBehaviour : EntityBehavior
{
[Inject] private ICosmeticService _cosmeticService;
public override void OnAwake()
{
base.OnAwake();
_cosmeticService.OnCosmeticsChange += OnCosmeticsChange;
}
public override void OnStart()
{
base.OnStart();
OnCosmeticsChange();
}
public override void OnDestroyComponent()
{
base.OnDestroyComponent();
_cosmeticService.OnCosmeticsChange -= OnCosmeticsChange;
}
private void OnCosmeticsChange()
{
foreach (var x in _cosmeticService
.Modified
.Values
.OfType<ICosmetic>()
.SelectMany(x=>x.Contents)
.OfType<CosmeticArmModelContent>()
)
{
foreach (var tag in GetComponentsInChildren<Tag>())
{
if(tag.GetTags().Contains("c_weapon_arm") is false) continue;
if(tag.TryGetComponent<SkinnedMeshRenderer>(out var _renderer))
{
_renderer.sharedMaterials = x.SkinnedMeshRenderer.sharedMaterials;
var bones = x.SkinnedMeshRenderer.bones;
for (var i = 0; i < bones.Length; i++)
{
bones[i] = CosmeticModelBehaviour.GetRootBoneByName(_renderer.rootBone, bones[i].name);
}
_renderer.sharedMesh = x.SkinnedMeshRenderer.sharedMesh;
_renderer.bones = bones;
}
}
}
}
}
}