public CheckPaymentBasis(DungeonMerchant param)
     : base()
 {
     Merchant = param;
     Payment = false;
     Message = new MessageMenu(param.Controller);
 }
 public CheckPaymentForSell(DungeonMerchant merchant)
     : base(merchant)
 {
 }
 /// <summary>
 /// 商店となる部屋を設定するためのメソッド。
 /// 与えられた禁止リストと条件に合わない部屋を除外した部屋の中から選択する。
 /// </summary>
 /// <param name="denyrooms"></param>
 /// <returns></returns>
 public Room setShopRoom(params Room[] denyrooms)
 {
     Debug.Log("Start Shop Room Creation.");
     List<Room> notshoprooms = new List<Room>();
     // 部屋の縦横どちらかが4未満か、
     // 部屋に繋がる出入り口の数が0または3以上の部屋が除外する。
     notshoprooms = CurrentDungeonInformation.CurrentFloor.Rooms.FindAll(
         r => {
             return (r.Size.x < 4 || r.Size.y < 4) || (r.EntranceDoorPositions.Length == 0 || r.EntranceDoorPositions.Length >= 3);
             } );
     CurrentDungeonInformation.CurrentFloor.Rooms.ForEach(r => {
         Debug.LogFormat("{0},{1}",r.Size,r.EntranceDoorPositions.Length);
     });
     notshoprooms.AddRange(denyrooms);
     notshoprooms =  notshoprooms.Distinct().ToList();
     notshoprooms.RemoveAll(r => r == null);
     //notshoprooms.ForEach(r => Debug.Log(r.ToString()));
     //Debug.LogFormat("Rooms:{0} NotShops:{1}",CurrentDungeonInformation.CurrentFloor.Rooms.Count,notshoprooms.Count);
     Room room = CurrentDungeonInformation.CurrentFloor.selectRnadomRoom(notshoprooms);
     //Debug.Log("Found Room: "+(room!=null));
     if (room == null) return null;
     int centerx = Mathf.RoundToInt(room.Position.x + room.Size.x / 2);
     int centery = Mathf.RoundToInt(room.Position.y + room.Size.y / 2);
     //Vector2 centerpos = new Vector2(Mathf.RoundToInt(centerx), Mathf.RoundToInt(centery));
     ItemBasis[] commodities = new ItemBasis[9];
     int idx = 0;
     for (int x = 0; x < 3; x++) {
         for (int y = 0; y < 3; y++)
         {
             int dx = centerx + (x - 1);
             int dy = centery + (y - 1);
             ItemBasis item = CurrentDungeonParameter.DistributionTable.randomSelectItem(ItemBasis.ItemCode.MONEY);
             item.IsCommodity = true;
             item.init();
             commodities[idx++] = item;
             ObjectEntityFactory.enableItemEntity(item, new Vector2(dx, dy));
         }
     }
     // 商人を入り口の斜めに立たせる。
     Vector2 xdelta = new Vector2(1, 0);
     Vector2 ydelta = new Vector2(0, 1);
     Vector2 posdelta = Vector2.zero;
     Vector2 entrance = Vector2.zero;
     foreach (Vector2 pos in room.EntranceDoorPositions) {
         if (room.overlaps(pos + ydelta))
         {
             // 入り口が下にある
             posdelta = ydelta;
             entrance = pos + ydelta;
         }
         else if (room.overlaps(pos - ydelta))
         {
             // 入り口が上にある
             posdelta = -ydelta;
             entrance = pos - ydelta;
         }
         else if (room.overlaps(pos + xdelta))
         {
             // 入り口が左にある
             posdelta = xdelta;
             entrance = pos + xdelta;
         }
         else if (room.overlaps(pos - xdelta)) {
             // 入り口が右にある
             posdelta = -xdelta;
             entrance = pos - xdelta;
         }
         var merchant = new DungeonMerchant(entrance,posdelta,room,commodities);
         ObjectEntityFactory.enableCharacterEntity(merchant, merchant.WaitPoint);
     }
     room.isShop = true;
     Debug.Log("End Shop Room Creation.");
     return room;
 }