void OnDespawned() { this.Dispose(); RxSubjects.Seating.OnNext(false); YouWin.SetActive(false); YouWin.GetComponent <CanvasGroup>().alpha = 1; WinParticle.Stop(true); CardDesc.gameObject.SetActive(false); selfCards.Despawn(); OP.Despawn(); }
private void addEvents() { player.HeadValue.Subscribe((value) => { if (value > 0) { hunterParent.SetActive(true); hunterAward.text = _.Num2CnDigit(value); } }).AddTo(this); RxSubjects.ShowCard.Subscribe((e) => { var uid = e.Data.String("uid"); if (uid != player.Uid) { return; } var cards = e.Data.IL("cards"); player.SeeCardAnim = true; myDelegate.ShowCard(cards); }).AddTo(this); RxSubjects.ShowAudio.Where(isSelfJson).Subscribe((jsonStr) => { Volume.SetActive(true); ScoreLabel.gameObject.SetActive(false); }).AddTo(this); RxSubjects.HideAudio.Where(isSelfJson).Subscribe((_) => { Volume.SetActive(false); ScoreLabel.gameObject.SetActive(true); }).AddTo(this); RxSubjects.SendChat.Where(isSelfJson).Subscribe((jsonStr) => { var N = JSON.Parse(jsonStr); var text = N["text"].Value; SpkText.ShowMessage(text); }).AddTo(this); theSeat.SeatPos.Subscribe((pos) => { SpkText.ChangePos(pos); PlayerAct.ChangePos(pos); // @FIXME: 这段逻辑给PlayerSelf、PlayerOppo分别实现更合适? var rect = WinPercent.GetComponent <RectTransform>(); if (Uid == GameData.Shared.Uid) { rect.localPosition = new Vector2(191, -286); } else if (pos == SeatPosition.Left) { rect.localPosition = new Vector2(127, -36); } else { rect.localPosition = new Vector2(-127, -36); } }).AddTo(this); player.PrChips.AsObservable().Subscribe((value) => { if (value == 0) { return; } setPrChips(value); }).AddTo(this); player.Destroyed.AsObservable().Where((v) => v).Subscribe((_) => { myDelegate.Despawn(); }).AddTo(this); player.PlayerStat.Subscribe((state) => { HandGo.SetActive(false); var stateGo = StateLabel.transform.parent.gameObject; stateGo.SetActive(false); switch (state) { case PlayerState.Hanging: HandGo.SetActive(true); break; case PlayerState.Reserve: stateGo.SetActive(true); break; default: break; } }).AddTo(this); player.ActState.Subscribe((e) => { if (e == ActionState.None) { return; } if (e == ActionState.Fold) { SetFolded(); myDelegate.Fold(); } else { myDelegate.MoveOut(); } dealAct(e); actCardsNumber = GameData.Shared.PublicCards.Count; }).AddTo(this); IDisposable reserveCd = null; player.ReservedCD.Subscribe((value) => { if (reserveCd != null) { reserveCd.Dispose(); } if (value > 0) { setReserveCd(value); reserveCd = Observable.Interval(TimeSpan.FromSeconds(1)).Subscribe((_) => { value = Mathf.Max(value - 1, 1); setReserveCd(value); }).AddTo(this); } }).AddTo(this); RxSubjects.GainChip.Where((gainChip) => gainChip.Uid == Uid).Subscribe((gainChip) => { gainChip.Grp.ToParent(transform, () => { if (!gameObject.activeInHierarchy) { return; } if (chipsParticle.isPlaying) { return; } if (player.OverData.Value.Gain() <= 0) { return; } playParticle(chipsParticle); }); }).AddTo(this); player.Bankroll.Subscribe((value) => { setScoreText(value); }).AddTo(this); RxSubjects.MoveTurn.Subscribe((e) => { var uid = e.Data.String("uid"); var dc = e.Data.Int("deal_card"); if (uid == Uid) { myDelegate.TurnTo(e.Data, GameData.Shared.ThinkTime); setAct(false, false); } else { myDelegate.MoveOut(); // 刚发了牌 if (dc == 1 || GameData.Shared.PublicCards.Count != actCardsNumber) { setAct(false); } } if (Uid == GameData.Shared.Uid) { player.SetTrust(e.Data.Dict("trust")); } }).AddTo(this); // 思考延时 RxSubjects.Moretime.Subscribe((e) => { var model = e.Data.ToObject <MoreTimeModel>(); if (model.uid != Uid) { return; } if (!model.IsRound()) { return; } myDelegate.ResetTime(model.total); }).AddTo(this); RxSubjects.GameOver.Subscribe((e) => { player.InGame = false; myDelegate.MoveOut(); stopParticle(allinParticle); player.PrChips.Value = 0; player.WinPercent.OnNext(-1); // 隐藏胜率 OP.Despawn(); }).AddTo(this); player.Cards.AsObservable().Subscribe((cards) => { if (cards.Count < 2) { return; } myDelegate.ShowCard(cards); }).AddTo(this); IDisposable winEndDisposable = null; player.OverData.AsObservable().Where((data) => data != null).Subscribe((data) => { var gain = data.Gain(); if (gain > 0) { playParticle(winParticle); } if (data.prize > 0) // 回收大于0 { var cvg = WinCq.GetComponent <CanvasGroup>(); cvg.alpha = 0; cvg.DOFade(1, 0.3f).SetId(AnimID); var rect = WinCq.GetComponent <RectTransform>(); rect.anchoredPosition = new Vector2(0, -300); rect.DOAnchorPos(new Vector2(0, -224), 0.3f).SetId(AnimID); var image = WinCq.GetComponent <Image>(); if (gain >= 0) { image.enabled = true; WinNumber.fontSize = 36; WinNumber.color = _.HexColor("#FAD028FF"); } else { image.enabled = false; WinNumber.fontSize = 42; WinNumber.color = MaterialColor.greenA200; } WinCq.SetActive(true); WinNumber.text = _.Number2Text(gain); ScoreParent.SetActive(false); } // 重新计算用户的bankroll player.Bankroll.Value = player.Bankroll.Value + data.prize; if (player.Uid == GameData.Shared.Uid) { GameData.Shared.Bankroll.Value = player.Bankroll.Value; } myDelegate.HandOver(data); if (winEndDisposable != null) { winEndDisposable.Dispose(); } if (data.bury_card) { player.ActState.OnNext(ActionState.BuryCard); } else { PlayerAct.SetActive(false); } // 4s后隐藏动画 winEndDisposable = Observable.Timer(TimeSpan.FromSeconds(4)).Subscribe((_) => { hideWinAnim(); PlayerAct.SetActive(false); }).AddTo(this); }).AddTo(this); RxSubjects.MatchRank.Subscribe((_) => { if (winEndDisposable != null) { winEndDisposable.Dispose(); } hideWinAnim(); }).AddTo(this); player.Rank.Where((rank) => rank > 0 && player.readyState == 0).Subscribe((rank) => { RankText.transform.parent.gameObject.SetActive(true); RankText.text = string.Format("第<size=42>{0}</size>名", rank); }).AddTo(this); player.WinPercent.Subscribe((num) => { if (num == -1) { WinPercent.SetActive(false); } else { WinPercent.SetActive(true); WinPercent.GetComponentInChildren <Text>().text = num + "%"; var img = WinPercent.GetComponent <ProceduralImage>(); if (num == Player.MaxWinPercent) { img.color = _.HexColor("#ff1744"); } else { img.color = _.HexColor("#868d94"); } } }).AddTo(this); }
private void addEvents() { GameData.Shared.MaxFiveRank.Subscribe((value) => { var parent = CardDesc.gameObject; if (value == 0) { parent.SetActive(false); return; } parent.SetActive(true); CardDesc.text = Card.GetCardDesc(value); }).AddTo(this); player.Trust.ShouldShow.Subscribe((show) => { AutoArea.SetActive(show); }).AddTo(this); GameData.Shared.HighlightIndex.Subscribe((list) => { Card.HighlightCards(selfCards.Cards, list); }).AddTo(this); player.Trust.CallNumber.Subscribe((num) => { var text = AutoOperas[1].transform.Find("Text").GetComponent <Text>(); if (num == 0) { text.text = "自动让牌"; } else if (num == -1) { text.text = "全下"; } else if (num > 0) { text.text = String.Format("跟注\n<size=40>{0}</size>", _.Num2CnDigit <int>(num)); } var flag = player.Trust.FlagString(); if (flag == "01") { player.Trust.SelectedFlag.Value = "00"; } }).AddTo(this); player.Trust.SelectedFlag.Where((flags) => { return(flags != null); }).Subscribe((flags) => { var img0 = AutoOperas[0].GetComponent <ProceduralImage>(); var img1 = AutoOperas[1].GetComponent <ProceduralImage>(); if (flags[0] == '0') { img0.enabled = false; } else { img0.enabled = true; } if (flags[1] == '0') { img1.enabled = false; } else { img1.enabled = true; } }).AddTo(this); RxSubjects.Deal.Subscribe((_) => { player.Trust.Hide(); }).AddTo(this); RxSubjects.GameOver.Subscribe((_) => { AutoArea.SetActive(false); }).AddTo(this); // 中途复原行动 player.Countdown.AsObservable().Subscribe((obj) => { if (obj.seconds > 0) { turnTo(obj.data, obj.seconds, true, obj.BuyTimeCost); } else { OP.Despawn(); } }).AddTo(this); player.PlayerStat.Subscribe((state) => { switch (state) { case PlayerState.Hanging: BackGameBtn.SetActive(true); OP.Despawn(); Base.Circle.gameObject.SetActive(true); break; case PlayerState.Reserve: BackGameBtn.SetActive(true); break; default: BackGameBtn.SetActive(false); break; } }).AddTo(this); }
public void MoveOut() { OP.Despawn(); Base.Circle.gameObject.SetActive(true); // 显示头像 }
private void turnTo(Dictionary <string, object> dict, int left, bool restore = false, int buyTimeCost = 10) { PlayerBase.CurrentUid = player.Uid; showOP(dict, left, buyTimeCost); var flag = player.Trust.FlagString(); var callNum = player.Trust.CallNumber.Value; if (flag == "10") { // 选中左边 OP.Despawn(); var check = dict.Dict("cmds").Bool("check"); if (check) { OP.OPS.Check(); } else { OP.OPS.Fold(); } } else if (flag == "01") { // 选中右边 var data = dict.Dict("cmds"); var call = data.Int("call"); var check = data.Bool("check"); if (callNum == -1 || (callNum == 0 && check) || (callNum == call && call != 0)) { OP.Despawn(); if (callNum == 0) { OP.OPS.Check(); } else if (callNum == -1) { OP.OPS.AllIn(); } else { OP.OPS.Call(); } } else { if (!restore) { G.PlaySound("on_turn"); } } } else { if (!restore) { G.PlaySound("on_turn"); } } player.Trust.SelectedFlag.Value = "00"; }