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(); }
public void Initialize(IOpenCellEventDetailsPopup cellEvent) { this.SelectCellEvent = cellEvent; this.SelectCellEvent.Attach(this); this.UpdateElement(); }