This commit is contained in:
Lucastaa
2026-04-26 00:27:56 +07:00
parent 32c598da8b
commit 966642bdcd
44 changed files with 9296 additions and 441 deletions

View File

@@ -15,6 +15,7 @@ namespace UI
private Label _noiseLabel;
private Label _interactionLabel;
private VisualElement _interactionPrompt;
private Button _btnToggleView;
private void OnEnable()
{
@@ -29,6 +30,15 @@ namespace UI
_noiseLabel = root.Q<Label>("noise-label");
_interactionLabel = root.Q<Label>("interaction-text");
_interactionPrompt = root.Q<VisualElement>("interaction-prompt");
_btnToggleView = root.Q<Button>("btn-toggle-view");
if (_btnToggleView != null)
{
_btnToggleView.clicked += () => {
var cam = Object.FindFirstObjectByType<CameraController>();
if (cam != null) cam.ToggleCameraView();
};
}
}
private void Update()
@@ -63,10 +73,13 @@ namespace UI
_currentPlayer.OnNoiseLevelChanged += UpdateNoise;
_currentPlayer.OnInteractableTargetChanged += UpdateInteraction;
// Cập nhật giá trị ban đầu
UpdateHealth(_currentPlayer.Health);
UpdateStamina(_currentPlayer.Stamina);
UpdateNoise(_currentPlayer.NoiseLevel);
// Cập nhật giá trị ban đầu - Kiểm tra xem đã Spawned chưa nếu là Network Object
if (player.Object == null || player.Object.IsValid)
{
UpdateHealth(_currentPlayer.Health);
UpdateStamina(_currentPlayer.Stamina);
UpdateNoise(_currentPlayer.NoiseLevel);
}
}
private void UpdateHealth(float health)

View File

@@ -42,9 +42,50 @@ namespace UI
var fovSlider = root.Q<Slider>("setting-fov");
if (fovSlider != null)
{
if (SettingsManager.Instance != null) fovSlider.value = SettingsManager.Instance.Settings.fieldOfView;
fovSlider.RegisterValueChangedCallback(evt => {
// Cần expose hoặc tạo hàm SetFOV trong CameraController
Debug.Log($"Setting FOV to: {evt.newValue}");
if (SettingsManager.Instance != null) SettingsManager.Instance.Settings.fieldOfView = evt.newValue;
if (_cameraController != null) _cameraController.SetFOV(evt.newValue);
});
}
// Sensitivity Binding
var sensSlider = root.Q<Slider>("setting-sensitivity");
if (sensSlider != null)
{
if (SettingsManager.Instance != null) sensSlider.value = SettingsManager.Instance.Settings.sensitivity;
sensSlider.RegisterValueChangedCallback(evt => {
if (SettingsManager.Instance != null) SettingsManager.Instance.SetSensitivity(evt.newValue);
});
}
// Invert X Binding
var invertXToggle = root.Q<Toggle>("setting-invert-x");
if (invertXToggle != null)
{
if (SettingsManager.Instance != null) invertXToggle.value = SettingsManager.Instance.Settings.invertX;
invertXToggle.RegisterValueChangedCallback(evt => {
if (SettingsManager.Instance != null) SettingsManager.Instance.SetInvertX(evt.newValue);
});
}
// Invert Y Binding
var invertYToggle = root.Q<Toggle>("setting-invert-y");
if (invertYToggle != null)
{
if (SettingsManager.Instance != null) invertYToggle.value = SettingsManager.Instance.Settings.invertY;
invertYToggle.RegisterValueChangedCallback(evt => {
if (SettingsManager.Instance != null) SettingsManager.Instance.SetInvertY(evt.newValue);
});
}
// Side Bias Binding
var sideDropdown = root.Q<DropdownField>("setting-camera-side");
if (sideDropdown != null)
{
if (SettingsManager.Instance != null) sideDropdown.index = SettingsManager.Instance.Settings.sideBiasRight ? 0 : 1;
sideDropdown.RegisterValueChangedCallback(evt => {
if (SettingsManager.Instance != null) SettingsManager.Instance.SetSideBias(evt.newValue == "Right");
});
}

View File

@@ -48,6 +48,29 @@ namespace UI
private void Update()
{
if (Input.GetKeyDown(KeyCode.Escape)) ToggleSettings();
HandleAltCursor();
}
private void HandleAltCursor()
{
// Only handle Alt cursor when we are in game (HUD is active)
// and Settings is NOT currently toggled on.
var settingsData = screens.Find(s => s.screenName == "Settings");
bool settingsActive = settingsData != null && settingsData.isActive;
if (_currentScreenName == "HUD" && !settingsActive)
{
if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))
{
UnityEngine.Cursor.visible = true;
UnityEngine.Cursor.lockState = CursorLockMode.None;
}
else
{
UnityEngine.Cursor.visible = false;
UnityEngine.Cursor.lockState = CursorLockMode.Locked;
}
}
}
public void ShowOnly(string name) => ShowScreen(name);