Example #1
0
    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);
        }
Example #4
0
        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);
        }
Example #6
0
        public async Task UpdateAction(string ruleOutput, string actionId)
        {
            var actionMapping = new ActionMapping();

            actionMapping.RuleOutput = ruleOutput;
            actionMapping.ActionId   = actionId;
            await _actionMappingLogic.SaveMappingAsync(actionMapping);
        }
Example #7
0
    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);
    }
Example #8
0
            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);
        }
Example #10
0
        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);
            }));
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #15
0
            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);
            }
Example #16
0
        /// <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);
        }
Example #17
0
 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);
     }
 }
Example #18
0
        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;
        }
Example #20
0
 public async Task SaveMappingAsync(ActionMapping action)
 {
     await _actionMappingRepository.SaveMappingAsync(action);
 }
Example #21
0
        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);
        }
Example #22
0
        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);
        }
Example #23
0
 public ActionEngine()
 {
     actionMapping = new ActionMapping();
 }