Beispiel #1
0
    // Use this for initialization
    void Start()
    {
        player = this.GetComponent <MJPlayer> ();

        //EventDispatcher.AddEventListener (MessageCommand.MJ_DragCard, OnDragCard);
        //EventDispatcher.AddEventListener (MessageCommand.MJ_DropCard, OnDropCard);
    }
Beispiel #2
0
    void PlayZimoHu(MJPlayer player, GameOperPlayerHuSyn data)
    {
        Game.MaterialManager.TurnOnHandCard();
        player.handCardLayout.PlayHu();

        Game.SoundManager.PlayWin();
        Vector3 pos = player.DragCard(data.card, true);

        if (!PlayHuEffect(data.position))
        {
            Game.SoundManager.PlayEffect(27);
            Game.SoundManager.PlayZimo(data.position);

            GameObject eff = Game.PoolManager.EffectPool.Spawn("zimou _EF");
            eff.transform.position = pos;
            Game.PoolManager.EffectPool.Despawn(eff, 5);
        }

        if (!data.skipHuSettle)
        {
            Game.Delay(3, () =>
            {
                Game.SoundManager.PlaySettleSound();
                Game.DialogMgr.PushDialog(UIDialog.SettleRoundDialog);
            });
        }
    }
Beispiel #3
0
    void PlayHu(MJPlayer player, GameOperPlayerHuSyn data)
    {
        Vector3 pos = player.handCardLayout.DragCard(data.card, Game.MJMgr.LastDropCard.gameObject);

        Game.MaterialManager.TurnOnHandCard();
        player.handCardLayout.PlayHu();
        Game.SoundManager.PlayHu(data.position);

        if (!PlayHuEffect(data.position))
        {
            EventDispatcher.DispatchEvent(MessageCommand.PlayEffect, data.position, "huUI_EF");
            GameObject eff = Game.PoolManager.EffectPool.Spawn("hu_EF");
            eff.transform.position = pos;
            Game.PoolManager.EffectPool.Despawn(eff, 3);
        }

        if (!data.skipHuSettle)
        {
            Game.Delay(3, () =>
            {
                Game.SoundManager.PlaySettleSound();
                Game.DialogMgr.PushDialog(UIDialog.SettleRoundDialog);
            });
        }
    }
Beispiel #4
0
    public MJPlayer GetPlayerByPosition(int position)
    {
        int      index  = Game.MJMgr.GetIndexByPosition(position);
        MJPlayer player = Game.MJMgr.players[index];

        return(player);
    }
Beispiel #5
0
    /// <summary>
    /// 发牌
    /// </summary>
    /// <param name="viewSeat"></param>
    /// <param name="paiValue"></param>
    /// <returns></returns>
    public IEnumerator SendCard(int viewSeat, int paiValue, bool sendHead = true)
    {
        yield return(null);

        MJItem item;

        if (sendHead)
        {
            if (index == -1)
            {
                index = 135;
            }
            item = _mjItemMgr.MJItemList[index--];
        }
        else
        {
            if (lastIndex == 136)
            {
                lastIndex = 0;
            }
            item = _mjItemMgr.MJItemList[lastIndex];
            if (lastIndex % 2 == 0)
            {
                lastIndex += 2;
            }
            else
            {
                lastIndex--;
            }
        }
        MJPlayer player = _mjPlayerList[viewSeat];

        StartCoroutine(player.SentCard(paiValue, item));
    }
Beispiel #6
0
    /// <summary>
    /// 出牌
    /// </summary>
    /// <param name="viewSeat"></param>
    /// <param name="paiValue"></param>
    /// <returns></returns>
    public IEnumerator OutCard(int viewSeat, int paiValue)
    {
        yield return(null);

        MJPlayer player = _mjPlayerList[viewSeat];

        StartCoroutine(player.OutCard(paiValue));
    }
Beispiel #7
0
    //void OnDragCard(params object[] args){
    //	if (player.IsActive) {
    //		Game.Delay (1f, () => {
    //			Game.MJMgr.dropIndex = player.HandCards.Count -1;
    //			player.DropCard ();
    //		});
    //	}
    //}

    void OnDropCard(params object[] args)
    {
        MJPlayer dropCardPlayer = (MJPlayer)args [0];

        if (dropCardPlayer != player)
        {
            EventDispatcher.DispatchEvent(MessageCommand.MJ_Pass);
        }
    }
Beispiel #8
0
    public void Bao(int dice, int oldBao)
    {
        IsBusy = true;
        MJPlayer player = Game.MJMgr.GetPlayerByPosition(position);
        //Time.timeScale = 0.1f;
        bool hasOldBao = (oldBao != -1);

        if (hasOldBao)
        {
            HideBaoEffect();
            Game.SoundManager.PlayHuanBao(player.postion);
            int card = oldBao;
            //Game.SoundManager.PlayCardSound(card);
            if (player.baoRoot.childCount > 0)
            {
                Transform old = player.baoRoot.GetChild(0);
                Game.PoolManager.CardPool.Despawn(old.gameObject);
            }

            Transform dropCLTrans = player.dropCardLayout.transform;
            int       childCount  = dropCLTrans.childCount;

            anim.gameObject.SetActive(true);

            Vector3 toPos  = player.dropCardLayout.GetLocalPos(childCount);
            Vector3 endPos = dropCLTrans.TransformPoint(toPos);

            hand.transform.position = endPos;

            GameObject child = Game.PoolManager.CardPool.Spawn(card.ToString());
            //Game.MJMgr.LastDropCard = child.GetComponent<MJEntity>();
            //Game.MJMgr.LastDropCard.Card = card;
            Transform cardTrans = child.transform;
            cardTrans.SetParent(handMJRoot);
            cardTrans.localPosition = Vector3.zero;
            cardTrans.localRotation = Quaternion.identity;
            cardTrans.localScale    = Vector3.one;

            anim.Play("Drop");
            handAnima.OnDropCallback = () =>
            {
                Game.SoundManager.PlayDropCard();
                player.dropCardLayout.AddCard(card, child);
                MJCardGroup.TryDragCard();
                //MJCardGroup.DragBaoCard(dice);
                Game.Delay(0.5f, () => { PutBao(); });
            };
        }
        else
        {
            MJCardGroup.TryDragCard();
            //MJCardGroup.DragBaoCard();
            PutBao();
        }
    }
Beispiel #9
0
    /// <summary>
    /// 根据本地座位index == 0 判断是否为手牌
    /// </summary>
    /// <returns></returns>
    bool IsMine()
    {
        MJPlayer player = this.GetComponentInParent <MJPlayer>();

        //lvlinsong index为本地chairid序号 0为自身的座位
        if (null != player && player.index == 0)
        {
            return(true);
        }
        return(false);
    }
Beispiel #10
0
    public void OnGameOperPlayerActionNotify(GameOperPlayerActionNotify data)
    {
        RoomMgr.actionNotify = data;

        int position           = data.position;
        int actions            = data.actions;
        int lastActionPosition = data.lastActionPosition;
        int lastActionCard     = data.lastActionCard;

        string pengArg = "";

        if (MJUtils.Peng())
        {
            pengArg = GetCardStr(data.pengArg);
        }

        string chi = "";

        if (MJUtils.Chi())
        {
            int count = data.chiArg.Count;
            for (int i = 0; i < count; i++)
            {
                GameOperChiArg arg = data.chiArg[i];
                chi += "[" + GetCardStr(arg.myCard1) + "," + GetCardStr(arg.myCard2) + "]-" + GetCardStr(arg.targetCard) + " ";
            }
        }

        Debug.LogFormat("===<color=blue>提示</color>,最后操作[{0}]; 牌[{1}]", strs[lastActionPosition], GetCardStr(lastActionCard));
        Debug.LogFormat("===<color=blue>提示</color>,{0} <color=yellow>{1}</color>,[{2}] 支对:[{3}],听列表:[{4}]", strs[data.position], ActionStr(data.actions), pengArg + chi, ToStr(data.tingDzs), ToStr(data.tingList));

        if (lastActionPosition >= 0 && lastActionCard > 0)
        {
            MJPlayer   p  = Game.MJMgr.GetPlayerByPosition(lastActionPosition);
            GameObject go = p.dropCardLayout.last;
            if (null != go)
            {
                MJEntity et = go.GetComponent <MJEntity>();
                if (null != et)
                {
                    Game.MJMgr.LastDropCard = et;
                    Game.MJMgr.targetFlag.gameObject.SetActive(true);
                    Game.MJMgr.targetFlag.position = go.transform.position;
                }
            }
        }
        else
        {
            Game.MJMgr.targetFlag.gameObject.SetActive(false);
        }

        EventDispatcher.DispatchEvent(MessageCommand.MJ_UpdatePlayPage);
    }
Beispiel #11
0
    IEnumerator doLicensing(List <GameOperHandCardSyn> handCards)
    {
        float waitTime = 0.3f;

        foreach (GameOperHandCardSyn hc in handCards)
        {
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);
            player.handCardLayout.PlayDefault();
        }

        yield return(new WaitForEndOfFrame());

        foreach (GameOperHandCardSyn hc in handCards)
        {
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);

            for (int i = 0; i < 6; i++)
            {
                int sCard = hc.handCards[i];
                player.handCardLayout.AddCard(sCard, true);
                MJCardGroup.TryDragCard();
            }

            Game.SoundManager.PlayGet4Card();
        }

        yield return(new WaitForSeconds(waitTime));

        foreach (GameOperHandCardSyn hc in handCards)
        {
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);

            for (int i = 6; i < 12; i++)
            {
                int sCard = hc.handCards[i];
                player.handCardLayout.AddCard(sCard, true);
                MJCardGroup.TryDragCard();
            }

            Game.SoundManager.PlayGet4Card();
        }

        yield return(new WaitForSeconds(waitTime));

        foreach (GameOperHandCardSyn hc in handCards)
        {
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);
            int      sCard  = hc.handCards[12];
            player.handCardLayout.AddCard(sCard, true);

            MJCardGroup.TryDragCard();
        }
    }
Beispiel #12
0
    /// <summary>
    /// 操作牌
    /// </summary>
    /// <param name="viewSeat"></param>
    /// <param name="oper"></param>
    /// <returns></returns>
    public IEnumerator OperateCard(int viewSeat, MJOperatorModel oper, int outCardViewSeat)
    {
        yield return(null);

        MJPlayer player = _mjPlayerList[viewSeat];
        MJItem   item   = null;

        if (outCardViewSeat != -1)
        {
            item = _mjPlayerList[viewSeat].GetLastOutCard();
        }
        StartCoroutine(player.OperateCard(oper, item));
    }
Beispiel #13
0
    void Init()
    {
        //资源加载管理
        _mjResMgr = new MJResMgr();
        //加载麻将桌
        GameObject tablePrefab = _mjResMgr.CreateMJTable();
        GameObject _mjTableObj = GameObject.Instantiate(tablePrefab, this.transform) as GameObject;

        //_mjTableObj.name = tablePrefab.name;
        _mjTable = _mjTableObj.GetComponent <MJTable>();
        //加载麻将mesh
        _mjResMgr.LoadMJMesh();
        //加载骰子
        GameObject dicePrefab = _mjResMgr.CreateDice();
        GameObject _dice      = Instantiate(dicePrefab, _mjTable.transform) as GameObject;

        if (_dice != null)
        {
            _dice.transform.localPosition = new Vector3(0, 0.7f, 0);
            _mjDice = _dice.GetComponent <MJDice>();
        }
        //加载摄像机管理
        _mjCamera = new MJCameraMgr();
        _mjCamera.Init();
        //加载玩家控制类
        _mjPlayerList = new List <MJPlayer>();
        GameObject playersPoint = new GameObject("Players");
        GameObject playerPrefab = _mjResMgr.CreatePlayers();

        for (int i = 0; i < 4; ++i)
        {
            GameObject _player = Instantiate(playerPrefab, playersPoint.transform) as GameObject;
            _player.name = playerPrefab.name + i;
            _player.transform.localEulerAngles = new Vector3(0, -90 * i, 0);
            if (_player != null)
            {
                MJPlayer mjPlayer = _player.GetComponent <MJPlayer>();
                if (mjPlayer != null)
                {
                    mjPlayer.viewSeat = i;
                    _mjPlayerList.Add(mjPlayer);
                }
            }
        }
        //加载麻将子管理类
        _mjItemMgr = new MJItemMgr();
        _mjItemMgr.InitMJItem();

        //测试
        InitTestMahjong();
    }
Beispiel #14
0
    void OnGameOperBaoChangeSyn(GameOperBaoChangeSyn data)
    {
        HandAnima.IsBusy = true;
        int dice     = data.dice;
        int oldBao   = data.oldBao;
        int position = data.position;

        Debug.LogFormat("===换宝:{0} oldBao:{1} dice:[{2}]", strs[data.position], GetCardStr(oldBao), dice);
        //Debug.LogFormat("===OnGameOperBaoChangeSyn:" + Utils.ToStr(data));


        MJPlayer player = Game.MJMgr.GetPlayerByPosition(position);

        player.MJHand.Bao(dice, oldBao);
    }
Beispiel #15
0
    void SetupSub(RoundAccountSub sub, GameOperPlayerSettle settle, int huCard = -1)
    {
        MJPlayer mjPlayer = Game.MJMgr.GetPlayerByPosition(settle.position);
        MjData   data     = Game.MJMgr.MjData[settle.position];

        sub.detail.Name_Text.text = data.player.nickName;
        sub.detail.ID_Text.text   = "ID:" + data.player.playerId;
        if (settle.fanNum > 0)
        {
            sub.detail.Fan_TextMeshProUGUI.text = string.Format("+{0}分", settle.fanNum);
        }
        else
        {
            sub.detail.Fan_TextMeshProUGUI.text = string.Format("{0}分", settle.fanNum);
        }
        Game.MJMgr.MjData[settle.position].player.coin  = settle.coin;
        Game.MJMgr.MjData[settle.position].player.score = settle.score;

        //sub.detail.ResultType_Text.text = settle.resultType.ToString();

        string fans = "";

        foreach (string fan in settle.fanDetail)
        {
            //if (fan.Contains("庄家")) continue;
            fans += fan.Trim() + " ";
        }
        sub.detail.TingInfo_Text.text = fans;

        bool IsMakers = Game.MJMgr.MakersPosition == settle.position;

        sub.detail.ZhuangFlag_Image.gameObject.SetActive(IsMakers);

        foreach (int card in mjPlayer.tableCardLayout.TableCards)
        {
            SpawnCard(sub.detail.TableCards_GridLayoutGroup.transform, card);
        }

        foreach (int card in settle.handcard)
        {
            SpawnCard(sub.detail.Handcards_GridLayoutGroup.transform, card);
        }

        if (huCard > 0)
        {
            SpawnCard(sub.detail.Handcards_GridLayoutGroup.transform, huCard);
        }
    }
Beispiel #16
0
    // Use this for initialization
    //void Start () {
    //	player = this.GetComponent<MJPlayer> ();

    //	EventDispatcher.AddEventListener (MessageCommand.MJ_DragCard, OnDragCard);
    //	EventDispatcher.AddEventListener (MessageCommand.MJ_DropCard, OnDropCard);
    //}

    //void OnDestroy(){
    //	EventDispatcher.RemoveEventListener (MessageCommand.MJ_DragCard, OnDragCard);
    //	EventDispatcher.RemoveEventListener (MessageCommand.MJ_DropCard, OnDropCard);
    //}

    //void OnDragCard(params object[] args){
    //	MJPlayer dragCardPlayer = (MJPlayer)args [0];
    //	int card = (int)args [1];

    //	if (dragCardPlayer == player) {
    //           // 可能同时存在多个可以杠的,跟吃一样
    //           bool gang = false;// player.CanAnGang (card) || player.CanAddGang (card);
    //		bool hu = player.CanHu (card);

    //		if (gang || hu) {
    //			EventDispatcher.DispatchEvent (MessageCommand.MJ_UpdateCtrlPanel,false,false,gang,hu);
    //		}
    //	}
    //}

    void OnDropCard(params object[] args)
    {
        MJPlayer dropCardPlayer = (MJPlayer)args [0];

        //if (dropCardPlayer != player) {
        //	// 判断其他玩家 吃 碰 杠 胡
        //	bool chi = player.CanChi (card);
        //	bool peng = player.CanPeng (card);
        //          bool gang = false;// player.CanGang (card);
        //	bool hu = player.CanHu (card);

        //	if (chi || peng || gang || hu) {
        //		//					player.turnState = PlayerTurnState.NeedCard;
        //		EventDispatcher.DispatchEvent (MessageCommand.MJ_UpdateCtrlPanel,chi,peng,gang,hu);
        //	} else {
        //		EventDispatcher.DispatchEvent (MessageCommand.MJ_Pass);
        //	}
        //}
    }
Beispiel #17
0
    void OnGameOperPlayerHuSyn(GameOperPlayerHuSyn data)
    {
        string huInfo  = GetHuStr(data.resultType);
        string winInfo = GetHuStr(data.winType);

        Debug.LogFormat("===HuSyn:{0}[炮:{1}] card:{2} bao:[{3}] Hu:{4}/Win:{5}", (data.position < 0) ? "流局" : strs[data.position], (data.paoPosition < 0) ? "无" : strs[data.paoPosition], GetCardStr(data.card), GetCardStr(data.bao), huInfo, winInfo);

        RoomMgr.huSyn = data;

        if (RoomMgr.huSyn.resultType == MJUtils.HU_LiuJu)
        {
            Game.SoundManager.PlayFall();
            if (!data.skipHuSettle)
            {
                Game.Delay(3, () =>
                {
                    Game.SoundManager.PlaySettleSound();
                    Game.DialogMgr.PushDialog(UIDialog.SettleRoundDialog);
                });
            }
            return;
        }

        MJPlayer player = Game.MJMgr.GetPlayerByPosition(data.position);
        bool     isMy   = player.index == 0;

        if (data.resultType == MJUtils.HU_ShouPao)//收炮提前判断。只放特效,不用记录数据。
        {
            Game.SoundManager.PlayEffect(28);
            GameObject eff = Game.PoolManager.EffectPool.Spawn("shandian_EF");
            eff.transform.position = Game.MJMgr.LastDropCard.transform.position;
            Game.PoolManager.EffectPool.Despawn(eff, 5);
            player.MJHand.PlayShouPao(data.card, isMy);
            return;
        }

        List <GameOperPlayerSettle> list = data.detail;

        foreach (GameOperPlayerSettle s in list)
        {
            Debug.LogFormat("===OnGameOperPlayerHuSyn:{0} fanNum:{1} handcard:[{2}]", strs[s.position], s.fanNum, ToStr(s.handcard));

            if (s.position == data.position)
            {
                player.handCardLayout.Refresh(s.handcard);
            }
        }

        bool zimo = (data.paoPosition == -1 || data.paoPosition == data.position);

        if (zimo)
        {
            PlayZimoHu(player, data);
        }
        else
        {
            bool isPao = false;
            if (-1 != data.paoPosition)
            {
                Game.SoundManager.PlayEffect(28);
                MJPlayer   paoPlayer = Game.MJMgr.GetPlayerByPosition(data.paoPosition);
                GameObject eff       = Game.PoolManager.EffectPool.Spawn("shandian_EF");
                eff.transform.position = Game.MJMgr.LastDropCard.transform.position;
                Game.PoolManager.EffectPool.Despawn(eff, 5);

                isPao = paoPlayer.index == 0;
            }

            Game.Delay(1, () =>
            {
                bool isWin = player.index == 0;
                if (isWin)
                {
                    Game.SoundManager.PlayWin();
                }
                else if (isPao)
                {
                    Game.SoundManager.PlayLose();
                }

                PlayHu(player, data);
            });
        }
    }
Beispiel #18
0
    void OnGameOperPlayerActionSyn(GameOperPlayerActionSyn data)
    {
        Debug.LogFormat("===<color=green>同步</color>[seq({0})]:{1} <color=yellow>{2}</color> 牌:[{3}]", data.seq, strs[data.position], ActionStr(data.action), ToStr(data.cardValue));

        int      position = data.position;
        MJPlayer player   = Game.MJMgr.GetPlayerByPosition(data.position);
        bool     isMy     = player.index == 0;

        if (MJUtils.DragCard(data.action))
        {
            int card = data.cardValue[0];
            player.DragCard(card, isMy);
        }
        else if (MJUtils.DropCard(data.action))
        {
            HandAnima.IsBusy = true;
            int card = data.cardValue[0];
            //Game.MJMgr.LastDropCardPlayer = player;

            player.MJHand.PlayDropCard(card, isMy);
        }
        else if (MJUtils.Peng(data.action))
        {
            player.MJHand.PlayPeng(data.cardValue[0], isMy);
        }
        //胡牌的动画
        else if (MJUtils.Hu(data.action))
        {
            player.MJHand.PlayHU(data.cardValue[0], isMy);
        }
        else if (MJUtils.Chi(data.action))
        {
            player.MJHand.PlayChi(data.cardValue[0], data.cardValue[1], isMy);
        }
        else if (MJUtils.AnGang(data.action))
        {
            player.MJHand.PlayGang(data.cardValue[0], isMy, 1);
        }
        else if (MJUtils.BuGang(data.action))
        {
            player.MJHand.PlayGang(data.cardValue[0], isMy, 2);
        }
        else if (MJUtils.ZhiGang(data.action))
        {
            player.MJHand.PlayGang(data.cardValue[0], isMy, 3);
        }
        else if (MJUtils.Ting(data.action))
        {
            player.MJHand.PlayTing(isMy);
        }
        else if (MJUtils.TingLiang(data.action))
        {
            player.MJHand.PlayTingLiang(data.cardValue[0], isMy);
        }
        else if (MJUtils.TingPeng(data.action))
        {
            player.MJHand.PlayPeng(data.cardValue[0], isMy);

            Game.Delay(0.5f, () =>
            {
                player.MJHand.PlayTing(isMy);
            });
        }
        else if (MJUtils.TingChi(data.action))
        {
            player.MJHand.PlayChi(data.cardValue[0], data.cardValue[1], isMy);

            Game.Delay(0.5f, () =>
            {
                player.MJHand.PlayTing(isMy);
            });
        }
        else if (MJUtils.TingZhidui(data.action))
        {
            Game.SoundManager.PlayZhidui(position);

            int card = data.cardValue[0];
            Game.MJMgr.MjData[position].player.ting = true;
            EventDispatcher.DispatchEvent(MessageCommand.MJ_UpdatePlayPage);
            player.handCardLayout.PlayZhidui(card, isMy);
        }
        else if (MJUtils.ShuaiJiuYao(data.action))
        {
            player.MJHand.PlayShuaiJiuYao(data.cardValue.ToArray(), isMy);
        }
    }
Beispiel #19
0
    void LicensingOnReconnect(List <GameOperHandCardSyn> handCards)
    {
        foreach (GameOperHandCardSyn hc in handCards)
        {
            Debug.LogFormat("===CardSyn: {0} HandCard[{1}],DropCards[{2}],TableCards[{3}],reconnect:{4},jiuyaocards{5}", strs[hc.position], ToStr(hc.handCards), ToStr(hc.cardsBefore), ToStr(hc.downCards, true), true, ToStr(hc.yaojiuCards));
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);

            player.dropCardLayout.Clear();
            player.tableCardLayout.Clear();
            player.handCardLayout.Clear();
            player.handCardLayout.PlayDefault();
            player.jiuYaoCardLayout.Clear();


            for (int i = 0; i < hc.handCards.Count; i++)
            {
                int sCard = hc.handCards[i];
                player.handCardLayout.AddCard(sCard);
                MJCardGroup.TryDragCard();
            }

            for (int i = 0; i < hc.cardsBefore.Count; i++)
            {
                int sCard = hc.cardsBefore[i];
                player.dropCardLayout.AddCard(sCard);
                MJCardGroup.TryDragCard();
            }
            for (int i = 0; i < hc.yaojiuCards.Count; i++)
            {
                int sCard = hc.yaojiuCards[i];
                player.jiuYaoCardLayout.AddCard(sCard);
                MJCardGroup.TryDragCard();
            }

            for (int i = 0; i < hc.downCards.Count; i++)
            {
                int sCard = hc.downCards[i];
                int card1 = (sCard & 0xff);
                int card2 = ((sCard >> 8) & 0xff);
                int card3 = ((sCard >> 16) & 0xff);
                if (card3 == 0xf) //杠特殊处理 //TODO 技术债务
                {
                    player.tableCardLayout.AddCard(card1);
                    player.tableCardLayout.AddCard(card1);
                    player.tableCardLayout.AddCard(card1);
                    player.tableCardLayout.AddCard(card1);

                    MJCardGroup.TryDragCard();
                    MJCardGroup.TryDragCard();
                    MJCardGroup.TryDragCard();
                    MJCardGroup.TryDragCard();
                    Game.Instance.Gang = true;
                    MJCardGroup.TryDragCard();//杠摸
                }
                else
                {
                    player.tableCardLayout.AddCard(card1);
                    player.tableCardLayout.AddCard(card2);
                    player.tableCardLayout.AddCard(card3);

                    MJCardGroup.TryDragCard();
                    MJCardGroup.TryDragCard();
                    MJCardGroup.TryDragCard();
                }
            }
        }
    }
Beispiel #20
0
    void OnGameOperStartSyn(GameOperStartSyn data)
    {
        Debug.LogFormat("===StartSyn(seq[" + data.seq + "]):" + Utils.ToStr(data));

        Game.Instance.state = GameState.Playing;

        Game.SoundManager.PlayRoundStartSound();
        RoomMgr.gameOperStartSyn = data;
        Game.MJMgr.Clear();

        Game.MJMgr.CardLeft = data.cardLeft;

        print("    ============ data.guiCard ==============   " + data.guiCards.Count + " / " + data.guiCards[0]);

        Game.MJMgr.tmpHui = data.guiCards[0];
        //Game.MJMgr.Init();
        Game.Instance.Ting = false;
        //Game.IsBusy = false;

        //Game.MJMgr.HangUp = false;

        for (int i = 0; i < Game.MJMgr.MjData.Length; i++)
        {
            if (null != Game.MJMgr.MjData[i])
            {
                Player player = Game.MJMgr.MjData[i].player;
                if (null != player)
                {
                    player.ting = false;
                }
            }
        }

        Game.MJMgr.MakersPosition = data.bankerPos;    // 庄家位置
        MJPlayer banker = Game.MJMgr.GetPlayerByPosition(data.bankerPos);

        Game.MJMgr.Shuffle();

        if (data.reconnect)
        {
            Game.MJTable.Dice(data.dice1, data.dice2);
            LicensingOnReconnect(data.playerHandCards);
        }
        else
        {
            banker.MJHand.PlayDize(data.dice1, data.dice2);

            LicensingOnStart(data.playerHandCards);
            Game.MJTable.PlayShuffle();

            Game.Delay(1, () =>
            {
                Game.MJMgr.Licensing(data.playerHandCards);
            });
        }

        if (Game.UIMgr.IsSceneActive(UIPage.PlayPage))
        {
            EventDispatcher.DispatchEvent(MessageCommand.MJ_UpdatePlayPage);
        }
        else
        {
            Game.UIMgr.PushScene(UIPage.PlayPage);
        }
    }
Beispiel #21
0
    bool PlayHuEffect(int position)
    {
        string HuEffectUI    = "";
        string HuEffectScene = "";

        switch (RoomMgr.huSyn.winType)
        {
        case MJUtils.HU_BaoZhongBao:
        {
            Game.SoundManager.PlayEffect(21);
            HuEffectUI    = "bzbUI_EF";
            HuEffectScene = "baozhongbao_EF";
            break;
        }

        case MJUtils.HU_DaiLou:
        {
            Game.SoundManager.PlayEffect(23);
            HuEffectUI    = "louUI_EF";
            HuEffectScene = "lou_EF";
            break;
        }

        case MJUtils.HU_GuaDaFeng:
        {
            Game.SoundManager.PlayEffect(29);
            HuEffectUI    = "ljfUI_EF";
            HuEffectScene = "longjuanfeng_EF";
            break;
        }

        case MJUtils.HU_HongZhong:
        {
            Game.SoundManager.PlayEffect(25);
            HuEffectUI    = "hzmtfUI_EF";
            HuEffectScene = "hzmtf_EF";
            break;
        }

        //case MJUtils.HU_Hu: //TODO 为什么屏蔽了?
        //    {
        //        Game.SoundManager.PlayEffect(26);
        //        HuEffectUI = "huUI_EF";
        //        HuEffectScene = "hu_EF";
        //        break;
        //    }
        case MJUtils.HU_KaiPaiZha:
        {
            Game.SoundManager.PlayEffect(24);
            HuEffectUI    = "zhaUI_EF";
            HuEffectScene = "zhadang_EF";
            break;
        }

        case MJUtils.HU_MoBao:
        {
            Game.SoundManager.PlayEffect(22);
            HuEffectUI    = "mbhUI_EF";
            HuEffectScene = "mobaohu_EF";
            break;
        }

        default:
        {
            return(false);
        }
        }

        EventDispatcher.DispatchEvent(MessageCommand.PlayEffect, position, HuEffectUI);
        MJPlayer   player = Game.MJMgr.GetPlayerByPosition(position);
        GameObject eff    = Game.PoolManager.EffectPool.Spawn(HuEffectScene);

        eff.transform.position = player.EffectPos.position;
        Game.PoolManager.EffectPool.Despawn(eff, 5);
        return(true);
    }
Beispiel #22
0
    public bool IsMine()
    {
        MJPlayer player = this.GetComponentInParent <MJPlayer>();

        return(null != player && player.index == 0);
    }
Beispiel #23
0
    IEnumerator doLicensing(List <GameOperHandCardSyn> handCards)
    {
        float waitTime = 0.3f;

        foreach (GameOperHandCardSyn hc in handCards)
        {
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);
            player.handCardLayout.PlayDefault();
        }

        yield return(new WaitForEndOfFrame());

        foreach (GameOperHandCardSyn hc in handCards)
        {
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);

            for (int i = 0; i < 6; i++)
            {
                int sCard = hc.handCards[i];
                player.handCardLayout.AddCard(sCard, true);
                MJCardGroup.TryDragCard();
            }

            Game.SoundManager.PlayGet4Card();
        }

        yield return(new WaitForSeconds(waitTime));

        foreach (GameOperHandCardSyn hc in handCards)
        {
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);

            for (int i = 6; i < 12; i++)
            {
                int sCard = hc.handCards[i];
                player.handCardLayout.AddCard(sCard, true);
                MJCardGroup.TryDragCard();
            }

            Game.SoundManager.PlayGet4Card();
        }

        yield return(new WaitForSeconds(waitTime));

        foreach (GameOperHandCardSyn hc in handCards)
        {
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);
            int      sCard  = hc.handCards[12];
            player.handCardLayout.AddCard(sCard, true);

            MJCardGroup.TryDragCard();
        }
        //yield 可能要yield。
        //刚摸完牌的时候:
        if ((RoomMgr.playerGamingSyn != null) && ((RoomMgr.playerGamingSyn.wanfa & MJUtils.MODE_SHUAIJIUYAO) != 0))
        {
            Game.UIMgr.PushScene(UIPage.JiuYaoPage);
        }
        else //跳过界面,直接准备完成
        {
            Game.SocketGame.DoREADYL(1, 2);
        }

        if (tmpHui != -1)                   //根据传来的会牌值   判断是否要显示最后一张牌
        {
            cardHui = tmpHui;
            MJCardGroup.ShowHuiCard(cardHui);
            EventDispatcher.DispatchEvent(MessageCommand.MJ_UpdatePlayPage);
        }
    }
Beispiel #24
0
    //int[] wins = new int[] {
    //    MJUtils.HU_BaoZhongBao,
    //    MJUtils.HU_DaiLou,
    //    MJUtils.HU_GuaDaFeng,
    //    MJUtils.HU_HongZhong,
    //    MJUtils.HU_Hu,
    //    MJUtils.HU_KaiPaiZha,
    //    MJUtils.HU_MoBao
    //};
    //void _OnGameOperPlayerHuSyn(GameOperPlayerHuSyn data)
    //{
    //    string huInfo = GetHuStr(data.resultType);
    //    string winInfo = GetHuStr(data.winType);
    //    Debug.LogFormat("===HuSyn:{0}[炮:{1}] card:{2} bao:[{3}] Hu:{4}/Win:{5}", (data.position < 0) ? "流局" : strs[data.position], (data.paoPosition < 0) ? "无" : strs[data.paoPosition], GetCardStr(data.card), GetCardStr(data.bao), huInfo, winInfo);

    //    RoomMgr.huSyn = data;

    //    if (RoomMgr.huSyn.resultType != MJUtils.HU_LiuJu)
    //    {
    //        MJPlayer player = Game.MJMgr.GetPlayerByPosition(data.position);
    //        MjData pData = Game.MJMgr.MjData[data.position];

    //        bool zimo = (data.paoPosition == -1 || data.paoPosition == data.position);

    //        List<GameOperPlayerSettle> list = data.detail;
    //        foreach (GameOperPlayerSettle s in list)
    //        {
    //            Debug.LogFormat("===OnGameOperPlayerHuSyn:{0} fanNum:{1} handcard:[{2}]", strs[s.position], s.fanNum, ToStr(s.handcard));

    //            if (s.position == data.position)
    //            {
    //                player.handCardLayout.Refresh(s.handcard);
    //            }
    //        }

    //        if (zimo)
    //        {
    //            Game.SoundManager.PlayEffect(27);
    //            Game.SoundManager.PlayZimo(data.position);
    //            player.DragCard(data.card, true);
    //        }
    //        else
    //        {
    //            if (-1 != data.paoPosition)
    //            {
    //                Game.SoundManager.PlayEffect(28);
    //                MJPlayer paoPlayer = Game.MJMgr.GetPlayerByPosition(data.paoPosition);
    //                GameObject eff = Game.PoolManager.EffectPool.Spawn("shandian_EF");
    //                eff.transform.position = Game.MJMgr.LastDropCard.transform.position;
    //                Game.PoolManager.EffectPool.Despawn(eff, 2);
    //            }

    //            Game.SoundManager.PlayHu(data.position);
    //            player.handCardLayout.DragCard(data.card, Game.MJMgr.LastDropCard.gameObject);
    //        }

    //        Game.MaterialManager.TurnOnHandCard();
    //        player.handCardLayout.PlayHu();

    //        PlayHuEffect(data.position);

    //        bool isMy = player.index == 0;
    //        if (isMy)
    //        {
    //            Game.SoundManager.PlayWin();
    //        }
    //        else
    //        {
    //            if (data.paoPosition != -1)
    //            {
    //                MJPlayer paoPplayer = Game.MJMgr.GetPlayerByPosition(data.paoPosition);
    //                isMy = paoPplayer.index == 0;
    //                if (isMy)
    //                {
    //                    Game.SoundManager.PlayLose();
    //                }
    //            }
    //        }
    //    }
    //    else
    //    {
    //        Game.SoundManager.PlayFall();
    //    }

    //    if (!data.skipHuSettle)
    //    {
    //        Game.Delay(3, () =>
    //        {
    //            Game.SoundManager.PlaySettleSound();
    //            Game.DialogMgr.PushDialog(UIDialog.SettleRoundDialog);
    //            IsBusy = false;
    //        });
    //    }
    //}

    void OnGameOperPlayerHuSyn(GameOperPlayerHuSyn data)
    {
        string huInfo  = GetHuStr(data.resultType);
        string winInfo = GetHuStr(data.winType);

        Debug.LogFormat("===HuSyn:{0}[炮:{1}] card:{2} bao:[{3}] Hu:{4}/Win:{5}", (data.position < 0) ? "流局" : strs[data.position], (data.paoPosition < 0) ? "无" : strs[data.paoPosition], GetCardStr(data.card), GetCardStr(data.bao), huInfo, winInfo);

        RoomMgr.huSyn = data;

        if (RoomMgr.huSyn.resultType == MJUtils.HU_LiuJu)
        {
            Game.SoundManager.PlayFall();
            if (!data.skipHuSettle)
            {
                Game.Delay(3, () =>
                {
                    Game.SoundManager.PlaySettleSound();
                    Game.DialogMgr.PushDialog(UIDialog.SettleRoundDialog);
                });
            }
            return;
        }

        MJPlayer player = Game.MJMgr.GetPlayerByPosition(data.position);
        MjData   pData  = Game.MJMgr.MjData[data.position];
        List <GameOperPlayerSettle> list = data.detail;

        foreach (GameOperPlayerSettle s in list)
        {
            Debug.LogFormat("===OnGameOperPlayerHuSyn:{0} fanNum:{1} handcard:[{2}]", strs[s.position], s.fanNum, ToStr(s.handcard));

            if (s.position == data.position)
            {
                player.handCardLayout.Refresh(s.handcard);
            }
            ////////////////////////
            if (!RoomMgr.IsSingeRoom())
            {
                if (!RoomMgr.IsVipRoom())
                {
                    if (Game.MJMgr.MjData[s.position].player.coin + s.fanNum * Game.Instance.baseScore < 0)
                    {
                        Game.MJMgr.MjData[s.position].player.coin = 0;
                    }
                    else
                    {
                        Game.MJMgr.MjData[s.position].player.coin += s.fanNum * Game.Instance.baseScore;
                    }
                }
                else
                {
                    Game.MJMgr.MjData[s.position].player.score += s.fanNum;
                }
                EventDispatcher.DispatchEvent(MessageCommand.MJ_UpdatePlayPage);
            }
            ////////////////////////
        }

        bool zimo = (data.paoPosition == -1 || data.paoPosition == data.position);

        if (zimo)
        {
            PlayZimoHu(player, data);
        }
        else
        {
            bool isPao = false;
            if (-1 != data.paoPosition)
            {
                Game.SoundManager.PlayEffect(28);
                MJPlayer   paoPlayer = Game.MJMgr.GetPlayerByPosition(data.paoPosition);
                GameObject eff       = Game.PoolManager.EffectPool.Spawn("shandian_EF");
                eff.transform.position = Game.MJMgr.LastDropCard.transform.position;
                Game.PoolManager.EffectPool.Despawn(eff, 5);

                isPao = paoPlayer.index == 0;
            }

            Game.Delay(1, () =>
            {
                bool isWin = player.index == 0;
                if (isWin)
                {
                    Game.SoundManager.PlayWin();
                }
                else if (isPao)
                {
                    Game.SoundManager.PlayLose();
                }

                PlayHu(player, data);
            });
        }
    }
Beispiel #25
0
    void LicensingOnReconnect(List <GameOperHandCardSyn> handCards)
    {
        foreach (GameOperHandCardSyn hc in handCards)
        {
            Debug.LogFormat("===CardSyn: {0} HandCard[{1}],DropCards[{2}],TableCards[{3}],reconnect:{4}", strs[hc.position], ToStr(hc.handCards), ToStr(hc.cardsBefore), ToStr(hc.downCards, true), true);
            MJPlayer player = Game.MJMgr.GetPlayerByPosition(hc.position);

            player.dropCardLayout.Clear();
            player.tableCardLayout.Clear();
            player.handCardLayout.Clear();
            player.handCardLayout.PlayDefault();



            for (int i = 0; i < hc.handCards.Count; i++)
            {
                int sCard = hc.handCards[i];
                player.handCardLayout.AddCard(sCard);
                MJCardGroup.TryDragCard();
            }

            for (int i = 0; i < hc.cardsBefore.Count; i++)
            {
                int sCard = hc.cardsBefore[i];
                player.dropCardLayout.AddCard(sCard);
                MJCardGroup.TryDragCard();
            }

            for (int i = 0; i < hc.downCards.Count; i++)
            {
                /*             if (hc.handCards[0] == -1)
                 *           {
                 *               int sCard = hc.downCards[i];
                 *               int card1 = (sCard & 0xff);
                 *               int card2 = ((sCard >> 8) & 0xff);
                 *               int card3 = ((sCard >> 16) & 0xff);
                 *               int card4 = ((sCard >> 24) & 0xff);
                 *
                 *
                 *               if (card1 == card2 && card1 == card3)
                 *               {
                 *                   if (card4 != 0)
                 *                   {
                 *                       player.tableCardLayout.AddCard(-1);
                 *                       player.tableCardLayout.AddCard(-1);
                 *                       player.tableCardLayout.AddCard(-1);
                 *                       player.tableCardLayout.AddCard(-1);
                 *                   }else
                 *                   {
                 *                       player.tableCardLayout.AddCard(card1);
                 *                       player.tableCardLayout.AddCard(card2);
                 *                       player.tableCardLayout.AddCard(card3);
                 *
                 *                   }
                 *               }else
                 *               {
                 *                   player.tableCardLayout.AddCard(card1);
                 *                   player.tableCardLayout.AddCard(card2);
                 *                   player.tableCardLayout.AddCard(card3);
                 *
                 *               }
                 *
                 *               MJCardGroup.TryDragCard();
                 *               MJCardGroup.TryDragCard();
                 *               MJCardGroup.TryDragCard();
                 *               if (card1 == card2 && card1 == card3)
                 *               {
                 *                   if (card4 != 0)
                 *                       MJCardGroup.TryDragCard();
                 *               }
                 *           }
                 *           else */
                {
                    int sCard = hc.downCards[i];
                    int card1 = (sCard & 0xff);
                    int card2 = ((sCard >> 8) & 0xff);
                    int card3 = ((sCard >> 16) & 0xff);
                    int card4 = ((sCard >> 24) & 0xff);

                    player.tableCardLayout.AddCard(card1);
                    player.tableCardLayout.AddCard(card2);
                    player.tableCardLayout.AddCard(card3);

                    if (card1 == card2 && card1 == card3)
                    {
                        if (card4 != 0)
                        {
                            //player.tableCardLayout.AddCard(card4);
                            player.tableCardLayout.ChangeCard(card4);
                        }
                    }

                    MJCardGroup.TryDragCard();
                    MJCardGroup.TryDragCard();
                    MJCardGroup.TryDragCard();
                    if (card1 == card2 && card1 == card3)
                    {
                        if (card4 != 0)
                        {
                            MJCardGroup.TryDragCard();
                        }
                    }
                }
            }
        }
    }