using System.Linq; using Spine.Unity; using UnityEngine; using System.Threading.Tasks; using System; using asap.core; public class OfferStoryChainSpineCtrl : OfferStoryChainAnimationCtrl { [SerializeField] private SkeletonGraphic skeletonGraphic; // private readonly string[] _idleAnimNames = Enumerable.Range(1, 6).Select(i => "npc_offerchainwinter_idle_s" + i).ToArray(); // private readonly string[] _aniNames = { // "npc_offerchainwinter_equip_hat", // "npc_offerchainwinter_equip_gloves", // "npc_offerchainwinter_equip_scarf", // "npc_offerchainwinter_equip_pipe", // But, this is a vest instead of a pipe // "npc_offerchainwinter_equip_rod" // }; // private readonly string[] _audioNames = // { // "audio_ui_offerchainwinter_equip_hat", // "audio_ui_offerchainwinter_equip_gloves", // "audio_ui_offerchainwinter_equip_scarf", // "audio_ui_offerchainwinter_equip_vest", // "audio_ui_offerchainwinter_equip_rod" // }; private string[] _idleAnimNames; private string[] _aniNames; private string[] _audioNames; public override void Init(string baseName) { // _idleAnimNames = Enumerable.Range(1, 6).Select(i => baseName + "_idle_" + i).ToArray(); // _aniNames = Enumerable.Range(1, 5).Select(i => baseName + "_action_" + i).ToArray(); _idleAnimNames = Enumerable.Range(1, 6).Select(i => "idle_" + i).ToArray(); _aniNames = Enumerable.Range(1, 5).Select(i => "action_" + i).ToArray(); _audioNames = Enumerable.Range(1, 5).Select(i => "audio_" + baseName + "_action_" + i).ToArray(); } public override void PlayIdleAnimation(int progress) { try { skeletonGraphic.AnimationState.SetAnimation(0, _idleAnimNames[progress], true); } catch (Exception e) { Debug.LogError(e); } } public override async Task PlayUpdateAnimation(int progress) { try { GContext.Publish(new Game.EventUISound(_audioNames[progress - 1])); skeletonGraphic.AnimationState.SetAnimation(0, _aniNames[progress - 1], false); var duration = skeletonGraphic.AnimationState.GetCurrent(0).Animation.Duration; skeletonGraphic.AnimationState.AddAnimation(0, _idleAnimNames[progress], true, 0f); await Task.Delay(TimeSpan.FromSeconds(duration)); } catch (Exception e) { Debug.LogError(e); } } // #if UNITY_EDITOR // [Header("Test")] // [SerializeField] private int progress; // private void Update() // { // if (Input.GetKeyDown(KeyCode.I)) // { // PlayIdleAnimation(progress); // } // if (Input.GetKeyDown(KeyCode.U)) // { // PlayUpdateAnimation(progress); // } // } // #endif }