예제 #1
0
        [InlineData(Angle360InRads, HalfCornerTrackDistance * 3, Angle270InRads, Angle270InRads - 0.1f, HalfCornerTrackDistance)] // 270-360, beyond arc
        public void MoveCounterClockwise(double currentAngle, float distance, float maximumNewAngle, float expectedAngle, float expectedDistance)
        {
            (double newAngle, float newDistance) = TrainMovement.MoveCounterClockwise(currentAngle, distance, maximumNewAngle);

            Assert.Equal(expectedAngle, newAngle, 3);
            Assert.Equal(expectedDistance, newDistance, 3);
        }
        public void AngleToPoints(double angle, float radius, float expectedX, float expectedY)
        {
            (float x, float y) = TrainMovement.AngleToPoints(angle, radius);

            Assert.Equal(expectedX, x, 3);
            Assert.Equal(expectedY, y, 3);
        }
 private void Start()
 {
     wagon         = GetComponent <Wagon>();
     trainMovement = GetComponent <TrainMovement>();
     sizeofcargo   = 1;
     inventory     = new List <int>(sizeofcargo);
     balance       = 0;
 }
 private void Start()
 {
     if (isFirst)
     {
         pickUp        = GetComponent <TrainPickUpDrop>();
         trainMovement = GetComponent <TrainMovement>();
     }
 }
예제 #5
0
        [InlineData(0.9f)] // Extreme
        public void MoveHorizontal_MovingRight_WithinCell_SnappingToCenter(float relativeTop)
        {
            var position    = new TrainPosition(0.0f, relativeTop, 0, 0.5f);
            var expectedPos = new TrainPosition(0.5f, 0.5f, 0, 0.0f);

            TrainMovement.MoveHorizontal(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #6
0
        public void MoveLeftUp_ClockwiseFromTop_BeyondCell(float initalLeft, float initalTop, float initialAngle, float distance, float expectedDistance)
        {
            var position    = new TrainPosition(initalLeft, initalTop, initialAngle, distance);
            var expectedPos = new TrainPosition(-0.1f, 0.5f, 180, expectedDistance);

            TrainMovement.MoveLeftUp(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #7
0
        [InlineData(0.9f)] // Extreme
        public void MoveLeftUp_ClockwiseFromTop_WithinCell_SnappingToCenter(float relativeLeft)
        {
            var position    = new TrainPosition(relativeLeft, 0.0f, 90, (float)HalfCornerTrackDistance);
            var expectedPos = new TrainPosition(Cos45ByRadius, Sin45ByRadius, 135, 0.0f);

            TrainMovement.MoveLeftUp(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #8
0
        public void MoveHorizontal_MovingRight_BeyondCell(float initalLeft, float distance, float expectedDistance)
        {
            var position    = new TrainPosition(initalLeft, 0.5f, 0, distance);
            var expectedPos = new TrainPosition(1.1f, 0.5f, 0, expectedDistance);

            TrainMovement.MoveHorizontal(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #9
0
        public void MoveVertical_MovingUp_BeyondCell(float initalTop, float distance, float expectedDistance)
        {
            var position    = new TrainPosition(0.5f, initalTop, 270, distance);
            var expectedPos = new TrainPosition(0.5f, -0.1f, 270, expectedDistance);

            TrainMovement.MoveVertical(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #10
0
        public void MoveHorizontal_MovingLeft_WithinCell_VariedDistance(float initalLeft, float distance, float expectedLeft)
        {
            var position    = new TrainPosition(initalLeft, 0.5f, 180, distance);
            var expectedPos = new TrainPosition(expectedLeft, 0.5f, 180, 0.0f);

            TrainMovement.MoveHorizontal(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #11
0
        [InlineData(0.9f)] // Extreme
        public void MoveVertical_MovingUp_WithinCell_SnappingToMiddle(float relativeLeft)
        {
            var position    = new TrainPosition(relativeLeft, 1.0f, 270, 0.5f);
            var expectedPos = new TrainPosition(0.5f, 0.5f, 270, 0.0f);

            TrainMovement.MoveVertical(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #12
0
        public void MoveVertical_MovingUp_WithinCell_VariedDistance(float initalTop, float distance, float expectedTop)
        {
            var position    = new TrainPosition(0.5f, initalTop, 270, distance);
            var expectedPos = new TrainPosition(0.5f, expectedTop, 270, 0.0f);

            TrainMovement.MoveVertical(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #13
0
        public void MoveRightDown_CounterClockwiseFromRight_WithinCell_VariedDistance(float initalLeft, float initalTop, float initialAngle, float distance, float expectedLeft, float expectedTop, float expectedAngle)
        {
            var position    = new TrainPosition(initalLeft, initalTop, initialAngle, distance);
            var expectedPos = new TrainPosition(expectedLeft, expectedTop, expectedAngle, 0.0f);

            TrainMovement.MoveRightDown(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #14
0
        [InlineData(285.0f)] // Extreme
        public void MoveVertical_MovingUp_WithinCell_VariedInitialAngles(float angle)
        {
            var position    = new TrainPosition(0.5f, 1.0f, angle, 0.5f);
            var expectedPos = new TrainPosition(0.5f, 0.5f, 270, 0.0f);

            TrainMovement.MoveVertical(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #15
0
        public void MoveRightDown_CounterClockwiseFromRight_BeyondCell(float initalLeft, float initalTop, float initialAngle, float distance, float expectedDistance)
        {
            var position    = new TrainPosition(initalLeft, initalTop, initialAngle, distance);
            var expectedPos = new TrainPosition(0.5f, 1.1f, 90.0f, expectedDistance);

            TrainMovement.MoveRightDown(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #16
0
        [InlineData(15.0f)] // Extreme
        public void MoveLeftDown_ClockwiseFromLeft_WithinCell_VariedInitialAngles(float angle)
        {
            var position    = new TrainPosition(0.0f, 0.5f, angle, (float)HalfCornerTrackDistance);
            var expectedPos = new TrainPosition(Cos45ByRadius, 1.0f - Sin45ByRadius, 45, 0.0f);

            TrainMovement.MoveLeftDown(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #17
0
        [InlineData(0.9f)] // Extreme
        public void MoveRightDown_CounterClockwiseFromRight_WithinCell_SnappingToCenter(float relativeTop)
        {
            var position    = new TrainPosition(1.0f, relativeTop, 180.0f, (float)HalfCornerTrackDistance);
            var expectedPos = new TrainPosition(1.0f - Cos45ByRadius, 1.0f - Sin45ByRadius, 135.0f, 0.0f);

            TrainMovement.MoveRightDown(position);

            Assert.Equal(expectedPos.RelativeLeft, position.RelativeLeft, 3);
            Assert.Equal(expectedPos.RelativeTop, position.RelativeTop, 3);
            Assert.Equal(expectedPos.Angle, position.Angle, 3);
            Assert.Equal(expectedPos.Distance, position.Distance, 3);
        }
예제 #18
0
 internal override void Move(TrainPosition position)
 {
     if ((position.Angle > 45.0f && position.Angle < 135.0f) ||
         (position.Angle > 225.0f && position.Angle < 315.0f))
     {
         TrainMovement.MoveVertical(position);
     }
     else
     {
         TrainMovement.MoveHorizontal(position);
     }
 }
예제 #19
0
    public void GameOver(int i)
    {
        if (gameOver)
        {
            return;
        }
        Time.timeScale = 0.5f;
        gameOver       = true;
        if (i == 0)
        {
            Instance.explotionps.Play();
        }
        else
        {
            Instance.explotionfactory.Play();
        }

        TrainMovement.StopMoving();
        BlackFader.GoToScene("GameOver", UnityEngine.SceneManagement.LoadSceneMode.Single, 1.5f);

        // Reset static fields
        Wagon.upgradespeed = 1f;
    }
 public void BetweenAngles_WithinAngle(float angle, float limit1, float limit2) => Assert.True(TrainMovement.BetweenAngles(angle, limit1, limit2));
예제 #21
0
    private void SetTrainState()
    {
        switch (trainMovement)
        {
        case TrainMovement.Accelerating:
        {
            if (InputManager.Data.moveY > 0)
            {
                currentAccelerationTime = currentAccelerationTime >= maxAccelerationTime ?
                                          maxAccelerationTime :
                                          currentAccelerationTime + (Time.fixedDeltaTime * iceDecelerationMultiplier);
            }
            else if (currentAccelerationTime >= 0)
            {
                trainMovement = TrainMovement.Decelerating;
            }
            break;
        }

        case TrainMovement.Decelerating:
        {
            if (InputManager.Data.moveY > 0)
            {
                trainMovement = TrainMovement.Accelerating;
            }
            if (currentAccelerationTime > 0)
            {
                currentAccelerationTime = currentAccelerationTime <= 0 ? 0 : currentAccelerationTime - (Time.fixedDeltaTime / iceDecelerationMultiplier);
                if (rb.velocity.magnitude < wallHitVelocityThreshold)
                {
                    currentAccelerationTime = 0;
                }
            }
            else
            {
                trainMovement = TrainMovement.Stopped;
            }
            break;
        }

        case TrainMovement.Stopped:
        {
            if (InputManager.Data.moveY > 0)
            {
                trainMovement = TrainMovement.Accelerating;
            }
            else if (InputManager.Data.moveY < 0)
            {
                trainMovement = TrainMovement.Reversing;
            }
            break;
        }

        case TrainMovement.Reversing:
        {
            if (InputManager.Data.moveY < 0)
            {
                reverseAccelerationTime = reverseAccelerationTime >= maxReverseAccelerationTime ?
                                          maxReverseAccelerationTime :
                                          reverseAccelerationTime + Time.fixedDeltaTime;
            }
            else if (reverseAccelerationTime > 0)
            {
                reverseAccelerationTime = reverseAccelerationTime <= 0 ?
                                          0 :
                                          reverseAccelerationTime - Time.fixedDeltaTime * 2;
            }
            else
            {
                trainMovement = TrainMovement.Stopped;
            }
            break;
        }
        }
    }
 public void PointsToAngle(float x, float y, double expected) => Assert.Equal(expected, TrainMovement.PointsToAngle(x, y), 1);
 public void BetweenAngles_OutsideAngle(float angle, float limit1, float limit2) => Assert.False(TrainMovement.BetweenAngles(angle, limit1, limit2));
 public void KeepWithin0and360(float angle, float expected) => Assert.Equal(expected, TrainMovement.KeepWithin0and360(angle), 1);
 public void DegreeToRad(double angle, double expected) => Assert.Equal(expected, TrainMovement.DegreeToRad(angle), 1);
 public void RadToDegree(double angle, double expected) => Assert.Equal(expected, TrainMovement.RadToDegree(angle), 1);