示例#1
0
        public void TestEntityContinuousAttackBasedOnAttackSpeed()
        {
            var now = GameThread.TIME_MS_NOW;

            _client.RecievedPackets.Clear();

            var player              = Server.GetPlayer(_player.UserId);
            var playerAtkSpeed      = player.AtkSpeed;
            var playerAtkSpeedDelay = Formulas.GetTimeBetweenAttacks(playerAtkSpeed);

            _client.SendToServer(new EntityTargetPacket()
            {
                WhoUuid    = _player.UserId,
                TargetUuid = _monster.UID
            });

            Assert.AreEqual(player.NextAttackAt, now + playerAtkSpeedDelay);

            GameThread.TIME_MS_NOW = now + playerAtkSpeedDelay;
            GameScheduler.RunTasks(now + playerAtkSpeedDelay);

            GameThread.TIME_MS_NOW = now + (playerAtkSpeedDelay * 2);
            GameScheduler.RunTasks(now + (playerAtkSpeedDelay * 2));

            GameThread.TIME_MS_NOW = now + (playerAtkSpeedDelay * 3);
            GameScheduler.RunTasks(now + (playerAtkSpeedDelay * 3));

            var attackPackets = _client.RecievedPackets
                                .Where(p => p.GetType() == typeof(EntityAttackPacket))
                                .Select(p => (EntityAttackPacket)p)
                                .Where(p => p.AttackerUID == _player.UserId)
                                .ToList();

            Assert.AreEqual(attackPackets.Count, 4);
        }
示例#2
0
    // Test to ensure server is recieving the packets and keeping the recieve order
    public void TestBasicScheduling()
    {
        List <int> executedTasks = new List <int>();

        var now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

        GameScheduler.Schedule(new SchedulerTask(1000)
        {
            Task = () =>
            {
                executedTasks.Add(1);
            }
        });

        GameScheduler.Schedule(new SchedulerTask(2000)
        {
            Task = () =>
            {
                executedTasks.Add(2);
            }
        });

        GameScheduler.Schedule(new SchedulerTask(3000)
        {
            Task = () =>
            {
                executedTasks.Add(3);
            }
        });

        GameScheduler.Schedule(new SchedulerTask(1500)
        {
            Task = () =>
            {
                executedTasks.Add(4);
            }
        });

        GameScheduler.RunTasks(now);

        var tasks = GameScheduler.Tasks;

        Assert.That(executedTasks.Count == 0);

        GameScheduler.RunTasks(now + 1500);

        Assert.That(executedTasks.Contains(4));
        Assert.That(executedTasks.Contains(1));
        Assert.That(executedTasks.Count == 2);

        GameScheduler.RunTasks(now + 3000);

        Assert.That(executedTasks.Contains(2));
        Assert.That(executedTasks.Contains(3));
        Assert.That(executedTasks.Count == 4);
        Assert.That(GameScheduler.Tasks.Count == 0);
    }
示例#3
0
    private void Update()
    {
        if (!Looping)
        {
            return;
        }
        ProcessPackets();
        var now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

        GameScheduler.RunTasks(now);
    }
示例#4
0
 public override void RunThread()
 {
     Log.Info("Starting Game Thread");
     LastTick = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
     while (Running)
     {
         TIME_MS_NOW = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
         if (TIME_MS_NOW - LastTick > 50)
         {
             Log.Error("Took more then 50ms to do a Game Loop");
         }
         ProcessPackets();
         GameScheduler.RunTasks(TIME_MS_NOW);
         LastTick = TIME_MS_NOW;
     }
 }
示例#5
0
 public override void RunThread()
 {
     Log.Info("Starting Game Thread");
     LastTick = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
     while (Running)
     {
         var now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
         if (now - LastTick > 50)
         {
             Log.Error("Took more then 50ms to do a Game Loop");
         }
         ProcessPlayerInput();
         ProcessEntities();
         GameScheduler.RunTasks(now);
         LastTick = now;
     }
 }
示例#6
0
    // Test to ensure server is recieving the packets and keeping the recieve order
    public void TestLoopingSchedule()
    {
        List <int> executedTasks = new List <int>();

        var now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

        GameScheduler.Schedule(new SchedulerTask(1000)
        {
            Repeat = true,
            Task   = () =>
            {
                executedTasks.Add(1);
            }
        });

        GameScheduler.RunTasks(now + 1000);
        GameScheduler.RunTasks(now + 2000);
        GameScheduler.RunTasks(now + 3000);
        GameScheduler.RunTasks(now + 3500);

        Assert.That(executedTasks.Count == 3);
    }