chunk 1: core gameplay scripts scenes runtime assets
This commit is contained in:
184
Assets/Scripts/Settings/ControlScaler.cs
Normal file
184
Assets/Scripts/Settings/ControlScaler.cs
Normal file
@@ -0,0 +1,184 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using TMPro;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class ControlScaler : MonoBehaviour{
|
||||
public static ControlScaler instance;
|
||||
public float leftControlScale = 1f, rightControlScale = 1f, punchControlScale = 1f, kickControlScale = 1f;
|
||||
|
||||
public Slider buttonScaler; //Slider used to alter button size, scaling up or down
|
||||
public Button[] buttonsArray; //Buttons considered to alter size
|
||||
|
||||
private Button selectedButton; //Reference to the current selected button
|
||||
private Color defaultButtonColor = new Color(1f, 1f, 1f); //Button default color
|
||||
public Color selectedButtonColor = new Color(0.9411765f, 0.6196079f, 0.03137255f); // Color when the button is selected
|
||||
|
||||
private GameSettings gameSettings; //Reference to GameSettings
|
||||
private bool isUpdatingSlider = false; //Flag for slider value change
|
||||
|
||||
private const string GameSettingsKey = "GameSettings";
|
||||
|
||||
|
||||
void OnEnable(){
|
||||
foreach (Button button in buttonsArray)
|
||||
{
|
||||
SetButtonColor(button, defaultButtonColor);
|
||||
}
|
||||
selectedButton = null;
|
||||
|
||||
|
||||
if (PlayerPrefs.HasKey(GameSettingsKey))
|
||||
{
|
||||
gameSettings = SettingsHandler.LoadGameSettings();
|
||||
|
||||
leftControlScale = gameSettings.leftControlScaleValue;
|
||||
rightControlScale = gameSettings.rightControlScaleValue;
|
||||
punchControlScale = gameSettings.punchControlScaleValue;
|
||||
kickControlScale = gameSettings.kickControlScaleValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (instance == null)
|
||||
{
|
||||
instance = this;
|
||||
}
|
||||
else
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Start()
|
||||
{
|
||||
// Initialize the default button color
|
||||
if (buttonsArray.Length > 0)
|
||||
{
|
||||
defaultButtonColor = buttonsArray[0].colors.normalColor;
|
||||
}
|
||||
|
||||
// Add listeners to the buttons
|
||||
foreach (Button button in buttonsArray)
|
||||
{
|
||||
button.onClick.AddListener(() => ControlButtonClicked(button));
|
||||
// button.onClick.AddListener(ControlButtonClicked);
|
||||
}
|
||||
|
||||
// Add a listener to the slider
|
||||
buttonScaler.onValueChanged.AddListener(OnSliderValueChanged);
|
||||
}
|
||||
|
||||
void Update(){
|
||||
if (selectedButton != null)
|
||||
{
|
||||
// Debug.Log(selectedButton.name);
|
||||
SetButtonColor(selectedButton, selectedButtonColor); //Set color of current selected button
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Function called when slider value is changed, which should change button size based on the slider value
|
||||
void OnSliderValueChanged(float value)
|
||||
{
|
||||
if (isUpdatingSlider) return;
|
||||
|
||||
// For now, it just ensures the selected button color is maintained
|
||||
if (selectedButton != null)
|
||||
{
|
||||
SetButtonColor(selectedButton, selectedButtonColor);
|
||||
|
||||
string clickedGO = (selectedButton.gameObject).name;
|
||||
(float originalWidth, float originalHeight) = SettingsHandler.OriginalScales(clickedGO);
|
||||
SetButtonSize(value, originalHeight, originalWidth, clickedGO);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Function to change current selected button's color
|
||||
private void SetButtonColor(Button button, Color color){
|
||||
ColorBlock colorBlock = button.colors;
|
||||
colorBlock.normalColor = color;
|
||||
button.colors = colorBlock;
|
||||
}
|
||||
|
||||
|
||||
// Function to set the size of the button based on the slider value, adjusting the button's size
|
||||
void SetButtonSize(float value, float originalHeight, float originalWidth, string clickedGO){
|
||||
if (selectedButton != null){
|
||||
// Calculate the new width and height based on the slider value
|
||||
float newWidth = originalWidth * value;
|
||||
float newHeight = originalHeight * value;
|
||||
|
||||
RectTransform buttonRectTransform = selectedButton.GetComponent<RectTransform>();
|
||||
buttonRectTransform.sizeDelta = new Vector2(newWidth, newHeight);
|
||||
|
||||
|
||||
//leftControlScale = 1f, rightControlScale = 1f, punchControlScale = 1f, kickControlScale = 1f;
|
||||
switch(clickedGO){
|
||||
case "left_control":
|
||||
leftControlScale = value;
|
||||
Debug.Log($"Left {leftControlScale}");
|
||||
break;
|
||||
|
||||
case "right_control":
|
||||
rightControlScale = value;
|
||||
Debug.Log($"Right {rightControlScale}");
|
||||
break;
|
||||
|
||||
case "kick":
|
||||
kickControlScale = value;
|
||||
Debug.Log($"Kick {kickControlScale}");
|
||||
break;
|
||||
|
||||
case "punch":
|
||||
punchControlScale = value;
|
||||
Debug.Log($"Punch {punchControlScale}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Function called when a button is clicked, the button is then to be scaled
|
||||
void ControlButtonClicked(Button button){
|
||||
gameSettings = SettingsHandler.LoadGameSettings();
|
||||
string clickedGO = (button.gameObject).name;
|
||||
|
||||
Debug.Log($"{SettingsHandler.OriginalScales(clickedGO)}");
|
||||
|
||||
(float originalWidth, float originalHeight) = SettingsHandler.OriginalScales(clickedGO);
|
||||
(float currentControlWidth, float currentControlHeight) = SettingsHandler.LoadedScale(clickedGO);
|
||||
SetScalerSlider(originalWidth, originalHeight, currentControlWidth, currentControlHeight);
|
||||
|
||||
selectedButton = button;
|
||||
(buttonScaler.gameObject).SetActive(true);
|
||||
|
||||
foreach (Button btn in buttonsArray){
|
||||
if (btn.name == button.name){
|
||||
continue;
|
||||
|
||||
}else{
|
||||
ColorBlock colorBlock = btn.colors;
|
||||
colorBlock.normalColor = defaultButtonColor;
|
||||
btn.colors = colorBlock;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Sets the Slider value to show value of the current button clicked, which is to be scaled
|
||||
void SetScalerSlider(float originalWidth, float originalHeight, float currentControlWidth, float currentControlHeight){
|
||||
// Calculate the normalized values
|
||||
float normalizedWidth = currentControlWidth / originalWidth;
|
||||
|
||||
// Temporarily disable the slider's onValueChanged listener
|
||||
isUpdatingSlider = true;
|
||||
buttonScaler.value = normalizedWidth;
|
||||
isUpdatingSlider = false;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user