Esempio n. 1
0
        public override async void StartGame(DifficultyLevelType diffLevelType, string[] args)
        {
            Init();
            CallOnNotification("part 1");
            //Todo:HHC,启动的时候先定位到指定一帧
            await SendWcfCommandPluginsHelper.PlayVideo(SignKey, "guard.mp4", 1, false, _videoAddress);

            await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(2), VideoActionType.Stop, _videoAddress);

            //Todo:判断是否开始继续执行
            var result = false;

            while (!result)
            {
                var resultStatus = await SendWcfCommandPluginsHelper.GetNotificationStatus("GuardStart", _newNotificationServiceAddress);

                if (resultStatus == AppStatusType.Stop)
                {
                    result = true;
                }
                else
                {
                    await Task.Delay(2000);
                }
            }
            CallOnNotification("part 2");
            Task.Factory.StartNew(Guarding);
        }
Esempio n. 2
0
        private async void _stopTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            //pause video
            _leaved = false;
            await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(2), VideoActionType.Play, _videoAddress);

            _stopTimer.Start();
        }
Esempio n. 3
0
        private async void _guardTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(17), VideoActionType.Play, _videoAddress);

            _leaveTimer.Start();
            //await PlayMusic0(SignKey, "leave.wav", "ear");
            CallOnNotification("离开");
            //await Task.Delay(4 * 1000);
            _leaved = true;
        }
Esempio n. 4
0
        public async Task <bool> Control(bool isNo)
        {
            //var result = await Task.Factory.StartNew(() => true);
            var result = await SendWcfCommandPluginsHelper.InvokerControlRelay(this, isNo);

            if (result)
            {
                IsNo = isNo;
                OnRelayStatusChanged();
            }
            return(result);
        }
Esempio n. 5
0
        private async void GameLogic()
        {
            //await PlayTextMusicFromFirstItem("游戏开始");
            var start = 0;

            while (true)
            {
                bool isTouchingBeginPoint;
                if (start == 0)
                {
                    isTouchingBeginPoint = true;
                }
                else
                {
                    if (!_isRepeatPlayMusic)
                    {
                        //await PlayTextMusicFromFirstItem("请重新触摸起点开始游戏");
                        //await PauseMusic0(SignKey, "Voice");
                    }
                    _isRepeatPlayMusic   = true;
                    isTouchingBeginPoint = await SendWcfCommandPluginsHelper.InvokerQueryDiaitalSwitchWithAutoUpload(_beginButtonItem, 60000);
                }
                if (isTouchingBeginPoint)
                {
                    await _errorRelayItem.Control(false);

                    //await PlayTextMusicFromFirstItem("开始走位");
                    var touchingButtonItem = await SendWcfCommandPluginsHelper.NotificationButtonPressAsyncTask(new List <MachineButtonItem> {
                        _midwayButtonItem, _endButtonItem
                    }, 60000 * 9);

                    if ((touchingButtonItem != null) && (touchingButtonItem.Number == _endButtonItem.Number))
                    {
                        break;
                    }
                    await _errorRelayItem.Control(true);

                    //PlayTextMusicFromFirstItem("");
                    await PauseMusic0(SignKey, "Voice");
                    await PlayMusic0(SignKey, "line2.wav", "Voice");

                    //PlayTextMusicFromFirstItem("请触碰起点,红灯熄灭,开始游戏。");
                    //await Task.Delay(3000);
                    _isRepeatPlayMusic = false;
                }
                await Task.Delay(1000);

                start++;
            }
            GameCompleted();
        }
Esempio n. 6
0
        private async void GameLogic()
        {
            await _relayButton.Control(true);

            while (true)
            {
                var result = await SendWcfCommandPluginsHelper.InvokerQueryDiaitalSwitchWithAutoUpload(_listenButton, 10000);

                if (result)
                {
                    await PlayMusic0(SignKey, "success.wav");

                    await Task.Delay(9000);
                }
            }
        }
Esempio n. 7
0
        private async void _leaveTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(30), VideoActionType.Play, _videoAddress);

            await Task.Delay(2 * 1000);

            _toguardTimer.Start();
            CallOnNotification("回来");
            if (!_aisllight)
            {
                await Stop();

                //return;
            }
            _leaved = false;
        }
Esempio n. 8
0
        private async Task Stop(bool say = true)
        {
            _personavailable = false;
            await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(2), VideoActionType.Play, _videoAddress);

            _stopTimer.Start();
            _guardTimer.Stop();
            _leaveTimer.Stop();
            _toguardTimer.Stop();
            if (say)
            {
                await PlayMusic0(SignKey, "stop.wav", "ear");
            }
            CallOnNotification("禁止入内");
            await _faillight.Control(true);

            await _listenLight.Control(false);
        }
Esempio n. 9
0
        private async Task <bool> CheckStartButton()
        {
            try
            {
                var resultItem = await SendWcfCommandPluginsHelper.InvokerQueryDiaitalSwitchWithAutoUpload(_startButtonItem, 60000);

                if (resultItem)
                {
                    await PlayMusic0(SignKey, "Go.wav", "Go");

                    await Task.Delay(2000);

                    return(true);
                }
                return(false);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Esempio n. 10
0
 private async void PlayMusic0(string fileName, string musicKey = null, double volume = 1, bool isRepeat = false, string musicAddress = null)
 {
     var musicPathBase = @"C:\Program Files\StartGateServer\TLAuto.Machine\" + _sign + @"\MachinePlugins\Music";
     await SendWcfCommandPluginsHelper.InvokerMusic(_sign + (musicKey.IsNullOrEmpty() ? "" : musicKey), Path.Combine(musicPathBase, fileName), volume, isRepeat, musicAddress ?? MachineMusicItems[0].ServiceAddress);
 }
Esempio n. 11
0
        private async void Guarding()
        {
            await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(15), VideoActionType.Pause, _videoAddress);

            _toguardTimer.Start();
            ResetLight(false);
            while (true)
            {
                try
                {
                    var hitchecktaskasync = new HitCheckTaskAsync(_hitCheckTask, WaitingTime);
                    var results           = await hitchecktaskasync.InvokeAsync();

                    if (null != results)
                    {
                        foreach (var result in results)
                        {
                            var switchnumber = result.SwitchItem.SwitchNumber;
                            if (switchnumber == _aisleCheck.Number)
                            {
                                _aisllight = result.SwitchItem.SwitchStatus == SwitchStatus.NO;
                            }
                            if (switchnumber == _roomCheck.Number)
                            {
                                _roomlight = result.SwitchItem.SwitchStatus == SwitchStatus.NO;
                            }
                            CallOnNotification($"aisle = {_aisllight} --- room = {_roomlight}");
                            if (_aisllight && _roomlight && !_leaved)
                            {
                                //jump to normal loop
                                _stopTimer.Stop();
                                await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(15), VideoActionType.Play, _videoAddress);

                                await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(15), VideoActionType.Pause, _videoAddress);

                                _toguardTimer.Start();
                                await _faillight.Control(false);

                                if (!_personavailable)
                                {
                                    await _listenLight.Control(false);
                                }
                                continue;
                            }

                            if (result.SwitchItem.SwitchStatus == SwitchStatus.NO)
                            {
                                continue;
                            }

                            if (!_leaved)
                            {
                                if ((switchnumber == _aisleCheck.Number) || ((switchnumber == _roomCheck.Number) && !_personavailable))
                                {
                                    //jump to stop, and pause
                                    await Stop();
                                }
                            }
                            else
                            {
                                if (switchnumber == _roomCheck.Number)
                                {
                                    await _listenLight.Control(true);

                                    await _faillight.Control(false);

                                    _personavailable = true;
                                }
                            }

                            if ((switchnumber == _failButton.Number) && _faillight.IsNo)
                            {
                                CallOnNotification("偷听失败");
                                await PlayMusic0(SignKey, "fail.wav", "ear", musicAddress : _musicMinAddress);
                                await Stop(false);
                            }
                            if ((switchnumber == _listenButton.Number) && _listenLight.IsNo)
                            {
                                CallOnNotification("偷听成功");
                                await PlayMusic0(SignKey, "success.wav", "ear", musicAddress : _musicMinAddress);

                                await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(0), VideoActionType.Play, _videoAddress);

                                await SendWcfCommandPluginsHelper.ChangeFrame(TimeSpan.FromSeconds(0), VideoActionType.Pause, _videoAddress);

                                OnGameOver();
                                return;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    OnNotification(new NotificationEventArgs(ex.Message));
                }
            }
        }
Esempio n. 12
0
        private async void GameLogic()
        {
            while (true)
            {
                for (var i = 0; i < _gameCount; i++)
                {
                    if (_isBreakThird && (i >= 2))
                    {
                        GameCompleted();
                        break;
                    }
                    var count = i + 1;
ReBegin:
                    var isBegin = await SendWcfCommandPluginsHelper.InvokerQueryDiaitalSwitchWithAutoUpload(_beginButtonItem, _queryTime);

                    if (isBegin)
                    {
                        await PlayTextMusicFromFirstItem("游戏开始");
                        await PlayMusic0("HitMouse", "P5_mixdown.mp3", "back", 0.2, true);

                        //关闭所有灯
                        await CloseAllLight();

                        await _roomLightRelayItem.Control(true);

                        //await PlayTextMusicFromFirstItem($"第{count}轮游戏开始");
                        //开始击打
                        //重建击打行为数据
                        var hitDatas = GetHitDatas();
                        switch (_hitBuff)
                        {
                        case HitType.Default:
                            await HitTask.HitActionForDefault(hitDatas, this, hitDatas[0].ChargeHitCount);

                            break;

                        case HitType.Buff1:
                            await HitTask.HitActionForDefault(hitDatas, this, hitDatas[0].ChargeHitCount);

                            break;

                        case HitType.Buff2:
                            await HitTask.HitActionForDefault(hitDatas, this, hitDatas[0].ChargeHitCount);

                            break;

                        case HitType.Buff3:
                            await HitTask.HitActionForDefault(hitDatas, this, hitDatas[0].ChargeHitCount + 5);

                            break;

                        case HitType.Buff4:
                            await HitTask.HitActionForDefault(hitDatas, this, hitDatas[0].ChargeHitCount, true);

                            break;

                        case HitType.Buff5:
                            await HitTask.HitActionForDefault(hitDatas, this, hitDatas[0].ChargeHitCount);

                            break;

                        case HitType.Buff6:
                            await HitTask.HitActionForDefault(hitDatas, this, hitDatas[0].ChargeHitCount);

                            break;

                        case HitType.Buff7:
                            //全局的背景灯切换
                            RoomLightHelper.Start();
                            await HitTask.HitActionForBuffer7(hitDatas, this, hitDatas[0].ChargeHitCount);

                            //结束背景灯切换
                            await RoomLightHelper.Stop();

                            break;

                        case HitType.Buff8:
                            await HitTask.HitActionForDefault(hitDatas, this, hitDatas[0].ChargeHitCount);

                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                        await PauseMusic0("HitMouse", "back");

                        //await PlayTextMusicFromFirstItem($"第{count}轮游戏结束");
                        //选择招式
                        if (i + 1 != _gameCount)
                        {
                            if (_isBreakThird && (i >= 1))
                            {
                                //await PlayTextMusicFromFirstItem("本轮游戏胜利。");
                            }
                            else
                            {
                                await PlayTextMusicFromFirstItem("本轮游戏胜利,请选择下一轮游戏所要启动的招式。");
                            }
                            foreach (var questionLightRelayItem in _questionLightRelayItems)
                            {
                                await questionLightRelayItem.Control(true);
                            }
                            foreach (var styleLightRelayItem in _styleLightRelayItems)
                            {
                                await styleLightRelayItem.Control(true);
                            }
                            for (var j = 0; j < _chargeLightRelayItems.Count; j++)
                            {
                                if (j != _chargeLightRelayItems.Count - 1)
                                {
                                    await _chargeLightRelayItems[j].Control(false);
                                }
                            }
                            await _roomLightRelayItem.Control(false);

                            var hitSelector = _hitTypes.FirstOrDefault(s => s.Item1 == count);
                            _hitBuff = (HitType)Enum.ToObject(typeof(HitType), hitSelector.Item2);

                            var isPressQuestionButton = false;
                            while (!isPressQuestionButton)
                            {
                                if (_isBreakThird && (i >= 1))
                                {
                                    break;
                                }
                                var pressQuestionButtonItem = await SendWcfCommandPluginsHelper.NotificationButtonPressAsyncTask(_questionLightButtonItems, _queryTime);

                                if (pressQuestionButtonItem != null)
                                {
                                    await _chargeLightRelayItems[_chargeLightRelayItems.Count - 1].Control(false);
                                    await PlayMusic0("HitMouse", hitSelector.Item3, "buff");

                                    await Task.Delay(2000);

                                    isPressQuestionButton = true;
                                }
                            }
                            //var pressQuestionButtonItemIndex = _questionLightButtonItems.IndexOf(pressQuestionButtonItem);
                            for (var j = 0; j < _questionLightRelayItems.Count; j++)
                            {
                                await _questionLightRelayItems[j].Control(false);
                            }

                            //切换对应招式行为
                            //while (true)
                            //{
                            //    var tick = DateTime.Now.Ticks;
                            //    var random = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
                            //    var buttonIndex = random.Next(1, 8);
                            //    var hitType = (HitType)Enum.Parse(typeof(HitType), buttonIndex.ToString());
                            //    _hitBuff = hitType;
                            //}
                            var hitStyleData = _hitStyleDatas.FirstOrDefault(s => s.QuestionLightButtonIndex == _hitBuff.ToInt32());
                            if (hitStyleData == null)
                            {
                                throw new ArgumentNullException();
                            }

                            if (_isBreakThird && (i >= 1))
                            {
                                foreach (var hitStyleDataItem in _hitStyleDatas)
                                {
                                    foreach (var i1 in hitStyleDataItem.LightIndexs)
                                    {
                                        var   index = i1 - 1;
                                        await _styleLightRelayItems[index].Control(false);
                                    }
                                }
                            }
                            else
                            {
                                var usedStyleLightRelayItemIndexs = new List <int>();
                                foreach (var styleLightIndex in hitStyleData.LightIndexs)
                                {
                                    var index = styleLightIndex - 1;
                                    usedStyleLightRelayItemIndexs.Add(index);
                                    await _styleLightRelayItems[index].Control(true);
                                }
                                //关闭不需要的招式灯
                                await CloseStyleLights(usedStyleLightRelayItemIndexs);
                                await PlayTextMusicFromFirstItem(_hitBuff.GetEnumAttribute <TextToMusicAttribute>().Text);
                            }
                        }
                        else
                        {
                            GameCompleted();
                        }
                    }
                    else
                    {
                        goto ReBegin;
                    }
                }
                break;
            }
        }
Esempio n. 13
0
        private async void StabCheck()
        {
            await SendWcfCommandPluginsHelper.InvokerNotificationForStart("ArshEnd1");

            await SendWcfCommandPluginsHelper.InvokerNotificationForStart("ArshEnd2");

            while (true)
            {
                try
                {
                    var hitchecktaskasync = new HitCheckTaskAsync(_hitCheckTask, 60 * 1000);
                    var results           = await hitchecktaskasync.InvokeAsync();

                    if (null != results)
                    {
                        foreach (var result in results)
                        {
                            if (result.SwitchItem.SwitchStatus == SwitchStatus.NO)
                            {
                                continue;
                            }
                            var hit = _hit.FirstOrDefault(h => h.Value.Number == result.SwitchItem.SwitchNumber);
                            if (hit.Value != null)
                            {
                                await PlayMusic0(SignKey, "in.wav", "in");

                                var tick        = DateTime.Now.Ticks;
                                var randomcount = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32)).Next(2, 5);
                                CallOnNotification($"current  count {randomcount} v: {hit.Value}");

                                foreach (var machineRelayItem in RelayItems)
                                {
                                    await machineRelayItem.Control(false);
                                }
                                for (var i = 0; i < randomcount; i++)
                                {
                                    tick = DateTime.Now.Ticks;
                                    var randomnumber = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32)).Next(0, 4);
                                    CallOnNotification($"current number {randomnumber}");
                                    await RelayItems[randomnumber].Control(true);
                                }

                                if (hit.Key == _squence1[_current])
                                {
                                    CallOnNotification($"currentstep: {_current}");
                                    _current++;
                                    if (_current == _squence1.Count)
                                    {
                                        foreach (var machineRelayItem in RelayItems)
                                        {
                                            await machineRelayItem.Control(false);
                                        }
                                        await SendWcfCommandPluginsHelper.InvokerNotificationForStop("ArshEnd1");

                                        OnGameOver();
                                        return;
                                    }
                                    continue;
                                }
                                //if (hit.Key == _squence2[_current])
                                //{
                                //    CallOnNotification($"currentstep: {_current}");
                                //    _current++;
                                //    if (_current == _squence2.Count)
                                //    {
                                //        foreach (var machineRelayItem in RelayItems)
                                //        {
                                //            await machineRelayItem.Control(false);
                                //        }
                                //        await SendWcfCommandPluginsHelper.InvokerNotificationForStop("ArshEnd2");
                                //        OnGameOver();
                                //        return;
                                //    }
                                //    continue;
                                //}
                                if (hit.Key == _squence1[0])
                                {
                                    CallOnNotification($"reset to new step1");
                                    _current = 1;
                                    continue;
                                }
                                CallOnNotification("reset step");
                                _current = 0;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    OnNotification(new NotificationEventArgs(ex.Message));
                }
            }
        }
Esempio n. 14
0
        private async void GameLogic()
        {
            while (true)
            {
                var gameIndex = 0;

                foreach (var cookingData in _cookingDatas)
                {
                    if ((gameIndex == 1) && _isBreakSecond)
                    {
                        gameIndex++;
                        continue;
                    }
                    if ((gameIndex == 2) && _isBreakThird)
                    {
                        continue;
                    }
Repeat:
                    var result = await SendWcfCommandPluginsHelper.InvokerQueryDiaitalSwitchWithAutoUpload(_startButtonItem, 60000 * 9);

                    if (!result)
                    {
                        goto Repeat;
                    }
                    await PlayStartBack(gameIndex);

                    if (cookingData.Excute(this))
                    {
                        var musicIndex = gameIndex;
                        if ((gameIndex == 0) && _isBreakSecond)
                        {
                            musicIndex++;
                        }
                        if ((gameIndex == 1) && _isBreakThird)
                        {
                            musicIndex++;
                        }
                        if (gameIndex == 0)
                        {
                            if (!(_isBreakSecond && _isBreakThird))
                            {
                                await PlayMusic0(SignKey, "第一轮结束.wav");
                            }
                        }
                        else
                        {
                            if (gameIndex == 1)
                            {
                                if (!_isBreakThird)
                                {
                                    await PlayMusic0(SignKey, "第二轮结束.wav");
                                }
                            }
                        }

                        await Task.Delay(2000);

                        gameIndex++;
                    }
                    else
                    {
                        await PlayTextMusicFromFirstItem("游戏超时,请重新开始");

                        goto Repeat;
                    }
                }
                break;
            }
            await PlayMusic0(SignKey, "line4.wav");

            GameCompleted();
        }