private void ProcessActions(InputActionAsset input) { var bindableActions = input.Where(a => a.actionMap.name != "UI" && (a.type == InputActionType.Button || a.bindings.Any(b => b.isComposite))).ToArray(); for (var i = 0; i < bindableActions.Length; i++) { var action = bindableActions[i]; foreach (var binding in action.bindings) { if (_bindButtons.ContainsKey(binding.effectivePath)) { var name = action.name.Replace(' ', '\n'); if (binding.isPartOfComposite) { name = $"{name} {binding.name}"; } var actionMapping = new ActionMapping { Name = name, Binding = binding, Action = action, Hue = action.actionMap.name == "Global" ? GlobalHue : frac(GlobalHue + GlobalHueRange + (float)i / (bindableActions.Length - 1) * (1 - GlobalHueRange * 2)) }; _actionMappings.Add(actionMapping); var buttonMapping = _bindButtons[binding.effectivePath]; buttonMapping.ActionMapping = actionMapping; AssignColor(buttonMapping); actionMapping.ButtonMappings.Add(buttonMapping); } } } }
/// <summary> /// Creates initial, default action mapping data. /// </summary> /// <returns>True if needed to create data, false otherwise</returns> public async Task <bool> InitializeDataIfNecessaryAsync() { var existingMappings = await _actionMappingRepository.GetAllMappingsAsync(); if (existingMappings.Count > 0) { return(false); } var am1 = new ActionMapping() { RuleOutput = _ruleOutputAlarmTemp, ActionId = "Send Message" }; await _actionMappingRepository.SaveMappingAsync(am1); var am2 = new ActionMapping() { RuleOutput = _ruleOutputAlarmSpeed, ActionId = "Raise Alarm" }; await _actionMappingRepository.SaveMappingAsync(am2); var am3 = new ActionMapping() { RuleOutput = _ruleOutputAlarmObstacle, ActionId = "Raise Alarm" }; await _actionMappingRepository.SaveMappingAsync(am3); return(true); }
public async Task SaveMappingAsync(ActionMapping m) { ActionMappingBlobResults existingResults = await GetActionsAndEtagAsync(); List <ActionMapping> existingMappings = existingResults.ActionMappings; // look for the new mapping ActionMapping found = existingMappings.FirstOrDefault(a => a.RuleOutput.ToLower() == m.RuleOutput.ToLower()); if (found == null) { // add the new mapping existingMappings.Add(m); } else { // update the ActionId for the found mapping found.ActionId = m.ActionId; } // now save back to the blob string newJsonData = JsonConvert.SerializeObject(existingMappings); byte[] newBytes = Encoding.UTF8.GetBytes(newJsonData); await _blobStorageManager.UploadFromByteArrayAsync( _blobName, newBytes, 0, newBytes.Length, AccessCondition.GenerateIfMatchCondition(existingResults.ETag), null, null); }
public WireWorld(int width, int height, int scale) : base(width, height, scale) { Name = "Wire World"; ColorMapping.Add(WIRE, Color.Yellow); ColorMapping.Add(POSITIVE, Color.Red); ColorMapping.Add(NEGATIVE, Color.Blue); ActionMapping.Add(POSITIVE, (x, y) => { Write(x, y, NEGATIVE); }); ActionMapping.Add(NEGATIVE, (x, y) => { Write(x, y, WIRE); }); ActionMapping.Add(WIRE, (x, y) => { int numPositive = 0; for (int xx = x - 1; xx <= x + 1; xx++) { for (int yy = y - 1; yy <= y + 1; yy++) { if (Read(xx, yy) == POSITIVE) { numPositive++; } } } if (numPositive == 1 || numPositive == 2) { Write(x, y, POSITIVE); } }); LeftPlace = WIRE; Refreshrate = 6; }
public void InputMapping_ShouldSetDefinedActionStatesToFalse_WhenSetWithActionMappingGroups() { // Arrange var inputComponent = new InputComponent(); var inputMapping = new InputMapping(); var actionMapping1 = new ActionMapping { ActionName = "Action 1" }; var actionMapping2 = new ActionMapping { ActionName = "Action 2" }; inputMapping.ActionMappings.Add(actionMapping1); inputMapping.ActionMappings.Add(actionMapping2); // Act inputComponent.InputMapping = inputMapping; // Assert Assert.That(inputComponent.ActionStates.Count, Is.EqualTo(2)); Assert.That(inputComponent.ActionStates[actionMapping1.ActionName], Is.False); Assert.That(inputComponent.ActionStates[actionMapping2.ActionName], Is.False); }
public async Task UpdateAction(string ruleOutput, string actionId) { var actionMapping = new ActionMapping(); actionMapping.RuleOutput = ruleOutput; actionMapping.ActionId = actionId; await _actionMappingLogic.SaveMappingAsync(actionMapping); }
private InputDisplayLabel CreateLabel(ActionMapping actionMapping) { var label = LabelPrototype.Instantiate <InputDisplayLabel>(); label.Label.color = Color.HSVToRGB(actionMapping.Hue, Saturation, 1); actionMapping.Label = label; label.Label.text = actionMapping.Name; return(label); }
public void AddInputWithSampleMouseActionMappings(out InputComponent inputComponent, out ActionMapping fire, out ActionMapping zoom, out ActionMapping altFire, out ActionMapping melee) { fire = new ActionMapping { ActionName = nameof(fire) }; fire.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateMouseVariant(HardwareInputVariant.MouseVariant.LeftButton) }); zoom = new ActionMapping { ActionName = nameof(zoom) }; zoom.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateMouseVariant(HardwareInputVariant.MouseVariant.MiddleButton) }); altFire = new ActionMapping { ActionName = nameof(altFire) }; altFire.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateMouseVariant(HardwareInputVariant.MouseVariant.RightButton) }); melee = new ActionMapping { ActionName = nameof(melee) }; melee.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateMouseVariant(HardwareInputVariant.MouseVariant.XButton1) }); melee.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateMouseVariant(HardwareInputVariant.MouseVariant.XButton2) }); var inputMapping = new InputMapping(); inputMapping.ActionMappings.Add(fire); inputMapping.ActionMappings.Add(zoom); inputMapping.ActionMappings.Add(altFire); inputMapping.ActionMappings.Add(melee); inputComponent = new InputComponent { InputMapping = inputMapping }; var entity = new Entity(); entity.AddComponent(inputComponent); _scene.AddEntity(entity); }
public void HardwareActions_ShouldBeInitializedWithEmptyList() { // Arrange // Act var actionMapping = new ActionMapping(); // Assert Assert.That(actionMapping.HardwareActions, Is.Not.Null); Assert.That(actionMapping.HardwareActions, Is.Empty); }
public async Task <HttpResponseMessage> UpdateActionAsync(string ruleOutput, string actionId) { var actionMapping = new ActionMapping(); actionMapping.RuleOutput = ruleOutput; actionMapping.ActionId = actionId; return(await GetServiceResponseAsync(async() => { await _actionMappingLogic.SaveMappingAsync(actionMapping); })); }
public async void SaveMappingAsyncTest() { var actionMappings = fixture.Create <List <ActionMapping> >(); var actionMappingsString = JsonConvert.SerializeObject(actionMappings); var actionMappingBlobData = Encoding.UTF8.GetBytes(actionMappingsString); _blobClientMock.Setup(x => x.GetBlobData(It.IsNotNull <string>())).ReturnsAsync(actionMappingBlobData); _blobClientMock.Setup(x => x.GetBlobEtag(It.IsNotNull <string>())).ReturnsUsingFixture(fixture); string saveBuf = null; var newActionMapping = new ActionMapping { RuleOutput = "ruleXXXoutput", ActionId = "actionXXXid" }; // New mapping actionMappings.Add(newActionMapping); actionMappingsString = JsonConvert.SerializeObject(actionMappings); actionMappings.Remove(newActionMapping); _blobClientMock.Setup( x => x.UploadFromByteArrayAsync(It.IsNotNull <string>(), It.IsNotNull <byte[]>(), It.IsNotNull <int>(), It.IsNotNull <int>(), It.IsNotNull <AccessCondition>(), It.IsAny <BlobRequestOptions>(), It.IsAny <OperationContext>())) .Callback <string, byte[], int, int, AccessCondition, BlobRequestOptions, OperationContext>( (a, b, c, d, e, f, g) => saveBuf = Encoding.UTF8.GetString(b)) .Returns(Task.FromResult(true)); await actionMappingRepository.SaveMappingAsync(newActionMapping); Assert.NotNull(saveBuf); Assert.Equal(actionMappingsString, saveBuf); // Existing mapping actionMappingBlobData = Encoding.UTF8.GetBytes(actionMappingsString); _blobClientMock.Setup(x => x.GetBlobData(It.IsNotNull <string>())).ReturnsAsync(actionMappingBlobData); newActionMapping.ActionId = "actionYYYid"; actionMappings.Add(newActionMapping); actionMappingsString = JsonConvert.SerializeObject(actionMappings); _blobClientMock.Setup( x => x.UploadFromByteArrayAsync(It.IsNotNull <string>(), It.IsNotNull <byte[]>(), It.IsNotNull <int>(), It.IsNotNull <int>(), It.IsNotNull <AccessCondition>(), It.IsAny <BlobRequestOptions>(), It.IsAny <OperationContext>())) .Callback <string, byte[], int, int, AccessCondition, BlobRequestOptions, OperationContext>( (a, b, c, d, e, f, g) => saveBuf = Encoding.UTF8.GetString(b)) .Returns(Task.FromResult(true)); await actionMappingRepository.SaveMappingAsync(newActionMapping); Assert.NotNull(saveBuf); Assert.Equal(actionMappingsString, saveBuf); }
protected static List <IPropertyMapping> GetMappings() { //add a random selection of mappings: var list = new List <IPropertyMapping>(); var actionWithIrrelevantConversion = new ActionMapping <StubSource, StubTarget>((s, t) => s.Prop3 = t.Prop3); actionWithIrrelevantConversion.SetConversion <string, string>(x => x.ToUpper()); list.Add(actionWithIrrelevantConversion); if (RandomBool()) { list.Add(new FuncMapping <StubSource, string, StubTarget, string>(s => s.Prop1, t => t.Prop_1)); } if (RandomBool()) { Expression <Func <StubSource, int> > func = x => x.Prop2; list.Add(new CsvFieldMapping(1, func)); } if (RandomBool()) { list.Add(new DataReaderColumnMapping("PROP3", typeof(StubSource).GetProperty("Prop3"))); } if (RandomBool()) { list.Add(new ActionMapping <StubSource, StubTarget>((s, t) => s.Prop3 = t.Prop3)); } if (RandomBool()) { list.Add(new PropertyInfoMapping(typeof(StubSource).GetProperty("Prop3"), typeof(StubTarget).GetProperty("Prop3"))); } if (RandomBool()) { list.Add(new PropertyInfoMapping(typeof(StubSource).GetProperty("Prop3"), typeof(StubTarget).GetProperty("Prop3"))); } if (RandomBool()) { Expression <Func <StubSource, int> > func = x => x.Prop2; list.Add(new XAttributeMapping("Prop2", func)); } if (RandomBool()) { Expression <Func <StubSource, int> > func = x => x.Prop2; list.Add(new XElementMapping("Prop2", func)); } if (RandomBool()) { Expression <Func <StubSource, int> > func = x => x.Prop2; list.Add(new XPathMapping("/Source/Prop2", func)); } return(list); }
protected static List<IPropertyMapping> GetMappings() { //add a random selection of mappings: var list = new List<IPropertyMapping>(); var actionWithIrrelevantConversion = new ActionMapping<StubSource, StubTarget>((s, t) => s.Prop3 = t.Prop3); actionWithIrrelevantConversion.SetConversion<string, string>(x => x.ToUpper()); list.Add(actionWithIrrelevantConversion); if (RandomBool()) { list.Add(new FuncMapping<StubSource, string, StubTarget, string>(s => s.Prop1, t => t.Prop_1)); } if (RandomBool()) { Expression<Func<StubSource, int>> func = x => x.Prop2; list.Add(new CsvFieldMapping(1, func)); } if (RandomBool()) { list.Add(new DataReaderColumnMapping("PROP3", typeof(StubSource).GetProperty("Prop3"))); } if (RandomBool()) { list.Add(new ActionMapping<StubSource, StubTarget>((s, t) => s.Prop3 = t.Prop3)); } if (RandomBool()) { list.Add(new PropertyInfoMapping(typeof(StubSource).GetProperty("Prop3"), typeof(StubTarget).GetProperty("Prop3"))); } if (RandomBool()) { list.Add(new PropertyInfoMapping(typeof(StubSource).GetProperty("Prop3"), typeof(StubTarget).GetProperty("Prop3"))); } if (RandomBool()) { Expression<Func<StubSource, int>> func = x => x.Prop2; list.Add(new XAttributeMapping("Prop2", func)); } if (RandomBool()) { Expression<Func<StubSource, int>> func = x => x.Prop2; list.Add(new XElementMapping("Prop2", func)); } if (RandomBool()) { Expression<Func<StubSource, int>> func = x => x.Prop2; list.Add(new XPathMapping("/Source/Prop2", func)); } return list; }
public async void UpdateActionAsyncTest() { var ruleOutput = fixture.Create <string>(); var actionId = fixture.Create <string>(); ActionMapping saveObject = null; actionMappingLogic.Setup(mock => mock.SaveMappingAsync(It.IsAny <ActionMapping>())) .Callback <ActionMapping>(obj => saveObject = obj) .Returns(Task.FromResult(true)).Verifiable(); var result = await deviceActionsApiController.UpdateActionAsync(ruleOutput, actionId); actionMappingLogic.Verify(); result.AssertOnError(); Assert.Equal(saveObject.RuleOutput, ruleOutput); Assert.Equal(saveObject.ActionId, actionId); }
public void AddInputWithSampleKeyboardActionMappings(out InputComponent inputComponent, out ActionMapping moveRight, out ActionMapping moveLeft, out ActionMapping jump) { moveRight = new ActionMapping { ActionName = nameof(moveRight) }; moveRight.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateKeyboardVariant(Key.Right) }); moveLeft = new ActionMapping { ActionName = nameof(moveLeft) }; moveLeft.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateKeyboardVariant(Key.Left) }); jump = new ActionMapping { ActionName = nameof(jump) }; jump.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateKeyboardVariant(Key.Up) }); jump.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateKeyboardVariant(Key.Space) }); var inputMapping = new InputMapping(); inputMapping.ActionMappings.Add(moveRight); inputMapping.ActionMappings.Add(moveLeft); inputMapping.ActionMappings.Add(jump); inputComponent = new InputComponent { InputMapping = inputMapping }; var entity = new Entity(); entity.AddComponent(inputComponent); _scene.AddEntity(entity); }
/// <summary> /// Creates initial, default action mapping data. /// </summary> /// <returns>True if needed to create data, false otherwise</returns> public async Task <bool> InitializeDataIfNecessaryAsync() { var existingMappings = await _actionMappingRepository.GetAllMappingsAsync(); if (existingMappings.Count > 0) { return(false); } var am1 = new ActionMapping() { RuleOutput = _ruleOutputAlarmTEMP, //ActionId = "Send Message" ActionId = "Raise Alarm TEMP" }; await _actionMappingRepository.SaveMappingAsync(am1); var am2 = new ActionMapping() { RuleOutput = _ruleOutputAlarmREAR_TPM, //ActionId = "Raise Alarm" ActionId = "Raise Alarm REAR_TPM" }; await _actionMappingRepository.SaveMappingAsync(am2); //insert DATA FIELD var am3 = new ActionMapping() { RuleOutput = _ruleOutputAlarmFRONT_TPM, ActionId = "Raise Alarm FRONT_TPM" }; await _actionMappingRepository.SaveMappingAsync(am3); //insert DATA FIELD var am4 = new ActionMapping() { RuleOutput = _ruleOutputAlarmBETTERY_VOLT, ActionId = "Raise Alarm BETTERY_VOLT" }; await _actionMappingRepository.SaveMappingAsync(am4); return(true); }
private void PlaceLabel(ActionMapping actionMapping) { if (actionMapping.ButtonMappings.Any()) { var labelRect = actionMapping.Label.Label.rectTransform; LayoutRebuilder.ForceRebuildLayoutImmediate(labelRect); var rect = FindLabelPosition(actionMapping.ButtonMappings.First().DisplayButton.GetComponent <RectTransform>(), labelRect); //actionMapping.LabelRect = rect; actionMapping.Label.transform.parent = AssignedBindingsGroup; actionMapping.Label.transform.position = rect.center; } else { actionMapping.Label.transform.parent = UnassignedBindingsGroup; } foreach (var buttonMapping in actionMapping.ButtonMappings) { ConnectButtonToLabel(buttonMapping); } }
public GameOfLife(int width, int height, int scale) : base(width, height, scale) { Name = "Conways Game of Life"; ColorMapping.Add(NULL, Color.Black); ColorMapping.Add(ALIVE, Color.White); ActionMapping.Add(ALIVE, (x, y) => { int numNeighbors = GetNumNeightbors(x, y); if(numNeighbors < 2 || numNeighbors > 3) { Write(x, y, NULL); } }); ActionMapping.Add(NULL, (x, y) => { if (GetNumNeightbors(x, y) == 3) { Write(x, y, ALIVE); } }); LeftPlace = ALIVE; Refreshrate = 30; }
public WirererWorlder(int width, int height, int scale) : base(width, height, scale) { Name = "Wire World"; ColorMapping.Add(WIRE, Color.Yellow); ColorMapping.Add(POSITIVE, Color.Red); ColorMapping.Add(NEGATIVE, Color.Blue); ColorMapping.Add(DEADWIRE, Color.DarkOrange); ColorMapping.Add(WIRECUTTER, Color.Green); ColorMapping.Add(BRIDGE, Color.Gray); ColorMapping.Add(PULSAR, Color.LightCoral); ActionMapping.Add(POSITIVE, (x, y) => { Write(x, y, NEGATIVE); }); ActionMapping.Add(NEGATIVE, (x, y) => { Write(x, y, WIRE); }); ActionMapping.Add(WIRE, (x, y) => { int numPositive = GetNumNeightbors(x, y, POSITIVE); if (numPositive == 1 || numPositive == 2) { Write(x, y, POSITIVE); } }); ActionMapping.Add(BRIDGE, (x, y) => { List <Tuple <Point, Point> > tuples = new List <Tuple <Point, Point> >(); Point top = new Point(x, y - 1); Point bottom = new Point(x, y + 1); Point left = new Point(x - 1, y); Point right = new Point(x + 1, y); tuples.Add(new Tuple <Point, Point>(top, bottom)); tuples.Add(new Tuple <Point, Point>(bottom, top)); tuples.Add(new Tuple <Point, Point>(left, right)); tuples.Add(new Tuple <Point, Point>(right, left)); foreach (Tuple <Point, Point> tuple in tuples) { if (Read(tuple.Item1) == POSITIVE) { Point delta = tuple.Item2 - tuple.Item1; delta.X /= 2; delta.Y /= 2; Point newPoint = tuple.Item1 + delta; while (Read(newPoint) == BRIDGE) { newPoint += delta; } if (Read(newPoint) == WIRE) { Write(newPoint, POSITIVE); } } } }); ActionMapping.Add(WIRECUTTER, (x, y) => { List <Tuple <Point, Point> > tuples = new List <Tuple <Point, Point> >(); Point top = new Point(x, y - 1); Point bottom = new Point(x, y + 1); Point left = new Point(x - 1, y); Point right = new Point(x + 1, y); tuples.Add(new Tuple <Point, Point>(top, bottom)); tuples.Add(new Tuple <Point, Point>(bottom, top)); tuples.Add(new Tuple <Point, Point>(left, right)); tuples.Add(new Tuple <Point, Point>(right, left)); foreach (Tuple <Point, Point> tuple in tuples) { if (Read(tuple.Item1) == POSITIVE) { if (Read(tuple.Item2) == WIRE) { Write(tuple.Item2, DEADWIRE); } else if (Read(tuple.Item2) == DEADWIRE) { Write(tuple.Item2, WIRE); } } } }); ActionMapping.Add(PULSAR, (x, y) => { if (Read(x + 1, y) == WIRE) { Write(x + 1, y, POSITIVE); } if (Read(x - 1, y) == WIRE) { Write(x - 1, y, POSITIVE); } if (Read(x, y + 1) == WIRE) { Write(x, y + 1, POSITIVE); } if (Read(x, y - 1) == WIRE) { Write(x, y - 1, POSITIVE); } }); LeftPlace = WIRE; Refreshrate = 6; }
public async Task SaveMappingAsync(ActionMapping action) { await _actionMappingRepository.SaveMappingAsync(action); }
public SandBox(int width, int height, int scale) : base(width, height, scale) { Name = "Sandbox Simulation"; LeftPlace = SOLID; //define colours ColorMapping.Add(SAND, Color.Yellow); ColorMapping.Add(SOLID, Color.Gray); ColorMapping.Add(WATER, Color.Blue); ColorMapping.Add(ICE, Color.LightSkyBlue); ColorMapping.Add(SMOKE, Color.LightGray); //define callbacks ActionMapping.Add(SAND, (x, y) => { if (Read(x, y + 1) != NULL) { if (Read(x, y + 1) == WATER) { Write(x, y + 1, SAND); Write(x, y, WATER); return; } if (Random.Chance(0.5f)) { if (Read(x + 1, y + 1) == NULL) { //prevent clipping through diagonals if (Read(x + 1, y) == NULL) { //move right down Write(x + 1, y + 1, Read(x, y)); Write(x, y, NULL); } } } else { if (Read(x - 1, y + 1) == NULL) { //prevent clipping through diagonals if (Read(x - 1, y) == NULL) { //move left down Write(x - 1, y + 1, Read(x, y)); Write(x, y, NULL); } } } } else { //move downwards Write(x, y + 1, Read(x, y)); Write(x, y, NULL); } }); ActionMapping.Add(ICE, (x, y) => { if (Read(x, y + 1) != NULL) { if (Read(x, y + 1) == WATER) { Write(x, y + 1, ICE); Write(x, y, ICE); return; } if (Random.Chance(0.5f)) { if (Read(x + 1, y + 1) == NULL) { //prevent clipping through diagonals if (Read(x + 1, y) == NULL) { //move right down Write(x + 1, y + 1, Read(x, y)); Write(x, y, NULL); } } } else { if (Read(x - 1, y + 1) == NULL) { //prevent clipping through diagonals if (Read(x - 1, y) == NULL) { //move left down Write(x - 1, y + 1, Read(x, y)); Write(x, y, NULL); } } } } else { //move downwards Write(x, y + 1, Read(x, y)); Write(x, y, NULL); } }); ActionMapping.Add(WATER, (x, y) => { if (Read(x, y + 1) != NULL) { if (Read(x + 1, y + 1) == NULL) { //prevent clipping through diagonals if (Read(x + 1, y) == NULL) { //move right down Write(x + 1, y + 1, Read(x, y)); Write(x, y, NULL); } } else { if (Random.Chance(0.5f)) { if (Read(x + 1, y) == NULL) { //move right Write(x + 1, y, Read(x, y)); Write(x, y, NULL); } } else { if (Read(x - 1, y) == NULL) { //move left Write(x - 1, y, Read(x, y)); Write(x, y, NULL); } } } } else { //move downwards Write(x, y + 1, Read(x, y)); Write(x, y, NULL); } }); ActionMapping.Add(SMOKE, (x, y) => { if (Read(x, y - 1) != NULL) { if (Random.Chance(0.5f)) { if (Read(x + 1, y) == NULL) { //move right Write(x + 1, y, Read(x, y)); Write(x, y, NULL); } } else { if (Read(x - 1, y) == NULL) { //move left Write(x - 1, y, Read(x, y)); Write(x, y, NULL); } } } else { //move up Write(x, y - 1, Read(x, y)); Write(x, y, NULL); } }); FillBorder(SOLID); }
public object LoadAsset(AssetInfo assetInfo, IAssetStore assetStore) { using var fileStream = _fileSystem.GetFile(assetInfo.AssetFilePath).OpenRead(); var assetData = AssetData.Load(fileStream); var inputMappingAssetContent = assetData.ReadJsonContent <InputMappingAssetContent>(); if (inputMappingAssetContent.ActionMappings == null) { throw new InvalidOperationException($"{nameof(InputMappingAssetContent)}.{nameof(InputMappingAssetContent.ActionMappings)} cannot be null."); } if (inputMappingAssetContent.AxisMappings == null) { throw new InvalidOperationException($"{nameof(InputMappingAssetContent)}.{nameof(InputMappingAssetContent.AxisMappings)} cannot be null."); } var inputMapping = new InputMapping(); foreach (var(actionName, serializableHardwareActions) in inputMappingAssetContent.ActionMappings) { var actionMapping = new ActionMapping { ActionName = actionName }; foreach (var serializableHardwareAction in serializableHardwareActions) { if (serializableHardwareAction.Key != null && serializableHardwareAction.MouseButton == null) { actionMapping.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateKeyboardVariant(serializableHardwareAction.Key.Value) }); } else if (serializableHardwareAction.Key == null && serializableHardwareAction.MouseButton != null) { var mouseVariant = serializableHardwareAction.MouseButton switch { MouseButton.LeftButton => HardwareInputVariant.MouseVariant.LeftButton, MouseButton.MiddleButton => HardwareInputVariant.MouseVariant.MiddleButton, MouseButton.RightButton => HardwareInputVariant.MouseVariant.RightButton, MouseButton.XButton1 => HardwareInputVariant.MouseVariant.XButton1, MouseButton.XButton2 => HardwareInputVariant.MouseVariant.XButton2, _ => throw new ArgumentOutOfRangeException(nameof(SerializableHardwareAction.MouseButton), serializableHardwareAction.MouseButton, "Unsupported mouse button found in input mapping.") }; actionMapping.HardwareActions.Add(new HardwareAction { HardwareInputVariant = HardwareInputVariant.CreateMouseVariant(mouseVariant) }); } else { throw InvalidInputMappingAssetContentException.CreateForInvalidHardwareAction(inputMappingAssetContent); } } inputMapping.ActionMappings.Add(actionMapping); } foreach (var(axisName, serializableHardwareAxes) in inputMappingAssetContent.AxisMappings) { var axisMapping = new AxisMapping { AxisName = axisName }; foreach (var serializableHardwareAxis in serializableHardwareAxes) { if (serializableHardwareAxis.Key != null && serializableHardwareAxis.MouseAxis == null) { axisMapping.HardwareAxes.Add(new HardwareAxis { HardwareInputVariant = HardwareInputVariant.CreateKeyboardVariant(serializableHardwareAxis.Key.Value), Scale = serializableHardwareAxis.Scale }); } else if (serializableHardwareAxis.Key == null && serializableHardwareAxis.MouseAxis != null) { var mouseVariant = serializableHardwareAxis.MouseAxis switch { MouseAxis.AxisX => HardwareInputVariant.MouseVariant.AxisX, MouseAxis.AxisY => HardwareInputVariant.MouseVariant.AxisY, _ => throw new ArgumentOutOfRangeException(nameof(SerializableHardwareAxis.MouseAxis), serializableHardwareAxis.MouseAxis, "Unsupported mouse axis found in input mapping.") }; axisMapping.HardwareAxes.Add(new HardwareAxis { HardwareInputVariant = HardwareInputVariant.CreateMouseVariant(mouseVariant), Scale = serializableHardwareAxis.Scale }); } else { throw InvalidInputMappingAssetContentException.CreateForInvalidHardwareAxis(inputMappingAssetContent); } } inputMapping.AxisMappings.Add(axisMapping); } return(inputMapping); }
public ActionEngine() { actionMapping = new ActionMapping(); }