111 lines
3.8 KiB
C#
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);
|
|
}
|
|
}
|
|
} |