예제 #1
0
        public void TestMultipleMoves()
        {
            var date = DateTime.MinValue;

            GameScheduler.SetLogicalTime(date);

            var tile  = _party.Tile;
            var next1 = tile.GetNeighbor(Direction.SOUTH);
            var next2 = next1.GetNeighbor(Direction.SOUTH);
            var next3 = next2.GetNeighbor(Direction.SOUTH);

            _path.Add(new Position(next1.X, next1.Y));
            _path.Add(new Position(next2.X, next2.Y));
            _path.Add(new Position(next3.X, next3.Y));

            SendMoveRequest();

            Assert.AreEqual(tile, _party.Tile);

            date += _party.Course.Delay;
            GameScheduler.Tick(date);
            Assert.AreEqual(next1, _party.Tile);

            date += _party.Course.Delay;
            GameScheduler.Tick(date);
            Assert.AreEqual(next2, _party.Tile);

            date += _party.Course.Delay;
            GameScheduler.Tick(date);
            Assert.AreEqual(next3, _party.Tile);

            var moveEvents = _player.ReceivedEventsOfType <EntityMoveEvent>();

            Assert.AreEqual(3, moveEvents.Count);
        }
예제 #2
0
        public void TestNextTask()
        {
            GameScheduler.SetLogicalTime(DateTime.UnixEpoch);

            var t1 = new TestTask(TimeSpan.FromSeconds(10));

            GameScheduler.Tick(DateTime.UnixEpoch + TimeSpan.FromMilliseconds(1));

            Assert.AreEqual(t1, GameScheduler.NextTask);
            Assert.AreEqual(1, GameScheduler.PendingTasks);
        }
예제 #3
0
        public void TestTickNotRunningTasks()
        {
            var time = DateTime.UnixEpoch;

            GameScheduler.SetLogicalTime(time);

            var t1 = new TestTask(TimeSpan.FromSeconds(1));
            var t2 = new TestTask(TimeSpan.FromSeconds(1 + 60));
            var t3 = new TestTask(TimeSpan.FromSeconds(1 + 120));

            GameScheduler.Tick(time);

            Assert.IsFalse(t1.Ran);
            Assert.IsFalse(t2.Ran);
            Assert.IsFalse(t3.Ran);
            Assert.AreEqual(t1, GameScheduler.NextTask);
        }
예제 #4
0
        public void TestRunningTwoTasks()
        {
            var time = DateTime.UnixEpoch;

            GameScheduler.SetLogicalTime(time);

            var t1 = new TestTask(TimeSpan.FromSeconds(1));
            var t2 = new TestTask(TimeSpan.FromSeconds(5));
            var t3 = new TestTask(TimeSpan.FromSeconds(7));

            GameScheduler.Tick(time + TimeSpan.FromSeconds(5));

            Assert.IsTrue(t1.Ran);
            Assert.IsTrue(t2.Ran);
            Assert.IsFalse(t3.Ran);
            Assert.AreEqual(t3, GameScheduler.NextTask);
            Assert.AreEqual(1, GameScheduler.PendingTasks);
        }
예제 #5
0
        public void TestCourseMovingParty()
        {
            var date = DateTime.MinValue;

            GameScheduler.SetLogicalTime(date);

            var tile = _party.Tile;
            var next = tile.GetNeighbor(Direction.SOUTH);

            _path.Add(new Position(next.X, next.Y));

            SendMoveRequest();

            Assert.AreEqual(tile, _party.Tile);

            GameScheduler.Tick(date + _party.Course.Delay);

            Assert.AreEqual(next, _party.Tile);
        }
예제 #6
0
        public void TestMoveEvents()
        {
            var tile = _party.Tile;
            var next = tile.GetNeighbor(Direction.SOUTH);

            _path.Add(new Position(next.X, next.Y));

            var moveEventsb = _player.ReceivedEventsOfType <EntityMoveEvent>();

            SendMoveRequest();
            GameScheduler.Tick(GameScheduler.Now + _party.Course.Delay);

            var moveEvents    = _player.ReceivedEventsOfType <EntityMoveEvent>();
            var tileDiscovery = _player.ReceivedEventsOfType <TileVisibleEvent>();

            // should have received movement events
            Assert.AreEqual(1, moveEvents.Count);
            // should have explored some tiles
            Assert.GreaterOrEqual(tileDiscovery.Count, 1);
        }
예제 #7
0
 public override void Tick()
 {
     GameScheduler.Tick(DateTime.UtcNow);
 }