Scriptum/Assets/Scripts/KeyBindScript.cs
2023-01-07 12:02:47 +01:00

139 lines
4.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class KeyBindScript : MonoBehaviour
{
/// <summary>
/// This is the dictionary, that contains all our keybinds
/// </summary>
private Dictionary<string, KeyCode> keys = new Dictionary<string, KeyCode>();
/// <summary>
/// References to the button objects, these are used for showing the current keybinds
/// </summary>
public Text interaction, skills, settings, attack, inventory;
/// <summary>
/// The key, that we are binding atm.
/// </summary>
private GameObject currentKey;
/// <summary>
/// The normal color of the buttons
/// </summary>
private Color32 normal = new Color32(255, 255, 255, 255);
/// <summary>
/// The highlighted color of the buttons
/// </summary>
private Color32 slected = new Color32(239, 116, 36, 255);
// Use this for initialization
void Start()
{
keys.Add("Interact",(KeyCode)System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("Interact","E")));
keys.Add("Settings",(KeyCode)System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("Settings","Escape")));
keys.Add("Inventory",(KeyCode)System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("Inventory","I")));
keys.Add("Skills",(KeyCode)System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("Skills","U")));
keys.Add("Attack",(KeyCode)System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("Attack","Space")));
//Sets the text on the buttons
//interaction.text = keys["Interact"].ToString();
interaction.text = PlayerPrefs.GetString("Interact");
//skills.text = keys["Settings"].ToString();
skills.text = PlayerPrefs.GetString("Skills");
//settings.text = keys["Inventory"].ToString();
settings.text = PlayerPrefs.GetString("Settings");
//attack.text = keys["Skills"].ToString();
attack.text = PlayerPrefs.GetString("Attack");
//inventory.text = keys["Attack"].ToString();
inventory.text = PlayerPrefs.GetString("Inventory");
}
/*
// Update is called once per frame
void Update()
{
//Simulates movement and usage of the keys
if (
)
{
//Do a move action
Debug.Log("Up");
}
if (Input.GetKeyDown(keys["Down"]))
{
//Do a move action
Debug.Log("Down");
}
if (Input.GetKeyDown(keys["Left"]))
{
//Do a move action
Debug.Log("Left");
}
if (Input.GetKeyDown(keys["Right"]))
{
//Do a move action
Debug.Log("Right");
}
if (Input.GetKeyDown(keys["Jump"]))
{
//Do a move action
Debug.Log("Jump");
}
}
}*/
void OnGUI()
{
if (currentKey != null) //If we have selected a key, that we want to edit
{
Event e = Event.current; //Stores the event
if (e.isKey) //If we pressed a key on the keyboard, then we need to assign it to the selected key
{
keys[currentKey.name] = e.keyCode; //Sets the current key
currentKey.transform.GetChild(0).GetComponent<Text>().text = e.keyCode.ToString(); //Sets the text
currentKey.GetComponent<Image>().color = normal; //Sets thecolor
currentKey = null; //Deselects the key
}
}
}
/// <summary>
/// Changes a keybind
/// </summary>
/// <param name="clicked">The clicked button</param>
public void ChangeKey(GameObject clicked)
{
if (currentKey != null) //If we have a selected key, then we need to deselect
{
currentKey.GetComponent<Image>().color = normal; //Sets the color to normal
}
currentKey = clicked; //Sets the new clicked key as the current key
currentKey.GetComponent<Image>().color = slected; //Set the color as selected
}
/// <summary>
/// Saves the new keybinds
/// </summary>
public void SaveKeys()
{
foreach (var key in keys) //Runs through the dictionary
{
PlayerPrefs.SetString(key.Key, key.Value.ToString()); //Saves the keybinds for each key
}
PlayerPrefs.Save();
InventoryUIManager.Instance.keyToOpen = (KeyCode) System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("Inventory"));
EquipmentUIManager.Instance.keyToOpen = (KeyCode) System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("Inventory"));
SkillsUIManager.Instance.keyToOpen = (KeyCode) System.Enum.Parse(typeof(KeyCode), PlayerPrefs.GetString("Skills"));
}
}