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; } }
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; } }
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); }