diff --git a/Assets/PerfectWorld/Scene/LoginScene.unity b/Assets/PerfectWorld/Scene/LoginScene.unity
index 01ddc80223..4de3721598 100644
--- a/Assets/PerfectWorld/Scene/LoginScene.unity
+++ b/Assets/PerfectWorld/Scene/LoginScene.unity
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7854f585bbc6d2c574b614dbb36ba2600cc3d450ad835fed441f60cfe3363642
-size 112932
+oid sha256:bc028fc3c6b7fe9d9851f84da3d784923ccfb38af77605dd57c1e7e12e4c5817
+size 113080
diff --git a/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs b/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs
index f7d60a9af3..e19fe6fe1a 100644
--- a/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs
+++ b/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs
@@ -34,7 +34,9 @@ namespace BrewMonster.UI
bool isDoneWorldRender = false;
bool isDoneNPCRender = false;
private SynchronizationContext context;
- public AudioClip loginBGM;
+ [Header("Audio")]
+ [Tooltip("Set 3 clips to pick a random login theme.")]
+ [SerializeField] private AudioClip[] _loginBGMs;
void Awake()
{
@@ -64,7 +66,11 @@ namespace BrewMonster.UI
void Start()
{
- AudioManager.Instance.PlayBGM(loginBGM, 1.5f);
+ var chosenBgm = PickLoginBGM();
+ if (chosenBgm != null && AudioManager.Instance != null)
+ {
+ AudioManager.Instance.PlayBGM(chosenBgm, 1.5f);
+ }
_loginButton.onClick.AddListener(OnLoginButtonClicked);
context = SynchronizationContext.Current;
#if UNITY_EDITOR
@@ -80,6 +86,17 @@ namespace BrewMonster.UI
// ApplyLoginEntry(LogoutFlowState.ConsumeNextLoginEntry());
}
+ private AudioClip PickLoginBGM()
+ {
+ if (_loginBGMs != null && _loginBGMs.Length > 0)
+ {
+ // UnityEngine.Random is deterministic per session and good enough here.
+ int idx = UnityEngine.Random.Range(0, _loginBGMs.Length);
+ return _loginBGMs[idx];
+ }
+ return null;
+ }
+
// Update is called once per frame
void Update()
{
@@ -159,38 +176,8 @@ namespace BrewMonster.UI
await UnityGameSession.Login(username, password, OnLoginComplete);
}
- ///
- /// Apply how LoginScene should look after a logout flow.
- /// Call this when LoginScene is already loaded (additive) and you need to switch UI without reloading the scene.
- ///
- public void ApplyLoginEntry(BrewMonster.Network.LogoutFlowState.LoginEntryTarget entry)
- {
- _loginInProgress = false;
- if (_loginButton != null) _loginButton.interactable = true;
-
- // Always refresh fields from PlayerPrefs (LogoutAccount clears them).
- if (_usernameInputField != null) _usernameInputField.text = PlayerPrefs.GetString("username", "");
- if (_passwordInputField != null) _passwordInputField.text = PlayerPrefs.GetString("password", "");
-
- if (_selectCharacterScreen != null)
- _selectCharacterScreen.gameObject.SetActive(false);
-
- if (entry == BrewMonster.Network.LogoutFlowState.LoginEntryTarget.SelectRole)
- {
- // If we're returning to select role, skip straight to select role without showing login UI again, since we never fully left the game session.
- OnLoginComplete(true);
- return;
-
- // Auto-login to reach Select Role like the original client, without showing Tech3C auth UI again.
- if (!string.IsNullOrEmpty(_usernameInputField.text) && !string.IsNullOrEmpty(_passwordInputField.text))
- {
- BMLogger.Log("[LoginScreenUI] Auto-login triggered (return-to-select-role).");
- _loginInProgress = true;
- if (_loginButton != null) _loginButton.interactable = false;
- _ = BeginGameLoginAsync(_usernameInputField.text, _passwordInputField.text);
- }
- }
- }
+ // NOTE: Previously had an ApplyLoginEntry helper that referenced LogoutFlowState.
+ // It was unused and caused build/lint issues on some platforms, so it's been removed.
///
/// Callback when the login is complete.