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); } } }