예제 #1
0
        /// <summary>
        /// ジェスチャーに対応するAudioClipを取得する
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        private AudioClip GetAudioClipOrNull(UDRLGestureDetector.GestureEventArgs args)
        {
            Func <AudioClip> clipFunc;

            return(AudioClipDic.TryGetValue(args.Direction, out clipFunc) ? clipFunc() : null);
        }
예제 #2
0
        void GestureDetected(object sender, UDRLGestureDetector.GestureEventArgs args)
        {
            // ジェスチャー中:現在選択中の入力を表示する
            if (args.Type == UDRLGestureDetector.GestureEventType.DETECTING)
            {
                KeyCode keyCode = GetKeyCode(args);
                // 選択中の表示を更新
                if (!IsValidInput(this.ipText, keyCode))
                {
                    IpText.text = PROMPT + this.ipText + "[]";
                }
                else
                {
                    if (keyCode == KeyCode.Delete)
                    {
                        IpText.text = PROMPT + this.ipText + "[DEL]";
                    }
                    else
                    {
                        IpText.text = PROMPT + this.ipText + "[" + (char)keyCode + "]";
                    }
                }

                // TODO: 現在認識しているジェスチャーを視覚的に表示する

                // ジェスチャーが認識されたタイミングを、効果音で通知する
                AudioClip clip = GetAudioClipOrNull(args);
                if (clip != null)
                {
                    AudioSource.PlayClipAtPoint(clip, this.transform.position, 0.8f);
                }
            }

            // ジェスチャー確定:入力を確定する
            else if (args.Type == UDRLGestureDetector.GestureEventType.DETECTED)
            {
                KeyCode keyCode = GetKeyCode(args);
                if (!IsValidInput(this.ipText, keyCode))
                {
                    IpText.text = PROMPT + this.ipText;
                    return;
                }
                // 削除処理
                if (keyCode == KeyCode.Delete)
                {
                    // 直前の文字が.の場合2文字消す
                    if (this.ipText.EndsWith(".") && this.ipText.Length > 1)
                    {
                        this.ipText = this.ipText.Remove(this.ipText.Length - 2);
                    }
                    // 通常は1文字
                    else if (this.ipText.Length > 0)
                    {
                        this.ipText = this.ipText.Remove(this.ipText.Length - 1);
                    }
                }
                else if (keyCode == KeyCode.Period)
                {
                    var blocks = this.ipText.Split('.');
                    if (blocks.Length == 4)
                    {
                        // IP 入力完了
                        this.InputCompleted();
                    }
                    else
                    {
                        this.ipText += '.';
                    }
                }
                // 文字入力
                else
                {
                    this.ipText += (char)keyCode;

                    var blocks       = this.ipText.Split('.');
                    var editingBlock = blocks.LastOrDefault() ?? string.Empty;
                    // . を自動保管
                    if (editingBlock.Length == 3)
                    {
                        if (blocks.Length != 4)
                        {
                            this.ipText += ".";
                        }
                        else
                        {
                            this.InputCompleted();
                        }
                    }
                }

                IpText.text = PROMPT + this.ipText;
            }
        }
예제 #3
0
        /// <summary>
        /// ジェスチャーに対応するKeyCodeを取得する
        /// 対応するものがなければKeyCode.None
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        private static KeyCode GetKeyCode(UDRLGestureDetector.GestureEventArgs args)
        {
            KeyCode value;

            return(GesturePatternDic.TryGetValue(args.Pattern, out value) ? value : KeyCode.None);
        }