Example #1
0
        /// <summary>
        /// バインドします。
        /// </summary>
        public override void Bind(QuizModel model)
        {
            for (int index = 0; index < lefts.Count; index++)
            {
                Bind(model, index, true);
            }

            for (int index = 0; index < rights.Count; index++)
            {
                Bind(model, index, false);
            }
        }
Example #2
0
        /// <summary>
        /// オブジェクトをバインドします。
        /// </summary>
        private void Bind(QuizModel model, int index, bool isLeft)
        {
            var designatedObject = isLeft ? lefts[index] : rights[index];
            var button           = designatedObject.Button;

            var sameSideObjects     = isLeft ? lefts : rights;
            var oppositeSideObjects = isLeft ? rights : lefts;

            button.OnClickAsObservable().Subscribe(_ => {
                // 同一サイドが選択済み
                var selectedSameSideObject = sameSideObjects.Find(x => x.Selected.Value);
                if (selectedSameSideObject != null)
                {
                    selectedSameSideObject.Selected.Value = false;
                    designatedObject.Selected.Value       = true;
                    return;
                }

                // 反対サイドが選択済み
                var selectedOppositeSideObject = oppositeSideObjects.Find(x => x.Selected.Value);
                if (selectedOppositeSideObject != null)
                {
                    selectedOppositeSideObject.Selected.Value = false;
                    var selectedIndex = oppositeSideObjects.IndexOf(selectedOppositeSideObject);

                    var leftIndex  = isLeft ? index : selectedIndex;
                    var rightIndex = isLeft ? selectedIndex : index;
                    DrawLine(leftIndex, rightIndex);
                    if (lineMap.Count >= lefts.Where(x => x.isActiveAndEnabled).Count())
                    {
                        var answer = new string(lineMap.Keys.OrderBy(x => x.left).SelectMany(x => (x.right + 1).ToString()).ToArray());
                        model.PushAnswer(answer);
                    }
                    return;
                }

                // 選択状態にする
                designatedObject.Selected.Value = true;
            }).AddTo(button);

            // 選択オブジェクト
            designatedObject.OnSelected.Subscribe(selected => {
                if (selected)
                {
                    designatedObject.Select();
                }
                else
                {
                    designatedObject.Unselect();
                }
            }).AddTo(this);
        }
Example #3
0
        /// <summary>
        /// バインドします。
        /// </summary>
        public override void Bind(QuizModel model)
        {
            for (int i = 0; i < choiceObjects.Length; i++)
            {
                var index  = i;
                var button = choiceObjects[index].Button;
                var answer = choiceObjects[index].Answer;

                // 解答番号を送信
                button.OnClickAsObservable().Subscribe(_ => {
                    model.PushAnswer(answer);
                }).AddTo(button);
            }
        }
Example #4
0
        /// <summary>
        /// バインドします。
        /// </summary>
        public override void Bind(QuizModel model)
        {
            // キーボードのバインド
            var keyboardButtons = keyboardBase.GetComponentsInChildren <Button>().ToList();
            var deleteButton    = keyboardButtons.Find(x => x.name == DeleteButtonObjectName);

            {
                // 入力ボタン
                foreach (var button in keyboardButtons.Where(x => x.name != DeleteButtonObjectName))
                {
                    button.OnClickAsObservable().Subscribe(_ => {
                        var text     = button.GetComponentInChildren <Text>();
                        _input.Value = QuizUtil.Convert($"{Input}{text.text}", WordEnum);
                    }).AddTo(button);
                }

                // 削除ボタン
                deleteButton.OnClickAsObservable().Subscribe(_ => {
                    if (!string.IsNullOrEmpty(Input))
                    {
                        if (Input.Length >= 8)
                        {
                            _input.Value = Input.Substring(0, 7);
                        }
                        else
                        {
                            _input.Value = Input.Substring(0, Input.Length - 1);
                        }
                    }
                }).AddTo(deleteButton);
            }

            // 入力文字列の反映
            _input.Subscribe(input => {
                for (int index = 0; index < TypingTexts.Count && index < input.Length; index++)
                {
                    TypingTexts[index].text = input[index].ToString();
                }
                for (int index = input.Length; index < TypingTexts.Count; index++)
                {
                    TypingTexts[index].text = string.Empty;
                }
            }).AddTo(this);

            // OKボタン
            okButton.OnClickAsObservable().Subscribe(_ => {
                var answer = new string(Input.Take(8).ToArray());
                model.PushAnswer(answer);
            }).AddTo(okButton);
        }
Example #5
0
        /// <summary>
        /// バインドします。
        /// </summary>
        public override void Bind(QuizModel model)
        {
            for (int i = 0; i < panels.Count; i++)
            {
                var index = i;
                var panel = panels[index];

                panel.Button.OnClickAsObservable().Subscribe(_ => {
                    // パネルの文字をタイルに表示
                    tiles[currentIndex].Answer = panel.Answer;
                    currentIndex++;

                    // 全てのタイルに文字が埋まったときに解答送信
                    var activeTiles = tiles.Where(x => x.isActiveAndEnabled);
                    if (currentIndex == activeTiles.Count())
                    {
                        var answer = new string(tiles.SelectMany(x => x.Answer).ToArray());
                        model.PushAnswer(answer);
                    }
                }).AddTo(panel.Button);
            }
        }
Example #6
0
        /// <summary>
        /// バインドします。
        /// </summary>
        public override void Bind(QuizModel model)
        {
            for (int i = 0; i < choiceObjects.Count; i++)
            {
                var index  = i;
                var button = choiceObjects[index].Button;
                var image  = choiceObjects[index].Image;

                button.OnClickAsObservable().Subscribe(_ => {
                    if (tempIndex.HasValue)
                    {
                        // 並べ替え処理
                        var tempText = choiceObjects[index].Answer;
                        choiceObjects[index].Answer           = choiceObjects[tempIndex.Value].Answer;
                        choiceObjects[tempIndex.Value].Answer = tempText;

                        // 選択色の解除
                        var selectedImage   = choiceObjects[tempIndex.Value].Image;
                        selectedImage.color = NormalColor;

                        tempIndex = null;
                    }
                    else
                    {
                        // 選択状態
                        tempIndex   = index;
                        image.color = SelectedColor;
                    }
                }).AddTo(button);
            }

            // OKボタン
            okButton.OnClickAsObservable().Subscribe(_ => {
                var answer = new string(choiceObjects.SelectMany(x => x.Answer).ToArray());
                model.PushAnswer(answer);
            }).AddTo(okButton);
        }
Example #7
0
        /// <summary>
        /// バインドします。
        /// </summary>
        public override void Bind(QuizModel model)
        {
            for (int i = 0; i < choiceObjects.Length; i++)
            {
                var index        = i;
                var choiceObject = choiceObjects[index];
                var button       = choiceObject.Button;

                button.OnClickAsObservable().Subscribe(_ => {
                    choiceObject.Selected.Value = !choiceObject.Selected.Value;
                }).AddTo(button);

                choiceObject.OnSelected.Subscribe(selected => {
                    if (selected)
                    {
                        choiceObject.Select();
                        indexStack.Add(index);

                        // 全ての選択肢を選択したとき解答送信
                        if (indexStack.Count == choiceObjects.Where(x => x.isActiveAndEnabled).Count())
                        {
                            var answer = new string(indexStack.SelectMany(x => (x + 1).ToString()).ToArray());
                            model.PushAnswer(answer);
                        }
                    }
                    else
                    {
                        choiceObject.Unselect();
                        if (indexStack.Count > 0)
                        {
                            indexStack.Remove(index);
                        }
                    }
                }).AddTo(this);
            }
        }
Example #8
0
        /// <summary>
        /// バインドします。
        /// </summary>
        public override void Bind(QuizModel model)
        {
            foreach (var groupObject in groupObjects)
            {
                // 「←」ボタン
                groupObject.LeftButton.OnClickAsObservable().Subscribe(_ => {
                    var groupCount = groupParents.Where(x => x.activeSelf).Count();
                    groupObject.MoveLeft(groupCount);

                    var index = groupObject.GetIndex(groupCount);
                    if (index.HasValue)
                    {
                        groupObject.transform.position = new Vector3(groupParents[index.Value].transform.position.x, groupObject.transform.position.y);
                    }
                }).AddTo(groupObject.LeftButton);

                // 「→」ボタン
                groupObject.RightButton.OnClickAsObservable().Subscribe(_ => {
                    var groupCount = groupParents.Where(x => x.activeSelf).Count();
                    groupObject.MoveRight(groupCount);

                    var index = groupObject.GetIndex(groupCount);
                    if (index.HasValue)
                    {
                        groupObject.transform.position = new Vector3(groupParents[index.Value].transform.position.x, groupObject.transform.position.y);
                    }
                }).AddTo(groupObject.RightButton);
            }

            // OKボタン
            okButton.OnClickAsObservable().Subscribe(_ => {
                var groupCount = groupParents.Where(x => x.activeSelf).Count();
                var answer     = new string(groupObjects.FindAll(x => x.isActiveAndEnabled).SelectMany(x => x.GetAnswer(groupCount)).ToArray());
                model.PushAnswer(answer);
            }).AddTo(okButton);
        }
Example #9
0
 /// <summary>
 /// バインドします。
 /// </summary>
 public override void Bind(QuizModel model)
 {
     base.Bind(model);
 }
Example #10
0
 public abstract void Bind(QuizModel model);