// 受け取った入力を処理+結果をクライアントに送信
        // dotダメージや建造物の効果などはEndPhaseの最後で発動する
        private void EndPhase()
        {
            if (!PhotonNetwork.IsMasterClient)
            {
                return;
            }
            Debug.Log("EndPhase");

            GameState = GameState.TurnEnd;
            Ready1    = false;
            Ready2    = false;

            // TODO: 入力を元にactionを処理、イベント生成
            ActionEventToClient actionEventToClient = BattleLogic.ProcessActionEvents(actionEvent1, actionEvent2);

            // イベント送信&同期
            object[] args1 = new object[] { "ActionEventToClient", JsonUtility.ToJson(actionEventToClient) };
            object[] args2 = new object[] { "ActionEventToClient", JsonUtility.ToJson(actionEventToClient) };
            MasterPlayer.GetComponent <PhotonView> ().RPC("RecieveEvent", RpcTarget.AllViaServer, args1);
            GuestPlayer.GetComponent <PhotonView> ().RPC("RecieveEvent", RpcTarget.AllViaServer, args2);
            SyncBoardToClients();
        }
        // プレイヤーの行動を処理してクライアントへエフェクトの表示等をさせる命令を返す
        public ActionEventToClient ProcessActionEvents(ActionEvent unitAction1, ActionEvent unitAction2)
        {
            if (unitAction1.UnitActions.Length == 0 && unitAction2.UnitActions.Length == 0)
            {
                return(new ActionEventToClient());
            }
            ActionEventToClient       actionEventToClient = new ActionEventToClient();
            List <UnitActionToClient> unitActionsToClient = new List <UnitActionToClient> ();

            // Agility順に各ユニットの行動をソート
            List <UnitAction> concatUnitActions = new List <UnitAction> ();

            if (unitAction1 != null)
            {
                for (int i = 0; i < unitAction1.UnitActions.Length; i++)
                {
                    concatUnitActions.Add(unitAction1.UnitActions[i]);
                }
            }
            if (unitAction2 != null)
            {
                for (int i = 0; i < unitAction2.UnitActions.Length; i++)
                {
                    concatUnitActions.Add(unitAction2.UnitActions[i]);
                }
            }
            concatUnitActions.Sort((a, b) => b.Agility - a.Agility);

            // 各行動を処理
            for (int i = 0; i < concatUnitActions.Count; i++)
            {
                // skillTypeで分岐
                if (concatUnitActions[i].ActionNo == 0)
                {
                    // Move
                    unitActionsToClient.Add(Move(concatUnitActions[i].Owner, concatUnitActions[i].Invoker, (concatUnitActions[i].TargetPositionX, concatUnitActions[i].TargetPositionY)));
                }
                else if (concatUnitActions[i].ActionNo <= -1)
                {
                    // 通常攻撃
                    Debug.Log("normal attack");
                }
                else if (GetUnitList(concatUnitActions[i].Owner) [concatUnitActions[i].Invoker].SkillList[concatUnitActions[i].ActionNo].SkillType == SkillType.Attack)
                {
                    // Attack todo
                }
                else
                {
                    // 空のアクション
                    Debug.Log("None");
                    unitActionsToClient.Add(None());
                }
            }

            // ActionEventToClientを返す
            Debug.Log(unitActionsToClient.Count);
            actionEventToClient.UnitActions = new UnitActionToClient[unitActionsToClient.Count];
            for (int i = 0; i < unitActionsToClient.Count; i++)
            {
                actionEventToClient.UnitActions[i] = unitActionsToClient[i];
            }

            return(actionEventToClient);
        }