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() .SelectMany(x=>x.Contents) .OfType() ) { foreach (var tag in GetComponentsInChildren()) { if(tag.GetTags().Contains("c_weapon_arm") is false) continue; if(tag.TryGetComponent(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; } } } } } }