Esempio n. 1
0
        static void GunCallback(SchedulerTask task)
        {
            WeaponArgs args = (WeaponArgs)task.State;

            if (args.moving)
            {
                args.moving = MoveGun(args);

                // Laser gun persists for a short while
                if (!args.moving && args.weaponType == WeaponType.Laser)
                {
                    task.Delay = TimeSpan.FromMilliseconds(400);
                }
                return;
            }

            args.TeleportSourcePlayer();
            if (args.weaponType == WeaponType.Laser)
            {
                foreach (Vec3U16 pos in args.previous)
                {
                    args.player.level.Blockchange(pos.X, pos.Y, pos.Z, Block.Air, true);
                }
                args.previous.Clear();
            }
            else if (args.previous.Count > 0)
            {
                Vec3U16 pos = args.previous[0];
                args.previous.RemoveAt(0);
                args.player.level.Blockchange(pos.X, pos.Y, pos.Z, Block.Air, true);
            }
            task.Repeating = args.previous.Count > 0;
        }
Esempio n. 2
0
        static void MissileCallback(SchedulerTask task)
        {
            WeaponArgs args = (WeaponArgs)task.State;

            if (args.moving)
            {
                PerformMove(args); return;
            }

            args.TeleportSourcePlayer();
            if (args.previous.Count > 0)
            {
                Vec3U16 pos = args.previous[0];
                args.previous.RemoveAt(0);
                args.player.level.Blockchange(pos.X, pos.Y, pos.Z, Block.Air, true);
            }
            task.Repeating = args.previous.Count > 0;
        }