Example #1
0
 void SetMovingToWaitLocationInWaitingArea(WaitingArea waitingAreaEnterred)
 {
     waitingTarget = waitingAreaEnterred.RegisterPersonForWaiting(this);
     SetAgentControl(true);                                 //we were getting some people under physics control entering waiting areas and trying to SetDestination
     nmAgent.SetDestination(waitingTarget);
     rb.constraints = RigidbodyConstraints.FreezePositionY; //TODO: [this is required to get people who have fallen back to y lock] MEDIUM PRIORITY believe this is what is causing some people to penetrate the platform slightly (they must be reentering at wrong height)
 }
Example #2
0
        public void TestApplySeatingPartTwo()
        {
            var state0      = LoadInput("input_2_state_0.txt");
            var state1      = LoadInput("input_2_state_1.txt");
            var state2      = LoadInput("input_2_state_2.txt");
            var state3      = LoadInput("input_2_state_3.txt");
            var state4      = LoadInput("input_2_state_4.txt");
            var state5      = LoadInput("input_2_state_5.txt");
            var state6      = LoadInput("input_2_state_6.txt");
            var waitingArea = new WaitingArea(state0);

            waitingArea.State.ShouldBe(state0);
            waitingArea.ApplySeatingPartTwo(); // Round 1
            waitingArea.State.ShouldBe(state1);
            waitingArea.ApplySeatingPartTwo(); // Round 2
            waitingArea.State.ShouldBe(state2);
            waitingArea.ApplySeatingPartTwo(); // Round 3
            waitingArea.State.ShouldBe(state3);
            waitingArea.ApplySeatingPartTwo(); // Round 4
            waitingArea.State.ShouldBe(state4);
            waitingArea.ApplySeatingPartTwo(); // Round 5
            waitingArea.State.ShouldBe(state5);
            waitingArea.ApplySeatingPartTwo(); // Round 6
            waitingArea.State.ShouldBe(state6);
            waitingArea.ApplySeatingPartTwo(); // Round 7 (should be no change)
            waitingArea.State.ShouldBe(state6);
            waitingArea.SeatsTaken.ShouldBe(26);
        }
Example #3
0
    public void OnWaitingAreaEnter(WaitingArea waitingAreaEnterred)
    {
        WaitingArea desiredWaitingArea = (myTargetTimetableItem != null && myTargetTimetableItem.platform != null) ? myTargetTimetableItem.platform.waitingArea : GameManager.instance.foyer;

        if (waitingAreaEnterred == desiredWaitingArea)
        {
            if (status == PersonStatus.BoardingTrain)                   //for any people that fall out of train while boarding just register them as passing through
            {
                waitingAreaEnterred.RegisterNonWaitingPerson(this);
            }
            else if (status == PersonStatus.MovingToPlatform)
            {
                status = PersonStatus.ReadyToBoard;
                if (myTargetTimetableItem != null && myTargetTimetableItem.train != null && myTargetTimetableItem.train.status == Train.TrainStatus.BoardingTime)                       //if we have entered a platform whilst train is boarding already then call OnTrainBoarding and just register that we are passing through
                {
                    waitingAreaEnterred.RegisterNonWaitingPerson(this);
                    OnTrainBoardingTime();
                }
                else
                {
                    SetMovingToWaitLocationInWaitingArea(waitingAreaEnterred);
                }
            }
            else if (status == PersonStatus.MovingToFoyer)
            {
                status = PersonStatus.AtFoyer;
                SetMovingToWaitLocationInWaitingArea(waitingAreaEnterred);
            }
        }
        else
        {
            waitingAreaEnterred.RegisterNonWaitingPerson(this);
        }
    }
Example #4
0
        public void TestFiveOrMourSeatsInSight(string filename, int x, int y, bool result)
        {
            var area        = LoadInput(filename);
            var waitingArea = new WaitingArea(area);

            waitingArea.FiveOrMoreSeatsInSight(x, y).ShouldBe(result);
        }
Example #5
0
        public void RunSimulation_test()
        {
            var initialLayout = GetInitialLayout();

            var expected = new[]
            {
                new[] { '#', '.', '#', 'L', '.', 'L', '#', '.', '#', '#', },
                new[] { '#', 'L', 'L', 'L', '#', 'L', 'L', '.', 'L', '#', },
                new[] { 'L', '.', '#', '.', 'L', '.', '.', '#', '.', '.', },
                new[] { '#', 'L', '#', '#', '.', '#', '#', '.', 'L', '#', },
                new[] { '#', '.', '#', 'L', '.', 'L', 'L', '.', 'L', 'L', },
                new[] { '#', '.', '#', 'L', '#', 'L', '#', '.', '#', '#', },
                new[] { '.', '.', 'L', '.', 'L', '.', '.', '.', '.', '.', },
                new[] { '#', 'L', '#', 'L', '#', '#', 'L', '#', 'L', '#', },
                new[] { '#', '.', 'L', 'L', 'L', 'L', 'L', 'L', '.', 'L', },
                new[] { '#', '.', '#', 'L', '#', 'L', '#', '.', '#', '#', }
            };

            var subject = new WaitingArea(initialLayout);

            subject.RunSimulation();

            var result = subject.newLayout;

            Assert.Equal(expected, result);
        }
Example #6
0
        public void TestFourOrMoreSeatsOccupiedAround(string filename, int x, int y, bool result)
        {
            var area        = LoadInput(filename);
            var waitingArea = new WaitingArea(area);

            waitingArea.FourOrMoreSeatsOccupiedAround(x, y).ShouldBe(result);
        }
        public void UpdateLayout_WhenPassengersArrive(string layout, string expectedLayout)
        {
            var sut = new WaitingArea(layout);

            sut.AddPassengersWith(new NormalBehaviour());
            Assert.Equal(expectedLayout, sut.Layout);
        }
Example #8
0
        public void Single_update_test()
        {
            var initialLayout = GetInitialLayout();

            var expected = new[]
            {
                new[] { '#', '.', '#', '#', '.', '#', '#', '.', '#', '#' },
                new[] { '#', '#', '#', '#', '#', '#', '#', '.', '#', '#' },
                new[] { '#', '.', '#', '.', '#', '.', '.', '#', '.', '.' },
                new[] { '#', '#', '#', '#', '.', '#', '#', '.', '#', '#' },
                new[] { '#', '.', '#', '#', '.', '#', '#', '.', '#', '#' },
                new[] { '#', '.', '#', '#', '#', '#', '#', '.', '#', '#' },
                new[] { '.', '.', '#', '.', '#', '.', '.', '.', '.', '.' },
                new[] { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' },
                new[] { '#', '.', '#', '#', '#', '#', '#', '#', '.', '#' },
                new[] { '#', '.', '#', '#', '#', '#', '#', '.', '#', '#' }
            };

            var subject = new WaitingArea(initialLayout);

            subject.UpdateLayout();

            var result = subject.CurrentLayout;

            Assert.Equal(expected, result);
        }
        public void SolveFirstPuzzle()
        {
            var sut = new WaitingArea(PuzzleData.PUZZLE_DATA);

            sut.UntilNothingChangesAddPassengersWith(new NormalBehaviour());
            Assert.Equal(2334, sut.OccupiedSeats);
        }
Example #10
0
        public void Test12()
        {
            var layout = @"L.LL.LL.LL
LLLLLLL.LL
L.L.L..L..
LLLL.LL.LL
L.LL.LL.LL
L.LLLLL.LL
..L.L.....
LLLLLLLLLL
L.LLLLLL.L
L.LLLLL.LL";

            var sut = new WaitingArea(layout);

            sut.AddPassengersWith(new ShyBehaviour());

            Assert.Equal(@"#.##.##.##
#######.##
#.#.#..#..
####.##.##
#.##.##.##
#.#####.##
..#.#.....
##########
#.######.#
#.#####.##", sut.Layout);
        }
Example #11
0
        public void Test18()
        {
            const string layout = @"#.L#.L#.L#
#LLLLLL.LL
L.L.L..#..
##L#.#L.L#
L.L#.LL.L#
#.LLLL#.LL
..#.L.....
LLL###LLL#
#.LLLLL#.L
#.L#LL#.L#";

            var sut = new WaitingArea(layout);

            sut.AddPassengersWith(new ShyBehaviour());

            Assert.Equal(@"#.L#.L#.L#
#LLLLLL.LL
L.L.L..#..
##L#.#L.L#
L.L#.LL.L#
#.LLLL#.LL
..#.L.....
LLL###LLL#
#.LLLLL#.L
#.L#LL#.L#", sut.Layout);
            Assert.Equal(26, sut.OccupiedSeats);
        }
Example #12
0
        public void TestSeatsTaken(string filename, int seatsTaken)
        {
            var area        = LoadInput(filename);
            var waitingArea = new WaitingArea(area);

            waitingArea.SeatsTaken.ShouldBe(seatsTaken);
        }
Example #13
0
        public void TestAnyOccupiedSeatsInSight(string filename, int x, int y, bool result)
        {
            var area        = LoadInput(filename);
            var waitingArea = new WaitingArea(area);

            waitingArea.AnyOccupiedSeatsInSight(x, y).ShouldBe(result);
        }
Example #14
0
        public void TestGetInfo(int x, int y, char result)
        {
            var area = LoadInput("input_1_state_0.txt");

            var waitingArea = new WaitingArea(area);

            waitingArea.GetInfo(x, y).ShouldBe(result);
        }
Example #15
0
        public void Parse_row()
        {
            var a = new WaitingArea(".L.");

            a[0, 0].Should().Be(WaitingArea.Floor);
            a[0, 1].Should().Be(WaitingArea.EmptySeat);
            a[0, 2].Should().Be(WaitingArea.Floor);
        }
Example #16
0
    void Start()
    {
        waitingArea = WaitingAreaTilemap.GetComponent <WaitingArea>();

        targetEmptiesParent = new GameObject("Customer target empties");

        StartCoroutine(SpawnCycle());
    }
Example #17
0
        public void SolveSecondPuzzle()
        {
            var sut = new WaitingArea(PuzzleData.PUZZLE_DATA);

            sut.UntilNothingChangesAddPassengersWith(new ShyBehaviour());

            Assert.Equal(2100, sut.OccupiedSeats);
        }
Example #18
0
        public WaitingArea RunRounds(int n)
        {
            for (int i = 0; i < n; i++)
            {
                var mutations = GetMutations().ToArray();
                _initialState = mutations.Aggregate(seed: _initialState, (a, m) => m.Execute(a));
            }

            return(_initialState);
        }
Example #19
0
        public void Occupied_seats_calculated_correctly()
        {
            var initialLayout = GetInitialLayout();
            var subject       = new WaitingArea(initialLayout);

            subject.RunSimulation();

            var result = subject.OccupiedSeats;

            Assert.Equal(37, result);
        }
Example #20
0
 public void OnWaitingAreaExit(WaitingArea waitingArea)
 {
     if (status != PersonStatus.ReadyToBoard)                //fix: when people are moving to their wait location they sometimes have to move out of the platform waiting trigger
     {
         waitingArea.UnregisterPerson(this);
     }
     if (status != PersonStatus.MovingToPlatform)            //fix: do not want people moving out of foyer and onto platform to suddenly go limp
     {
         rb.constraints = RigidbodyConstraints.None;
     }
 }
Example #21
0
    void Start()
    {
        GameObject signalGO = GetComponentInChildren <Signal> ().gameObject;

        platformSignalTrigger = signalGO.GetComponent <BoxCollider> ();

        Vector3 signalPosition = signalGO.transform.localPosition;

        signalPosition.z = isLeftHanded ? 3.58f : -3.58f;
        signalGO.transform.localPosition = signalPosition;

        waitingArea = GetComponent <WaitingArea> ();
    }
        public void Puzzle1_FindOccupiedSeatCount_AfterPatternStabilizes()
        {
            var area = new WaitingArea(Input.Day11);

            bool result;

            do
            {
                result = area.Puzzle1Tick();
            } while (result is true);

            area.OccupiedSeats.Should().Be(2361);
        }
        public void Puzzle2_FindOccupiedSeatCount_WithModifiedAlgorithm()
        {
            var area = new WaitingArea(Input.Day11);

            bool result;

            do
            {
                result = area.Puzzle2Tick();
            } while (result is true);

            area.OccupiedSeats.Should().Be(2119);
        }
        public void WaitingArea_Puzzle1Ticks_HaveCorrectPatternResults(int numTicks, bool expectedTickResult, string expectedGrid)
        {
            var  area   = new WaitingArea(Example);
            bool?result = null;

            for (var k = 0; k < numTicks; ++k)
            {
                result = area.Puzzle1Tick();
            }

            result.Should().Be(expectedTickResult);
            area.ToString().Should().Be(expectedGrid);
        }
        public void WaitingArea_Example_Has37SeatsWhenStablePatternIsFound()
        {
            var area = new WaitingArea(Example);

            bool result;

            do
            {
                result = area.Puzzle1Tick();
            } while (result is true);

            area.OccupiedSeats.Should().Be(37);
        }
Example #26
0
        public WaitingArea Run()
        {
            while (true)
            {
                var mutations = GetMutations().ToArray();
                if (mutations.IsEmpty())
                {
                    return(_initialState);
                }

                _initialState = mutations.Aggregate(seed: _initialState, (a, m) => m.Execute(a));
            }
        }
Example #27
0
        public void TestInitWaitingArea()
        {
            var area = LoadInput("input_1_state_0.txt");

            var waitingArea = new WaitingArea(area);

            waitingArea.SizeX.ShouldBe(10);
            waitingArea.SizeY.ShouldBe(10);
            waitingArea.GetInfo(0, 0).ShouldBe('L');
            waitingArea.GetInfo(9, 9).ShouldBe('L');
            waitingArea.GetInfo(0, 9).ShouldBe('L');
            waitingArea.GetInfo(9, 0).ShouldBe('L');
            waitingArea.GetInfo(9, 6).ShouldBe('.');
        }
Example #28
0
        private void Init()
        {
            int h = parser.Lines.Count;
            int w = parser.Lines[0].Length;

            area = new WaitingArea(w, h);
            for (int i = 0; i < h; i++)
            {
                for (int j = 0; j < w; j++)
                {
                    if (parser.Lines[i][j].Equals('L'))
                    {
                        area.SetState(j, i, SeatState.Empty);
                    }
                }
            }
        }
Example #29
0
        public void CalculateOccupiedSeats_AfterReceivingPassengers()
        {
            const string layout = @"#.#L.L#.##
#LLL#LL.L#
L.#.L..#..
#L##.##.L#
#.#L.LL.LL
#.#L#L#.##
..L.L.....
#L#L##L#L#
#.LLLLLL.L
#.#L#L#.##";

            var sut = new WaitingArea(layout);

            sut.AddPassengersWith(new NormalBehaviour());
            Assert.Equal(37, sut.OccupiedSeats);
        }
Example #30
0
        public void ReturnSameLayout_WhenMaximumCombinationsAreReached()
        {
            const string layout = @"#.#L.L#.##
#LLL#LL.L#
L.#.L..#..
#L##.##.L#
#.#L.LL.LL
#.#L#L#.##
..L.L.....
#L#L##L#L#
#.LLLLLL.L
#.#L#L#.##";

            var sut = new WaitingArea(layout);

            sut.AddPassengersWith(new NormalBehaviour());
            Assert.Equal(layout, sut.Layout);
        }