public ForceProjecion Process(ClimbingHoldState climbingHoldState)
        {
            var horizontalOffset = HorizontalOffset +
                                   (climbingHoldState.RightValue * RightWeight - climbingHoldState.LeftValue * LeftWeight);
            var verticalOffset = VerticalOffset +
                                 (climbingHoldState.UpValue * UpWeight - climbingHoldState.DownValue * DownWeight);

            return(new ForceProjecion
            {
                Id = climbingHoldState.Id,
                X = Project(horizontalOffset, ClimbingHoldState.MaxValue, ForceProjecion.MaxValue),
                Y = Project(verticalOffset, ClimbingHoldState.MaxValue, ForceProjecion.MaxValue)
            });
        }
Esempio n. 2
0
        public void Start_AStateIsReceived_SavesTheProcessedForceProjection()
        {
            var newClimbingHoldState = new ClimbingHoldState();

            _mockStateReaderService.Setup(sr => sr.ClimbingHoldStates)
            .Returns(Observable.Return(newClimbingHoldState));
            var forceProjecion = new ForceProjecion();

            _mockStateProcessor.Setup(p => p.Process(newClimbingHoldState)).Returns(forceProjecion);

            _subject.Start();
            _testScheduler.Start();

            _mockForceProjectionRepository.Verify(r => r.Save(forceProjecion));
        }
        public void Process_Always_ReturnsTheCorrectForceProjection()
        {
            var climbingHoldState = new ClimbingHoldState
            {
                UpValue    = (int)(0.75 * ClimbingHoldState.MaxValue),
                RightValue = (int)(0.25 * ClimbingHoldState.MaxValue),
                DownValue  = (int)(0.25 * ClimbingHoldState.MaxValue),
                LeftValue  = (int)(0.75 * ClimbingHoldState.MaxValue)
            };

            var forceProjecion = _subject.Process(climbingHoldState);

            forceProjecion.X.Should().Be(-ForceProjecion.MaxValue / 2);
            forceProjecion.Y.Should().Be(ForceProjecion.MaxValue / 2);
        }
        public ClimbingHoldState GetState(string stateData)
        {
            var match = _stateDataRegex.Match(stateData);

            if (!match.Success)
            {
                return(null);
            }

            var idData     = match.Groups[1].Value;
            var valuesData = match.Groups[2].Value.Split(ValueSeparator);
            var state      = new ClimbingHoldState
            {
                Id         = idData,
                UpValue    = Convert.ToInt32(valuesData[0], 16),
                RightValue = Convert.ToInt32(valuesData[1], 16),
                DownValue  = Convert.ToInt32(valuesData[2], 16),
                LeftValue  = Convert.ToInt32(valuesData[3], 16)
            };

            return(state);
        }