private void setCareerTiers(QbItemStruct careerSongsSec, int existingTierCount, int newTierCount, bool setUnlockIfOneTier) { //if setUnlockIfOneTier is false and we only have only 1 tier then don't unlock the new tiers, if tier 2 exists the lock is clones from that int add = newTierCount - existingTierCount; int clone; QbKey qkTier; QbKey qkNewTier; QbKey qkLastTier = QbKey.Create(string.Format("tier{0}", newTierCount.ToString())); for (int t = existingTierCount + 1; t <= newTierCount; t++) { int origTiersCount = Math.Min(existingTierCount, (_project.GameInfo.Game == Game.GH3_Wii) ? 8 : 6); //6 for aerosmith clone = t % origTiersCount; if (clone == 0) clone = origTiersCount; qkTier = QbKey.Create(string.Format("tier{0}", clone.ToString())); qkNewTier = QbKey.Create(string.Format("tier{0}", t.ToString())); QbItemStruct clonedTier = careerSongsSec.FindItem(qkTier, false).Clone() as QbItemStruct; clonedTier.ItemQbKey = qkNewTier.Clone(); if (clone == 1) //if tier 1 is being cloned then check is tier 1 has the unlocked value and make this the same { QbItemStruct tier2 = careerSongsSec.FindItem(QbKey.Create("tier2"), false) as QbItemStruct; if (tier2 != null) { tier2 = tier2.Clone() as QbItemStruct; QbItemInteger ul = tier2.FindItem(QbKey.Create("defaultunlocked"), false) as QbItemInteger; if (ul == null) //remove the cloned item { if ((ul = clonedTier.FindItem(QbKey.Create("defaultunlocked"), false) as QbItemInteger) != null) clonedTier.RemoveItem(ul); } } else if (!setUnlockIfOneTier) { //clear lock QbItemInteger ul = clonedTier.FindItem(QbKey.Create("defaultunlocked"), false) as QbItemInteger; if (ul != null) clonedTier.RemoveItem(ul); } } careerSongsSec.AddItem(clonedTier); } while (careerSongsSec.Items.Count > 3 && careerSongsSec.Items[careerSongsSec.Items.Count - 1].ItemQbKey.Crc != qkLastTier.Crc) careerSongsSec.RemoveItem(careerSongsSec.Items[careerSongsSec.Items.Count - 1]); //remove last item careerSongsSec.Root.AlignPointers(); careerSongsSec.Root.IsValid(); }
/// <summary> /// Some items are not the correct type, replace them. /// </summary> /// <param name="song"></param> /// <param name="item"></param> /// <returns></returns> private QbItemFloat replaceItemIntForFloat(QbItemStruct song, QbItemInteger item) { QbItemFloat f = new QbItemFloat(song.Root); f.Create(QbItemType.StructItemFloat); f.ItemQbKey = item.ItemQbKey; f.Values[0] = item.Values[0]; song.InsertItem(f, item, true); song.RemoveItem(item); song.Root.AlignPointers(); return f; }