using System.Threading.Tasks; using UnityEngine; using UnityEngine.Playables; namespace EventBossFight { public class EventBossFightTimelineBossCell : EventBossFightTimelineCell, IEventBossFightBossCell { public PlayableAsset attacked1Timeline; public PlayableAsset attacked2Timeline; public PlayableAsset attackTimeline; [Header("boss attack")] [Tooltip("玩家攻击的震动数据,必须有五个")] public EventBossFightShakeData bossAttackShakeData; [Header("boss attacked")] [Tooltip("material _FillPhase")] [Range(0, 1)] [SerializeField] private float bossAttackedFillPhase = 0.5f; [Tooltip("material 恢复闪白")] [SerializeField] private float bossAttackedRevertTime = 0.5f; [Header("boss attack")] public GameObject playerAttackedFx; EventBossFightShakeData IEventBossFightBossCell.BossAttackShakeData => bossAttackShakeData; GameObject IEventBossFightBossCell.PlayerAttackedFx => playerAttackedFx; /// 一般为父级「boss」根上的 public PlayableDirector BossTimelineDirector => GetComponentInParent(); private int _nameID; public async Task PlayTimelineAttack(PlayableDirector bossDirector) { await PlayTimeline(bossDirector, attackTimeline); } public async Task PlayTimelineAttacked(PlayableDirector bossDirector, int index) { _ = PlayFlash(); if (index == 1) { await PlayTimeline(bossDirector, attacked1Timeline); } else { await PlayTimeline(bossDirector, attacked2Timeline); } } private async Task PlayFlash() { Spine.material.SetFloat("_FillPhase", bossAttackedFillPhase); await Awaiters.Seconds(bossAttackedRevertTime); Spine.material.SetFloat("_FillPhase", 0); } public void InitFlash() { Spine.material.SetFloat("_FillPhase", 0); } public void ShowGameObject() { this.gameObject.SetActive(true); } } }