1372 lines
33 KiB
C#
1372 lines
33 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using DarkTonic.MasterAudio;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.UI;
|
|
|
|
// Token: 0x020000D9 RID: 217
|
|
public class SkillButton : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
|
|
{
|
|
// Token: 0x06001449 RID: 5193 RVA: 0x00188E12 File Offset: 0x00187012
|
|
private void Awake()
|
|
{
|
|
this.clickedDown = false;
|
|
this.button = base.gameObject.GetComponent<Button>();
|
|
this.componentID = -1;
|
|
if (this.deleteButton)
|
|
{
|
|
this.delete = this.deleteButton.GetComponent<Button>();
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600144A RID: 5194 RVA: 0x00188E51 File Offset: 0x00187051
|
|
public void StartSheen()
|
|
{
|
|
this.character.portrait.skillBag.PlayFX(base.gameObject, this.isSpell);
|
|
}
|
|
|
|
// Token: 0x0600144B RID: 5195 RVA: 0x00188E74 File Offset: 0x00187074
|
|
private void OnEnable()
|
|
{
|
|
if (this.abilityName != "" && this.character && this.updateDescOnEnable)
|
|
{
|
|
this.UpdateSpellDescription();
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600144C RID: 5196 RVA: 0x00188EA4 File Offset: 0x001870A4
|
|
public void Setup(bool activeTrigger, bool useable)
|
|
{
|
|
this.iconBG.enabled = true;
|
|
base.gameObject.SetActive(true);
|
|
this.abilityRow = Links.x.library.GetAbilityRow(this.abilityName);
|
|
this.effectRow = null;
|
|
this.isInstrument = false;
|
|
if (this.inWindow)
|
|
{
|
|
this.rt = base.gameObject.GetComponent<RectTransform>();
|
|
}
|
|
if (this.iconBG && this.inWindow)
|
|
{
|
|
this.iconBG.raycastTarget = true;
|
|
this.button.interactable = true;
|
|
}
|
|
if (this.difficulty)
|
|
{
|
|
this.difficulty.gameObject.SetActive(false);
|
|
}
|
|
if (this.spirit)
|
|
{
|
|
this.spirit.gameObject.SetActive(false);
|
|
}
|
|
if (this.abilityRow._IsSpell)
|
|
{
|
|
this.isInstrument = false;
|
|
this.paganRow = Links.x.library.GetPaganRow(this.abilityName);
|
|
Sprite sprite;
|
|
if (!this.forSale)
|
|
{
|
|
sprite = Links.x.archives.AddRune(this.uniqueName, string.Concat(new string[]
|
|
{
|
|
Application.persistentDataPath,
|
|
"/AutoSave/",
|
|
this.uniqueName,
|
|
"_",
|
|
this.character.stats.partyID.ToString(),
|
|
".png"
|
|
}), this.character.stats.GetName(), this.abilityName);
|
|
}
|
|
else
|
|
{
|
|
sprite = Resources.Load<Sprite>("Sprites/" + this.abilityName);
|
|
}
|
|
this.iconBG.sprite = sprite;
|
|
if (sprite == null)
|
|
{
|
|
sprite = this.songBack;
|
|
}
|
|
this.iconBG.gameObject.SetActive(true);
|
|
this.iconBG.sprite = sprite;
|
|
this.isSpell = true;
|
|
if (this.spellMaterial != null)
|
|
{
|
|
this.iconBG.material = this.spellMaterial;
|
|
}
|
|
this.iconBG.color = this.spellColor;
|
|
}
|
|
else
|
|
{
|
|
this.abilityRow = Links.x.library.GetAbilityRow(this.abilityName);
|
|
if (this.songMaterial != null)
|
|
{
|
|
this.iconBG.material = this.songMaterial;
|
|
}
|
|
if (this.button)
|
|
{
|
|
this.button.interactable = true;
|
|
this.button.enabled = true;
|
|
}
|
|
if (this.abilityRow._IsSong)
|
|
{
|
|
this.isInstrument = true;
|
|
this.iconBG.gameObject.SetActive(true);
|
|
this.iconBG.color = this.songColor;
|
|
Sprite abilitySprite = Links.x.archives.GetAbilitySprite(this.abilityRow._Sprite);
|
|
this.iconBG.sprite = abilitySprite;
|
|
if (abilitySprite == null)
|
|
{
|
|
this.iconBG.sprite = this.songBack;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Library.Inventory invRow = this.character.invRow1;
|
|
Sprite abilitySprite2 = Links.x.archives.GetAbilitySprite(this.abilityRow._Sprite);
|
|
this.iconBG.sprite = abilitySprite2;
|
|
this.iconBG.gameObject.SetActive(true);
|
|
this.iconBG.sprite = abilitySprite2;
|
|
}
|
|
this.isSpell = false;
|
|
}
|
|
if (!this.inWindow)
|
|
{
|
|
if (this.spellMat1)
|
|
{
|
|
if (this.isSpell)
|
|
{
|
|
int num = Random.Range(0, 4);
|
|
if (num == 0)
|
|
{
|
|
this.iconBG.material = this.spellMat1;
|
|
}
|
|
else if (num == 1)
|
|
{
|
|
this.iconBG.material = this.spellMat2;
|
|
}
|
|
else if (num == 2)
|
|
{
|
|
this.iconBG.material = this.spellMat3;
|
|
}
|
|
else if (num == 3)
|
|
{
|
|
this.iconBG.material = this.spellMat4;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.iconBG.material = this.songMat;
|
|
}
|
|
}
|
|
if (this.delete)
|
|
{
|
|
this.delete.interactable = Links.x.mk;
|
|
}
|
|
}
|
|
this.canUse = true;
|
|
if (this.inWindow && this.deleteButton)
|
|
{
|
|
this.deleteButton.SetActive(false);
|
|
}
|
|
else if (!this.inWindow && this.deleteButton)
|
|
{
|
|
if (this.abilityRow._IsSpell)
|
|
{
|
|
this.deleteButton.SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
this.deleteButton.SetActive(false);
|
|
}
|
|
}
|
|
if (this.isSpell && this.deleteButton && !this.rt)
|
|
{
|
|
this.rt = base.gameObject.GetComponent<RectTransform>();
|
|
}
|
|
if (!this.isSpell)
|
|
{
|
|
this.str.Clear();
|
|
if (this.componentID == -1)
|
|
{
|
|
this.str.Append("<size=1.4em><font=Bold>");
|
|
this.str.Append(this.abilityRow._DisplayName);
|
|
if (this.abilityRow._WeaponReq == "Flute")
|
|
{
|
|
this.str.Append(" (Flute)");
|
|
}
|
|
if (this.abilityRow._WeaponReq == "Pipe")
|
|
{
|
|
this.str.Append(" (Shepard Pipes)");
|
|
}
|
|
if (this.abilityRow._WeaponReq == "Horn")
|
|
{
|
|
this.str.Append(" (Horn)");
|
|
}
|
|
this.str.Append("</font></size>\n");
|
|
if (!this.isInstrument)
|
|
{
|
|
this.effectRow = Links.x.library.GetEffectRow(this.abilityName);
|
|
if (this.effectRow == null)
|
|
{
|
|
this.effectRow = Links.x.library.GetEffectRow(this.abilityName + "Word");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.effectRow = Links.x.library.GetEffectRow(this.abilityName);
|
|
if (this.effectRow == null)
|
|
{
|
|
Debug.Log(this.abilityName);
|
|
}
|
|
}
|
|
float num2;
|
|
if (this.abilityRow._WeaponReq == "Flute")
|
|
{
|
|
num2 = this.character.stats.GetSkill(26);
|
|
}
|
|
else if (this.abilityRow._WeaponReq == "Horn")
|
|
{
|
|
num2 = this.character.stats.GetSkill(27);
|
|
}
|
|
else
|
|
{
|
|
num2 = this.character.stats.GetSkill(29);
|
|
}
|
|
string effectDescription = Links.x.manual.GetEffectDescription(this.effectRow, Records.x.SongSkillMultiplier(num2), 0);
|
|
this.str.Append(effectDescription);
|
|
if (!this.isEquipped)
|
|
{
|
|
int num3;
|
|
if (this.forSale)
|
|
{
|
|
num3 = this.abilityRow._X;
|
|
}
|
|
else
|
|
{
|
|
num3 = this.character.stats.GetAbilityTriggerGoal(this.index);
|
|
}
|
|
if (num3 > 1)
|
|
{
|
|
string text;
|
|
if (!this.forSale)
|
|
{
|
|
text = this.character.stats.GetAbilityTrigger(this.index, true);
|
|
}
|
|
else
|
|
{
|
|
text = this.character.stats.TriggerName(this.abilityRow._Trigger, true);
|
|
}
|
|
this.str.Append(". Triggers every ");
|
|
this.str.Append(num3);
|
|
this.str.Append(" ");
|
|
if (text == "X")
|
|
{
|
|
this.str.Append("attacks");
|
|
}
|
|
else
|
|
{
|
|
this.str.Append(text);
|
|
}
|
|
this.str.Append(".");
|
|
}
|
|
else
|
|
{
|
|
string text2;
|
|
if (!this.forSale)
|
|
{
|
|
text2 = this.character.stats.GetAbilityTrigger(this.index, false);
|
|
}
|
|
else
|
|
{
|
|
text2 = this.character.stats.TriggerName(this.abilityRow._Trigger, false);
|
|
}
|
|
this.str.Append(". Triggers on ");
|
|
if (text2 == "X")
|
|
{
|
|
this.str.Append("attack");
|
|
}
|
|
else
|
|
{
|
|
this.str.Append(text2);
|
|
}
|
|
this.str.Append(".");
|
|
}
|
|
}
|
|
if (!this.inWindow)
|
|
{
|
|
this.str.Append("\n<font=Bold>Points:</font> ");
|
|
this.str.Append(this.abilityRow._SongCost);
|
|
}
|
|
this.fullText = this.str.ToString();
|
|
this.spellDesc = this.str.ToString();
|
|
if (this.nameText)
|
|
{
|
|
this.nameText.text = this.fullText;
|
|
this.nameText.enabled = true;
|
|
}
|
|
this.halfText = this.abilityRow._DisplayName;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.UpdateSpellDescription();
|
|
}
|
|
if (this.triggerBackground)
|
|
{
|
|
this.ShowTrigger();
|
|
}
|
|
this.UpdateUseState(useable);
|
|
if (this.nameText)
|
|
{
|
|
float num4 = 65f;
|
|
float preferredHeight = this.nameText.preferredHeight;
|
|
if (preferredHeight > num4)
|
|
{
|
|
}
|
|
this.nameTextRT.sizeDelta = new Vector2(this.nameTextRT.sizeDelta.x, preferredHeight);
|
|
}
|
|
if (this.button && !this.isSpell)
|
|
{
|
|
if (this.inWindow || this.forSale)
|
|
{
|
|
this.button.transition = Selectable.Transition.ColorTint;
|
|
return;
|
|
}
|
|
this.button.transition = Selectable.Transition.None;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600144D RID: 5197 RVA: 0x00189808 File Offset: 0x00187A08
|
|
public void UpdateSpellDescription()
|
|
{
|
|
this.effectRow = Links.x.library.GetEffectRow(this.abilityName);
|
|
this.str.Clear();
|
|
if (!this.inWindow)
|
|
{
|
|
this.str.Append("<size=1.5em><font=Bold>");
|
|
this.str.Append(this.uniqueName);
|
|
this.str.Append("</font></size>\n");
|
|
}
|
|
this.SetDescription(this.spellStats.x, this.spellStats.y, this.spellStats.z, this.spellStats.w);
|
|
this.fullText = this.str.ToString();
|
|
this.spellDesc = this.str.ToString();
|
|
if (this.nameText)
|
|
{
|
|
this.nameText.text = this.fullText;
|
|
this.nameText.enabled = true;
|
|
}
|
|
this.str.Clear();
|
|
this.str.Append("Cast ");
|
|
this.str.Append(this.uniqueName);
|
|
this.str.Append(" (");
|
|
this.str.Append(Mathf.RoundToInt(this.abilityCost));
|
|
this.str.Append(" Spirit)");
|
|
this.halfText = this.str.ToString();
|
|
this.header = "Cast " + this.uniqueName;
|
|
float num = Records.x.SpellDifficulty(this.paganRow, this.spellStats.x, this.spellStats.y, this.spellStats.z);
|
|
if (this.paganRow._Slider1.Contains("Summon"))
|
|
{
|
|
this.updateDescOnEnable = true;
|
|
num += this.character.stats.SummonModSpells();
|
|
}
|
|
else
|
|
{
|
|
this.updateDescOnEnable = false;
|
|
}
|
|
float num2 = this.character.stats.PaganHitChance(true, this.paganRow._School);
|
|
if (num > num2 && this.difficulty)
|
|
{
|
|
this.difficulty.gameObject.SetActive(true);
|
|
return;
|
|
}
|
|
if (this.difficulty)
|
|
{
|
|
this.difficulty.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600144E RID: 5198 RVA: 0x00189A50 File Offset: 0x00187C50
|
|
public void SetResizeDrag()
|
|
{
|
|
bool flag = true;
|
|
if (Records.x.movingWindows)
|
|
{
|
|
flag = false;
|
|
}
|
|
if (flag && !this.button.interactable)
|
|
{
|
|
return;
|
|
}
|
|
this.iconBG.raycastTarget = flag;
|
|
}
|
|
|
|
// Token: 0x0600144F RID: 5199 RVA: 0x00189A8A File Offset: 0x00187C8A
|
|
public void ForSaleInteractable(bool state)
|
|
{
|
|
this.button.enabled = true;
|
|
if (Links.x.joy)
|
|
{
|
|
this.button.interactable = true;
|
|
}
|
|
else
|
|
{
|
|
this.button.interactable = state;
|
|
}
|
|
this.iconBG.raycastTarget = state;
|
|
}
|
|
|
|
// Token: 0x06001450 RID: 5200 RVA: 0x00189ACC File Offset: 0x00187CCC
|
|
public void End()
|
|
{
|
|
this.index = -1;
|
|
this.componentID = -1;
|
|
this.abilityName = "";
|
|
this.SetState(false);
|
|
this.iconBG.enabled = false;
|
|
if (this.triggerBackground)
|
|
{
|
|
this.triggerBackground.enabled = false;
|
|
this.triggerReadyText.enabled = false;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06001451 RID: 5201 RVA: 0x00189B2C File Offset: 0x00187D2C
|
|
public void ShowTrigger()
|
|
{
|
|
if (this.abilityName != "" && this.inWindow)
|
|
{
|
|
if (!this.character.stats.GetAbilityReadyState(this.index))
|
|
{
|
|
this.triggerBackground.enabled = true;
|
|
this.triggerReadyText.enabled = true;
|
|
this.triggerBackground.color = this.triggerNotReady;
|
|
this.triggerReadyText.text = "!";
|
|
return;
|
|
}
|
|
this.triggerBackground.color = Color.white;
|
|
int abilityTriggerGoal = this.character.stats.GetAbilityTriggerGoal(this.index);
|
|
if (abilityTriggerGoal > 1)
|
|
{
|
|
this.triggerBackground.enabled = true;
|
|
this.triggerReadyText.enabled = true;
|
|
this.triggerReadyText.text = (abilityTriggerGoal - this.character.stats.GetAbilityTriggerCount(this.index)).ToString();
|
|
return;
|
|
}
|
|
this.triggerBackground.enabled = false;
|
|
this.triggerReadyText.enabled = false;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06001452 RID: 5202 RVA: 0x00189C34 File Offset: 0x00187E34
|
|
public void UpdateUseState(bool useable)
|
|
{
|
|
if (this.index == -1)
|
|
{
|
|
return;
|
|
}
|
|
if (!this.character)
|
|
{
|
|
return;
|
|
}
|
|
if (!this.inWindow)
|
|
{
|
|
return;
|
|
}
|
|
if (this.isEquipped)
|
|
{
|
|
return;
|
|
}
|
|
if (this.inSpellMenu)
|
|
{
|
|
this.canUse = true;
|
|
}
|
|
else if (this.abilityRow._IsSpell)
|
|
{
|
|
this.canUse = useable;
|
|
}
|
|
else
|
|
{
|
|
if (!Records.x.InCombat(false) && this.abilityRow._WeaponReq == "Pipe")
|
|
{
|
|
useable = false;
|
|
}
|
|
this.canUse = useable;
|
|
}
|
|
if (this.character.attackTime < 1f)
|
|
{
|
|
this.canUse = false;
|
|
}
|
|
if (!this.character.CanAttack())
|
|
{
|
|
this.canUse = false;
|
|
}
|
|
if (this.spirit)
|
|
{
|
|
if (this.canUse)
|
|
{
|
|
this.spirit.gameObject.SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
this.spirit.gameObject.SetActive(true);
|
|
}
|
|
if (useable || Records.x.partySailing)
|
|
{
|
|
this.spirit.enabled = false;
|
|
}
|
|
else
|
|
{
|
|
this.spirit.enabled = true;
|
|
}
|
|
}
|
|
if (!this.canUse && this.isSpell)
|
|
{
|
|
ColorBlock colors = this.button.colors;
|
|
Color disabledColor = colors.disabledColor;
|
|
colors.normalColor = disabledColor;
|
|
colors.highlightedColor = disabledColor;
|
|
colors.selectedColor = disabledColor;
|
|
colors.pressedColor = disabledColor;
|
|
this.button.colors = colors;
|
|
this.button.interactable = true;
|
|
this.iconBG.raycastTarget = true;
|
|
return;
|
|
}
|
|
float num = 0.6039216f;
|
|
Color color = new Color(num, num, num, 1f);
|
|
ColorBlock colors2 = this.button.colors;
|
|
colors2.normalColor = color;
|
|
colors2.highlightedColor = Color.white;
|
|
colors2.selectedColor = Color.white;
|
|
colors2.pressedColor = Color.white;
|
|
this.button.colors = colors2;
|
|
this.button.interactable = true;
|
|
this.iconBG.raycastTarget = true;
|
|
}
|
|
|
|
// Token: 0x06001453 RID: 5203 RVA: 0x00189E2B File Offset: 0x0018802B
|
|
public void RemoveOutline()
|
|
{
|
|
if (!this.character)
|
|
{
|
|
return;
|
|
}
|
|
if (this.slowedTime)
|
|
{
|
|
Links.x.combat.EndSlowTime();
|
|
}
|
|
this.character.portrait.skillBag.EndFX();
|
|
}
|
|
|
|
// Token: 0x06001454 RID: 5204 RVA: 0x00189E68 File Offset: 0x00188068
|
|
public void SetState(bool state)
|
|
{
|
|
if (!this.inWindow)
|
|
{
|
|
return;
|
|
}
|
|
if (this.index > -1)
|
|
{
|
|
if (!state)
|
|
{
|
|
this.button.interactable = false;
|
|
this.RemoveOutline();
|
|
return;
|
|
}
|
|
if (this.character.stats.GetAbilityStatus(this.index))
|
|
{
|
|
this.button.interactable = true;
|
|
return;
|
|
}
|
|
this.button.interactable = true;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06001455 RID: 5205 RVA: 0x00189ECE File Offset: 0x001880CE
|
|
public void ToggleStateSkillMenu(bool state)
|
|
{
|
|
if (!state)
|
|
{
|
|
this.RemoveOutline();
|
|
this.iconBG.enabled = false;
|
|
return;
|
|
}
|
|
this.iconBG.enabled = true;
|
|
}
|
|
|
|
// Token: 0x06001456 RID: 5206 RVA: 0x00189EF4 File Offset: 0x001880F4
|
|
public void OnPointerEnter(PointerEventData eventData)
|
|
{
|
|
if (Input.GetMouseButton(0))
|
|
{
|
|
return;
|
|
}
|
|
if (this.inSpellMenu && (Links.x.characterSheet.open || Links.x.spellcrafting.open))
|
|
{
|
|
return;
|
|
}
|
|
if (!this.inWindow)
|
|
{
|
|
return;
|
|
}
|
|
Links.x.currentSkillHover = this;
|
|
Links.x.gameplay.uiCanClick = true;
|
|
if (this.isSpell)
|
|
{
|
|
this.character.portrait.skillBag.TooltipOn(this, base.gameObject, this.halfText, false);
|
|
return;
|
|
}
|
|
this.character.portrait.skillBag.TooltipOn(this, base.gameObject, this.halfText, false);
|
|
}
|
|
|
|
// Token: 0x06001457 RID: 5207 RVA: 0x00189FA8 File Offset: 0x001881A8
|
|
public string GetHoverSpell()
|
|
{
|
|
string text = "Cast " + this.abilityRow._DisplayName;
|
|
if (this.canUse)
|
|
{
|
|
text += "\n-Ready-";
|
|
}
|
|
return text;
|
|
}
|
|
|
|
// Token: 0x06001458 RID: 5208 RVA: 0x00189FE0 File Offset: 0x001881E0
|
|
public void OnPointerExit(PointerEventData eventData)
|
|
{
|
|
if (Input.GetMouseButton(0))
|
|
{
|
|
return;
|
|
}
|
|
if (!this.inWindow)
|
|
{
|
|
return;
|
|
}
|
|
if (Links.x.currentSkillHover == this)
|
|
{
|
|
Links.x.currentSkillHover = null;
|
|
}
|
|
if (this.inSpellMenu)
|
|
{
|
|
return;
|
|
}
|
|
Links.x.gameplay.uiCanClick = false;
|
|
this.character.portrait.skillBag.TooltipOff();
|
|
}
|
|
|
|
// Token: 0x06001459 RID: 5209 RVA: 0x0018A04C File Offset: 0x0018824C
|
|
private void SetDescription(float slider1, float slider2, float slider3, float tether)
|
|
{
|
|
this.str.Append(this.paganRow._DynamicDescriptionStart);
|
|
string text = Records.x.PaganDescription(this.paganRow, slider1, slider2, slider3);
|
|
if (this.inWindow)
|
|
{
|
|
this.str.Append(text);
|
|
this.str.Append(".");
|
|
this.str.Append("\nSpell Challenge: ");
|
|
float num = Records.x.SpellDifficulty(this.paganRow, slider1, slider2, slider3);
|
|
this.str.Append(num);
|
|
if (this.paganRow._Slider1.Contains("Summon"))
|
|
{
|
|
float num2 = this.character.stats.SummonModSpells();
|
|
if (num2 > 0f)
|
|
{
|
|
this.str.Append(" + ");
|
|
this.str.Append(num2);
|
|
this.str.Append(" [Party Size Penalty]");
|
|
}
|
|
}
|
|
this.str.Append(" (vs. ");
|
|
this.str.Append(this.character.stats.GetName());
|
|
this.str.Append("'s ");
|
|
this.str.Append(this.character.stats.PaganHitChance(true, this.paganRow._School));
|
|
this.str.Append(")");
|
|
if (this.abilityRow._UseOnBoat)
|
|
{
|
|
this.str.Append("\nCan use on boat");
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.str.Append("\n<font=Bold>Spirit Cost: </font>");
|
|
this.str.Append(Mathf.RoundToInt(this.abilityCost));
|
|
this.str.Append(" spirit");
|
|
this.str.Append("\n<font=Bold>Spell Challenge: </font>");
|
|
this.str.Append(Records.x.SpellDifficulty(this.paganRow, slider1, slider2, slider3));
|
|
this.str.Append(" (vs. ");
|
|
this.str.Append(this.character.stats.GetName());
|
|
this.str.Append("'s ");
|
|
this.str.Append(this.character.stats.PaganHitChance(true, this.paganRow._School));
|
|
this.str.Append(")");
|
|
if (this.paganRow._NeedsTether)
|
|
{
|
|
this.str.Append("\n<font=Bold>Overpower Strength: </font>");
|
|
this.str.Append(this.R2(tether));
|
|
}
|
|
if (this.abilityRow._UseOnBoat)
|
|
{
|
|
this.str.Append("\nCan use on boat");
|
|
}
|
|
this.str.Append(text);
|
|
this.str.Append(".");
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600145A RID: 5210 RVA: 0x0018A325 File Offset: 0x00188525
|
|
private float R2(float x)
|
|
{
|
|
return Mathf.Round(x * 10f) / 10f;
|
|
}
|
|
|
|
// Token: 0x0600145B RID: 5211 RVA: 0x0018A33C File Offset: 0x0018853C
|
|
public void OnPointerDown(PointerEventData eventData)
|
|
{
|
|
if (!this.inWindow)
|
|
{
|
|
if (this.forSale)
|
|
{
|
|
if (!this.isSpell && this.canBuy)
|
|
{
|
|
this.BuySong();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!this.isSpell && !this.isEquipped)
|
|
{
|
|
this.SelectSong();
|
|
return;
|
|
}
|
|
if (this.isSpell && !this.inWindow && !this.isEquipped)
|
|
{
|
|
if (Links.x.joy)
|
|
{
|
|
this.OpenDeleteConfirm();
|
|
return;
|
|
}
|
|
if (Links.x.characterSheet.booksMenu.open)
|
|
{
|
|
Links.x.characterSheet.booksMenu.AddFavoriteSpell(this);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bool flag = this.isEquipped;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
Links.x.gameplay.StoneSoundQuieter();
|
|
if (this.inSpellMenu && Links.x.spellcrafting.open)
|
|
{
|
|
return;
|
|
}
|
|
if ((Input.GetMouseButton(1) && Links.x.mk) || Links.x.joy)
|
|
{
|
|
if (this.isInstrument)
|
|
{
|
|
this.desc = this.fullText;
|
|
int abilityTriggerGoal = this.character.stats.GetAbilityTriggerGoal(this.index);
|
|
int num = abilityTriggerGoal - this.character.stats.GetAbilityTriggerCount(this.index);
|
|
if (abilityTriggerGoal > 0)
|
|
{
|
|
this.desc += " (";
|
|
this.desc += num.ToString();
|
|
this.desc += " needed until song plays.)";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.str.Clear();
|
|
this.str.Append(this.abilityRow._DisplayName);
|
|
if (this.abilityRow._MainSkill == "Bindings")
|
|
{
|
|
this.str.Append(" (Bindings)");
|
|
}
|
|
if (this.abilityRow._MainSkill == "Fauna")
|
|
{
|
|
this.str.Append(" (Fauna)");
|
|
}
|
|
if (this.abilityRow._MainSkill == "Vines")
|
|
{
|
|
this.str.Append(" (Vines)");
|
|
}
|
|
if (this.abilityRow._MainSkill == "Spores")
|
|
{
|
|
this.str.Append(" (Spores)");
|
|
}
|
|
this.header = this.str.ToString();
|
|
this.str.Clear();
|
|
this.str.Append(this.spellDesc);
|
|
float num2 = 0f;
|
|
Vector4 abilityLevel = this.character.stats.GetAbilityLevel(this.index);
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
string text = "";
|
|
float num3 = 0f;
|
|
if (i == 0)
|
|
{
|
|
text = this.paganRow._Slider1;
|
|
num3 = abilityLevel.x;
|
|
}
|
|
if (i == 1)
|
|
{
|
|
text = this.paganRow._Slider2;
|
|
num3 = abilityLevel.y;
|
|
}
|
|
if (i == 2)
|
|
{
|
|
text = this.paganRow._Slider3;
|
|
num3 = abilityLevel.z;
|
|
}
|
|
if (text.Contains("Damage") || text.Contains("Deterioration") || text.Contains("Effects") || text.Contains("Power"))
|
|
{
|
|
num2 = num3;
|
|
}
|
|
}
|
|
string effectDescription = Links.x.manual.GetEffectDescription(this.effectRow, num2, 0);
|
|
if (effectDescription != "")
|
|
{
|
|
this.str.Append("\nSpell effects: ");
|
|
this.str.Append(effectDescription);
|
|
this.str.Append("\n");
|
|
}
|
|
else
|
|
{
|
|
this.str.Append("\n\n");
|
|
}
|
|
this.desc = this.str.ToString();
|
|
}
|
|
this.character.portrait.skillBag.OpenDescription(this, base.gameObject, this.header, this.desc);
|
|
return;
|
|
}
|
|
if (this.character.attackTime < 1f || this.character.inAction || this.character.inQueuedAbility || !this.character.IsSentient())
|
|
{
|
|
return;
|
|
}
|
|
this.clickedDown = true;
|
|
}
|
|
|
|
// Token: 0x0600145C RID: 5212 RVA: 0x0018A76C File Offset: 0x0018896C
|
|
private void SelectSong()
|
|
{
|
|
if (this.isInstrument)
|
|
{
|
|
Links.x.characterSheet.character.stats.UpdateEquippedSongList(this.uniqueName);
|
|
}
|
|
Links.x.characterSheet.booksMenu.UpdateSelected();
|
|
this.character.portrait.skillBag.SetSongGrid();
|
|
}
|
|
|
|
// Token: 0x0600145D RID: 5213 RVA: 0x0018A7CC File Offset: 0x001889CC
|
|
private void BuySong()
|
|
{
|
|
int num = (int)Links.x.characterSheet.character.stats.SongCost(this.abilityRow);
|
|
if (Links.x.inventory.emeralds >= num)
|
|
{
|
|
Links.x.characterSheet.character.stats.AddSong(this.abilityName, this.abilityName, new Vector3(1f, 1f, 1f));
|
|
Links.x.inventory.emeralds -= num;
|
|
MasterAudio.PlaySoundAndForget("Inventory", Random.Range(0.3f, 0.45f), new float?(1f), 0f, "Coins", null);
|
|
Links.x.inventory.UpdateMisc();
|
|
Links.x.characterSheet.UpdateSongShop();
|
|
Links.x.characterSheet.booksMenu.SetGrid("Songs", Links.x.characterSheet.character, false);
|
|
return;
|
|
}
|
|
string merchantText = Links.x.merchant.GetMerchantText("Not Enough");
|
|
Links.x.characterSheet.StartQuip(merchantText, FaceAnimations.AnimationNames.Frown);
|
|
}
|
|
|
|
// Token: 0x0600145E RID: 5214 RVA: 0x0018A908 File Offset: 0x00188B08
|
|
public void PointerUpJoystick()
|
|
{
|
|
if (this.inWindow && !this.isEquipped)
|
|
{
|
|
if (Links.x.joy)
|
|
{
|
|
this.clickedDown = true;
|
|
this.OnPointerUp(null);
|
|
return;
|
|
}
|
|
}
|
|
else if (this.forSale && Links.x.joy)
|
|
{
|
|
if (!this.isSpell && this.canBuy)
|
|
{
|
|
this.BuySong();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (Links.x.joy && this.isInstrument && Links.x.characterSheet.open && !this.inWindow)
|
|
{
|
|
this.SelectSong();
|
|
return;
|
|
}
|
|
if (Links.x.joy && this.isSpell && !this.inWindow && !this.isEquipped && Links.x.characterSheet.open)
|
|
{
|
|
Links.x.characterSheet.booksMenu.AddFavoriteSpell(this);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600145F RID: 5215 RVA: 0x0018A9F4 File Offset: 0x00188BF4
|
|
public void OnPointerUp(PointerEventData eventData)
|
|
{
|
|
if (Links.x.mk)
|
|
{
|
|
EventSystem.current.SetSelectedGameObject(null);
|
|
}
|
|
if (this.inWindow && !this.isEquipped)
|
|
{
|
|
if (!this.clickedDown)
|
|
{
|
|
return;
|
|
}
|
|
if (this.inSpellMenu && Links.x.spellcrafting.open)
|
|
{
|
|
return;
|
|
}
|
|
if (Input.GetMouseButton(1) || Input.GetMouseButtonUp(1))
|
|
{
|
|
return;
|
|
}
|
|
if (!this.character.IsSentient())
|
|
{
|
|
return;
|
|
}
|
|
if (this.character.IsSentient())
|
|
{
|
|
this.ChooseSkill();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06001460 RID: 5216 RVA: 0x0018AA80 File Offset: 0x00188C80
|
|
public void StartSkill()
|
|
{
|
|
if (!this.inWindow)
|
|
{
|
|
return;
|
|
}
|
|
if (this.character.actions)
|
|
{
|
|
if (this.character.actions.cannotInterrupt)
|
|
{
|
|
this.character.actions.TryingToInterruptInventoryWait();
|
|
return;
|
|
}
|
|
if (this.character.actions.instrumentCoroutine != null)
|
|
{
|
|
this.str.Clear();
|
|
this.str.Append(Links.x.gameFeed.GetPartyColorText(this.character));
|
|
this.str.Append(this.character.stats.GetName());
|
|
this.str.Append("</color>");
|
|
this.str.Append(" is still playing song");
|
|
Links.x.gameFeed.AddFeed(this.str.ToString());
|
|
return;
|
|
}
|
|
}
|
|
if (!this.abilityRow._IsSpell)
|
|
{
|
|
return;
|
|
}
|
|
if (this.difficulty.gameObject.activeSelf)
|
|
{
|
|
return;
|
|
}
|
|
if (!this.character.CanAttack())
|
|
{
|
|
return;
|
|
}
|
|
if (!this.character.actions && this.canUse)
|
|
{
|
|
Links.x.combat.GivePartyActions(this.character, false);
|
|
Links.x.gameplay.combatStartedWithSkill = true;
|
|
}
|
|
if (this.isInstrument)
|
|
{
|
|
if (!Records.x.InCombat(false) && this.abilityRow._WeaponReq == "Pipe")
|
|
{
|
|
Links.x.gameFeed.ShowNotice("Cannot summon outside of combat");
|
|
return;
|
|
}
|
|
this.character.actions.StartSong(this.abilityRow, false);
|
|
Links.x.pocketWheel.Close(true);
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if (!this.canUse)
|
|
{
|
|
return;
|
|
}
|
|
this.character.portrait.skillBag.RemoveSelectedButton();
|
|
if (Links.x.gameplay.spellTargetingGround || Links.x.gameplay.charming)
|
|
{
|
|
Links.x.gameplay.RemoveAbilityInfo();
|
|
}
|
|
this.character.portrait.skillBag.selectedSkillButton = this;
|
|
this.selected = true;
|
|
if (!Records.x.pocketPause && this.character.mainSelected)
|
|
{
|
|
Links.x.gameplay.PocketPause(true);
|
|
}
|
|
Links.x.gameplay.actionCharacter = this.character;
|
|
Links.x.gameplay.currentAbility = this.abilityRow._Name;
|
|
this.character.actions.spellIndex = this.index;
|
|
this.character.actions.paganRow = this.paganRow;
|
|
Links.x.gameplay.spellPaganRow = this.paganRow;
|
|
Links.x.gameplay.spellcasting = true;
|
|
Links.x.gameplay.throwingElixir = false;
|
|
if (this.abilityRow._RadiusCenter == "Mouse")
|
|
{
|
|
Links.x.gameplay.RemoveSpellTargets();
|
|
Links.x.gameplay.spellTargetingGround = true;
|
|
int num = 1;
|
|
Vector4 abilityLevel = this.character.stats.GetAbilityLevel(this.index);
|
|
if (this.paganRow._Slider1 == "Radius")
|
|
{
|
|
num = (int)abilityLevel.x;
|
|
}
|
|
else if (this.paganRow._Slider2 == "Radius")
|
|
{
|
|
num = (int)abilityLevel.y;
|
|
}
|
|
else if (this.paganRow._Slider3 == "Radius")
|
|
{
|
|
num = (int)abilityLevel.z;
|
|
}
|
|
Links.x.gameplay.tileEffectRadius = num;
|
|
if (Links.x.joy)
|
|
{
|
|
Links.x.gameplay.waitingForActionUp = true;
|
|
Links.x.gameplay.StartControllerTargeting();
|
|
}
|
|
Links.x.gameplay.SetPartyColliders(false);
|
|
}
|
|
else if (this.abilityRow._RadiusCenter.Contains("TargetParty"))
|
|
{
|
|
Links.x.gameplay.RemoveSpellTargets();
|
|
if (Links.x.joy)
|
|
{
|
|
Links.x.gameplay.waitingForActionUp = true;
|
|
Links.x.gameplay.EndControllerTargeting();
|
|
}
|
|
Links.x.gameplay.spellTargetingParty = true;
|
|
Shader.SetGlobalFloat("_TargetingParty", 1f);
|
|
Links.x.gameplay.SetPartyColliders(true);
|
|
}
|
|
else if (this.abilityRow._RadiusCenter.Contains("TargetEnemy"))
|
|
{
|
|
Links.x.gameplay.RemoveSpellTargets();
|
|
if (Links.x.joy)
|
|
{
|
|
Links.x.gameplay.waitingForActionUp = true;
|
|
Links.x.gameplay.EndControllerTargeting();
|
|
}
|
|
Links.x.gameplay.spellTargetingEnemy = true;
|
|
Links.x.gameplay.SetPartyColliders(false);
|
|
}
|
|
else
|
|
{
|
|
Links.x.gameplay.spellTargetingGround = false;
|
|
if (Links.x.joy)
|
|
{
|
|
Links.x.gameplay.EndControllerTargeting();
|
|
}
|
|
}
|
|
EventSystem.current.SetSelectedGameObject(null);
|
|
if (this.character.mainSelected)
|
|
{
|
|
if (Links.x.combat.pickingRally)
|
|
{
|
|
Links.x.main.portrait.AnimatorSynergyDone();
|
|
Links.x.combat.rallyCharacter.portrait.AnimatorSynergyDone();
|
|
}
|
|
Links.x.combat.pickingRally = false;
|
|
Shader.SetGlobalFloat("_Combat", 1f);
|
|
Links.x.combat.GetTargets(false, false, null);
|
|
Links.x.gameplay.SetDomeSize();
|
|
if (Links.x.pocketWheel.open && this.character.attackTime >= 1f && Links.x.joy)
|
|
{
|
|
Links.x.pocketWheel.WaitForTargets();
|
|
}
|
|
}
|
|
this.character.portrait.skillBag.PlayFX(base.gameObject, this.isSpell);
|
|
if ((this.isInstrument || this.character.portrait.skillBag.selectedSkillButton == this) && !this.inSpellMenu && !Links.x.gameplay.spellcasting)
|
|
{
|
|
base.StartCoroutine(this.DelayedRemoveOutline());
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06001461 RID: 5217 RVA: 0x0018B0D4 File Offset: 0x001892D4
|
|
public void SetActionAbility()
|
|
{
|
|
this.character.actions.spellIndex = this.index;
|
|
this.character.actions.paganRow = this.paganRow;
|
|
this.character.actions.Ability(this.abilityName, this.uniqueName, false, false);
|
|
if (this.slowedTime)
|
|
{
|
|
Links.x.combat.EndSlowTime();
|
|
}
|
|
}
|
|
|
|
// Token: 0x06001462 RID: 5218 RVA: 0x0018B142 File Offset: 0x00189342
|
|
private IEnumerator DelayedRemoveOutline()
|
|
{
|
|
yield return new WaitForSeconds(0.5f);
|
|
this.RemoveOutline();
|
|
yield break;
|
|
}
|
|
|
|
// Token: 0x06001463 RID: 5219 RVA: 0x0018B154 File Offset: 0x00189354
|
|
public void ChooseSkill()
|
|
{
|
|
if (!this.inWindow)
|
|
{
|
|
return;
|
|
}
|
|
if (this == this.character.portrait.skillBag.selectedSkillButton && !this.isInstrument)
|
|
{
|
|
Links.x.gameplay.RemoveAbilityInfo();
|
|
if (this.character.actions && this.character.actions.spellCasterFX)
|
|
{
|
|
Links.x.cellar.ReturnPooledGameObject(69, this.character.actions.spellCasterFX);
|
|
}
|
|
return;
|
|
}
|
|
this.StartSkill();
|
|
}
|
|
|
|
// Token: 0x06001464 RID: 5220 RVA: 0x0018B1F0 File Offset: 0x001893F0
|
|
public void OpenDeleteConfirm()
|
|
{
|
|
if (Links.x.characterSheet.open)
|
|
{
|
|
Links.x.characterSheet.booksMenu.OpenSpellDelete(this.uniqueName);
|
|
return;
|
|
}
|
|
Links.x.spellcrafting.OpenSpellDelete(this.uniqueName);
|
|
}
|
|
|
|
// Token: 0x06001465 RID: 5221 RVA: 0x0018B23E File Offset: 0x0018943E
|
|
public void CloseDeleteConfirm()
|
|
{
|
|
if (Links.x.characterSheet.open)
|
|
{
|
|
Links.x.characterSheet.booksMenu.CloseSpellDelete();
|
|
return;
|
|
}
|
|
Links.x.spellcrafting.CloseSpellDelete();
|
|
}
|
|
|
|
// Token: 0x040022D2 RID: 8914
|
|
[Header("ABILITY INFO")]
|
|
public string abilityName;
|
|
|
|
// Token: 0x040022D3 RID: 8915
|
|
public string uniqueName;
|
|
|
|
// Token: 0x040022D4 RID: 8916
|
|
public int index;
|
|
|
|
// Token: 0x040022D5 RID: 8917
|
|
public int componentID = -1;
|
|
|
|
// Token: 0x040022D6 RID: 8918
|
|
public float abilityCost;
|
|
|
|
// Token: 0x040022D7 RID: 8919
|
|
public bool forSale;
|
|
|
|
// Token: 0x040022D8 RID: 8920
|
|
public bool isSpell;
|
|
|
|
// Token: 0x040022D9 RID: 8921
|
|
public bool canUse;
|
|
|
|
// Token: 0x040022DA RID: 8922
|
|
public bool selected;
|
|
|
|
// Token: 0x040022DB RID: 8923
|
|
public bool isInstrument;
|
|
|
|
// Token: 0x040022DC RID: 8924
|
|
public bool isEquipped;
|
|
|
|
// Token: 0x040022DD RID: 8925
|
|
public bool inSpellMenu;
|
|
|
|
// Token: 0x040022DE RID: 8926
|
|
public bool inWindow;
|
|
|
|
// Token: 0x040022DF RID: 8927
|
|
public bool canBuy;
|
|
|
|
// Token: 0x040022E0 RID: 8928
|
|
public Library.Abilities abilityRow;
|
|
|
|
// Token: 0x040022E1 RID: 8929
|
|
private Library.Effects effectRow;
|
|
|
|
// Token: 0x040022E2 RID: 8930
|
|
private Library.Pagan paganRow;
|
|
|
|
// Token: 0x040022E3 RID: 8931
|
|
public Vector4 spellStats;
|
|
|
|
// Token: 0x040022E4 RID: 8932
|
|
private string header;
|
|
|
|
// Token: 0x040022E5 RID: 8933
|
|
private string desc;
|
|
|
|
// Token: 0x040022E6 RID: 8934
|
|
private string spellDesc;
|
|
|
|
// Token: 0x040022E7 RID: 8935
|
|
public Material spellMat1;
|
|
|
|
// Token: 0x040022E8 RID: 8936
|
|
public Material spellMat2;
|
|
|
|
// Token: 0x040022E9 RID: 8937
|
|
public Material spellMat3;
|
|
|
|
// Token: 0x040022EA RID: 8938
|
|
public Material spellMat4;
|
|
|
|
// Token: 0x040022EB RID: 8939
|
|
public Material songMat;
|
|
|
|
// Token: 0x040022EC RID: 8940
|
|
[Header("LINKS")]
|
|
public TextMeshProUGUI nameText;
|
|
|
|
// Token: 0x040022ED RID: 8941
|
|
public TextMeshProUGUI triggerReadyText;
|
|
|
|
// Token: 0x040022EE RID: 8942
|
|
public Image triggerBackground;
|
|
|
|
// Token: 0x040022EF RID: 8943
|
|
public Image iconBG;
|
|
|
|
// Token: 0x040022F0 RID: 8944
|
|
public Image border;
|
|
|
|
// Token: 0x040022F1 RID: 8945
|
|
public Image difficulty;
|
|
|
|
// Token: 0x040022F2 RID: 8946
|
|
public Image spirit;
|
|
|
|
// Token: 0x040022F3 RID: 8947
|
|
public RectTransform rt;
|
|
|
|
// Token: 0x040022F4 RID: 8948
|
|
public Button button;
|
|
|
|
// Token: 0x040022F5 RID: 8949
|
|
public Button delete;
|
|
|
|
// Token: 0x040022F6 RID: 8950
|
|
public Character character;
|
|
|
|
// Token: 0x040022F7 RID: 8951
|
|
private StringFast str = new StringFast(64);
|
|
|
|
// Token: 0x040022F8 RID: 8952
|
|
private List<TileEffects> currentTileEffects;
|
|
|
|
// Token: 0x040022F9 RID: 8953
|
|
public GameObject deleteButton;
|
|
|
|
// Token: 0x040022FA RID: 8954
|
|
public RectTransform nameTextRT;
|
|
|
|
// Token: 0x040022FB RID: 8955
|
|
private bool slowedTime;
|
|
|
|
// Token: 0x040022FC RID: 8956
|
|
private bool updateDescOnEnable;
|
|
|
|
// Token: 0x040022FD RID: 8957
|
|
[Header("GRAPHICS & SOUNDS")]
|
|
public Sprite empty;
|
|
|
|
// Token: 0x040022FE RID: 8958
|
|
public Color faunaSchool;
|
|
|
|
// Token: 0x040022FF RID: 8959
|
|
public Color vinesSchool;
|
|
|
|
// Token: 0x04002300 RID: 8960
|
|
public Color scoriaSchool;
|
|
|
|
// Token: 0x04002301 RID: 8961
|
|
public Color fluteColor;
|
|
|
|
// Token: 0x04002302 RID: 8962
|
|
public Color drumColor;
|
|
|
|
// Token: 0x04002303 RID: 8963
|
|
public Color hornColor;
|
|
|
|
// Token: 0x04002304 RID: 8964
|
|
public Color pipeColor;
|
|
|
|
// Token: 0x04002305 RID: 8965
|
|
public Color defenseColor;
|
|
|
|
// Token: 0x04002306 RID: 8966
|
|
public Color rangeColor;
|
|
|
|
// Token: 0x04002307 RID: 8967
|
|
public Color meleeColor;
|
|
|
|
// Token: 0x04002308 RID: 8968
|
|
public Color triggerNotReady;
|
|
|
|
// Token: 0x04002309 RID: 8969
|
|
public string halfText;
|
|
|
|
// Token: 0x0400230A RID: 8970
|
|
public string fullText;
|
|
|
|
// Token: 0x0400230B RID: 8971
|
|
public string readyText;
|
|
|
|
// Token: 0x0400230C RID: 8972
|
|
public string soundName = "Clicks Stone B";
|
|
|
|
// Token: 0x0400230D RID: 8973
|
|
private bool clickedDown;
|
|
|
|
// Token: 0x0400230E RID: 8974
|
|
public Sprite songBack;
|
|
|
|
// Token: 0x0400230F RID: 8975
|
|
public Color spellColor;
|
|
|
|
// Token: 0x04002310 RID: 8976
|
|
public Color songColor;
|
|
|
|
// Token: 0x04002311 RID: 8977
|
|
public Material songMaterial;
|
|
|
|
// Token: 0x04002312 RID: 8978
|
|
public Material spellMaterial;
|
|
|
|
// Token: 0x04002313 RID: 8979
|
|
public GameObject star;
|
|
}
|