void SelectArea(/*MasterDataDefineLabel.AreaCategory[] areaCategoryArray*/)
    {
        m_CurrentRegionMaster = MasterFinder <MasterDataRegion> .Instance.Find((int)MainMenuParam.m_RegionID);

        if (m_CurrentRegionMaster != null)
        {
            m_RegionMasterList = MainMenuUtil.CreateRegionList(m_CurrentRegionMaster.category);
            if (m_RegionMasterList.IsNullOrEmpty() == false)
            {
                if (m_RegionMasterList.Contains(m_CurrentRegionMaster) == false)
                {
                    // 開催期間が切れた等で有効なデータが無い場合
                    ResidentParam.m_RegionIds[(int)m_CurrentRegionMaster.category] = 0;
                    openWarningRegionDialog();
                    return;
                }
            }
        }

        MasterDataAreaCategory[] areaCategoryMasterArray = null;
        List <AreaDataContext>   areaDataList            = new List <AreaDataContext>();

        new SerialProcess()
        .Add(next =>
        {
            // インジケーターを表示
            LoadingManager.Instance.RequestLoadingStart(LOADING_TYPE.ASSETBUNDLE);

            if (m_CurrentRegionMaster != null)
            {
                m_AreaSelect.IsViewRegionButton = (m_RegionMasterList != null && m_RegionMasterList.Count > 1);
                ResidentParam.m_RegionIds[(int)m_CurrentRegionMaster.category] = m_CurrentRegionMaster.fix_id;
                areaCategoryMasterArray = MasterFinder <MasterDataAreaCategory> .Instance.SelectWhere("where region_id = ?", MainMenuParam.m_RegionID).ToArray();

                // Region ID毎の背景画像をAssetBundleからセットする.
                // AssetBundlePathMasterに該当のAssetBundleがあるか確認し, なければデフォルト画像を表示する.
                SetAreaBackground(m_CurrentRegionMaster.category, m_CurrentRegionMaster.fix_id, next);

                switch (m_CurrentRegionMaster.category)
                {
                case MasterDataDefineLabel.REGION_CATEGORY.STORY:
                    m_AreaSelect.currentCategory = MasterDataDefineLabel.AreaCategory.RN_STORY;
                    MainMenuHeader.UnderMsgRequest(GameTextUtil.GetText("kk99p_description"));
                    break;

                case MasterDataDefineLabel.REGION_CATEGORY.MATERIAL:
                    m_AreaSelect.currentCategory = MasterDataDefineLabel.AreaCategory.RN_SCHOOL;
                    MainMenuHeader.UnderMsgRequest(GameTextUtil.GetText("kk101p_description"));
                    break;

                case MasterDataDefineLabel.REGION_CATEGORY.EVENT:
                    m_AreaSelect.currentCategory = MasterDataDefineLabel.AreaCategory.RN_EVENT;
                    MainMenuHeader.UnderMsgRequest(GameTextUtil.GetText("kk100p_description"));
                    break;

                default:
                    break;
                }
            }
            else
            {
                //MasterDataRegionがなかった時のセーフティ(データが設定されていないサーバーに接続した場合)
#if BUILD_TYPE_DEBUG
                string messageText = "MasterDataRegionに有効なデータがありませんでした。\n"
                                     + "プランナーさんにマスターデータ設定が\n間違っていないか確認しください。\n"
                                     + "\n不明な場合は\nクライアントプログラマに報告してください。";
                Dialog dloalog = DialogManager.Open1B_Direct("No MasterDataRegion", messageText, "common_button7", true, true)
                                 .SetOkEvent(() => { });
#endif
                m_AreaSelect.IsViewRegionButton = false;
                if (m_AreaCategory == null)
                {
                    m_AreaCategory = new MasterDataDefineLabel.AreaCategory[] { MasterDataDefineLabel.AreaCategory.RN_STORY };
                }

                string sqlInString      = string.Join(",", Array.ConvertAll <MasterDataDefineLabel.AreaCategory, string>(m_AreaCategory, o => o.ToString("D")));
                areaCategoryMasterArray = MasterFinder <MasterDataAreaCategory> .Instance.SelectWhere(string.Format(" where area_cate_type in( {0} )", sqlInString)).ToArray();

                // 背景のリソース設定
                if (0 <= Array.IndexOf(m_AreaCategory, MasterDataDefineLabel.AreaCategory.RN_STORY))
                {
                    m_AreaSelect.BackGroundImage = m_AreaSelect.backgroundSprites[0];
                    m_AreaSelect.currentCategory = MasterDataDefineLabel.AreaCategory.RN_STORY;
                    MainMenuHeader.UnderMsgRequest(GameTextUtil.GetText("kk99p_description"));
                }
                else if (0 <= Array.IndexOf(m_AreaCategory, MasterDataDefineLabel.AreaCategory.RN_SCHOOL))
                {
                    m_AreaSelect.BackGroundImage = m_AreaSelect.backgroundSprites[1];
                    m_AreaSelect.currentCategory = MasterDataDefineLabel.AreaCategory.RN_SCHOOL;
                    MainMenuHeader.UnderMsgRequest(GameTextUtil.GetText("kk101p_description"));
                }
                else if (0 <= Array.IndexOf(m_AreaCategory, MasterDataDefineLabel.AreaCategory.RN_EVENT))
                {
                    m_AreaSelect.BackGroundImage = m_AreaSelect.backgroundSprites[2];
                    m_AreaSelect.currentCategory = MasterDataDefineLabel.AreaCategory.RN_EVENT;
                    MainMenuHeader.UnderMsgRequest(GameTextUtil.GetText("kk100p_description"));
                }
                // エリアアイコン読み込みに遷移.
                next();
            }
        }).Add(next =>
        {
            // エリアカテゴリリストの生成
            m_AreaSelect.ClearAreaData();
            m_areaIcons.Clear();

            AssetBundlerMultiplier multiplier = AssetBundlerMultiplier.Create();
            if (areaCategoryMasterArray != null)
            {
                for (int i = 0; i < areaCategoryMasterArray.Length; ++i)
                {
                    string area_title = areaCategoryMasterArray[i].area_cate_name;
                    uint area_cate_id = areaCategoryMasterArray[i].fix_id;
                    Vector2 area_pos  = new Vector2(areaCategoryMasterArray[i].btn_posx_offset, areaCategoryMasterArray[i].btn_posy_offset * -1);

                    int index = m_areaIcons.Count;     // areaCategoryMasterArrayのうち不採用のデータがあるので・・・

                    var model = makeAreaSelectModel(index, area_cate_id);

                    AreaDataContext newArea = MainMenuUtil.CreateRNAreaCategory(area_cate_id, model);
                    if (newArea != null)
                    {
                        newArea.Title = area_title;
                        newArea.PosX  = area_pos.x;
                        newArea.PosY  = area_pos.y;

                        // アセットバンドルの読み込み
                        string assetBundleName = string.Format("areamapicon_{0}", area_cate_id);
                        multiplier.Add(AssetBundler.Create().
                                       Set(assetBundleName,
                                           (o) =>
                        {
                            newArea.IconImage      = o.GetAsset <Sprite>();
                            newArea.IconImage_mask = o.GetTexture(newArea.IconImage.name + "_mask", TextureWrapMode.Clamp);
                        },
                                           (s) =>
                        {
                            newArea.IconImage = ResourceManager.Instance.Load("maeishoku_icon");
                        }).Load());

                        areaDataList.Add(newArea);
                        m_areaIcons.Add(model);
                    }
                }

                //成長ボスアイコン
                if (m_CurrentRegionMaster.category == MasterDataDefineLabel.REGION_CATEGORY.EVENT &&
                    m_ChallengeAreaCategory != null)
                {
                    uint area_cate_id = m_ChallengeAreaCategory.fix_id;
                    Vector2 area_pos  = new Vector2(m_ChallengeAreaCategory.btn_posx_offset, m_ChallengeAreaCategory.btn_posy_offset * -1);
                    int index         = m_areaIcons.Count; // areaCategoryMasterArrayのうち不採用のデータがあるので・・・
                    var model         = makeAreaSelectModel(index, area_cate_id, true);
                    model.isChallenge = true;

                    AreaDataContext newArea = new AreaDataContext(model);
                    newArea.m_AreaIndex     = m_ChallengeAreaCategory.fix_id;
                    newArea.IsViewFlag      = false;
                    //newArea.FlagImage = ResourceManager.Instance.Load("completed");
                    //newArea.FlagImage = ResourceManager.Instance.Load("clear");
                    newArea.IsAreaNew = false;

                    newArea.Title      = GameTextUtil.GetText("challenge_quest_title");
                    newArea.PosX       = area_pos.x;
                    newArea.PosY       = area_pos.y;
                    newArea.m_bufEvent = MainMenuUtil.IsCheckChallengeAmend();

                    // アセットバンドルの読み込み
                    string assetBundleName = string.Format("areamapicon_{0}", area_cate_id);
                    multiplier.Add(AssetBundler.Create().
                                   Set(assetBundleName,
                                       (o) =>
                    {
                        newArea.IconImage      = o.GetAsset <Sprite>();
                        newArea.IconImage_mask = o.GetTexture(newArea.IconImage.name + "_mask", TextureWrapMode.Clamp);
                    },
                                       (s) =>
                    {
                        newArea.IconImage = ResourceManager.Instance.Load("maeishoku_icon");
                    }).Load());

                    areaDataList.Add(newArea);
                    m_areaIcons.Add(model);
                }
            }
#if BUILD_TYPE_DEBUG
            else if (m_CurrentRegionMaster != null)
            {
                // MasterDataAreaCategory がなかった時のエラーダイアログ.
                string messageText = "MasterDataAreaCategory に\n有効なデータがありませんでした。\n"
                                     + "プランナーさんにマスターデータ設定が\n間違っていないか確認してください。\n"
                                     + "\n不明な場合は\nクライアントプログラマに報告してください。";
                Dialog dloalog = DialogManager.Open1B_Direct("No MasterDataAreaCategory", messageText, "common_button7", true, true)
                                 .SetOkEvent(() => { });
            }
#endif

            multiplier.Load(() =>
            {
                next();
            },
                            () =>
            {
                // エリアアイコンで読み込み出来ないものがあった場合も、
                // 仮アイコンが設定されるため、アイコンリストを表示する.(進行不能対策)
                next();
            });
        }).Add(next =>
        {
            SetAreaIconRoutine(areaDataList);
            m_AreaSelect.checkAnimationFinish();
            // インジケーターを閉じる
            LoadingManager.Instance.RequestLoadingFinish(LOADING_TYPE.ASSETBUNDLE);
        }).Flush();
    }
Beispiel #2
0
    public RegionDialog AddRegionList(MasterDataRegion[] regionArray, int selectIndex, Action <RegionContext> action, Action <RegionDialog> loadWaitAction)
    {
        if (regionArray == null)
        {
            return(this);
        }

        RegionList.Clear();

        // インジケーターを表示
        if (LoadingManager.Instance != null)
        {
            LoadingManager.Instance.RequestLoadingStart(LOADING_TYPE.ASSETBUNDLE);
        }
        AssetBundlerMultiplier multiplier = AssetBundlerMultiplier.Create();

        for (int i = 0; i < regionArray.Length; i++)
        {
            MasterDataRegion regionMaster = regionArray[i];
            RegionContext    newData      = new RegionContext();
            newData.master        = regionMaster;
            newData.Title         = regionMaster.name;
            newData.IsSelect      = (i == selectIndex);
            newData.IconImage     = null;
            newData.DidSelectItem = OnSelectItem;

            // アセットバンドルの読み込み
            uint[] area_cate_ids = MainMenuUtil.CreateRegionMasterContainedAreaCategoryIDs(regionMaster);
            if (area_cate_ids.Length == 0)
            {
                // 開催期間が切れたなどで、有効なクエストが存在しない
                continue;
            }

            uint area_cate_id = area_cate_ids[area_cate_ids.Length - 1];
            if (area_cate_id != 0)
            {
                string assetBundleName = string.Format("areamapicon_{0}", area_cate_id);
                multiplier.Add(AssetBundler.Create().
                               Set(assetBundleName,
                                   (o) =>
                {
                    newData.IconImage      = o.GetAsset <Sprite>();
                    newData.IconImage_mask = o.GetTexture(newData.IconImage.name + "_mask", TextureWrapMode.Clamp);
                },
                                   (s) =>
                {
                    newData.IconImage = ResourceManager.Instance.Load("maeishoku_icon");
                }).Load());
            }
            else
            {
                newData.IconImage = ResourceManager.Instance.Load("maeishoku_icon");
            }

            RegionList.Add(newData);
        }


        multiplier.Load(() =>
        {
            // インジケーターを閉じる
            if (LoadingManager.Instance != null)
            {
                LoadingManager.Instance.RequestLoadingFinish(LOADING_TYPE.ASSETBUNDLE);
            }
            if (loadWaitAction != null)
            {
                loadWaitAction(this);
            }
        },
                        () =>
        {
            // インジケーターを閉じる
            if (LoadingManager.Instance != null)
            {
                LoadingManager.Instance.RequestLoadingFinish(LOADING_TYPE.ASSETBUNDLE);
            }
            if (loadWaitAction != null)
            {
                loadWaitAction(this);
            }
        });

        m_SelectIndex = selectIndex;
        DidSelectItem = action;

        return(this);
    }