Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
VirtualButtonConfig.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Collections.Generic;
5 using System.Collections.Specialized;
6 using SiliconStudio.Core.Collections;
7 
8 namespace SiliconStudio.Paradox.Input
9 {
10  /// <summary>
11  /// Describes the configuration composed by a collection of <see cref="VirtualButtonBinding"/>.
12  /// </summary>
13  public class VirtualButtonConfig : TrackingCollection<VirtualButtonBinding>
14  {
15  private readonly Dictionary<object, List<VirtualButtonBinding>> mapBindings;
16 
17  /// <summary>
18  /// Initializes a new instance of the <see cref="VirtualButtonConfig" /> class.
19  /// </summary>
21  {
22  mapBindings = new Dictionary<object, List<VirtualButtonBinding>>();
23  CollectionChanged += bindings_CollectionChanged;
24  }
25 
26  /// <summary>
27  /// Gets the binding names.
28  /// </summary>
29  /// <value>The binding names.</value>
30  public IEnumerable<object> BindingNames
31  {
32  get
33  {
34  return mapBindings.Keys;
35  }
36  }
37 
38  public virtual float GetValue(InputManagerBase inputManager, object name)
39  {
40  float value = 0.0f;
41  List<VirtualButtonBinding> bindingsPerName;
42  if (mapBindings.TryGetValue(name, out bindingsPerName))
43  {
44  foreach (var virtualButtonBinding in bindingsPerName)
45  {
46  float newValue = virtualButtonBinding.GetValue(inputManager);
47  if (Math.Abs(newValue) > Math.Abs(value))
48  {
49  value = newValue;
50  }
51  }
52  }
53 
54  return value;
55  }
56 
57  void bindings_CollectionChanged(object sender, TrackingCollectionChangedEventArgs e)
58  {
59  var virtualButtonBinding = (VirtualButtonBinding)e.Item;
60  switch (e.Action)
61  {
62  case NotifyCollectionChangedAction.Add:
63  AddBinding(virtualButtonBinding);
64  break;
65  case NotifyCollectionChangedAction.Remove:
66  RemoveBinding(virtualButtonBinding);
67  break;
68  }
69  }
70 
71  private void AddBinding(VirtualButtonBinding virtualButtonBinding)
72  {
73  List<VirtualButtonBinding> bindingsPerName;
74  if (!mapBindings.TryGetValue(virtualButtonBinding.Name, out bindingsPerName))
75  {
76  bindingsPerName = new List<VirtualButtonBinding>();
77  mapBindings.Add(virtualButtonBinding.Name, bindingsPerName);
78  }
79  bindingsPerName.Add(virtualButtonBinding);
80  }
81 
82  private void RemoveBinding(VirtualButtonBinding virtualButtonBinding)
83  {
84  List<VirtualButtonBinding> bindingsPerName;
85  if (mapBindings.TryGetValue(virtualButtonBinding.Name, out bindingsPerName))
86  {
87  bindingsPerName.Remove(virtualButtonBinding);
88  }
89  }
90  }
91 }
VirtualButtonConfig()
Initializes a new instance of the VirtualButtonConfig class.
Keys
Enumeration for keys.
Definition: Keys.cs:8
Describes a binding between a name and a IVirtualButton.
switch(inFormat)
object Item
Gets the added or removed item (if dictionary, value only).
Interface for input management system, including keyboard, mouse, gamepads and touch.
NotifyCollectionChangedAction Action
Gets the type of action performed. Allowed values are NotifyCollectionChangedAction.Add and NotifyCollectionChangedAction.Remove.
Describes the configuration composed by a collection of VirtualButtonBinding.
virtual float GetValue(InputManagerBase inputManager, object name)