public void Editor_InputAsset_CanAddCompositeBinding() { var map = new InputActionMap("set"); map.AddAction(name: "action1"); var asset = ScriptableObject.CreateInstance <InputActionAsset>(); asset.AddActionMap(map); var obj = new SerializedObject(asset); var mapProperty = obj.FindProperty("m_ActionMaps").GetArrayElementAtIndex(0); var action1Property = mapProperty.FindPropertyRelative("m_Actions").GetArrayElementAtIndex(0); InputActionSerializationHelpers.AddCompositeBinding(action1Property, mapProperty, "Axis", typeof(AxisComposite)); obj.ApplyModifiedPropertiesWithoutUndo(); var action1 = asset.actionMaps[0].TryGetAction("action1"); Assert.That(action1.bindings, Has.Count.EqualTo(3)); Assert.That(action1.bindings[0].path, Is.EqualTo("Axis")); Assert.That(action1.bindings, Has.Exactly(1).Matches((InputBinding x) => x.name == "positive")); Assert.That(action1.bindings, Has.Exactly(1).Matches((InputBinding x) => x.name == "negative")); Assert.That(action1.bindings[0].isComposite, Is.True); Assert.That(action1.bindings[0].isPartOfComposite, Is.False); Assert.That(action1.bindings[1].isComposite, Is.False); Assert.That(action1.bindings[1].isPartOfComposite, Is.True); Assert.That(action1.bindings[2].isComposite, Is.False); Assert.That(action1.bindings[2].isPartOfComposite, Is.True); }
public void Editor_InputAsset_CanChangeCompositeType() { var map = new InputActionMap("map"); map.AddAction(name: "action1"); var asset = ScriptableObject.CreateInstance <InputActionAsset>(); asset.AddActionMap(map); var obj = new SerializedObject(asset); var mapProperty = obj.FindProperty("m_ActionMaps").GetArrayElementAtIndex(0); var action1Property = mapProperty.FindPropertyRelative("m_Actions").GetArrayElementAtIndex(0); // Add an axis composite with a positive and negative binding in place. InputActionSerializationHelpers.AddCompositeBinding(action1Property, mapProperty, "Axis", addPartBindings: false); InputActionSerializationHelpers.AddBinding(action1Property, mapProperty, path: "<Gamepad>/buttonWest", name: "Negative", processors: "normalize", interactions: "tap", flags: InputBinding.Flags.PartOfComposite); InputActionSerializationHelpers.AddBinding(action1Property, mapProperty, path: "<Gamepad>/buttonEast", name: "Positive", processors: "clamp", interactions: "slowtap", flags: InputBinding.Flags.PartOfComposite); // Noise. InputActionSerializationHelpers.AddBinding(action1Property, mapProperty, path: "foobar"); // Change to vector2 composite and make sure that we've added two more bindings, changed the names // of bindings accordingly, and preserved the existing binding paths and such. InputActionSerializationHelpers.ChangeCompositeType(mapProperty.FindPropertyRelative("m_Bindings"), 0, "Dpad", typeof(Vector2Composite), "action1"); obj.ApplyModifiedPropertiesWithoutUndo(); var action1 = asset.actionMaps[0].GetAction("action1"); Assert.That(action1.bindings, Has.Count.EqualTo(6)); // Composite + 4 parts + noise added above. Assert.That(action1.bindings[0].path, Is.EqualTo("Dpad")); Assert.That(action1.bindings, Has.None.Matches((InputBinding x) => string.Equals(x.name, "positive", StringComparison.InvariantCultureIgnoreCase))); Assert.That(action1.bindings, Has.None.Matches((InputBinding x) => string.Equals(x.name, "negative", StringComparison.InvariantCultureIgnoreCase))); Assert.That(action1.bindings, Has.Exactly(1).Matches((InputBinding x) => string.Equals(x.name, "up", StringComparison.InvariantCultureIgnoreCase))); Assert.That(action1.bindings, Has.Exactly(1).Matches((InputBinding x) => string.Equals(x.name, "down", StringComparison.InvariantCultureIgnoreCase))); Assert.That(action1.bindings, Has.Exactly(1).Matches((InputBinding x) => string.Equals(x.name, "left", StringComparison.InvariantCultureIgnoreCase))); Assert.That(action1.bindings, Has.Exactly(1).Matches((InputBinding x) => string.Equals(x.name, "right", StringComparison.InvariantCultureIgnoreCase))); Assert.That(action1.bindings[0].isComposite, Is.True); Assert.That(action1.bindings[0].isPartOfComposite, Is.False); Assert.That(action1.bindings[1].isComposite, Is.False); Assert.That(action1.bindings[1].isPartOfComposite, Is.True); Assert.That(action1.bindings[2].isComposite, Is.False); Assert.That(action1.bindings[2].isPartOfComposite, Is.True); Assert.That(action1.bindings[3].isComposite, Is.False); Assert.That(action1.bindings[3].isPartOfComposite, Is.True); Assert.That(action1.bindings[4].isComposite, Is.False); Assert.That(action1.bindings[4].isPartOfComposite, Is.True); Assert.That(action1.bindings[1].path, Is.EqualTo("<Gamepad>/buttonWest")); Assert.That(action1.bindings[2].path, Is.EqualTo("<Gamepad>/buttonEast")); Assert.That(action1.bindings[1].interactions, Is.EqualTo("tap")); Assert.That(action1.bindings[2].interactions, Is.EqualTo("slowtap")); Assert.That(action1.bindings[1].processors, Is.EqualTo("normalize")); Assert.That(action1.bindings[2].processors, Is.EqualTo("clamp")); Assert.That(action1.bindings[3].path, Is.Empty); Assert.That(action1.bindings[4].path, Is.Empty); Assert.That(action1.bindings[3].interactions, Is.Empty); Assert.That(action1.bindings[4].interactions, Is.Empty); Assert.That(action1.bindings[3].processors, Is.Empty); Assert.That(action1.bindings[4].processors, Is.Empty); Assert.That(action1.bindings[5].path, Is.EqualTo("foobar")); Assert.That(action1.bindings[5].name, Is.Empty); }