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) }); }
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); }