예제 #1
0
        private void CreatePopup(IOpenCellEventDetailsPopup cellEvent)
        {
            var popup = PopupManager.Request(this.popup);

            popup.Initialize(cellEvent);

            // レベルアップボタンの適用
            var levelUpEvent       = cellEvent as ILevelUpEvent;
            var existsLevelUpEvent = levelUpEvent != null;

            popup.SetActiveLevelUpButton(existsLevelUpEvent);
            if (existsLevelUpEvent)
            {
                popup.LevelUpButton.OnClickAsObservable()
                .Where(_ => levelUpEvent.CanLevelUp())
                .SubscribeWithState2(popup, levelUpEvent, (_, p, _levelUpEvelt) =>
                {
                    _levelUpEvelt.LevelUp();
                    popup.UpdateElement();
                })
                .AddTo(popup);
            }

            // 解体ボタンの適用
            popup.RemoveButton.OnClickAsObservable()
            .SubscribeWithState2(popup, cellEvent, (_, p, _cellEvent) =>
            {
                var cellManager = GameSystem.Instance.CellManager;
                cellManager.EventGenerator.Remove(_cellEvent);
                p.Close();
            })
            .AddTo(popup);

            // MEMO: ポップアップが閉じる条件
            // 閉じるボタンが押されたとき
            // カメラのドラッグ操作が開始したとき
            // 他のポップアップが開いたとき
            Observable.Merge(
                popup.CloseButton.OnClickAsObservable(),
                InputControllers.Input.Current.DragAsObservable().AsUnitObservable(),
                Broker.Global.Receive <PopupEvents.StartOpen>().Where(x => !x.Popup.Equals(popup)).AsUnitObservable()
                )
            .SubscribeWithState(popup, (_, p) =>
            {
                p.Close();
            })
            .AddTo(popup);

            popup.Open();
        }
예제 #2
0
 public void Initialize(IOpenCellEventDetailsPopup cellEvent)
 {
     this.SelectCellEvent = cellEvent;
     this.SelectCellEvent.Attach(this);
     this.UpdateElement();
 }