/// <summary> /// Raises the assign spell event. /// </summary> /// <param name="spellSlot">The spell slot.</param> public void OnAssignSpell(UISpellSlot spellSlot) { // Return if the slot is not valid if (spellSlot == null || spellSlot.GetSpellInfo() == null) { return; } // Get the spell info UISpellInfo spellInfo = spellSlot.GetSpellInfo(); // Check if this spell still has cooldown if (spellCooldowns.ContainsKey(spellInfo.ID)) { float cooldownTill = spellCooldowns[spellInfo.ID].endTime; // Check if the cooldown isnt expired if (cooldownTill > Time.time) { this.m_IsOnCooldown = true; // Resume the cooldown this.ResumeCooldown(spellInfo.ID); } else { // Cooldown already expired, remove the record spellCooldowns.Remove(spellInfo.ID); } } }
/// <summary> /// Raises the tooltip event. /// </summary> /// <param name="show">If set to <c>true</c> show.</param> public override void OnTooltip(bool show) { // Make sure we have spell info, otherwise game might crash if (this.m_SpellInfo == null) { return; } // If we are showing the tooltip if (show) { // Prepare the tooltip lines UISpellSlot.PrepareTooltip(this.m_SpellInfo); // Anchor to this slot UITooltip.AnchorToRect(this.transform as RectTransform); // Show the tooltip UITooltip.Show(); } else { // Hide the tooltip UITooltip.Hide(); } }
protected void Start() { // Disable the image and text if they are shown by any chance if (this.m_TargetGraphic != null) { this.m_TargetGraphic.enabled = false; } if (this.m_TargetText != null) { this.m_TargetText.enabled = false; } // Hook the assign and unassign events if (this.m_TargetSlot != null) { // Check if the slot is a spell slot if (this.m_TargetSlot is UISpellSlot) { UISpellSlot slot = (this.m_TargetSlot as UISpellSlot); // Hook the events slot.onAssign.AddListener(OnAssignSpell); slot.onUnassign.AddListener(OnUnassignSpell); slot.AssignCooldownComponent(this); } } else { Debug.LogWarning("The slot cooldown script cannot operate without a target slot, disabling script."); this.enabled = false; return; } }
void Awake() { if (this.slot == null) { this.slot = this.GetComponent <UISpellSlot>(); } }
public void OnUnassignSpellSlot(UISpellSlot slot) { if (this.enabled && this.m_TargetGraphic != null) { this.m_TargetGraphic.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, this.m_UnassignedSize.x); this.m_TargetGraphic.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, this.m_UnassignedSize.y); } }
public void OnSpellClick(UISpellSlot slot) { // Make sure we have the cast bar component and the slot is assigned if (this.m_CastBar == null || !slot.IsAssigned()) { return; } // Check if we are already casting if (this.m_CastBar.IsCasting) { return; } // Get the spell info from the slot UISpellInfo spellInfo = slot.GetSpellInfo(); // Make sure we have spell info if (spellInfo == null) { return; } // Check if we are on cooldown if (spellInfo.Cooldown > 0f && slot.cooldownComponent != null && slot.cooldownComponent.IsOnCooldown) { return; } // Check if the spell is not insta cast if (!spellInfo.Flags.Has(UISpellInfo_Flags.InstantCast)) { // Start casting this.m_CastBar.StartCasting(spellInfo, spellInfo.CastTime, Time.time + spellInfo.CastTime); } // Handle cooldown just for the demonstration if (slot.cooldownComponent != null && spellInfo.Cooldown > 0f) { // Start the cooldown on all the slots with the specified spell id foreach (UISpellSlot s in UISpellSlot.GetSlots()) { if (s.IsAssigned() && s.GetSpellInfo() != null && s.cooldownComponent != null) { // If the slot IDs match if (s.GetSpellInfo().ID == spellInfo.ID) { // Start the cooldown s.cooldownComponent.StartCooldown(spellInfo.ID, spellInfo.Cooldown); } } } } }
/// <summary> /// Assign the slot by the passed source slot. /// </summary> /// <param name="source">Source.</param> public override bool Assign(Object source) { if (source is UISpellSlot) { UISpellSlot sourceSlot = source as UISpellSlot; if (sourceSlot != null) { return(this.Assign(sourceSlot.GetSpellInfo())); } } // Default return(false); }
// <summary> /// Performs a slot swap. /// </summary> /// <returns><c>true</c>, if slot swap was performed, <c>false</c> otherwise.</returns> /// <param name="sourceSlot">Source slot.</param> public override bool PerformSlotSwap(Object sourceObject) { // Get the source slot UISpellSlot sourceSlot = (sourceObject as UISpellSlot); // Get the source spell info UISpellInfo sourceSpellInfo = sourceSlot.GetSpellInfo(); // Assign the source slot by this one bool assign1 = sourceSlot.Assign(this.GetSpellInfo()); // Assign this slot by the source slot bool assign2 = this.Assign(sourceSpellInfo); // Return the status return(assign1 && assign2); }
/// <summary> /// Raises the unassign event. /// </summary> public void OnUnassignSpell(UISpellSlot spellSlot) { this.InterruptCooldown(); }