private void SetFarmLandOriginData(FarmLandVO farmLandVO)
 {
     farmLandVO.rect = new RectInt(GlobalSetting.BUILDING_FARMLAND_OFFSET[0],
                                   GlobalSetting.BUILDING_FARMLAND_OFFSET[1],
                                   GlobalSetting.BUILDING_FARMLAND_AREA[0],
                                   GlobalSetting.BUILDING_FARMLAND_AREA[1]);
     farmLandVO.grainLimit     = GlobalSetting.BUILDING_GOLDMINE_GOLD_LIMIT;
     farmLandVO.grainOutputNum = GlobalSetting.BUILDING_GOLDMINE_OUTPUT;
 }
    public void Build(PlayerVO ower, E_Building buildingType, MainBaseVO mainBaseVO)
    {
        IBuildingVO buildingVO = null;
        Vector3Int  center     = default;
        int         radius     = 0;
        int         count      = 0;

        if (mainBaseVO != null)
        {
            center = mainBaseVO.tilePositon;
            radius = mainBaseVO.radius;
        }
        switch (buildingType)
        {
        case E_Building.None:
            break;

        case E_Building.MainBase:
            buildingVO = new MainBaseVO();
            count      = GetBuildMainbasePositionClose(_ConstructionInfos, ower);
            break;

        case E_Building.FarmLand:
            buildingVO = new FarmLandVO();
            count      = GetBuildPosition(_ConstructionInfos, center, radius, buildingVO.rect);
            break;

        case E_Building.GoldMine:
            buildingVO = new GoldMineVO();
            count      = GetBuildPosition(_ConstructionInfos, center, radius, buildingVO.rect);
            break;

        case E_Building.MilitaryCamp:
            buildingVO = new MilitaryCampVO();
            count      = GetBuildPosition(_ConstructionInfos, center, radius, buildingVO.rect);
            break;

        default:
            break;
        }
        ConstructionInfo constructionInfo = _SelectConstructionHandler(_ConstructionInfos, count, 0);

        if (constructionInfo.isRotation)
        {
            buildingVO.Rotate();
        }
        buildingVO.tilePositon = constructionInfo.position;
        var msgParam = TwoMsgParamsPool <PlayerVO, IBuildingVO> .Instance.Pop();

        msgParam.InitParams(ower, buildingVO);
        sender.Invoke(GlobalSetting.Cmd_ConfirmConstruction, msgParam);
    }