using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using System.Collections;
[System.Serializable]
public class KeyBinding : MonoBehaviour {
//Name comes from enum in KeyBindingsManager scrip
public keyType keyName;
//keycode set in inspector and by player
public KeyCode thisKey = KeyCode.W;
//Text to display keycode for user feedback
public Text keyDisplay;
//Used for color changing during key binding
public GameObject button;
public Color toggleColor = new Color();
Image buttonImage;
Color originalColor;
//Internal variables
bool reassignKey = false;
Event curEvent;
//Changes in button behavior should be made here
void OnGUI()
{
curEvent = Event.current;
//Checks if key is pressed and if button has been pressed indicating wanting to re-assign
if(curEvent.isKey && curEvent.keyCode != KeyCode.None && reassignKey)
{
thisKey = curEvent.keyCode;
ChangeKeyCode();
UpdateKeyCode();
SaveKeyCode();
}
}
//Initializes
void Awake()
{
buttonImage = button.GetComponent<Image>();
originalColor = buttonImage.color;
button.GetComponent<Button>().onClick.AddListener(() => ChangeKeyCode());
}
//Loads keycodes from player preferences
void OnEnable()
{
KeyCode tempKey;
tempKey = (KeyCode) PlayerPrefs.GetInt(keyName.ToString());
if(tempKey.ToString() == "None")
{
Debug.Log("Got No Key Code");
}
else
{
thisKey = tempKey;
keyDisplay.text = thisKey.ToString();
UpdateKeyCode();
}
}
//Called by button on GUI
public void ChangeKeyCode()
{
reassignKey = !reassignKey;
if(reassignKey)
buttonImage.color = toggleColor;
else
buttonImage.color = originalColor;
}
//saves keycode to player prefs
public void SaveKeyCode()
{
keyDisplay.text = thisKey.ToString();
PlayerPrefs.SetInt(keyName.ToString(),(int)thisKey);
PlayerPrefs.Save();
}
//updates dictionary on key bindings manager
void UpdateKeyCode()
{
KeyBindingManager.singleton.UpdateDictionary(keyName,thisKey);
}
}