Esempio n. 1
0
        public static async Task HitActionForBuffer7(List <HitData> hitDatas, HitMouseMachinePluginsProvider provider, int chargeSpeed = 1)
        {
            var callback = new TLAutoDevicePushCallback();

            RegButtonCheckNotification(provider._pointLightButtonItems, callback);
            callback.Notify += async(sen, eve) =>
            {
                if (eve.IsError)
                {
                    return;
                }
                var switchItem = eve.Data.ToObject <SwitchItem>();
                using (var releaser = await LockAsync.LockAsync())
                {
                    if (_currentHitData != null)
                    {
                        await _currentHitData.Func(switchItem.SwitchNumber);
                    }
                }
            };
            for (var i = 0; i < hitDatas.Count; i++)
            {
                if (i % 2 == 0)
                {
                    var chargeSpeedIndex = 0;
ReHit:
                    using (var releaser = await LockAsync.LockAsync())
                    {
                        _currentHitData = hitDatas[i];
                    }
                    var hitResult = await hitDatas[i].CheckHit(provider._pointLightButtonItems, provider._pointLightRelayItems, provider);
                    if (hitResult)
                    {
                        chargeSpeedIndex++;
                        if (chargeSpeedIndex == chargeSpeed)
                        {
                            await provider._chargeLightRelayItems[i].Control();
                            await provider._chargeLightRelayItems[i + 1].Control();
                        }
                        else
                        {
                            goto ReHit;
                        }
                    }
                    else
                    {
                        //await provider.PlayTextMusicFromFirstItem("踩踏失败,重新来。");
                        goto ReHit;
                    }
                }
            }
            var buttonItem = provider._pointLightButtonItems[0];

            UnregButtonCheckNotification(buttonItem.DeviceNumber, buttonItem.ServiceAddress, callback);
            using (var releaser = await LockAsync.LockAsync())
            {
                _currentHitData = null;
            }
        }
Esempio n. 2
0
        private async Task PlayHitMusic(HitMouseMachinePluginsProvider provider)
        {
            if (provider._isChanged)
            {
                await provider.PlayMusic0(HitMouseMachinePluginsProvider.SignKey, "hit1.wav", "hit1");

                provider._isChanged = !provider._isChanged;
            }
            else
            {
                await provider.PlayMusic0(HitMouseMachinePluginsProvider.SignKey, "hit2.wav", "hit2");

                provider._isChanged = !provider._isChanged;
            }
        }
Esempio n. 3
0
        public async Task <bool> CheckHit(List <MachineButtonItem> checkMachineItems, List <MachineRelayItem> checkRelayItems, HitMouseMachinePluginsProvider provider, bool isAdjoin = false)
        {
            var checkLightButtonItemsDic = new Dictionary <int, MachineButtonItem>();
            var checkLightItems          = new Dictionary <int, MachineRelayItem>();

            for (var i = 0; i < HitCount; i++)
            {
ReRandom:
                var tick = DateTime.Now.Ticks;
                var random = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
                var index  = random.Next(0, checkMachineItems.Count);
                if (isAdjoin)
                {
                    if (checkLightButtonItemsDic.Keys.Any(s => (s + 4 == index) || (s - 4 == index)))
                    {
                        goto ReRandom;
                    }
                }
                if (!checkLightButtonItemsDic.ContainsKey(index))
                {
                    checkLightButtonItemsDic.Add(index, checkMachineItems[index]);
                    checkLightItems.Add(index, checkRelayItems[index]);
                }
                else
                {
                    goto ReRandom;
                }
            }
            var checkLightButtonItems = checkLightButtonItemsDic.Values.ToList();

            foreach (var machineRelayItem in checkLightItems.Values)
            {
                await machineRelayItem.Control(true);
            }
            _manualResetEvent.Reset();
            var checkNumbers = new List <int>();

            Func = async switchNumber =>
            {
                if (checkNumbers.Contains(switchNumber) || (checkNumbers.Count == checkLightButtonItems.Count))
                {
                    return(false);
                }
                var relayIndex =
                    checkLightButtonItems.IndexOf(checkLightButtonItems.FirstOrDefault(s => s.Number == switchNumber));
                if (relayIndex < 0)
                {
                    return(false);
                }
                checkNumbers.Add(switchNumber);
                await checkLightItems.Values.ToList()[relayIndex].Control(false);
                await PlayHitMusic(provider);

                if (checkNumbers.Count == checkLightButtonItems.Count)
                {
                    _manualResetEvent.Set();
                }
                return(true);
            };
            var result = _manualResetEvent.WaitOne(CheckTime * 1000);

            foreach (var machineRelayItem in checkLightItems.Values)
            {
                await machineRelayItem.Control(false);
            }
            return(result);
        }