According to my profiler calling InputManager.GetKey(Keycode) is generating garbage yet it seems like it’s a very simple code. Does someone know why that is?
public static class InputManager
{
public static Dictionary<K, KeyCode[]> ButtonKeys { get; private set; }
public static bool DisableListenToMouseClicks { get; private set; }
static InputManager()
{
ButtonKeys = new Dictionary<K, KeyCode[]>();
ButtonKeys[K.Glide] = new[] { KeyCode.LeftControl };
ButtonKeys[K.Jump] = new[] { KeyCode.Space };
ButtonKeys[K.Interact] = new[] { KeyCode.F };
ButtonKeys[K.Attack] = new[] {/* KeyCode.C, KeyCode.LeftShift, */KeyCode.Mouse0 };
ButtonKeys[K.AttackUp] = new[] { KeyCode.W };
ButtonKeys[K.AttackDown] = new[] { KeyCode.S };
ButtonKeys[K.AttackLeft] = new[] { KeyCode.A };
ButtonKeys[K.AttackRight] = new[] { KeyCode.D };
ButtonKeys[K.Dash] = new[] { KeyCode.Mouse1 };
ButtonKeys[K.DodgeRoll] = new[] { KeyCode.LeftShift };
// UI/Pauses..
ButtonKeys[K.Pause] = new[] { KeyCode.P };
ButtonKeys[K.Inventory] = new[] { KeyCode.I };
ButtonKeys[K.Character] = new[] { KeyCode.H };
ButtonKeys[K.HighlightItems] = new[] { KeyCode.LeftAlt };
// Move
ButtonKeys[K.Down] = new[] { KeyCode.S, KeyCode.DownArrow };
ButtonKeys[K.Up] = new[] { KeyCode.W, KeyCode.UpArrow };
ButtonKeys[K.Right] = new[] { KeyCode.D, KeyCode.RightArrow };
ButtonKeys[K.Left] = new[] { KeyCode.A, KeyCode.LeftArrow };
// Use skills
ButtonKeys[K.StealSkill] = new[] { KeyCode.Q };
ButtonKeys[K.EquipSkill1] = new[] { KeyCode.Alpha1 };
ButtonKeys[K.EquipSkill2] = new[] { KeyCode.Alpha2 };
ButtonKeys[K.EquipSkill3] = new[] { KeyCode.Alpha3 };
ButtonKeys[K.EquipSkill4] = new[] { KeyCode.Alpha4 };
// Misc
ButtonKeys[K.TestKey] = new[] { KeyCode.J };
ButtonKeys[K.Block] = new[] { KeyCode.R };
ButtonKeys[K.Explosion] = new[] { KeyCode.L };
ButtonKeys[K.PushPull] = new[] { KeyCode.V };
ButtonKeys[K.Telekinesis] = new[] { KeyCode.B };
ButtonKeys[K.SpellMode] = new[] { KeyCode.LeftShift };
ButtonKeys[K.Teleport] = new[] { KeyCode.S };
ButtonKeys[K.ThrowUp] = new[] { KeyCode.W };
ButtonKeys[K.Meteor] = new[] { KeyCode.D };
ButtonKeys[K.ChargeDash] = new[] { KeyCode.A };
ButtonKeys[K.Arrow] = new[] { KeyCode.Q };
ButtonKeys[K.Bungee] = new[] { KeyCode.F };
ButtonKeys[K.DownwardSlash] = new[] { KeyCode.E };
ButtonKeys[K.SunStrike] = new[] { KeyCode.Q };
ButtonKeys[K.SwitchWeapon] = new[] { KeyCode.E };
ButtonKeys[K.UseSkill] = new[] { KeyCode.Mouse1 };
ButtonKeys[K.CancelSkill] = new[] { KeyCode.R };
ButtonKeys[K.SlowTime] = new[] { KeyCode.C };
ButtonKeys[K.CounterPush] = new[] { KeyCode.Mouse1 };
ButtonKeys[K.CounterStun] = new[] { KeyCode.Mouse0 };
ButtonKeys[K.Stalagmite] = new[] { KeyCode.Alpha1 };
}
public static bool GetKey(K _buttonName)
{
//if (ButtonKeys.ContainsKey(_buttonName) == false)
//{
// Debug.LogError("InputManager::GetButtonDown -- No button named: " + _buttonName);
// return false;
//}
var keycodes = ButtonKeys[_buttonName];
foreach (var input in keycodes)
{
if (IsMouseClick(input) && DisableListenToMouseClicks) continue;
if (Input.GetKey(input)) return true;
}
return false;
}
public static bool IsMouseClick(KeyCode _code)
{
return _code == KeyCode.Mouse0 || _code == KeyCode.Mouse1 || _code == KeyCode.Mouse2 ||
_code == KeyCode.Mouse3 || _code == KeyCode.Mouse4 || _code == KeyCode.Mouse5 || _code == KeyCode.Mouse6;
}
}