// Start is called before the first frame update void Start() { var player = FindObjectOfType <Player>(); int sumlove = 0, maxlove = 0; player .ObserveEveryValueChanged(p => p.love) .Pairwise() .Select(item => item.Current - item.Previous) .Where(delta => delta > 0) .Subscribe(delta => { sumlove += delta; maxlove = Mathf.Max(maxlove, delta); }); onEnding .Subscribe(_ => { resultWindow.ActiveWindow(); var items = new Queue <(string, int)>(); items.Enqueue(("累計の愛情", sumlove)); items.Enqueue(($"一回で与えた愛情 {maxlove}", maxlove * 10)); var level = player.level; if (level >= 5) { items.Enqueue(($"エンディング Aルート", level * level * 10000)); } else { items.Enqueue(($"エンディング Bルート", level * level * 100)); } int count = items.Count; int score = items.Sum(item => item.Item2); Observable .Interval(TimeSpan.FromSeconds(timespan)) .Take(count) .Subscribe(__ => { var item = items.Dequeue(); var obj = Instantiate(prefab); obj.Init(item.Item1, item.Item2, timespan); obj.transform.SetParent(scoreContainer, false); }) .AddTo(this); Observable .Timer(TimeSpan.FromSeconds(timespan * count)) .Take(1) .Subscribe(__ => { total.Init(null, score, timespan * count); }) .AddTo(this); }) .AddTo(this); }