This commit is contained in:
2026-10-11 21:57:58 +08:00
parent d35c47deea
commit 0d53dc073d
14 changed files with 287300 additions and 275445 deletions
+56 -6
View File
@@ -456,6 +456,7 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
// 入场动画标记复位:座位再次激活(重进房/重新入座)时重新播
_xjmhEnterPlayed = false;
_xjmhEnterPending = false;
if (localPlayerSit == this)
localPlayerSit = null;
@@ -476,6 +477,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
private void Update()
{
UpdateXJMHEnterPending(); // ⭐ XJMH 入场动画挂起补播(面板/炮台就绪即播,避免加载期播了看不到)
UpdateZhanShenLaser();
// ⭐ 长按 img_OpenPT 计时:到达阈值触发一次(提前松手不触发)
@@ -1148,21 +1151,65 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
/// <summary>XJMH 本地座位进房入场动画是否已播(本次激活周期只播一次;OnDisable 复位)</summary>
private bool _xjmhEnterPlayed;
/// <summary>已到入座时机但炮台/面板尚未激活(播了看不到)→ 挂起,等激活后 Update 补播</summary>
private bool _xjmhEnterPending;
/// <summary>
/// XJMH 本地座位进房入场动画(原版 Battery:EnterAction 非立即分支):
/// 本次激活周期只播一次,防 ShowPlayer 被重复调用时重播。
/// XJMH 本地座位进房入场动画(原版 PW_Data.InitPlayer → BatteryMgr.PlayEnterAction,首次播完整动画+声音):
/// 入座时调用一次;面板/炮台未激活时挂起(此时播玩家看不到、协程也起不来)→ Update 补播。
/// </summary>
private void PlayXJMHEnterActionOnce()
{
if (_xjmhEnterPlayed) return;
_xjmhEnterPlayed = true;
if (_xjmhEnterPlayed || _xjmhEnterPending) return;
var turret = currentTurret;
if (turret == null && xjmhTurretList != null && xjmhTurretList.Count > 0)
turret = xjmhTurretList[0];
if (turret != null)
turret.PlayEnterAction();
// 炮台当前不可播(面板加载中/炮台未激活):挂起等就绪
if (turret == null || !turret.isActiveAndEnabled)
{
_xjmhEnterPending = true;
Debug.Log($"[XJMH入场] 座位 {name} 挂起(炮台未就绪:turret={(turret == null ? "null" : turret.name)})");
return;
}
_xjmhEnterPlayed = true;
Debug.Log($"[XJMH入场] 座位 {name} 触发播放(炮台={turret.name})");
if (turret is FlyTurretData flyTurret)
flyTurret.PlayEnterAction();
}
/// <summary>
/// XJMH 入场动画触发/补播检查(Update 每帧):
/// ① 兜底触发:本地座位已入座(user=本地)且从未触发过 → 走一次触发(覆盖 ShowPlayer 路径未走到的情况);
/// ② 挂起补播:已触发但炮台/面板当时未激活 → 就绪(玩家可见)立即播。
/// </summary>
private void UpdateXJMHEnterPending()
{
// ⭐ 加载到 100% 前不触发/不补播(玩家看不到、位置未就绪):等加载完成后 Update 自然触发
var panel = CreateFishManager.Instance?.currGameType as GameMainPanel_FishBase;
if (panel == null || !panel.IsGameLoadCompleted) return;
// ① 兜底触发(Update 只在座位/面板激活时执行 → 触发时玩家已可见)
if (turretControlMode == TurretControlMode.XJMH
&& !_xjmhEnterPlayed && !_xjmhEnterPending
&& !string.IsNullOrEmpty(user) && user == GameManager.Instance?.user?.id)
{
PlayXJMHEnterActionOnce();
}
// ② 挂起补播
if (!_xjmhEnterPending || _xjmhEnterPlayed) return;
var turret = currentTurret;
if (turret == null || !turret.isActiveAndEnabled) return;
_xjmhEnterPending = false;
_xjmhEnterPlayed = true;
Debug.Log($"[XJMH入场] 座位 {name} 补播(炮台={turret.name})");
if (turret is FlyTurretData flyTurret)
flyTurret.PlayEnterAction();
}
/// <summary>
@@ -1175,6 +1222,9 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
if (toggle_AutoAttack != null)
toggle_AutoAttack.gameObject.SetActive(false);
// ⭐ 离座取消入场挂起(重进房时重新播放)
_xjmhEnterPending = false;
if (turretControlMode == TurretControlMode.XJMH) return;
if (transform.childCount > 0)