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); }
// 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); }
private void Update() { if (!Looping) { return; } ProcessPackets(); var now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; GameScheduler.RunTasks(now); }
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; } }
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; } }
// 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); }