/// <summary> /// ダイヤモンドの獲得データを取得する /// </summary> /// <param name="stageNum">取得したいステージ数</param> /// <returns>該当ステージのダイヤモンドの獲得データ</returns> public DiamondAcquisitionData GetDiamondAcquisitionData(int stageNum) { // 取得したいステージ数がダイヤモンドの獲得データのリストの数以下なら(取得するデータが存在する場合) if (saveData.stageSaveData.diamondAcquisitionDataList.Count >= stageNum) { // 該当ステージのデータをコピーして返す DiamondAcquisitionData diamondAcquisitionData = new DiamondAcquisitionData(saveData.stageSaveData.diamondAcquisitionDataList[stageNum - 1]); return(diamondAcquisitionData); } // 該当ステージが存在しない場合は新しくDiamondAcquisitionDataを作って返す return(new DiamondAcquisitionData()); }
/// <summary> /// ステージの要素を更新する /// </summary> public void UpdateStageElement() { // ダイヤモンドの獲得情報をセーブデータから取得する DiamondAcquisitionData diamondAcquisitionData = SaveDataManager.Inst.GetDiamondAcquisitionData(stageSelectButton.StageNum + 1); for (int i = 0; i < diamondAcquisitionData.isDiamondAcquisitionList.Count; i++) { // ダイヤモンドの数だけ取得情報を表示するUIをアクティブにする itemList[i].gameObject.SetActive(true); // ダイヤモンドが取得されているかどうかを更新する itemList[i].UpdateColorByStatus(diamondAcquisitionData.isDiamondAcquisitionList[i]); } }
/// <summary> /// ダイヤモンドの獲得データをセーブする /// </summary> /// <param name="stageNum">セーブするステージ数</param> /// <param name="diamondAcquisitionData">セーブするダイヤモンドの獲得データ</param> public void SaveDiamondAcquisitionData(int stageNum, DiamondAcquisitionData diamondAcquisitionData) { // 既にセーブされてるステージのリストがこれからセーブするステージ数分ないなら // 今のステージ数に達するまで追加する while (saveData.stageSaveData.diamondAcquisitionDataList.Count < stageNum) { saveData.stageSaveData.diamondAcquisitionDataList.Add(new DiamondAcquisitionData()); } // 新しいリストの作成 DiamondAcquisitionData newDiamondAcquisitionData = new DiamondAcquisitionData(); // 新しいリストにダイヤを取ったかどうかのリストをまとめて追加 newDiamondAcquisitionData.isDiamondAcquisitionList = new List <bool>(diamondAcquisitionData.isDiamondAcquisitionList); // 新しく作ったリストで上書きする saveData.stageSaveData.diamondAcquisitionDataList[stageNum - 1] = newDiamondAcquisitionData; JsonDataSaver.Save <SaveData>(saveData); }
/// <summary> /// 初期化処理 /// </summary> void Initialize() { // ステージ数を取得する stageSerialNum = sceneSetting.StageNumber; // Diamondのタグのゲームオブジェクトをリストに格納 diamonds.AddRange(GameObject.FindGameObjectsWithTag(TagName.Diamond)); // DiamondのオブジェクトをX座標を元にソート diamonds.Sort( (obj1, obj2) => (int)(obj1.transform.position.x - obj2.transform.position.x) ); // ダイヤモンドの獲得データをセーブデータから取得してくる diamondAcquisitionData = SaveDataManager.Inst.GetDiamondAcquisitionData(stageSerialNum); // セーブされているデータとステージに存在しているダイヤモンドの数が同じなら if (diamonds.Count == diamondAcquisitionData.isDiamondAcquisitionList.Count) { // 既に取得している識別番号のダイヤモンドは非アクティブにする for (int i = 0; i < diamonds.Count; i++) { // 獲得しているダイヤモンド(trueになっているもの)は // 非表示(false)にしたいのでboolを反転して上書き diamonds[i].SetActive(!diamondAcquisitionData.isDiamondAcquisitionList[i]); } } // セーブされているデータとステージに存在しているダイヤモンドの数が違うなら(未プレイで仮データの状態) else { // リストを作り直す diamondAcquisitionData.isDiamondAcquisitionList = new List <bool>(); // ステージに存在しているダイヤモンドの数と同じになるまでセーブデータ用のダイヤモンドの獲得データ数を増やす while (diamonds.Count > diamondAcquisitionData.isDiamondAcquisitionList.Count) { diamondAcquisitionData.isDiamondAcquisitionList.Add(false); } } }
/// <summary> /// 同じデータを持ったクラスを作るための引数付きコンストラクタ /// </summary> /// <param name="diamondAcquisitionData">コピー元のDiamondAcquisitionDataクラス</param> public DiamondAcquisitionData(DiamondAcquisitionData diamondAcquisitionData) { // 引数のインスタンスを元にアイテム獲得したかどうかのリストをコピーする this.isDiamondAcquisitionList = new List <bool>(diamondAcquisitionData.isDiamondAcquisitionList); }