public static void RescheduleAttack(LivingEntity attacker, LivingEntity defender, long attackDelay)
        {
            if (attacker.AttackTaskId != null)
            {
                GameScheduler.CancelTask(attacker.AttackTaskId);
            }

            var attackTask = new SchedulerTask(attackDelay + 1, GameThread.TIME_MS_NOW)
            {
                Task = () =>
                {
                    if (attacker.EntityType == EntityType.PLAYER)
                    {
                        if (Server.GetPlayer(attacker.UID) == null)
                        {
                            return;
                        }
                    }
                    TryAttacking(attacker, defender);
                }
            };

            GameScheduler.Schedule(attackTask);
            attacker.AttackTaskId = attackTask.UID;
        }
예제 #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
        public void CreateSpawnTask()
        {
            var schedulerTask = new SchedulerTask(SpawnTimerSeconds / 1000, GameThread.TIME_MS_NOW)
            {
                Task = () =>
                {
                    SpawnTick();
                }
            };

            GameScheduler.Schedule(schedulerTask);
        }
예제 #4
0
 public void MovementTick()
 {
     if (MovementBehaviour != null)
     {
         MovementBehaviour.PerformMovement(this);
         LastMovement = GameThread.TIME_MS_NOW;
         GameScheduler.Schedule(new SchedulerTask(MovementDelay, LastMovement)
         {
             Task = () =>
             {
                 MovementTick();
             }
         });
     }
 }
예제 #5
0
 public void MovementTick()
 {
     if (MovementBehaviour != null)
     {
         MovementBehaviour.PerformMovement(this);
         LastMovement = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
         GameScheduler.Schedule(new SchedulerTask(MovementDelay)
         {
             Task = () =>
             {
                 MovementTick();
             }
         });
     }
 }
예제 #6
0
        public void MovementTick()
        {
            if (MovementTaskId == Guid.Empty)
            {
                GameScheduler.CancelTask(MovementTaskId);
            }

            MovementBehaviour?.PerformMovement(this);
            LastMovement        = GameThread.TIME_MS_NOW;
            this.MovementTaskId = GameScheduler.Schedule(new SchedulerTask(MovementDelay, LastMovement)
            {
                Task = () =>
                {
                    MovementTaskId = Guid.Empty;
                    if (HP > 0)
                    {
                        MovementTick();
                    }
                }
            });
        }
예제 #7
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);
    }