using System; using System.Collections; using System.Collections.Generic; using BITKit; using BITKit.Entities; using Cysharp.Threading.Tasks; using Dreamteck.Splines.Primitives; using Project.B.Entities; using UnityEngine; using Object = System.Object; using Random = UnityEngine.Random; namespace Net.Like.Xue.Tokyo { public class ReplaceModel : MonoBehaviour { [SerializeField] private Animator animator; [SerializeField] private Transform[] models; private async void Start() { if(animator.TryGetComponent(out var entity) is false)return; BITApp.ServiceProvider.QueryComponents(out INpcFactory npcFactory); npcFactory.OnEntityCreate += OnEntityCreated; await destroyCancellationToken.WaitUntilCanceled(); npcFactory.OnEntityCreate -= OnEntityCreated; } private async UniTask OnEntityCreated(string arg1, IEntity arg2) { if(arg2.Id!=animator.GetComponent().Id)return; for (var i = 0; i < transform.childCount; i++) { DestroyImmediate(transform.GetChild(0).gameObject); } var index = Random.Range(0, models.Length); var newModel =models[index]; newModel = Instantiate(newModel, transform); newModel.localPosition = newModel.localEulerAngles = default; if (newModel.TryGetComponent(out var x)) { animator.avatar = x.avatar; DestroyImmediate(x); } await UniTask.NextFrame(); animator.Rebind(); } } }