IEnumerator CoLoadAndInitScenariodData(AdvScenarioSettingData scenarioSetting) { string scenaioFileName = scenarioSetting.ScenaioFile; //既にある(エクスポートされたデータの可能性あり) if (scenarioDataTbl.ContainsKey(scenaioFileName)) { yield break; } string path = SettingDataManager.ScenarioSetting.ScenaioFileToPath(scenaioFileName); AdvScenarioData data = new AdvScenarioData(); AssetFile file = AssetFileManager.BackGroundLoad(path, this); while (!file.IsLoadEnd) { yield return(0); } data.Init(scenaioFileName, file.Csv, SettingDataManager); file.Unuse(this); scenarioDataTbl.Add(scenaioFileName, data); --loadingScenarioCount; }
/// <summary> /// エラーチェックのために実際にデータを作成 /// エクスポートするときに使用。 /// </summary> /// <param name="sheetName">シート名</param> /// <param name="grid">チェックするシナリオを記述したStringGrid</param> /// <param name="settingDataManger">データ管理の大本</param> /// <returns>シナリオデータ</returns> public AdvScenarioData ErrorCheck(string sheetName, StringGrid grid, AdvSettingDataManager settingDataManger) { AdvScenarioData scenario = new AdvScenarioData(); scenario.Init(sheetName, grid, settingDataManger); return(scenario); }
IEnumerator CoBackGroundDownloadResource(string label) { if (label.Length > 1 && label[0] == '*') { label = label.Substring(1); } AdvScenarioData data = FindScenarioData(label); if (data == null) { Debug.LogError(label + " is not found in all scenario"); yield break; } if (!data.IsAlreadyBackGroundLoad) { data.Download(this); foreach (AdvScenarioJumpData jumpData in data.JumpScenarioData) { //シナリオファイルのロード待ち while (!IsLoadEndScenarioLabel(jumpData)) { yield return(0); } yield return(StartCoroutine(CoBackGroundDownloadResource(jumpData.ToLabel))); } } }
//ブックのインポート void ImportScenarioBook(StringGridDictionary book, string path) { //シナリオデータ用のスクリプタブルオブジェクトを宣言 string scenarioAssetPath = Path.ChangeExtension(path, ScenarioAssetExt); AdvScenarioDataExported assetScenario = null; foreach (var sheet in book.List) { StringGrid grid = sheet.Grid; //設定データか、シナリオデータかチェック if (!AdvSettingDataManager.IsBootSheet(sheet.Name) && !AdvSettingDataManager.IsSettingsSheet(sheet.Name)) { //シナリオデータのアセットを作成 if (assetScenario == null) { assetScenario = UtageEditorToolKit.GetImportedAssetCreateIfMissing <AdvScenarioDataExported>(scenarioAssetPath); assetScenario.Clear(); } assetScenario.hideFlags = HideFlags.NotEditable; assetScenario.ParseFromExcel(sheet.Name, grid); if (assetSetting != null) { AdvScenarioData scenarioData = assetScenario.ErrorCheck(sheet.Name, grid, assetSetting); scenarioDataTbl.Add(sheet.Name, scenarioData); } } } //変更を反映 if (assetScenario != null) { Debug.Log(LanguageAdvErrorMsg.LocalizeTextFormat(AdvErrorMsg.Import, scenarioAssetPath)); EditorUtility.SetDirty(assetScenario); } }
//マクロ処理したインポートデータを作成する void ImportChapter(string chapterName, List <AdvImportBook> books, bool checkTextCount) { //シナリオアセットに各ブックのアセットを設定 AdvChapterData chapter = this.scenariosAsset.AddImportData(chapterName, books); AdvSettingDataManager setting = new AdvSettingDataManager(); setting.ImportedScenarios = this.scenariosAsset; chapter.MakeSettingImportData(this.macroManager); setting.BootInit(""); chapter.MakeScenarioImportData(setting, this.macroManager); AdvGraphicInfo.CallbackExpression = setting.DefaultParam.CalcExpressionBoolean; TextParser.CallbackCalcExpression = setting.DefaultParam.CalcExpressionNotSetParam; iTweenData.CallbackGetValue = setting.DefaultParam.GetParameter; List <AdvScenarioData> scenarioList = new List <AdvScenarioData>(); foreach (var book in books) { foreach (var grid in book.ImportGridList) { string sheetName = grid.SheetName; if (!AdvSheetParser.IsScenarioSheet(sheetName)) { continue; } if (scenarioDataTbl.ContainsKey(sheetName)) { Debug.LogError(sheetName + " is already contains in the sheets"); } else { AdvScenarioData scenario = new AdvScenarioData(grid); scenarioDataTbl.Add(sheetName, scenario); scenarioList.Add(scenario); } } } //シナリオデータとして解析、初期化 foreach (AdvScenarioData data in scenarioList) { data.Init(setting); } AdvGraphicInfo.CallbackExpression = null; TextParser.CallbackCalcExpression = null; iTweenData.CallbackGetValue = null; //シナリオラベルのリンクチェック ErrorCheckScenarioLabel(scenarioList); //文字数カウント if (checkTextCount) { CheckCharacterCount(scenarioList); } }
// 1シナリオデータ内の文字数をカウントしてチェック int CheckCharacterCount(AdvScenarioData data) { int count = 0; foreach (var keyValue in data.ScenarioLabels) { count += CheckCharacterCount(keyValue.Value); } return(count); }
/// <summary> /// 指定のシナリオラベルが既にロード終了しているか /// </summary> public bool IsLoadEndScenarioLabel(string label) { AdvScenarioData scenarioData = FindScenarioData(label); if (null != scenarioData) { return(true); } string msg = LanguageAdvErrorMsg.LocalizeTextFormat(AdvErrorMsg.NotFoundScnarioLabel, label); Debug.LogError(msg); return(false); }
/// <summary> /// シナリオラベルがあるかチェック /// </summary> /// <param name="label">シナリオラベル</param> /// <param name="egnoreData">チェックを無視するデータ</param> /// <returns>あればtrue。なければfalse</returns> bool IsExistScenarioLabel(string label, AdvScenarioData egnoreData = null) { foreach (AdvScenarioData data in scenarioDataTbl.Values) { if (data == egnoreData) { continue; } if (data.IsContainsScenarioLabel(label)) { return(true); } } return(false); }
/// <summary> /// 指定のシナリオラベルが既にロード終了しているか /// </summary> public bool IsLoadEndScenarioLabel(string scenarioLabel) { AdvScenarioData scenarioData = FindScenarioData(scenarioLabel); if (null != scenarioData) { return(true); } if (IsLoadEndAllScenario) { Debug.LogError(LanguageAdvErrorMsg.LocalizeTextFormat(AdvErrorMsg.NotFoundScnarioLabel, scenarioLabel)); } return(false); }
/// <summary> /// 指定のシナリオラベルが既にロード終了しているか /// </summary> public bool IsLoadEndScenarioLabel(AdvScenarioJumpData jumpData) { AdvScenarioData scenarioData = FindScenarioData(jumpData.ToLabel); if (null != scenarioData) { return(true); } if (IsLoadEndAllScenario) { string msg = LanguageAdvErrorMsg.LocalizeTextFormat(AdvErrorMsg.NotFoundScnarioLabel, jumpData.ToLabel); Debug.LogError(jumpData.FromRow.ToErrorString(msg)); } return(false); }
//シナリオのリソースをロード IEnumerator CoBackGroundDownloadScenarioResource(string scenarioLabel) { //シナリオファイルのロード待ち while (!IsLoadEndScenarioLabel(scenarioLabel)) { yield return(0); } AdvScenarioData data = FindScenarioData(scenarioLabel); if (!data.IsAlreadyBackGroundLoad) { data.Download(this); foreach (string jumpLabel in data.JumpScenarioLabels) { yield return(StartCoroutine(CoBackGroundDownloadResource(jumpLabel))); } } }
void AddScenario(AdvChapterData chapter) { foreach (var grid in chapter.ScenarioList) { string sheetName = grid.SheetName; if (!MacroManager.TryAddMacroData(sheetName, grid)) { //既にある(エクスポートされたデータの可能性あり) if (scenarioDataTbl.ContainsKey(sheetName)) { Debug.LogWarning(sheetName + " is already contains"); } else { AdvScenarioData data = new AdvScenarioData(sheetName, grid); chapter.ScenarioDataList.Add(data); scenarioDataTbl.Add(sheetName, data); } } } }
public void AddScenario(Dictionary <string, AdvScenarioData> scenarioDataTbl) { Profiler.BeginSample("AddScenario"); foreach (var book in DataList) { foreach (var sheet in book.ImportGridList) { if (scenarioDataTbl.ContainsKey(sheet.SheetName)) { Debug.LogErrorFormat("{0} is already contains", sheet.SheetName); continue; } Profiler.BeginSample("new Scenario"); sheet.InitLink(); AdvScenarioData scenario = new AdvScenarioData(sheet); scenarioDataTbl.Add(sheet.SheetName, scenario); Profiler.EndSample(); } } Profiler.EndSample(); }
IEnumerator CoBackGroundDownloadResource(string startScenario) { while (loadingScenarioCount > 0) { yield return(0); } AdvScenarioData data = FindScenarioData(startScenario); if (!data.IsAlreadyBackGroundLoad) { data.Download(this); foreach (AdvScenarioJumpData jumpData in data.JumpScenarioData) { //シナリオファイルのロード待ち while (!IsLoadEndScenarioLabel(jumpData)) { yield return(0); } yield return(StartCoroutine(CoBackGroundDownloadResource(jumpData.ToLabel))); } } }
/// <summary> /// シナリオデータのロードと初期化を開始 /// </summary> public void StartLoadAndInitScenariodData() { //シナリオのエクスポート済みのデータをまず初期化 foreach (AdvScenarioDataExported data in exportedScenarioDataTbl) { foreach (var exportedScenarioData in data.List) { exportedScenarioData.Grid.InitLink(); AdvScenarioData scenarioData = new AdvScenarioData(); scenarioData.Init(exportedScenarioData.Key, exportedScenarioData.Grid, SettingDataManager); scenarioDataTbl.Add(exportedScenarioData.Key, scenarioData); } } //エクスポートされたデータはもういらない。 //メモリ食うので参照を外す exportedScenarioDataTbl = null; loadingScenarioCount = SettingDataManager.ScenarioSetting.List.Count; //シナリオファイルをロード foreach (AdvScenarioSettingData scenarioSetting in SettingDataManager.ScenarioSetting.List) { StartCoroutine(CoLoadAndInitScenariodData(scenarioSetting)); } }
IEnumerator CoStartScenario(AdvEngine engine, string label, int page, string gallerySceneLabel) { if ((debugOutPut & DebugOutPut.Log) == DebugOutPut.Log) { Debug.Log("Jump : " + label + " :" + page); } if (!engine.DataManager.IsReadySettingData) { Debug.LogError("Not ready SettingData"); } isWaitLoading = true; while (!engine.DataManager.IsLoadEndScenarioLabel(label)) { yield return(0); } scearioData = engine.DataManager.FindScenarioData(label); Reset(); //指定のページまでジャンプ currentIndex = scearioData.SeekPageIndex(label, page); currentScenarioLabel = label; currentPage = (page < 0) ? page : page - 1; currentGallerySceneLabel = gallerySceneLabel; engine.Page.BeginPage(currentScenarioLabel, currentPage); UpdateSceneGallery(currentScenarioLabel, engine); isWaitLoading = false; if (preloadFileSet.Count > 0) { Debug.LogError("Error Preload Clear"); } AdvCommand command = scearioData.GetCommand(currentIndex); while (null != command) { //ロード command.Load(); //プリロードを更新 if (command.IsExistLoadFile()) { UpdatePreLoadFiles(currentIndex, MAX_PRELOAD_FILES); } //ロード待ち while (!command.IsLoadEnd()) { isWaitLoading = true; yield return(0); } isWaitLoading = false; ///シナリオラベルの更新 if (!string.IsNullOrEmpty(command.GetScenarioLabel())) { currentScenarioLabel = command.GetScenarioLabel(); currentPage = -1; ///ページ開始処理 engine.Page.BeginPage(currentScenarioLabel, currentPage); UpdateSceneGallery(currentScenarioLabel, engine); } //コマンド実行 if ((debugOutPut & DebugOutPut.Log) == DebugOutPut.Log) { Debug.Log("Command : " + command.GetType()); } command.DoCommand(engine); ///ページ末端・オートセーブデータを更新 if (command.IsTypePageEnd()) { ++currentPage; ///ページ開始処理 engine.Page.BeginPage(currentScenarioLabel, currentPage); engine.SaveManager.UpdateAutoSaveData(engine); } //コマンド実行後にファイルをアンロード command.Unload(); //コマンドの処理待ち while (command.Wait(engine)) { if ((debugOutPut & DebugOutPut.Waiting) == DebugOutPut.Waiting) { Debug.Log("Wait..." + command.GetType()); } yield return(0); } if ((debugOutPut & DebugOutPut.CommandEnd) == DebugOutPut.CommandEnd) { Debug.Log("End :" + command.GetType() + " " + label + ":" + page); } ///改ページ処理 if (command.IsTypePageEnd()) { engine.SystemSaveData.ReadData.AddReadPage(engine.Page.ScenarioLabel, engine.Page.PageNo); engine.Page.EndPage(); } //次のコマンドへ do { ++currentIndex; command = scearioData.GetCommand(currentIndex); //ifスキップチェック if (!ifManager.CheckSkip(command)) { break; } else { ///ページ末端 if (command.IsTypePageEnd()) { ++currentPage; } } } while (true); } EndScenario(); }
/// <summary> /// シナリオデータのロードと初期化を開始 /// </summary> public void StartLoadAndInitScenariodData() { //シナリオのエクスポート済みのデータをまず初期化 foreach (AdvScenarioDataExported data in exportedScenarioDataTbl) { foreach (var exportedScenarioData in data.List) { exportedScenarioData.Grid.InitLink(); AdvScenarioData scenarioData = new AdvScenarioData(); scenarioData.Init(exportedScenarioData.Key, exportedScenarioData.Grid, SettingDataManager); scenarioDataTbl.Add(exportedScenarioData.Key, scenarioData); } } //エクスポートされたデータはもういらない。 //メモリ食うので参照を外す exportedScenarioDataTbl = null; loadingScenarioCount = SettingDataManager.ScenarioSetting.List.Count; //シナリオファイルをロード foreach (AdvScenarioSettingData scenarioSetting in SettingDataManager.ScenarioSetting.List) { StartCoroutine( CoLoadAndInitScenariodData(scenarioSetting) ); } }
/// <summary> /// シナリオラベルがあるかチェック /// </summary> /// <param name="label">シナリオラベル</param> /// <param name="egnoreData">チェックを無視するデータ</param> /// <returns>あればtrue。なければfalse</returns> bool IsExistScenarioLabel(string label, AdvScenarioData egnoreData = null ) { foreach (AdvScenarioData data in scenarioDataTbl.Values) { if (data == egnoreData) continue; if (data.IsContainsScenarioLabel(label)) { return true; } } return false; }
IEnumerator CoLoadAndInitScenariodData(AdvScenarioSettingData scenarioSetting) { string scenaioFileName = scenarioSetting.ScenaioFile; //既にある(エクスポートされたデータの可能性あり) if (scenarioDataTbl.ContainsKey(scenaioFileName)) yield break; string path = SettingDataManager.ScenarioSetting.ScenaioFileToPath(scenaioFileName); AdvScenarioData data = new AdvScenarioData(); AssetFile file = AssetFileManager.BackGroundLoad(path, this); while (!file.IsLoadEnd) yield return 0; data.Init(scenaioFileName, file.Csv, SettingDataManager); file.Unuse(this); scenarioDataTbl.Add(scenaioFileName, data); --loadingScenarioCount; }
//マクロ処理したインポートデータを作成する void ImportChapter(string chapterName, List <AdvImportBook> books) { //チャプターデータを作成し、各シナリオを設定 string path = AssetDatabase.GetAssetPath(this.Project); path = FilePathUtil.Combine(FilePathUtil.GetDirectoryPath(path), chapterName); AdvChapterData chapter = LoadOrCreateChapterAsset(path); this.scenariosAsset.AddChapter(chapter); //初期化 chapter.ImportBooks(books, this.macroManager); //設定データの解析とインポート AdvSettingDataManager setting = new AdvSettingDataManager(); setting.ImportedScenarios = this.scenariosAsset; setting.BootInit(""); chapter.MakeScenarioImportData(setting, this.macroManager); EditorUtility.SetDirty(chapter); AdvGraphicInfo.CallbackExpression = setting.DefaultParam.CalcExpressionBoolean; TextParser.CallbackCalcExpression = setting.DefaultParam.CalcExpressionNotSetParam; iTweenData.CallbackGetValue = setting.DefaultParam.GetParameter; List <AdvScenarioData> scenarioList = new List <AdvScenarioData>(); foreach (var book in books) { foreach (var grid in book.ImportGridList) { grid.InitLink(); string sheetName = grid.SheetName; if (!AdvSheetParser.IsScenarioSheet(sheetName)) { continue; } if (scenarioDataTbl.ContainsKey(sheetName)) { Debug.LogError(sheetName + " is already contains in the sheets"); } else { AdvScenarioData scenario = new AdvScenarioData(grid); scenarioDataTbl.Add(sheetName, scenario); scenarioList.Add(scenario); } } } //シナリオデータとして解析、初期化 foreach (AdvScenarioData data in scenarioList) { data.Init(setting); } AdvGraphicInfo.CallbackExpression = null; TextParser.CallbackCalcExpression = null; iTweenData.CallbackGetValue = null; //シナリオラベルのリンクチェック ErrorCheckScenarioLabel(scenarioList); //文字数カウント if (Project.CheckTextCount) { CheckCharacterCount(scenarioList); } }
/// <summary> /// エラーチェックのために実際にデータを作成 /// エクスポートするときに使用。 /// </summary> /// <param name="sheetName">シート名</param> /// <param name="grid">チェックするシナリオを記述したStringGrid</param> /// <param name="settingDataManger">データ管理の大本</param> /// <returns>シナリオデータ</returns> public AdvScenarioData ErrorCheck(string sheetName, StringGrid grid, AdvSettingDataManager settingDataManger) { AdvScenarioData scenario = new AdvScenarioData(); scenario.Init( sheetName, grid, settingDataManger); return scenario; }