64 lines
1.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|