コード例 #1
0
ファイル: UnitModel.cs プロジェクト: jbarson/KineticsTool
        public UnitModel()
        {
            Position = new HexGridCoordinate();
            Vectors = RawHexVector.Zero;
            _attachedShellstars = new List<IShellstarModel>();

            _hexVectorUtility = ServiceFactory.Library.HexVectorUtility;
            _hexGridCalculator = ServiceFactory.Library.HexGridCalculator;
        }
コード例 #2
0
        private void EliminateBeComponent(HexGridCoordinate position)
        {
            int beMagnitude = _hexVectorUtility.GetMagnitudeAlongCardinalDirection(position, HexAxis.B);
            if (beMagnitude == 0)
            {
                return;
            }

            position.CfCoordinate = position.CfCoordinate + beMagnitude;
            position.DaCoordinate = position.DaCoordinate - beMagnitude;

            _hexVectorUtility.EliminateComponentsAlongCardinalDirection(position, HexAxis.B);
        }
コード例 #3
0
 public HexGridCoordinate GetMapPosition(HexGridCoordinate targetPosition, TurnData turnData)
 {
     throw new NotImplementedException();
 }
コード例 #4
0
        private void CheckVectorComponent(HexGridCoordinate testCoordinate, int expectedMagnitude, HexAxis positiveAxis, HexAxis negativeAxis)
        {
            if (expectedMagnitude == 0)
            {
                return;
            }

            testCoordinate.Components.Should().ContainSingle(hvc => hvc.Magnitude == Math.Abs(expectedMagnitude) &&
                                                                    hvc.Direction == (expectedMagnitude < 0 ? negativeAxis : positiveAxis));
        }
コード例 #5
0
 private void CheckDistance(HexGridCoordinate posA, HexGridCoordinate posB, int distance, AvidRing ring, AvidDirection direction, bool isAbovePlane)
 {
     var result = _calculator.GetDistance(posA, posB);
     result.Magnitude.Should().Be(distance);
     result.Ring.Should().Be(ring);
     result.Direction.Should().Be(direction);
     result.AbovePlane.Should().Be(isAbovePlane);
 }
コード例 #6
0
        private void CheckMovement(int initialCf, int initialDa, int initialAlt,
                                   HexAxis moveAxis, uint moveMagnitude,
                                   int finalCf, int finalDa, int finalAlt, int finalDaValue)
        {
            var coordinate = new HexGridCoordinate
            {
                CfCoordinate = initialCf,
                DaCoordinate = initialDa,
                Altitude = initialAlt
            };

            _calculator.Move(coordinate, moveAxis, moveMagnitude);
            CheckCoord(coordinate, finalCf, finalDa, finalAlt, finalDaValue);
        }
コード例 #7
0
        private void CheckCoord(HexGridCoordinate testCoordinate, int cfCoord, int daCoord, int altitude, int daVectorMagnitude)
        {
            testCoordinate.CfCoordinate.Should().Be(cfCoord);
            testCoordinate.DaCoordinate.Should().Be(daCoord);
            testCoordinate.Altitude.Should().Be(altitude);

            //Checking vector components
            CheckVectorComponent(testCoordinate, cfCoord, HexAxis.C, HexAxis.F);
            CheckVectorComponent(testCoordinate, daVectorMagnitude, HexAxis.D, HexAxis.A);
            CheckVectorComponent(testCoordinate, altitude, HexAxis.Up, HexAxis.Down);
        }
コード例 #8
0
 public AvidVector GetDistance(HexGridCoordinate from, HexGridCoordinate to)
 {
     // Distance between objects on hex grid is the projection of relative positions
     // when these positions are expressed as hex grid vectors.
     return GetRelativeVectorProjection(from, to);
 }
コード例 #9
0
 public void Move(HexGridCoordinate position, HexAxis direction, uint distance)
 {
     position.AddComponent(new HexVectorComponent(direction, (int)distance));
     _hexVectorUtility.ConsolidateVector(position);
     EliminateBeComponent(position);
 }