4 using System.Collections.Generic;
5 using System.Reflection;
6 using SiliconStudio.Core.Extensions;
7 using SiliconStudio.Core.Mathematics;
10 namespace SiliconStudio.
Paradox.Input
17 private static readonly Dictionary<int, VirtualButton> mapIp =
new Dictionary<int, VirtualButton>();
18 private static readonly Dictionary<string, VirtualButton> mapName =
new Dictionary<string, VirtualButton>();
19 private static readonly List<VirtualButton> registered =
new List<VirtualButton>();
20 private static IReadOnlyCollection<VirtualButton> registeredReadOnly;
21 internal const int TypeIdMask = 0x0FFFFFFF;
35 IsPositiveAndNegative = isPositiveAndNegative;
41 public readonly
int Id;
46 public readonly
string Name;
60 return string.Format(
"{0}", Name);
93 public static IReadOnlyCollection<VirtualButton> Registered
98 return registeredReadOnly;
111 mapName.TryGetValue(name, out virtualButton);
112 return virtualButton;
124 mapIp.TryGetValue(id, out virtualButton);
125 return virtualButton;
130 private static void EnsureInitialize()
134 if (mapIp.Count == 0)
136 RegisterFromType(typeof(Keyboard));
137 RegisterFromType(typeof(GamePad));
138 registeredReadOnly = registered;
143 internal static float ClampValue(
float value)
145 return MathUtil.Clamp(value, -1.0f, 1.0f);
148 private static void RegisterFromType(Type type)
150 foreach (var fieldInfo
in type.GetTypeInfo().DeclaredFields)
152 if (fieldInfo.IsStatic && fieldInfo.FieldType == typeof(VirtualButton))
154 Register((VirtualButton)fieldInfo.GetValue(null));
159 private static void Register(VirtualButton virtualButton)
162 if (!mapIp.ContainsKey(virtualButton.Id))
164 mapIp.Add(virtualButton.Id, virtualButton);
165 registered.Add(virtualButton);
168 if (!mapName.ContainsKey(virtualButton.Name))
170 mapName.Add(virtualButton.Name, virtualButton);