void SetShopByType(TabType type, int id, GameObject go) { var single = staticData.GetByID <GDShopItem>(id); go.CLSetFormattedText("Name", single.name); go.CLSetFormattedText("Desc/Text", single.desc); switch (type) { case TabType.Gold: case TabType.Dia: { go.CLGetComponent <Text>("Button/Text").text = string.Format("구매\n{0}", single.price); go.CLOnClickAsObservable("Button").Subscribe(_ => { }); } break; case TabType.Free: case TabType.Package: { //Check cooltime! DBShopItemCoolTime serverCoolTime = null; CLStateUpdator <CoolState> state = new CLStateUpdator <CoolState>(); go.CLOnClickAsObservable("Button").Subscribe(_ => { //Buy code.. switch (type) { case TabType.Package: Debug.Log("Buy Package"); break; case TabType.Free: Debug.Log("Buy Free"); break; } }); state.Init(() => { serverCoolTime = runtimeData.GetList <DBShopItemCoolTime>() .Where(x => x.shopItemID == id) .FirstOrDefault(); if (serverCoolTime != null) { if (serverCoolTime.endTime > easy.ServerTime) { //Its cooltime!.. var remain = serverCoolTime.endTime - easy.ServerTime; if (remain > System.TimeSpan.FromDays(365)) { return(CoolState.CannotBuy); } return(CoolState.CoolTime); } } return(CoolState.CanBuy); }, (before, after) => { switch (after) { case CoolState.CanBuy: go.CLGetComponent <Button>("Button").interactable = true; if (type == TabType.Package) { go.CLGetComponent <Text>("Button/Text").text = string.Format("구매\n{0}", single.price); } else { go.CLGetComponent <Text>("Button/Text").text = single.price; } break; case CoolState.CoolTime: go.CLGetComponent <Button>("Button").interactable = false; break; case CoolState.CannotBuy: go.CLGetComponent <Button>("Button").interactable = false; go.CLGetComponent <Text>("Button/Text").text = "구매함"; break; } }, (cur) => { switch (cur) { case CoolState.CoolTime: var timeSpan = serverCoolTime.endTime - easy.ServerTime; go.CLGetComponent <Text>("Button/Text").text = string.Format("쿨타임\n{0}", timeSpan); break; } }); go.CLUpdateAsObservable().Subscribe(x => { state.Update(); }); } break; } }
void Update() { state.Update(); }
void BindLogic() { //Quit var quitStream = view.CLOnPointerClickAsObservable("Back").Select(x => Unit.Default); quitStream.Merge(view.CLOnClickAsObservable("Window/Button_Exit")).Subscribe(x => { popupManager.DestroyPopup(this); }); orderScrollView.Init(view.CLGetGameObject("Window/OrderWindow/Content"), (idx, go) => { go.name = idx.ToString(); var process = go.AddComponent <OrderProcess>(); container.Inject(process); process.Init(orderList[idx]); go.CLOnClickAsObservable().Subscribe(x => { if (selectedIdx.Value == idx) { selectedIdx.Value = -1; } else { selectedIdx.Value = idx; } }); }, () => { return(orderList.Count); }); requestItemScrollView.Init(view.CLGetGameObject("Window/InfoWindow/State/Selected/RequireContent"), (idx, go) => { int curCnt = easy.GetItemCnt(orderReqItemList[idx].itemID); int needCnt = orderReqItemList[idx].itemCnt; string color = "green"; if (curCnt < needCnt) { color = "red"; } go.CLSetFormattedText("Value", curCnt, needCnt, color, "white"); go.CLGetComponent <Image>("Image").sprite = sprite.GetItem(orderReqItemList[idx].GetItem(staticData).imageName); }, () => { return(orderReqItemList.Count); }); rewardItemScrollView.Init(view.CLGetGameObject("Window/InfoWindow/State/Selected/RewardContent"), (idx, go) => { go.CLSetFormattedText("Value", orderRewardItemList[idx].Item2); go.CLGetComponent <Image>("Image").sprite = sprite.GetItem(orderRewardItemList[idx].Item1.imageName); }, () => { return(orderRewardItemList.Count); }); state = new CLStateUpdator <State>(); state.Init(() => { if (selectedIdx.Value == -1) { return(State.Nothing); } if (orderList[selectedIdx.Value].waitStartedTime + easy.GlobalInfo.orderRegenTime < easy.ServerTime) { return(State.Selected); } return(State.Selected_ButWaiting); }, (before, after) => { if (before != State.Invalid) { view.CLGetGameObject("Window/InfoWindow/State/" + before.ToString()).SetActive(false); } view.CLGetGameObject("Window/InfoWindow/State/" + after.ToString()).SetActive(true); // switch (after) { case State.Selected: SetDataReqReward(selectedIdx.Value); orderConfirmBtn.interactable = true; orderCancelBtn.interactable = true; break; case State.Selected_ButWaiting: break; default: orderConfirmBtn.interactable = false; orderCancelBtn.interactable = false; break; } }, (current) => { switch (current) { case State.Selected: case State.Selected_ButWaiting: break; case State.Nothing: break; } }); Observable.EveryGameObjectUpdate().Subscribe(x => { state.Update(); }).AddTo(go); int beforeSelected = -1; selectedIdx.Subscribe(x => { if (beforeSelected != -1) { view.CLGetGameObject($"Window/OrderWindow/Content/{beforeSelected}/Selected").SetActive(false); } if (x != -1) { view.CLGetGameObject($"Window/OrderWindow/Content/{x}/Selected").SetActive(true); SetDataReqReward(x); } beforeSelected = x; }); orderConfirmBtn.onClick.AsObservable().Subscribe(unit => { if (selectedIdx.Value == -1) { throw new System.NotImplementedException("Need popup"); } if (orderList[selectedIdx.Value].waitStartedTime + easy.GlobalInfo.orderRegenTime > easy.ServerTime) { throw new System.NotImplementedException("Need popup"); } //Check can dispose item.. var listOfReqItem = runtimeData.GetList <DBOrderItem>() .Where(x => x.orderUID == orderList[selectedIdx.Value].uid) .Select(x => Tuple.Create <int, int>(x.itemID, x.itemCnt)) .ToArray(); if (easy.CanDisposeItems(listOfReqItem) == false) { throw new System.NotImplementedException("Need popup"); } server.Get("enc/sess/order/accept", JObject.FromObject(new{ uid = orderList[selectedIdx.Value].uid }) ).Subscribe(x => { selectedIdx.Value = -1; }); }); orderCancelBtn.onClick.AsObservable().Subscribe(unit => { if (selectedIdx.Value == -1) { throw new System.NotImplementedException("Need popup"); } if (orderList[selectedIdx.Value].waitStartedTime + easy.GlobalInfo.orderRegenTime > easy.ServerTime) { throw new System.NotImplementedException("Need popup"); } server.Get("enc/sess/order/dispose", JObject.FromObject(new{ uid = orderList[selectedIdx.Value].uid }) ).Subscribe(x => { selectedIdx.Value = -1; }); }); OnRefresh(); }