Files
5.24BuYu/Assets/MyGame/aa/Game/FLZY/BOSS/QL/LeiLongEvent.cs
T
2026-08-22 19:28:31 +08:00

164 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using DG.Tweening;
using Spine.Unity;
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using Random = UnityEngine.Random;
public class LeiLongEvent : BJRedPacketEvent
{
public SkeletonGraphic skeletonGraphic;
// ⭐ 爆奖激活时机由 BossControl(FLZY_JL_Boss) 延迟 SetActive 控制:
// Init 设置好参数后会被 SetActive(false) 收起,delayActivateSeconds 之后 SetActive(true),
// OnEnable 检测到 _ready 才真正触发爆奖(发红包加分)。这里不跑协程等待。
private bool _ready = false;
public TextMeshProUGUI tMP_longzhu1;
public TextMeshProUGUI tMP_longzhu2;
public TextMeshProUGUI tMP_longzhu3;
public int longzhu1;
public int longzhu2;
public void Awake()
{
//skeletonGraphic.AnimationState.Complete += (trackEntry) =>
//{
// if (trackEntry.Animation.Name != "stand")
// {
// skeletonGraphic.AnimationState.SetAnimation(0, "stand1", false);
// }
//};
}
private void Start()
{
PlayThen("stand", "stand1");
transform.SetParent(null);
transform.position = Vector3.zero;
transform.position = Vector3.forward*-100;
}
/// <summary>
/// 播放完一个再接另一个(UI Spine)
/// </summary>
public void PlayThen(string first, string next)
{
var state = skeletonGraphic.AnimationState;
AudioManager.Instance.PlayerFX(62000+Random.Range(3,6));
state.SetAnimation(0, first, false);
state.AddAnimation(0, next, true, 0f);
}
public TextMeshProUGUI tmp_CoinNum;
public TMP_SpriteAsset tmp_goldSprite;
public TMP_SpriteAsset tmp_SilverSprite;
public override void Init(long goldCount,int posID,long paobei,long fishScore,int beishu,Action<int> action,Action action1=null)
{
JiaFen =()=>{
action?.Invoke(0);
} ;
maxScore = (int)goldCount;
this.posID = posID;
paoBei = (int)paobei;
// ⭐ 补回遗漏的 fishScore/beishu 赋值,
// 否则 OnScoreEnd 发送 baoJiangEnd 帧同步时 bJbeishu=0 导致 not-self 倍数显示错误
this.fishScore = (int)fishScore;
bJbeishu = beishu;
action1?.Invoke();
// ⭐ 只设置参数、标记就绪,不立即触发爆奖。
// 真正的激活由 BossControl 延迟 SetActive(true) → OnEnable 触发。
// ⭐ Init 手动赋值不走 base.Init/ResetState,这里手动重置滚动状态:
// 否则对象池复用会残留上次的 currScore/elapsed,导致 Update 一步跳到最终分、没有加分动画。
currScore = 0;
elapsed = 0f;
isAddScore = false;
_ready = true;
}
/// <summary>
/// 对象池复用:重置就绪标记和加分滚动进度。
/// </summary>
protected override void ResetState()
{
base.ResetState();
_ready = false;
isAddScore = false;
elapsed = 0f;
}
/// <summary>
/// 由 BossControl 延迟 SetActive(true) 触发:仅当参数已就绪(_ready)才激活爆奖。
/// 首次从对象池 Get 时 OnEnable 先于 Init(_ready=false)不会误触发,保证"默认不激活"。
/// </summary>
private void OnEnable()
{
if (_ready) GoldEffect();
}
public override void GoldEffect()
{
//开始加分
isAddScore = true;
AudioManager.Instance.PlayerFX(62001);
base.GoldEffect();
}
public override void EffEnd()
{
}
public void LongZhuMerge()
{
tMP_longzhu3.text = (longzhu1*longzhu2).ToString();
}
public void LongZhu2()
{
tMP_longzhu2.text = longzhu2.ToString();
}
public void LongZhu1()
{
tMP_longzhu1.text = longzhu1.ToString();
}
bool isAddScore=false;
float a = 3f;
float elapsed = 0f;
private void Update()
{
if (isAddScore) {
if (currScore < maxScore - paoBei)
{
elapsed += Time.deltaTime;
float t = elapsed / a;
currScore = (int)Mathf.Lerp(0, maxScore, t);
//currScore += Random.Range(paoBei, paoBei*2);
tMP_Score.text = currScore.ToString();
}
else
{
tMP_Score.text = maxScore.ToString();
isAddScore = false;
// 走基类统一收尾:加金币 → 删面板 → 销毁自身
OnScoreEnd();
}
}
}
public override void die()
{
StartCoroutine(i());
}
public IEnumerator i()
{
yield return new WaitForSeconds(1f);
transform.DOScale(Vector3.zero, 0.5f).OnComplete(() =>
{
Destroy(gameObject);
});
}
}