private HexGridCoordinate VectorToCoordinate(RawHexVector vector) { var result = _hexVectorUtility.CloneHexVector<HexGridCoordinate>(vector); _hexVectorUtility.ConsolidateVector(result); EliminateBeComponent(result); return result; }
public AvidVector GetVectorFromBacktracking(RawHexVector observerVelocity, RawHexVector observedVelocity) { if (observerVelocity.Equals(RawHexVector.Zero) && observedVelocity.Equals(RawHexVector.Zero)) { return new AvidVector(AvidDirection.A, AvidRing.Ember, true, 0); } var observerModifiedPosition = VectorToCoordinate(_hexVectorUtility.SubstractVectors(RawHexVector.Zero, observedVelocity)); var observedModifiedPosition = VectorToCoordinate(_hexVectorUtility.SubstractVectors(RawHexVector.Zero, observerVelocity)); var result = GetDistance(observedModifiedPosition, observerModifiedPosition); result.Magnitude = 0; //Both observer and observed are on the same hex. return result; }
public void TestConsolidation() { var vectorA = new HexVector { PrimaryComponent = new HexVectorComponent(HexAxis.C, 5), SecondaryComponent = new HexVectorComponent(HexAxis.E, 9) }; _utilityLibrary.ConsolidateVector(vectorA); TestChecksUtility.CheckComponent(vectorA.PrimaryComponent, HexAxis.D, 5); TestChecksUtility.CheckComponent(vectorA.SecondaryComponent, HexAxis.E, 4); var vectorB = new RawHexVector(); vectorB.AddComponent(HexAxis.A, 1); vectorB.AddComponent(HexAxis.B, 4); vectorB.AddComponent(HexAxis.C, 3); vectorB.AddComponent(HexAxis.E, 7); vectorB.AddComponent(HexAxis.Up, 2); vectorB.AddComponent(HexAxis.Up, 3); vectorB.AddComponent(HexAxis.Down, 5); var resultB = _utilityLibrary.ConsolidateAndCopyVector(vectorB); TestChecksUtility.CheckComponent(resultB.PrimaryComponent, HexAxis.D, 2); resultB.SecondaryComponent.Should().Be(HexVectorComponent.Zero); resultB.VerticalComponent.Should().Be(HexVectorComponent.Zero); }
public void TestComponentReplacement() { var vectorA = new RawHexVector(); vectorA.AddComponent(HexAxis.B, 3); vectorA.AddComponent(HexAxis.B, 2); vectorA.AddComponent(HexAxis.E, 7); vectorA.AddComponent(HexAxis.A, 2); vectorA.AddComponent(HexAxis.C, 2); _utilityLibrary.GetMagnitudeAlongDirection(vectorA, HexAxis.B).Should().Be(5); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorA, HexAxis.B).Should().Be(-2); _utilityLibrary.AddOrUpdateVectorDirection(vectorA, 1, HexAxis.B); _utilityLibrary.GetMagnitudeAlongDirection(vectorA, HexAxis.B).Should().Be(1); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorA, HexAxis.B).Should().Be(-6); var vectorB = new RawHexVector(); vectorB.AddComponent(HexAxis.F, 3); _utilityLibrary.GetMagnitudeAlongDirection(vectorB, HexAxis.C).Should().Be(0); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorB, HexAxis.C).Should().Be(-3); _utilityLibrary.AddOrUpdateVectorDirection(vectorB, 5, HexAxis.C); _utilityLibrary.GetMagnitudeAlongDirection(vectorB, HexAxis.C).Should().Be(5); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorB, HexAxis.C).Should().Be(2); }
public void TestComponentElimination() { var vectorA = new RawHexVector(); vectorA.AddComponent(HexAxis.B, 3); vectorA.AddComponent(HexAxis.B, 2); vectorA.AddComponent(HexAxis.E, 7); vectorA.AddComponent(HexAxis.A, 2); vectorA.AddComponent(HexAxis.C, 2); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorA, HexAxis.B).Should().Be(-2); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorA, HexAxis.A).Should().Be(2); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorA, HexAxis.C).Should().Be(2); _utilityLibrary.EliminateComponentsAlongCardinalDirection(vectorA, HexAxis.B); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorA, HexAxis.B).Should().Be(0); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorA, HexAxis.A).Should().Be(2); _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorA, HexAxis.C).Should().Be(2); }
public void TestVectorCloning() { var vectorA = new RawHexVector(); vectorA.AddComponent(HexAxis.B, 5); vectorA.AddComponent(HexAxis.F, 2); var hexVector = _utilityLibrary.CloneHexVector<HexVector>(vectorA); TestChecksUtility.CheckComponent(hexVector.PrimaryComponent, HexAxis.B, 5); TestChecksUtility.CheckComponent(hexVector.SecondaryComponent, HexAxis.F, 2); // Cloning does not consolidate vectors. It copies them as they are, so we can't test grid // coordinates copy on vector A. var vectorB = new RawHexVector(); vectorB.AddComponent(HexAxis.C, 5); vectorB.AddComponent(HexAxis.A, 2); var gridCoordinate = _utilityLibrary.CloneHexVector<HexGridCoordinate>(vectorB); gridCoordinate.CfCoordinate.Should().Be(5); gridCoordinate.DaCoordinate.Should().Be(1); }
public void TestVectorDirectionValuesCalculation() { var vectorA = new RawHexVector(); vectorA.AddComponent(HexAxis.B, 5); vectorA.AddComponent(HexAxis.B, 3); vectorA.AddComponent(HexAxis.E, 2); int bMagnitude = _utilityLibrary.GetMagnitudeAlongDirection(vectorA, HexAxis.B); bMagnitude.Should().Be(8); int beMagnitude = _utilityLibrary.GetMagnitudeAlongCardinalDirection(vectorA, HexAxis.B); beMagnitude.Should().Be(6); }
public void UpdateVector(RawHexVector vector) { Value = _hexVectorUtility.GetMagnitudeAlongDirection(vector, _direction); HasComponent = Value != 0; OnComponentChanged(); }
private AvidVector GetRelativeVectorProjection(RawHexVector observerVector, RawHexVector observedObjectVector) { var result = _hexVectorUtility.SubstractVectors(observedObjectVector, observerVector); return _avidCalculator.ProjectVectorToAvid(result); }
public AvidVector GetCrossingVector(RawHexVector attackerVelocity, RawHexVector targetVelocity) { // Crossing vector is only the projection of relative velocity on the avid, when coordinate // system is fixed on the current position of the attacker. return GetRelativeVectorProjection(attackerVelocity, targetVelocity); }