Petition-to-the-Gods-V3/Assets/Scripts/Server/ServerWorkMessageReplyWait1Panel.cs
2025-11-19 19:30:13 +08:00

111 lines
3.8 KiB
C#

using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine.Video;
public class ServerWorkMessageReplyWait1Panel : MonoBehaviour
{
public static ServerWorkMessageReplyWait1Panel Instance;
[Header("影片播放")]
public VideoPlayer videoPlayer;
public RawImage videoDisplay;
// ===============================================
// ✅ 新增的鎖定和訊號追蹤 (保留與上一次修改的內容)
// ===============================================
// 這個旗標指示:在影片播放期間,客戶端是否有發送新願望 (workMessage)
private bool clientSignalReceived = false;
private bool isVideoPlaying = false;
private void Awake()
{
Instance = this;
}
void Start()
{
SetupVideoPlayer();
}
// 接收來自 NetworkMessageHandler 的訊號
// 這個訊號代表有新的 workMessage (新願望) 進來,需要切換到 Step 2。
public void ReceiveClientSignal()
{
if (isVideoPlaying)
{
clientSignalReceived = true;
// 收到新願望,但影片正在播,暫存訊號。
Debug.Log("ServerWorkMessageReplyWait1Panel: 收到客戶端新願望訊號,影片正在播放中,訊號暫存。");
}
else
{
// 影片沒有在播放,理論上這不會發生,但如果發生,代表可以立即切換到 Step 2。
Debug.Log("ServerWorkMessageReplyWait1Panel: 收到客戶端新願望訊號,影片已停止,立即切換到 Step 2。");
ServerWorkSceneController.Instance.processStep(2); // 直接切換到 MessagePanel
}
}
public void play()
{
if (videoPlayer != null)
{
videoPlayer.Play();
isVideoPlaying = true; // 影片開始播放,鎖定流程
clientSignalReceived = false; // 重置客戶端訊號
Debug.Log("ServerWorkMessageReplyWait1Panel: 影片開始播放,流程鎖定。");
}
}
public void stop()
{
if (videoPlayer != null)
{
videoPlayer.Stop();
}
isVideoPlaying = false;
clientSignalReceived = false; // 停止時重置所有狀態
}
void SetupVideoPlayer()
{
if (videoPlayer != null)
{
// 設置影片結束事件
videoPlayer.loopPointReached += OnVideoFinished;
// 設置影片顯示 (略)
if (videoDisplay != null)
{
videoPlayer.targetTexture = null;
videoPlayer.renderMode = VideoRenderMode.RenderTexture;
RenderTexture rt = new RenderTexture(1920, 1080, 24);
videoPlayer.targetTexture = rt;
videoDisplay.texture = rt;
}
}
}
void OnVideoFinished(VideoPlayer vp)
{
Debug.Log("影片播放完成,流程鎖定解除。");
isVideoPlaying = false; // 影片播放完畢,解除鎖定
// ===============================================
// ⭐ 關鍵修正:檢查是否有暫存的客戶端願望訊號
// ===============================================
if (clientSignalReceived)
{
// 如果收到新願望訊號,則優先切換到 MessagePanel (Step 2)
Debug.Log("影片播畢,偵測到暫存的新願望訊號,切換到 Step 2 (MessagePanel)。");
ServerWorkSceneController.Instance.processStep(2);
}
else
{
// 影片播畢,沒有收到新願望,執行原定流程:切換到 Step 6
Debug.Log("影片播畢,沒有收到客戶端訊號,執行預設流程,切換到 Step 6 (Wait1WorkingPanel)。");
ServerWorkSceneController.Instance.processStep(6);
}
}
}