Esempio n. 1
0
    // 手札や山札の情報のセット
    public void SyncDeck(SyncDeckInfo syncData)
    {
        // 相手から送られてくる前提のコード、

        // 手札・山札etc情報同期
        deckManager.Sync(syncData);
    }
Esempio n. 2
0
    public SyncDeckInfo GetSyncDeckInfo()
    {
        // ex構造体作成
        SyncDeckInfo info = new SyncDeckInfo();
        int          num;

        //exInfo.hand = new int[9];

        //exInfo.bochi = new int[15];
        //exInfo.tuihou = new int[15];

        //// 手札同期
        //if (num == 0) exInfo.hand[0] = -1;
        //else if (num < 9) exInfo.hand[num] = -1;
        //for (int i = 0; i < num; i++)
        //{
        //    exInfo.hand[i] = deckManager.GetHandCard(i).id;
        //}

        // 山札同期
        info.yamahuda = new int[15];
        num           = deckManager.GetNumYamahuda();
        if (num == 0)
        {
            info.yamahuda[0] = -1;
        }
        else if (num < 15)
        {
            info.yamahuda[num] = -1;
        }
        for (int i = 0; i < num; i++)
        {
            info.yamahuda[i] = deckManager.GetYamahudaCard(i).id;
        }

        //// 墓地同期
        //num = deckManager.GetNumBochi();
        //if (num == 0) exInfo.bochi[0] = -1;
        //else if (num < 15) exInfo.bochi[num] = -1;
        //for (int i = 0; i < num; i++)
        //{
        //    exInfo.bochi[i] = deckManager.GetCemeteryCard(i).id;
        //}

        //// 追放同期
        //num = deckManager.GetNumTsuihou();
        //if (num == 0) exInfo.tuihou[0] = -1;
        //else if (num < 15) exInfo.tuihou[num] = -1;
        //for (int i = 0; i < num; i++)
        //{
        //    exInfo.tuihou[i] = deckManager.GetExpulsionCard(i).id;
        //}

        //Info1 exInfo;
        //exInfo.a = 114;
        //exInfo.b = 514;
        //exInfo.pos = new Vector3(810, 19, 19);

        return(info);
    }
Esempio n. 3
0
    public void Marigan(SyncDeckInfo info)
    {
        // 手札とか山札リセット
        //deckManager.SetDeckData(deckData);
        deckManager.Marigan(info);

        isMarigan = true;

        // 手札・デッキ情報送信
        //SendSyncDeckInfo();
    }
Esempio n. 4
0
    public void Marigan(SyncDeckInfo syncData)
    {
        Clear();

        foreach (int yamahudaID in syncData.yamahuda)
        {
            if (yamahudaID == -1)
            {
                break;
            }
            yamahuda.Add(CardDataBase.GetCardData(yamahudaID));
        }

        cardObjectManager.Marigan(yamahuda.ToArray());
    }
Esempio n. 5
0
    public void Sync(SyncDeckInfo syncData)
    {
        Clear();
        //foreach (int handID in syncData.hand)
        //{
        //    if (handID == -1) break;
        //    hand.Add(CardDataBase.GetCardData(handID));
        //}
        foreach (int yamahudaID in syncData.yamahuda)
        {
            if (yamahudaID == -1)
            {
                break;
            }
            // ★★★嫌な予感がする…(参照)
            //var cardData = new CardData();
            //cardData = CardDataBase.GetCardData(yamahudaID);
            //var abilityData = cardData.GetAbilityData();
            //if(abilityData != null)
            //{
            //    abilityData.SetMyPlayerFlag(player.isMyPlayer);
            //}

            var cardData = CardDataBase.GetCardData(yamahudaID);
            yamahuda.Add(cardData);
        }
        //foreach (int bochiID in syncData.bochi)
        //{
        //    if (bochiID == -1) break;
        //    bochi.Add(CardDataBase.GetCardData(bochiID));
        //}
        //foreach (int tuihouID in syncData.tuihou)
        //{
        //    if (tuihouID == -1) break;
        //    tsuihou.Enqueue(CardDataBase.GetCardData(tuihouID));
        //}

        // 向こうから来るやつにつかう
        cardObjectManager.SetDeckData(yamahuda.ToArray(), player.isMyPlayer);

        // その情報をもとにカードオブジェクト更新
        //cardObjectManager.UpdateHand(hand, player);
        //cardObjectManager.UpdateYamahuda(yamahuda, player);
    }
Esempio n. 6
0
    //public bool isHaveInterceptCard()
    //{
    //    foreach (Player player in players)
    //        if (player.isHaveInterceptCard()) return true;
    //    return false;
    //}

    public bool HandleMessage(MessageInfo message)
    {
        // switchにすると構造体受け取りでバグる
        if (message.messageType == MessageType.Marigan)
        {
            // byte[]→構造体
            SyncDeckInfo syncDeckInfo = new SyncDeckInfo();
            message.GetExtraInfo <SyncDeckInfo>(ref syncDeckInfo);

            players[message.fromPlayerID].Marigan(syncDeckInfo);
            return(true);
        }
        if (message.messageType == MessageType.NoMarigan)
        {
            players[message.fromPlayerID].NoMarigan();
            return(true);
        }
        if (message.messageType == MessageType.SetStrikerOK)
        {
            players[message.fromPlayerID].JunbiKanryoON();
            // ボタン非表示
            if (players[message.fromPlayerID].isMyPlayer)
            {
                uiManager.DisableSetStrikerButton();
            }
            return(true);
        }
        if (message.messageType == MessageType.SetStrikerPass)
        {
            players[message.fromPlayerID].JunbiKanryoON();
            players[message.fromPlayerID].PushedNextButtonON();
            // ボタン非表示
            if (players[message.fromPlayerID].isMyPlayer)
            {
                uiManager.DisableSetStrikerButton();
            }
            return(true);
        }

        // もう一回NEXT押してどうぞ
        if (message.messageType == MessageType.AgainNextButton)
        {
            players[message.fromPlayerID].JunbiKanryoOFF();
            players[message.fromPlayerID].PushedNextButtonOFF();
            return(true);
        }

        if (message.messageType == MessageType.SetStrikerOK)
        {
            players[message.fromPlayerID].JunbiKanryoON();
            return(true);
        }

        if (message.messageType == MessageType.SetStriker)
        {
            if (message.exInfo == null)
            {
                return(false);
            }

            // byte[]→構造体
            SelectCardIndexInfo setCardInfo = new SelectCardIndexInfo();
            message.GetExtraInfo <SelectCardIndexInfo>(ref setCardInfo);
            //IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(setCardInfo));
            //Marshal.Copy(message.exInfo, 0, ptr, Marshal.SizeOf(setCardInfo));
            //setCardInfo = (SetCardInfo)Marshal.PtrToStructure(ptr, setCardInfo.GetType());
            //Marshal.FreeHGlobal(ptr);

            Debug.Log("受信: プレイヤー" + message.fromPlayerID + "が手札" + setCardInfo.index + "のカードをセットしました");

            players[message.fromPlayerID].SetCard(setCardInfo);
            // ボタン表示
            if (players[message.fromPlayerID].isMyPlayer)
            {
                uiManager.EnableSetStrikerButton();
            }
            return(true);
        }
        if (message.messageType == MessageType.SetSupport)
        {
            if (message.exInfo == null)
            {
                return(false);
            }

            // byte[]→構造体
            SelectCardIndexInfo setCardInfo = new SelectCardIndexInfo();
            message.GetExtraInfo <SelectCardIndexInfo>(ref setCardInfo);

            Debug.Log("受信: プレイヤー" + message.fromPlayerID + "が手札" + setCardInfo.index + "のサポートカードを発動");

            players[message.fromPlayerID].SetSupport(setCardInfo);

            // ★シーンメインのステートをサポート待ちのステートに変更
            Debug.Assert(sceneMain, "PlayerManagerがscemeMainアタッチされてない");
            sceneMain.ChangeState(SceneMainState.SupportExcusionState.GetInstance());

            // ★相手プレイヤーがすでにOKボタンを押していたら、もう一度表示させる。
            var youPlayer = GetCPUPlayerByID(message.fromPlayerID);
            if (youPlayer.isPushedJunbiKanryo)
            {
                // もう一回NEXT押してどうぞ
                youPlayer.JunbiKanryoOFF();
                // ボタン表示
                if (youPlayer.isMyPlayer)
                {
                    uiManager.EnableSetStrikerButton();
                }
            }

            return(true);
        }
        if (message.messageType == MessageType.SetIntercept)
        {
            if (message.exInfo == null)
            {
                return(false);
            }

            // byte[]→構造体
            SelectCardIndexInfo setCardInfo = new SelectCardIndexInfo();
            message.GetExtraInfo <SelectCardIndexInfo>(ref setCardInfo);

            Debug.Log("受信: プレイヤー" + message.fromPlayerID + "が手札" + setCardInfo.index + "のインターセプトカードを発動");

            players[message.fromPlayerID].SetIntercept(setCardInfo);
            // ステート終了
            //players[message.fromPlayerID].isStateEnd = true;
            players[message.fromPlayerID].isPushedJunbiKanryo = true;

            //+---------------------------------------------------
            // ★★送られてきた方じゃないプレイヤーのステートが
            // 操作しているやつならもう一回操作できるように
            int iID = (message.fromPlayerID == 0) ? 1 : 0;
            if (iID == GetMyPlayerID())
            {
                AgainSetIntercept(iID);
            }
            //players[iID].stateMachine.currentState



            // [1212] インターセプトカードを伏せた後も押さす用に
            // ボタン非表示
            //if (players[message.fromPlayerID].isMyPlayer)
            //    uiManager.DisableSetStrikerButton();
            return(true);
        }
        if (message.messageType == MessageType.BackToHand)
        {
            if (message.exInfo == null)
            {
                return(false);
            }

            // byte[]→構造体
            BackToHandInfo backToHandInfo = new BackToHandInfo();
            message.GetExtraInfo <BackToHandInfo>(ref backToHandInfo);
            //IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(backToHandInfo));
            //Marshal.Copy(message.exInfo, 0, ptr, Marshal.SizeOf(backToHandInfo));
            //backToHandInfo = (BackToHandInfo)Marshal.PtrToStructure(ptr, backToHandInfo.GetType());
            //Marshal.FreeHGlobal(ptr);

            players[message.fromPlayerID].BackToHand(backToHandInfo);

            // ボタン非表示
            if (players[message.fromPlayerID].isMyPlayer)
            {
                uiManager.DisableSetStrikerButton();
            }

            return(true);
        }
        //if(message.messageType == MessageType.SyncName)
        //{
        //    if (message.exInfo == null)
        //        return false;

        //    // 自分の名前なら同期する必要なし
        //    //if (players[message.fromPlayerID].isMyPlayer) return true;

        //    SyncNameInfo syncNameInfo = new SyncNameInfo();
        //    //syncNameInfo.cName = new char[64];
        //    message.GetExtraInfo<SyncNameInfo>(ref syncNameInfo);

        //    // プレイヤーの名前設定
        //    players[message.fromPlayerID].playerName = syncNameInfo.playerName;//new string(syncNameInfo.cName);
        //}
        if (message.messageType == MessageType.SyncDeck)
        {
            if (message.exInfo == null)
            {
                return(false);
            }

            // byte[]→構造体
            SyncDeckInfo syncDeckInfo = new SyncDeckInfo();
            message.GetExtraInfo <SyncDeckInfo>(ref syncDeckInfo);
            //IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(syncDeckInfo));
            //Marshal.Copy(message.exInfo, 0, ptr, Marshal.SizeOf(syncDeckInfo));
            //syncDeckInfo = (SyncDeckInfo)Marshal.PtrToStructure(ptr, syncDeckInfo.GetType());
            //Marshal.FreeHGlobal(ptr);

            //Debug.Log("受信: プレイヤー" + message.fromPlayerID + "の手札情報:" +
            //    syncDeckInfo.yamahuda[0] + "," +
            //    syncDeckInfo.yamahuda[1] + "," +
            //    syncDeckInfo.yamahuda[2] + "," +
            //    syncDeckInfo.yamahuda[3] + "," +
            //    syncDeckInfo.yamahuda[4] + "," +
            //    syncDeckInfo.yamahuda[5] + "," +
            //    syncDeckInfo.yamahuda[6] + "," +
            //    syncDeckInfo.yamahuda[7] + "," +
            //    syncDeckInfo.yamahuda[8]);

            var isMyPlayer = players[message.fromPlayerID].isMyPlayer;

            // 発信元は同期する必要なし
            if (!isMyPlayer)
            {
                // 手札山札同期
                players[message.fromPlayerID].SyncDeck(syncDeckInfo);
            }

            // UIテキストの変更
            uiManager.UpdateDeckUI(players[message.fromPlayerID].deckManager, isMyPlayer);

            // 同期フラグ
            players[message.fromPlayerID].isSyncDeck = true;

            return(true);
        }

        return(false);
    }