1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // for uGUI(from 4.6)
- #if !(UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5)
- using System.Linq;
- using UnityEngine;
- using UnityEngine.UI;
- using System.Collections;
- using UnityEngine.EventSystems;
- namespace UniRx.Examples
- {
- public class Sample13_ToDoApp : MonoBehaviour
- {
- // Open Sample13Scene. Set from canvas
- public Text Title;
- public InputField ToDoInput;
- public Button AddButton;
- public Button ClearButton;
- public GameObject TodoList;
- // prefab:)
- public GameObject SampleItemPrefab;
- ReactiveCollection<GameObject> toDos = new ReactiveCollection<GameObject>();
- void Start()
- {
- // merge Button click and push enter key on input field.
- var submit = Observable.Merge(
- AddButton.OnClickAsObservable().Select(_ => ToDoInput.text),
- ToDoInput.OnEndEditAsObservable().Where(_ => Input.GetKeyDown(KeyCode.Return)));
- // add to reactive collection
- submit.Where(x => x != "")
- .Subscribe(x =>
- {
- ToDoInput.text = ""; // clear input field
- var item = Instantiate(SampleItemPrefab) as GameObject;
- (item.GetComponentInChildren(typeof(Text)) as Text).text = x;
- toDos.Add(item);
- });
- // Collection Change Handling
- toDos.ObserveCountChanged().Subscribe(x => Title.text = "TODO App, ItemCount:" + x);
- toDos.ObserveAdd().Subscribe(x =>
- {
- x.Value.transform.SetParent(TodoList.transform, false);
- });
- toDos.ObserveRemove().Subscribe(x =>
- {
- GameObject.Destroy(x.Value);
- });
- // Clear
- ClearButton.OnClickAsObservable()
- .Subscribe(_ =>
- {
- var removeTargets = toDos.Where(x => x.GetComponent<Toggle>().isOn).ToArray();
- foreach (var item in removeTargets)
- {
- toDos.Remove(item);
- }
- });
- }
- }
- }
- #endif
|