public void UpdatePlatforms()
        {
            // We need to duplicate everything to control updates of the launch data manually.
            LaunchingSegment = new TurnData(_currentTurn.CurrentTurn.Turn, _currentTurn.CurrentTurn.Impulse);

            LaunchingUnitPosition = _hexVectorUtility.CloneHexVector <HexGridCoordinate>(_launchingUnit.Position);
            TargetUnitPosition    = _hexVectorUtility.CloneHexVector <HexGridCoordinate>(_targetUnit.Position);

            LaunchingUnitVelocity = _hexVectorUtility.CloneHexVector <RawHexVector>(_launchingUnit.Vectors);
            TargetUnitVelocity    = _hexVectorUtility.CloneHexVector <RawHexVector>(_targetUnit.Vectors);

            CrossingVector = _hexGridCalculator.GetCrossingVector(LaunchingUnitVelocity, TargetUnitVelocity);

            TargetDistance = _hexGridCalculator.GetDistance(LaunchingUnitPosition, TargetUnitPosition);
            CourseOffset   = 0;
            if (AvidVector.IsNullOrZero(TargetDistance))
            {
                TargetDistance = _hexGridCalculator.GetVectorFromBacktracking(LaunchingUnitVelocity, TargetUnitVelocity);
                OnVerificationRequired();
            }
            else
            {
                SubmitBearingVerificationResult(TargetDistance);
            }
        }
Beispiel #2
0
        public void AvidPathingTest21()
        {
            var launchWindow   = new AvidVector(AvidDirection.FA, AvidRing.Blue, false, 27);
            var crossingVector = new AvidVector(AvidDirection.EF, AvidRing.Blue, true, 20);
            var result         = ServiceFactory.Library.AvidCalculator.GetPossibleLaunchWindows(2, launchWindow, crossingVector);

            result.Length.Should().Be(1);
            result.Should().Contain(new AvidWindow(AvidDirection.EF, AvidRing.Blue, true));
        }
        public void UpdateVector(AvidVector vector, bool isVisible)
        {
            IsVisible = !AvidWindow.IsNullOrZero(vector) && isVisible;
            Magnitude = vector != null ? vector.Magnitude : 0;
            Window    = vector;

            OnPropertyChanged(Properties.IsVisible);
            OnPropertyChanged(Properties.Magnitude);
            OnPropertyChanged(Properties.Window);
        }
Beispiel #4
0
        public void AvidPathingTest19()
        {
            var launchWindow   = new AvidVector(AvidDirection.BC, AvidRing.Ember, true, 27);
            var crossingVector = new AvidVector(AvidDirection.E, AvidRing.Green, true, 20);
            var result         = ServiceFactory.Library.AvidCalculator.GetPossibleLaunchWindows(2, launchWindow, crossingVector);

            result.Length.Should().Be(3);
            result.Should().Contain(new AvidWindow(AvidDirection.B, AvidRing.Green, true));
            result.Should().Contain(new AvidWindow(AvidDirection.C, AvidRing.Green, true));
            result.Should().Contain(new AvidWindow(AvidDirection.CD, AvidRing.Blue, true));
        }
Beispiel #5
0
        public void AvidPathingTest6()
        {
            var launchWindow   = new AvidVector(AvidDirection.Undefined, AvidRing.Magenta, true, 27);
            var crossingVector = new AvidVector(AvidDirection.Undefined, AvidRing.Magenta, false, 20);
            var result         = ServiceFactory.Library.AvidCalculator.GetPossibleLaunchWindows(1, launchWindow, crossingVector);

            result.Length.Should().Be(6);

            result.Should().Contain(new AvidWindow(AvidDirection.A, AvidRing.Green, true));
            result.Should().Contain(new AvidWindow(AvidDirection.B, AvidRing.Green, true));
            result.Should().Contain(new AvidWindow(AvidDirection.C, AvidRing.Green, true));
            result.Should().Contain(new AvidWindow(AvidDirection.D, AvidRing.Green, true));
            result.Should().Contain(new AvidWindow(AvidDirection.E, AvidRing.Green, true));
            result.Should().Contain(new AvidWindow(AvidDirection.F, AvidRing.Green, true));
        }
Beispiel #6
0
        private void CreateOrUpdateVector(AvidVector originalVector, ref IAvidMark targetVector, int categoryId, bool underlined)
        {
            string markText = originalVector != null?originalVector.Magnitude.ToString("D") : string.Empty;

            AvidWindow position = originalVector ?? new AvidWindow();

            if (targetVector == null)
            {
                targetVector = _elementBoard.AddMark(categoryId, markText, originalVector != null, underlined, position);
            }
            else
            {
                targetVector.Text    = markText;
                targetVector.Window  = position;
                targetVector.Visible = !AvidWindow.IsNullOrZero(position);
            }
        }
Beispiel #7
0
        public AvidVector ProjectVectorToAvid(HexVector vector)
        {
            var result = new AvidVector
            {
                Magnitude = _rangeAltitudeTable.GetDistance(vector)
            };

            if (result.Magnitude == 0)
            {
                return(result);
            }

            result.Ring       = _rangeAltitudeTable.GetRing(vector);
            result.AbovePlane = result.Ring == AvidRing.Ember || vector.VerticalComponent.Direction == HexAxis.Up;
            result.Direction  = CalculateDirection(vector, result.Ring);

            return(result);
        }
        public void SubmitBearingVerificationResult(AvidWindow verificationResult)
        {
            if (verificationResult == null)
            {
                OnVerificationRequired();
                return;
            }

            var vectorResult = verificationResult as AvidVector;

            int magnitude = vectorResult != null ? vectorResult.Magnitude : 0;

            TargetDistance = new AvidVector(verificationResult.Direction, verificationResult.Ring, verificationResult.AbovePlane, magnitude);
            CourseOffset   = _avidCalculator.GetCourseOffset(TargetDistance, CrossingVector);

            OnVectorsUpdated();
            UpdateFiringSolution(null, null, null);
        }
Beispiel #9
0
 public static bool IsNullOrZero(AvidVector vector)
 {
     return(AvidWindow.IsNullOrZero(vector) || vector.Magnitude == 0);
 }
Beispiel #10
0
 private void CreateOrUpdateVelocityVectors(AvidVector targetVector, AvidVector crossingVector)
 {
     CreateOrUpdateVector(targetVector, ref _targetVectorMark, VectorsCategory, false);
     CreateOrUpdateVector(crossingVector, ref _crossingVectorMark, VectorsCategory, true);
 }
Beispiel #11
0
 public static bool IsNullOrZero(AvidVector vector)
 {
     return AvidWindow.IsNullOrZero(vector) || vector.Magnitude == 0;
 }