using System; using System.Collections.Generic; using DarkTonic.MasterAudio; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; // Token: 0x02000097 RID: 151 public class Books : MonoBehaviour { // Token: 0x06000E67 RID: 3687 RVA: 0x0011471A File Offset: 0x0011291A private void Start() { this.tr = base.gameObject.transform; } // Token: 0x06000E68 RID: 3688 RVA: 0x00114730 File Offset: 0x00112930 public void CloseMenu() { if (Links.x.characterSheet.open) { MasterAudio.PlaySoundAndForget("Paper Open 2", 1f, new float?(1f), 0f, "", null); } this.ReturnSelected(); for (int i = 0; i < this.spells.Count; i++) { if (this.spells[i].star) { this.spells[i].star = null; } Links.x.cellar.ReturnPooledUIObject(49, this.spells[i].gameObject); } this.RemoveStars(); this.spells.Clear(); this.open = false; this.anim.Play("CloseSubMenu"); Links.x.characterSheet.CheckLevelUp(); if (Links.x.joy) { Links.x.characterSheet.closeText.SetActive(true); } if (Links.x.joy) { Links.x.characterSheet.DraggingButtons(false); } if (Links.x.joy) { if (this.clickedOpen) { if (this.clickedOpen.activeSelf && this.clickedOpen.activeInHierarchy) { Links.x.gameplay.SetInteractableSelected(EventSystem.current, this.clickedOpen); return; } Links.x.gameplay.SetInteractableSelected(EventSystem.current, Links.x.characterSheet.character.characterSheetPortrait.gameObject); return; } else { Links.x.gameplay.SetInteractableSelected(EventSystem.current, Links.x.characterSheet.character.characterSheetPortrait.gameObject); } } } // Token: 0x06000E69 RID: 3689 RVA: 0x00114903 File Offset: 0x00112B03 public void OpenWords() { this.currentType = "Words"; this.SetGrid("Words", Links.x.characterSheet.character, false); } // Token: 0x06000E6A RID: 3690 RVA: 0x0011492C File Offset: 0x00112B2C public void OpenSpells() { this.favoriteMessage.SetActive(false); this.RemoveStars(); MasterAudio.PlaySoundAndForget("Paper Open", 1f, new float?(1f), 0f, "", null); if (Links.x.arrowKit.open) { Links.x.arrowKit.CloseMenu(); } if (Links.x.characterSheet.note.activeSelf) { Links.x.characterSheet.CloseNote(); } this.currentType = "Spells"; this.SetGrid("Spells", Links.x.characterSheet.character, false); Links.x.characterSheet.levelUpButton.SetActive(false); if (Links.x.joy) { Links.x.characterSheet.closeText.SetActive(false); } if (Links.x.joy) { Links.x.characterSheet.DraggingButtons(true); if (this.spells.Count > 0) { Links.x.gameplay.SetInteractableSelected(EventSystem.current, this.spells[0].gameObject); } } if (Links.x.characterSheet.minstrel) { this.closeButton.SetActive(false); } else { this.closeButton.SetActive(true); } Links.x.characterSheet.SetPortraitNav(false); if (Links.x.joy) { this.controllerSpellDelete.spriteAsset = Links.x.GetSpriteSheetAsset(Links.x.gameplay.currentSpriteSheetAsset); this.str.Clear(); this.str.Append("Toggle Favorite "); this.str.Append("Delete Spell "); this.controllerSpellDelete.text = this.str.ToString(); return; } this.controllerSpellDelete.text = ""; } // Token: 0x06000E6B RID: 3691 RVA: 0x00114BB0 File Offset: 0x00112DB0 public void OpenSongs() { this.controllerSpellDelete.text = ""; this.RemoveStars(); this.favoriteMessage.SetActive(false); MasterAudio.PlaySoundAndForget("Paper Open", 1f, new float?(1f), 0f, "", null); if (Links.x.arrowKit.open) { Links.x.arrowKit.CloseMenu(); } if (Links.x.characterSheet.note.activeSelf) { Links.x.characterSheet.CloseNote(); } this.autoCast.SetActive(false); this.currentType = "Songs"; this.SetGrid("Songs", Links.x.characterSheet.character, false); Links.x.characterSheet.levelUpButton.SetActive(false); if (Links.x.joy) { Links.x.characterSheet.closeText.SetActive(false); } if (Links.x.joy) { Links.x.characterSheet.DraggingButtons(true); if (this.spells.Count > 0 && !Links.x.characterSheet.minstrel) { Links.x.gameplay.SetInteractableSelected(EventSystem.current, this.spells[0].gameObject); } } if (Links.x.characterSheet.minstrel) { this.closeButton.SetActive(false); } else { this.closeButton.SetActive(true); } this.knowledgeText.enabled = false; this.krt.gameObject.SetActive(false); Links.x.characterSheet.SetPortraitNav(false); } // Token: 0x06000E6C RID: 3692 RVA: 0x00114D74 File Offset: 0x00112F74 private void Update() { if (Links.x.characterSheet.open && (Links.x.characterSheet.character != this.character || this.doUpdate)) { this.favoriteMessage.SetActive(false); this.RemoveStars(); this.SetGrid(this.currentType, Links.x.characterSheet.character, false); this.doUpdate = false; } } // Token: 0x06000E6D RID: 3693 RVA: 0x00114DEB File Offset: 0x00112FEB public void UpdateAbilityTriggers() { } // Token: 0x06000E6E RID: 3694 RVA: 0x00114DF0 File Offset: 0x00112FF0 public void Equipped() { if (this.savedCharacter != Links.x.characterSheet.character) { this.abilityNames = Links.x.characterSheet.character.stats.abilityNames; this.uniqueNames = Links.x.characterSheet.character.stats.uniqueNames; this.spellLevels = Links.x.characterSheet.character.stats.abilityLevels; this.abilityCosts = Links.x.characterSheet.character.stats.abilityCost; this.abilityRows = Links.x.characterSheet.character.stats.abilityRows; } this.savedCharacter = Links.x.characterSheet.character; this.songPointsText.text = Links.x.characterSheet.character.stats.songPoints.ToString(); } // Token: 0x06000E6F RID: 3695 RVA: 0x00114EF8 File Offset: 0x001130F8 public void SetGrid(string type, Character c, bool allSpells) { this.ReturnSelected(); base.gameObject.SetActive(true); this.open = true; this.character = c; if (this.savedCharacter != Links.x.characterSheet.character) { this.abilityNames = Links.x.characterSheet.character.stats.abilityNames; this.uniqueNames = Links.x.characterSheet.character.stats.uniqueNames; this.spellLevels = Links.x.characterSheet.character.stats.abilityLevels; this.abilityCosts = Links.x.characterSheet.character.stats.abilityCost; this.abilityRows = Links.x.characterSheet.character.stats.abilityRows; } this.savedCharacter = Links.x.characterSheet.character; int count = this.abilityNames.Count; if (this.spells.Count > 0) { for (int i = 0; i < this.spells.Count; i++) { if (this.spells[i].star) { this.spells[i].star = null; } Links.x.cellar.ReturnPooledUIObject(49, this.spells[i].gameObject); } this.spells.Clear(); } if (allSpells) { this.headerText.text = c.stats.GetName() + "'s "; TextMeshProUGUI textMeshProUGUI = this.headerText; textMeshProUGUI.text += " Spell Variants"; } if (type == "Spells") { this.pointsObject.SetActive(false); this.knowledgeText.enabled = true; this.knowledgeText.text = ""; this.knowledge = this.character.stats.knowledge; this.str.Clear(); this.str.Append("\n\nLearned Effects\n"); for (int j = 0; j < this.knowledge.Count; j++) { this.str.Append(""); Library.Pagan paganRow = Links.x.library.GetPaganRow(this.knowledge[j]); this.str.Append(paganRow._DisplayName); this.str.Append("\n"); this.str.Append(paganRow._Description); this.str.Append("\n\n"); } if (this.knowledge.Count == 0) { this.str.Append("None\n"); } this.str.Append("\n\n"); this.knowledgeText.text = this.str.ToString(); this.krt.sizeDelta = new Vector2(this.krt.sizeDelta.x, this.knowledgeText.preferredHeight); } else { this.pointsObject.SetActive(true); } if ((type == "Spells" && c.stats.HasSpellbook()) || (type == "Songs" && c.stats.HasSongbook())) { for (int k = 0; k < count; k++) { bool flag = false; if (this.abilityRows[k]._IsSpell && allSpells) { flag = true; } string mainSkill = this.abilityRows[k]._MainSkill; if (this.abilityRows[k]._IsSpell && type == "Spells" && !allSpells) { flag = true; } if (!this.abilityRows[k]._IsSpell && !this.abilityRows[k]._IsSong && !allSpells && type == "Words") { flag = true; } if (this.abilityRows[k]._IsSong && type == "Songs" && !allSpells) { flag = true; } if (flag) { GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(49); pooledGameObject.SetActive(true); pooledGameObject.transform.SetParent(this.gridTransform, false); SkillButton component = pooledGameObject.GetComponent(); component.inSpellMenu = false; if (allSpells || type == "Spells") { component.abilityName = this.abilityNames[k]; component.uniqueName = this.uniqueNames[k]; component.index = k; component.abilityCost = (float)((int)this.abilityCosts[k].x); component.character = c; component.spellStats = this.spellLevels[k]; if (allSpells) { component.inSpellMenu = true; } else { component.inSpellMenu = false; } if (this.character.stats.IsFavoriteSpell(component.uniqueName) && !component.star) { this.AddStar(component); } } if (type == "Songs") { component.abilityName = this.abilityNames[k]; component.index = k; component.character = c; component.componentID = -1; component.uniqueName = this.uniqueNames[k]; component.inSpellMenu = false; } if (type == "Words") { component.abilityName = this.abilityNames[k]; component.index = k; component.character = c; component.componentID = -1; component.uniqueName = this.uniqueNames[k]; } component.inWindow = false; component.Setup(true, true); this.spells.Add(component); pooledGameObject.transform.localPosition = new Vector3(pooledGameObject.transform.localPosition.x, pooledGameObject.transform.localPosition.y, 0f); } } } if (this.spells.Count > 0) { this.noAbilitiesText.text = ""; this.headerText.text = c.stats.GetName() + "'s "; if (type == "Spells") { TextMeshProUGUI textMeshProUGUI2 = this.headerText; textMeshProUGUI2.text += "Spellbook"; } if (type == "Songs") { TextMeshProUGUI textMeshProUGUI3 = this.headerText; textMeshProUGUI3.text += "Songbook"; } if (type == "Words") { TextMeshProUGUI textMeshProUGUI4 = this.headerText; textMeshProUGUI4.text += " Words"; } if (this.autoCast && !allSpells && this.currentType == "Spells") { this.autoCast.SetActive(true); } if (type == "Spells") { this.favoriteMessage.SetActive(true); } } else { this.str.Clear(); this.str.Append(c.stats.GetName()); if (type == "Spells") { if (!c.stats.HasSpellbook()) { this.str.Append(" doesn't have a spellbook"); } else { this.str.Append(" has not crafted any spells yet"); } this.headerText.text = ""; } if (type == "Songs") { if (!c.stats.HasSongbook()) { this.str.Append(" doesn't have a songbook"); } else { this.str.Append(" hasn't learned any songs yet"); } this.headerText.text = ""; } if (type == "Words") { this.str.Append("Words of Power"); } this.str.Append("."); this.noAbilitiesText.text = this.str.ToString(); if (this.autoCast) { this.autoCast.SetActive(false); } } if (this.empty && this.krt) { if (type == "Spells") { this.autoCast.transform.SetAsFirstSibling(); this.empty.gameObject.transform.SetAsLastSibling(); this.krt.gameObject.transform.SetAsLastSibling(); this.empty.SetActive(true); this.krt.gameObject.SetActive(true); this.favoriteMessage.transform.SetAsLastSibling(); } else { this.krt.gameObject.SetActive(false); this.empty.SetActive(false); } } this.UpdateSelected(); } // Token: 0x06000E70 RID: 3696 RVA: 0x00115818 File Offset: 0x00113A18 public void RemoveStars() { for (int i = 0; i < this.stars.Count; i++) { this.stars[i].SetActive(false); this.stars[i].transform.SetParent(this.tr); } } // Token: 0x06000E71 RID: 3697 RVA: 0x0011586C File Offset: 0x00113A6C public void AddStar(SkillButton b) { GameObject gameObject = null; bool flag = false; for (int i = 0; i < this.stars.Count; i++) { if (!this.stars[i]) { flag = true; } else if (!this.stars[i].activeSelf) { gameObject = this.stars[i]; break; } } if (flag) { this.stars.RemoveAll((GameObject item) => item == null); } if (!gameObject) { gameObject = Object.Instantiate(this.stars[0], Vector3.zero, Quaternion.Euler(Vector3.zero), null); this.stars.Add(gameObject); } b.star = gameObject; b.star.SetActive(true); b.star.transform.SetParent(b.transform); b.star.transform.position = b.transform.position; gameObject.transform.localScale = new Vector3(1f, 1f, 1f); b.star.transform.localPosition = new Vector3(b.star.transform.localPosition.x, b.star.transform.localPosition.y, 0f); } // Token: 0x06000E72 RID: 3698 RVA: 0x001159D8 File Offset: 0x00113BD8 public void AddFavoriteSpell(SkillButton b) { if (!this.open) { return; } if (this.character.stats.IsFavoriteSpell(b.uniqueName)) { this.RemoveFavoriteSpell(b); return; } this.character.stats.AddFavoriteSpell(b.uniqueName); if (!b.star) { this.AddStar(b); } } // Token: 0x06000E73 RID: 3699 RVA: 0x00115A38 File Offset: 0x00113C38 public void RemoveFavoriteSpell(SkillButton b) { this.character.stats.RemoveFavoriteSpell(b.uniqueName); if (b.star) { b.star.SetActive(false); b.star = null; } } // Token: 0x06000E74 RID: 3700 RVA: 0x00115A70 File Offset: 0x00113C70 public void UpdateSelected() { foreach (Image image in this.selectedImages) { image.enabled = false; } if (this.currentType == "Songs") { this.equippedList = this.character.stats.equippedSongList; } if (this.currentType == "Songs") { int num = 0; int count = this.spells.Count; for (int i = 0; i < count; i++) { if (this.equippedList.Contains(this.spells[i].uniqueName)) { this.selectedImages[num].enabled = true; this.selectedImages[num].gameObject.transform.SetParent(this.spells[i].iconBG.gameObject.transform, false); this.selectedImages[num].gameObject.transform.localPosition = new Vector3(-6f, 4f, 0f); num++; } } } this.Equipped(); } // Token: 0x06000E75 RID: 3701 RVA: 0x00115BC0 File Offset: 0x00113DC0 public void ReturnSelected() { } // Token: 0x06000E76 RID: 3702 RVA: 0x00115BC4 File Offset: 0x00113DC4 public void CloseSpellDelete() { this.deletePopup.SetActive(false); if (Links.x.joy) { if (this.spells.Count > 0) { Links.x.gameplay.SetInteractableSelected(EventSystem.current, this.spells[0].gameObject); return; } Links.x.gameplay.SetInteractableSelected(EventSystem.current, Links.x.characterSheet.character.characterSheetPortrait.gameObject); } } // Token: 0x06000E77 RID: 3703 RVA: 0x00115C4A File Offset: 0x00113E4A public void OpenSpellDelete(string spellname) { this.toDelete = spellname; this.deletePopup.SetActive(true); this.deletePopupText.text = "Are you sure you want to delete " + spellname + "?"; } // Token: 0x06000E78 RID: 3704 RVA: 0x00115C7A File Offset: 0x00113E7A public void Delete() { this.character.stats.RemoveSpell(this.toDelete); this.SetGrid("Spells", this.character, false); this.CloseSpellDelete(); } // Token: 0x040016E9 RID: 5865 public List abilityRows; // Token: 0x040016EA RID: 5866 private List uniqueNames; // Token: 0x040016EB RID: 5867 private List abilityNames; // Token: 0x040016EC RID: 5868 private List abilityCosts; // Token: 0x040016ED RID: 5869 private List spellLevels; // Token: 0x040016EE RID: 5870 public List spells = new List(); // Token: 0x040016EF RID: 5871 public TextMeshProUGUI deletePopupText; // Token: 0x040016F0 RID: 5872 public TextMeshProUGUI noAbilitiesText; // Token: 0x040016F1 RID: 5873 public TextMeshProUGUI headerText; // Token: 0x040016F2 RID: 5874 public TextMeshProUGUI songPointsText; // Token: 0x040016F3 RID: 5875 public TextMeshProUGUI knowledgeText; // Token: 0x040016F4 RID: 5876 public TextMeshProUGUI controllerSpellDelete; // Token: 0x040016F5 RID: 5877 public GameObject deletePopup; // Token: 0x040016F6 RID: 5878 private StringFast str = new StringFast(64); // Token: 0x040016F7 RID: 5879 public string toDelete; // Token: 0x040016F8 RID: 5880 public Character character; // Token: 0x040016F9 RID: 5881 public Character savedCharacter; // Token: 0x040016FA RID: 5882 public Transform gridTransform; // Token: 0x040016FB RID: 5883 public Animator anim; // Token: 0x040016FC RID: 5884 public string currentType; // Token: 0x040016FD RID: 5885 public bool open; // Token: 0x040016FE RID: 5886 public List selectedImages = new List(); // Token: 0x040016FF RID: 5887 private List equippedList; // Token: 0x04001700 RID: 5888 public GameObject pointsObject; // Token: 0x04001701 RID: 5889 public bool doUpdate; // Token: 0x04001702 RID: 5890 public GameObject clickedOpen; // Token: 0x04001703 RID: 5891 public GameObject closeButton; // Token: 0x04001704 RID: 5892 private List knowledge; // Token: 0x04001705 RID: 5893 public RectTransform krt; // Token: 0x04001706 RID: 5894 public GameObject empty; // Token: 0x04001707 RID: 5895 public GameObject autoCast; // Token: 0x04001708 RID: 5896 public GameObject favoriteMessage; // Token: 0x04001709 RID: 5897 public List stars = new List(); // Token: 0x0400170A RID: 5898 private Transform tr; }