/// <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); } }
/// <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); }
/// <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); } }
/// <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); }
/// <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); } }
/// <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); }
/// <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); } }
/// <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); }
/// <summary> /// バインドします。 /// </summary> public override void Bind(QuizModel model) { base.Bind(model); }
public abstract void Bind(QuizModel model);