public void Editor_InputAsset_CanAddBindingFromObject() { 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); var pathName = "/gamepad/leftStick"; var sourceActionName = "some action"; var groupName = "group"; var flags = 10; var inputBinding = new InputBinding() { path = pathName, action = sourceActionName, groups = groupName }; InputActionSerializationHelpers.AppendBindingFromObject(inputBinding, action1Property, mapProperty); obj.ApplyModifiedPropertiesWithoutUndo(); var action1 = asset.actionMaps[0].TryGetAction("action1"); Assert.That(action1.bindings, Has.Count.EqualTo(1)); Assert.That(action1.bindings[0].path, Is.EqualTo(pathName)); Assert.That(action1.bindings[0].action, Is.EqualTo("action1")); Assert.That(action1.bindings[0].groups, Is.EqualTo(groupName)); }
public void Editor_InputAsset_CanAppendCompositeBinding() { 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.AppendCompositeBinding(action1Property, mapProperty, 2); obj.ApplyModifiedPropertiesWithoutUndo(); var action1 = asset.actionMaps[0].TryGetAction("action1"); Assert.That(action1.bindings, Has.Count.EqualTo(3)); 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_CanAddAndRemoveActionThroughSerialization() { var map = new InputActionMap("set"); map.AddAction(name: "action", binding: "/gamepad/leftStick"); map.AddAction(name: "action1", binding: "/gamepad/rightStick"); var asset = ScriptableObject.CreateInstance <InputActionAsset>(); asset.AddActionMap(map); var obj = new SerializedObject(asset); var mapProperty = obj.FindProperty("m_ActionMaps").GetArrayElementAtIndex(0); InputActionSerializationHelpers.AddAction(mapProperty); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(asset.actionMaps[0].actions, Has.Count.EqualTo(3)); Assert.That(asset.actionMaps[0].actions[2].name, Is.EqualTo("action2")); Assert.That(asset.actionMaps[0].actions[2].bindings, Has.Count.Zero); InputActionSerializationHelpers.DeleteAction(mapProperty, 2); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(asset.actionMaps[0].actions, Has.Count.EqualTo(2)); Assert.That(asset.actionMaps[0].actions[0].name, Is.EqualTo("action")); Assert.That(asset.actionMaps[0].actions[1].name, Is.EqualTo("action1")); }
public void Editor_InputAsset_CanAddActionMapFromSavedProperties() { var map = new InputActionMap("set"); var binding = new InputBinding(); binding.path = "some path"; var action = map.AddAction("action"); action.AddBinding(binding); var asset = ScriptableObject.CreateInstance <InputActionAsset>(); var obj = new SerializedObject(asset); var parameters = new Dictionary <string, string>(); parameters.Add("m_Name", "set"); Assert.That(asset.actionMaps, Has.Count.EqualTo(0)); InputActionSerializationHelpers.AddActionMapFromSavedProperties(obj, parameters); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(asset.actionMaps, Has.Count.EqualTo(1)); Assert.That(asset.actionMaps[0].name, Is.EqualTo("set")); }
public void Editor_InputAsset_CanAddCompositeBinding() { 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); 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) => string.Equals(x.name, "positive", StringComparison.InvariantCultureIgnoreCase))); Assert.That(action1.bindings, Has.Exactly(1).Matches((InputBinding x) => string.Equals(x.name, "negative", 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); }
public void Editor_CanRenameActionMap() { var map = new InputActionMap("oldName"); var asset = ScriptableObject.CreateInstance <InputActionAsset>(); asset.AddActionMap(map); var obj = new SerializedObject(asset); var mapProperty = obj.FindProperty("m_ActionMaps").GetArrayElementAtIndex(0); InputActionSerializationHelpers.RenameActionMap(mapProperty, "newName"); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(map.name, Is.EqualTo("newName")); }
public void Editor_RenamingActionMap_WillAutomaticallyEnsureUniqueNames() { var map1 = new InputActionMap("mapA"); var map2 = new InputActionMap("mapB"); var asset = ScriptableObject.CreateInstance <InputActionAsset>(); asset.AddActionMap(map1); asset.AddActionMap(map2); var obj = new SerializedObject(asset); var map1Property = obj.FindProperty("m_ActionMaps").GetArrayElementAtIndex(0); InputActionSerializationHelpers.RenameActionMap(map1Property, "mapB"); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(map1.name, Is.EqualTo("mapB1")); Assert.That(map2.name, Is.EqualTo("mapB")); }
public void Editor_InputAsset_CanAddBindingFromSavedProperties() { 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); var pathName = "/gamepad/leftStick"; var name = "some name"; var interactionsName = "someinteractions"; var sourceActionName = "some action"; var groupName = "group"; var flags = 10; var parameters = new Dictionary <string, string>(); parameters.Add("path", pathName); parameters.Add("name", name); parameters.Add("groups", groupName); parameters.Add("interactions", interactionsName); parameters.Add("flags", "" + flags); parameters.Add("action", sourceActionName); InputActionSerializationHelpers.AddBindingFromSavedProperties(parameters, action1Property, mapProperty); obj.ApplyModifiedPropertiesWithoutUndo(); var action1 = asset.actionMaps[0].TryGetAction("action1"); Assert.That(action1.bindings, Has.Count.EqualTo(1)); Assert.That(action1.bindings[0].path, Is.EqualTo(pathName)); Assert.That(action1.bindings[0].action, Is.EqualTo("action1")); Assert.That(action1.bindings[0].groups, Is.EqualTo(groupName)); Assert.That(action1.bindings[0].interactions, Is.EqualTo(interactionsName)); Assert.That(action1.bindings[0].name, Is.EqualTo(name)); }
public void Editor_CanRenameAction() { var set1 = new InputActionMap("set1"); set1.AddAction(name: "action", binding: "/gamepad/leftStick"); var asset = ScriptableObject.CreateInstance <InputActionAsset>(); asset.AddActionMap(set1); var obj = new SerializedObject(asset); var mapProperty = obj.FindProperty("m_ActionMaps").GetArrayElementAtIndex(0); var action1Property = mapProperty.FindPropertyRelative("m_Actions").GetArrayElementAtIndex(0); InputActionSerializationHelpers.RenameAction(action1Property, mapProperty, "newAction"); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(set1.actions[0].name, Is.EqualTo("newAction")); Assert.That(set1.actions[0].bindings, Has.Count.EqualTo(1)); Assert.That(set1.actions[0].bindings[0].action, Is.EqualTo("newAction")); }
public void Editor_InputAsset_CanAddAndRemoveBindingThroughSerialization() { var map = new InputActionMap("set"); map.AddAction(name: "action1", binding: "/gamepad/leftStick"); map.AddAction(name: "action2", binding: "/gamepad/rightStick"); 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.AppendBinding(action1Property, mapProperty); obj.ApplyModifiedPropertiesWithoutUndo(); // Maps and actions aren't UnityEngine.Objects so the modifications will not // be in-place. Look up the actions after each apply. var action1 = asset.actionMaps[0].TryGetAction("action1"); var action2 = asset.actionMaps[0].TryGetAction("action2"); Assert.That(action1.bindings, Has.Count.EqualTo(2)); Assert.That(action1.bindings[0].path, Is.EqualTo("/gamepad/leftStick")); Assert.That(action1.bindings[1].path, Is.EqualTo("")); Assert.That(action1.bindings[1].interactions, Is.EqualTo("")); Assert.That(action1.bindings[1].groups, Is.EqualTo("")); Assert.That(action2.bindings[0].path, Is.EqualTo("/gamepad/rightStick")); InputActionSerializationHelpers.RemoveBinding(action1Property, 1, mapProperty); obj.ApplyModifiedPropertiesWithoutUndo(); action1 = asset.actionMaps[0].TryGetAction("action1"); action2 = asset.actionMaps[0].TryGetAction("action2"); Assert.That(action1.bindings, Has.Count.EqualTo(1)); Assert.That(action1.bindings[0].path, Is.EqualTo("/gamepad/leftStick")); Assert.That(action2.bindings[0].path, Is.EqualTo("/gamepad/rightStick")); }
public void Editor_InputAsset_CanAddAndRemoveActionMapThroughSerialization() { var asset = ScriptableObject.CreateInstance <InputActionAsset>(); var obj = new SerializedObject(asset); InputActionSerializationHelpers.AddActionMap(obj); InputActionSerializationHelpers.AddActionMap(obj); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(asset.actionMaps, Has.Count.EqualTo(2)); Assert.That(asset.actionMaps[0].name, Is.Not.Null.Or.Empty); Assert.That(asset.actionMaps[1].name, Is.Not.Null.Or.Empty); Assert.That(asset.actionMaps[0].name, Is.Not.EqualTo(asset.actionMaps[1].name)); var actionMap2Name = asset.actionMaps[1].name; InputActionSerializationHelpers.DeleteActionMap(obj, 0); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(asset.actionMaps, Has.Count.EqualTo(1)); Assert.That(asset.actionMaps[0].name, Is.EqualTo(actionMap2Name)); }
public void Editor_RenamingAction_WillAutomaticallyEnsureUniqueNames() { var map = new InputActionMap("set1"); map.AddAction("actionA", binding: "<Gamepad>/leftStick"); map.AddAction("actionB"); 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.RenameAction(action1Property, mapProperty, "actionB"); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(map.actions[1].name, Is.EqualTo("actionB")); Assert.That(map.actions[0].name, Is.EqualTo("actionB1")); Assert.That(map.actions[0].bindings, Has.Count.EqualTo(1)); Assert.That(map.actions[0].bindings[0].action, Is.EqualTo("actionB1")); }
public void Editor_InputAsset_CanAddActionMapFromObject() { var map = new InputActionMap("set"); var binding = new InputBinding(); binding.path = "some path"; var action = map.AddAction("action"); action.AppendBinding(binding); var asset = ScriptableObject.CreateInstance <InputActionAsset>(); var obj = new SerializedObject(asset); Assert.That(asset.actionMaps, Has.Count.EqualTo(0)); InputActionSerializationHelpers.AddActionMapFromObject(obj, map); obj.ApplyModifiedPropertiesWithoutUndo(); Assert.That(asset.actionMaps, Has.Count.EqualTo(1)); Assert.That(asset.actionMaps[0].name, Is.EqualTo("set")); Assert.That(asset.actionMaps[0].actions[0].name, Is.EqualTo("action")); Assert.That(asset.actionMaps[0].actions[0].bindings[0].path, Is.EqualTo("some path")); }
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); }