From e42a5c68f39f82fce78043ce8e87ead7f89f9132 Mon Sep 17 00:00:00 2001 From: maverickdgg Date: Tue, 7 Mar 2023 10:08:30 +0800 Subject: [PATCH] Settings --- Assets/Scenes/MainMenu.shade | 127 +++++++++++++++++++--- Assets/Scripts/Settings.cs | 21 ++++ Assets/Scripts/Settings.cs.shmeta | 3 + Assets/Scripts/UI/SC_Options.cs | 95 ++++++++++++++++ Assets/Scripts/UI/SC_Options.cs.shmeta | 3 + Assets/Scripts/UI/SC_SliderText.cs | 6 +- SHADE_Engine/src/UI/SHSliderComponent.cpp | 16 ++- SHADE_Engine/src/UI/SHSliderComponent.h | 9 +- SHADE_Engine/src/UI/SHUISystem.cpp | 10 +- SHADE_Managed/src/Components/Slider.cxx | 18 +++ SHADE_Managed/src/Components/Slider.hxx | 9 ++ 11 files changed, 291 insertions(+), 26 deletions(-) create mode 100644 Assets/Scripts/Settings.cs create mode 100644 Assets/Scripts/Settings.cs.shmeta create mode 100644 Assets/Scripts/UI/SC_Options.cs create mode 100644 Assets/Scripts/UI/SC_Options.cs.shmeta diff --git a/Assets/Scenes/MainMenu.shade b/Assets/Scenes/MainMenu.shade index 0db6e0d7..197de206 100644 --- a/Assets/Scenes/MainMenu.shade +++ b/Assets/Scenes/MainMenu.shade @@ -517,7 +517,14 @@ Canvas Height: 1080 Scale by canvas width: false IsActive: false - Scripts: ~ + Scripts: + - Type: SHADE_Scripting.UI.Options + Enabled: true + masterVolSlider: 29 + sfxVolSlider: 30 + bgmVolSlider: 31 + fovSlider: 37 + sensitivitySlider: 38 - EID: 20 Name: BackGround IsActive: true @@ -732,6 +739,8 @@ IsActive: true Slider Component: Slider Value: 1 + Min Value: 0 + Max Value: 100 IsActive: true UI Component: Canvas ID: 19 @@ -755,6 +764,8 @@ IsActive: true Slider Component: Slider Value: 1 + Min Value: 0 + Max Value: 100 IsActive: true UI Component: Canvas ID: 19 @@ -778,6 +789,8 @@ IsActive: true Slider Component: Slider Value: 1 + Min Value: 0 + Max Value: 100 IsActive: true UI Component: Canvas ID: 19 @@ -810,7 +823,7 @@ - EID: 33 Name: Camera Text Group IsActive: true - NumberOfChildren: 2 + NumberOfChildren: 4 Components: Transform Component: Translate: {x: -900, y: -220, z: 0} @@ -867,10 +880,54 @@ Clicked: false IsActive: true Scripts: ~ +- EID: 449 + Name: Camera Invert X Text + IsActive: false + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 0, y: -200, z: 0.100000001} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 75, y: 75, z: 1} + IsActive: false + Text Renderer Component: + Text: "Camera Invert X:" + Font: 174412429 + Color: {x: 0, y: 0, z: 0, w: 1} + Text Size: {x: 1, y: 1, z: 1} + IsActive: false + UI Component: + Canvas ID: 19 + Hovered: false + Clicked: false + IsActive: false + Scripts: ~ +- EID: 447 + Name: Camera Invert Y Text + IsActive: false + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: 800, y: -200, z: 0.100000001} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 75, y: 75, z: 1} + IsActive: false + Text Renderer Component: + Text: "Y:" + Font: 174412429 + Color: {x: 0, y: 0, z: 0, w: 1} + Text Size: {x: 1, y: 1, z: 1} + IsActive: false + UI Component: + Canvas ID: 19 + Hovered: false + Clicked: false + IsActive: false + Scripts: ~ - EID: 36 Name: Camera Slider Group IsActive: true - NumberOfChildren: 2 + NumberOfChildren: 4 Components: Transform Component: Translate: {x: 100, y: -200, z: 0} @@ -899,6 +956,8 @@ IsActive: true Slider Component: Slider Value: 1 + Min Value: 45 + Max Value: 120 IsActive: true UI Component: Canvas ID: 19 @@ -922,6 +981,8 @@ IsActive: true Slider Component: Slider Value: 1 + Min Value: 0 + Max Value: 100 IsActive: true UI Component: Canvas ID: 19 @@ -929,6 +990,56 @@ Clicked: false IsActive: true Scripts: ~ +- EID: 448 + Name: Invert X Toggle Button + IsActive: false + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -300, y: -200, z: 0} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 75, y: 75, z: 1} + IsActive: false + Renderable Component: + Mesh: 141771688 + Material: 129340704 + IsActive: false + Toggle Button Component: + Non Toggled Texture: 55358401 + Toggled Texture: 52333376 + Value: false + IsActive: false + UI Component: + Canvas ID: 19 + Hovered: false + Clicked: false + IsActive: false + Scripts: ~ +- EID: 445 + Name: Invert Y Toggle Button + IsActive: false + NumberOfChildren: 0 + Components: + Transform Component: + Translate: {x: -50, y: -200, z: 0} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 75, y: 75, z: 1} + IsActive: false + Renderable Component: + Mesh: 141771688 + Material: 129340704 + IsActive: false + Toggle Button Component: + Non Toggled Texture: 55358401 + Toggled Texture: 52333376 + Value: false + IsActive: false + UI Component: + Canvas ID: 19 + Hovered: false + Clicked: false + IsActive: false + Scripts: ~ - EID: 39 Name: Audio Slider Text Group IsActive: true @@ -970,8 +1081,6 @@ - Type: SHADE_Scripting.UI.SliderText Enabled: true sliderObj: 29 - minValue: 0 - maxValue: 100 - EID: 41 Name: SFX Volume Slider Text IsActive: true @@ -997,8 +1106,6 @@ - Type: SHADE_Scripting.UI.SliderText Enabled: true sliderObj: 30 - minValue: 0 - maxValue: 100 - EID: 42 Name: BGM Volume Slider Text IsActive: true @@ -1024,8 +1131,6 @@ - Type: SHADE_Scripting.UI.SliderText Enabled: true sliderObj: 31 - minValue: 0 - maxValue: 100 - EID: 43 Name: Camera Slider Text Group IsActive: true @@ -1067,8 +1172,6 @@ - Type: SHADE_Scripting.UI.SliderText Enabled: true sliderObj: 37 - minValue: 0 - maxValue: 100 - EID: 45 Name: Sensitivity Slider Text IsActive: true @@ -1094,8 +1197,6 @@ - Type: SHADE_Scripting.UI.SliderText Enabled: true sliderObj: 38 - minValue: 0 - maxValue: 100 - EID: 46 Name: Credits Canvas IsActive: false diff --git a/Assets/Scripts/Settings.cs b/Assets/Scripts/Settings.cs new file mode 100644 index 00000000..e769237d --- /dev/null +++ b/Assets/Scripts/Settings.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SHADE_Scripting +{ + static public class Settings + { + static public float cameraSensitivity = 100.0f; + + static public float cameraFOV = 90.0f; + + static public float masterVolume = 100.0f; + static public float sfxVolume = 100.0f; + static public float bgmVolume = 100.0f; + + + } +} diff --git a/Assets/Scripts/Settings.cs.shmeta b/Assets/Scripts/Settings.cs.shmeta new file mode 100644 index 00000000..4e63126d --- /dev/null +++ b/Assets/Scripts/Settings.cs.shmeta @@ -0,0 +1,3 @@ +Name: Settings +ID: 163325256 +Type: 9 diff --git a/Assets/Scripts/UI/SC_Options.cs b/Assets/Scripts/UI/SC_Options.cs new file mode 100644 index 00000000..bc2fa69c --- /dev/null +++ b/Assets/Scripts/UI/SC_Options.cs @@ -0,0 +1,95 @@ +using SHADE; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SHADE_Scripting.UI +{ + public class Options:Script + { + public GameObject masterVolSlider; + public GameObject sfxVolSlider; + public GameObject bgmVolSlider; + public GameObject fovSlider; + public GameObject sensitivitySlider; + + + + + protected override void awake() + { + Slider mv = masterVolSlider.GetComponent(); + Slider sfx = sfxVolSlider.GetComponent(); + Slider bgm = bgmVolSlider.GetComponent(); + Slider fov = fovSlider.GetComponent(); + Slider sens = sensitivitySlider.GetComponent(); + + + + if (mv != null) + { + mv.ScaledValue = Settings.masterVolume; + + } + if (sfx != null) + { + sfx.ScaledValue = Settings.sfxVolume; + + } + if (bgm != null) + { + bgm.ScaledValue = Settings.bgmVolume; + + } + if (fov != null) + { + fov.ScaledValue = Settings.cameraFOV; + + } + if (sens != null) + { + sens.ScaledValue = Settings.cameraSensitivity; + + } + + + } + + + protected override void update() + { + Slider mv = masterVolSlider.GetComponent(); + Slider sfx = sfxVolSlider.GetComponent(); + Slider bgm = bgmVolSlider.GetComponent(); + Slider fov = fovSlider.GetComponent(); + Slider sens = sensitivitySlider.GetComponent(); + + if(mv != null) + { + Settings.masterVolume = mv.ScaledValue; + } + if (sfx != null) + { + Settings.sfxVolume = sfx.ScaledValue; + } + if (bgm != null) + { + Settings.bgmVolume = bgm.ScaledValue; + } + if (fov != null) + { + Settings.cameraFOV = fov.ScaledValue; + } + if (sens != null) + { + Settings.cameraSensitivity = sens.ScaledValue; + } + + + } + + + } +} diff --git a/Assets/Scripts/UI/SC_Options.cs.shmeta b/Assets/Scripts/UI/SC_Options.cs.shmeta new file mode 100644 index 00000000..36789fa3 --- /dev/null +++ b/Assets/Scripts/UI/SC_Options.cs.shmeta @@ -0,0 +1,3 @@ +Name: SC_Options +ID: 162565004 +Type: 9 diff --git a/Assets/Scripts/UI/SC_SliderText.cs b/Assets/Scripts/UI/SC_SliderText.cs index e3f5a8b3..c2f8eb12 100644 --- a/Assets/Scripts/UI/SC_SliderText.cs +++ b/Assets/Scripts/UI/SC_SliderText.cs @@ -11,8 +11,6 @@ namespace SHADE_Scripting.UI { public GameObject sliderObj; - public int minValue = 0; - public int maxValue = 0; protected override void start() { @@ -22,7 +20,7 @@ namespace SHADE_Scripting.UI if (slider != null && text != null) { - text.Text = ((int)(slider.GetValue() * (maxValue - minValue) + minValue)).ToString(); + text.Text = ((int)(slider.ScaledValue)).ToString(); } } protected override void update() @@ -32,7 +30,7 @@ namespace SHADE_Scripting.UI if(slider != null && text != null) { - text.Text = ((int)(slider.GetValue() * (maxValue - minValue) + minValue)).ToString(); + text.Text = ((int)(slider.ScaledValue)).ToString(); } } diff --git a/SHADE_Engine/src/UI/SHSliderComponent.cpp b/SHADE_Engine/src/UI/SHSliderComponent.cpp index d25fbb6f..d841ca4b 100644 --- a/SHADE_Engine/src/UI/SHSliderComponent.cpp +++ b/SHADE_Engine/src/UI/SHSliderComponent.cpp @@ -4,7 +4,7 @@ namespace SHADE { SHSliderComponent::SHSliderComponent() - :value(0.0f) + :value(0.0f),minValue(0.0f), maxValue(100.0f) { } @@ -21,6 +21,17 @@ namespace SHADE } + float SHSliderComponent::GetScaledValue() const noexcept + { + return value * (maxValue - minValue) + minValue; + } + + void SHSliderComponent::SetScaledValue(float value) noexcept + { + this->value = (value - minValue) / (maxValue - minValue); + } + + } @@ -32,7 +43,8 @@ RTTR_REGISTRATION registration::class_("Slider Component") .property("Slider Value", &SHSliderComponent::GetValue, &SHSliderComponent::SetValue) - + .property("Min Value", &SHSliderComponent::minValue) + .property("Max Value", &SHSliderComponent::maxValue) ; diff --git a/SHADE_Engine/src/UI/SHSliderComponent.h b/SHADE_Engine/src/UI/SHSliderComponent.h index 1eb64205..15997b73 100644 --- a/SHADE_Engine/src/UI/SHSliderComponent.h +++ b/SHADE_Engine/src/UI/SHSliderComponent.h @@ -18,11 +18,16 @@ namespace SHADE virtual ~SHSliderComponent() = default; + float minValue; + float maxValue; + + float GetValue() const noexcept; - - void SetValue(float value) noexcept; + float GetScaledValue() const noexcept; + void SetScaledValue(float value)noexcept; + friend class SHUISystem; private: diff --git a/SHADE_Engine/src/UI/SHUISystem.cpp b/SHADE_Engine/src/UI/SHUISystem.cpp index 74dfb62c..63731e18 100644 --- a/SHADE_Engine/src/UI/SHUISystem.cpp +++ b/SHADE_Engine/src/UI/SHUISystem.cpp @@ -403,7 +403,7 @@ namespace SHADE auto uiComp = SHComponentManager::GetComponent(comp.GetEID()); //auto canvasComp = SHComponentManager::GetComponent_s(uiComp->canvasID); - float tempValue = comp.GetValue(); + float tempValue = comp.value; CheckButtonHoveredOrClicked(*uiComp); @@ -441,9 +441,9 @@ namespace SHADE comp.value = (mousePos.x - topExtent.x) / (btmExtent.x - topExtent.x); - if (comp.GetValue() > 1.0f) + if (comp.value > 1.0f) comp.value = 1.0f; - if (comp.GetValue() < 0.0f) + if (comp.value < 0.0f) comp.value = 0.0f; } try @@ -453,11 +453,11 @@ namespace SHADE auto material = renderable->GetModifiableMaterial(); if (renderable) { - if (comp.GetValue() != material->GetProperty("data.sliderThreshold")) + if (comp.value != material->GetProperty("data.sliderThreshold")) { //Set shader value. - material->SetProperty("data.sliderThreshold", comp.GetValue()); + material->SetProperty("data.sliderThreshold", comp.value); } } diff --git a/SHADE_Managed/src/Components/Slider.cxx b/SHADE_Managed/src/Components/Slider.cxx index 163a33a3..898f979a 100644 --- a/SHADE_Managed/src/Components/Slider.cxx +++ b/SHADE_Managed/src/Components/Slider.cxx @@ -23,4 +23,22 @@ namespace SHADE } + void Slider::SetValue(float value) + { + return GetNativeComponent()->SetValue(value); + } + + + float Slider::ScaledValue::get() + { + return GetNativeComponent()->GetScaledValue(); + } + + void Slider::ScaledValue::set(float value) + { + return GetNativeComponent()->SetScaledValue(value); + } + + + } diff --git a/SHADE_Managed/src/Components/Slider.hxx b/SHADE_Managed/src/Components/Slider.hxx index 7f0efa1e..0a100faa 100644 --- a/SHADE_Managed/src/Components/Slider.hxx +++ b/SHADE_Managed/src/Components/Slider.hxx @@ -42,6 +42,15 @@ namespace SHADE public: float GetValue(); + void SetValue(float value); + + + property float ScaledValue + { + float get(); + void set(float value); + } + };