From 50dcfb6a8ca5554ddc79d7d710e42aeae54d393c Mon Sep 17 00:00:00 2001 From: Parnic Date: Wed, 8 Jul 2009 02:48:30 +0000 Subject: [PATCH] bug http://www.wowace.com/projects/ice-hud/tickets/18-use-new-vehicle-api-to-switch-player-bar-to-vehicle/ - added support to player health, mana, and cast bars to change which unit they are monitoring to be the vehicle when the player enters one --- modules/CastBar.lua | 23 +++++++++++++++++++++++ modules/PlayerHealth.lua | 19 +++++++++++++++++++ modules/PlayerMana.lua | 30 ++++++++++++++++++++++++++++-- 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/modules/CastBar.lua b/modules/CastBar.lua index 5365a40..b052553 100644 --- a/modules/CastBar.lua +++ b/modules/CastBar.lua @@ -283,12 +283,29 @@ end function CastBar.prototype:Enable(core) CastBar.super.prototype.Enable(self, core) + self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle") + self:RegisterEvent("UNIT_ENTERING_VEHICLE", "EnteringVehicle") + self:RegisterEvent("UNIT_EXITING_VEHICLE", "ExitingVehicle") + self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle") + if self.moduleSettings.enabled and not self.moduleSettings.showBlizzCast then self:ToggleBlizzCast(false) end end +function CastBar.prototype:EnteringVehicle() + self.unit = "vehicle" + self:Update(self.unit) +end + + +function CastBar.prototype:ExitingVehicle() + self.unit = "player" + self:Update(self.unit) +end + + function CastBar.prototype:Disable(core) CastBar.super.prototype.Disable(self, core) @@ -381,6 +398,9 @@ function CastBar.prototype:SpellCastStart(unit, spell, rank) local lag = GetTime() - (self.spellCastSent or 0) local pos = IceHUD:Clamp(lag / self.actionDuration, 0, 1) + if self.unit == "vehicle" then + pos = 0 + end local y = self.settings.barHeight - (pos * self.settings.barHeight) if (self.moduleSettings.side == IceCore.Side.Left) then @@ -401,6 +421,9 @@ function CastBar.prototype:SpellCastChannelStart(unit) local lag = GetTime() - (self.spellCastSent or 0) local pos = IceHUD:Clamp(lag / self.actionDuration, 0, 1) + if self.unit == "vehicle" then + pos = 0 + end local y = self.settings.barHeight - (pos * self.settings.barHeight) if (self.moduleSettings.side == IceCore.Side.Left) then diff --git a/modules/PlayerHealth.lua b/modules/PlayerHealth.lua index ceb9164..e4cf6f3 100644 --- a/modules/PlayerHealth.lua +++ b/modules/PlayerHealth.lua @@ -75,6 +75,11 @@ function PlayerHealth.prototype:Enable(core) self:RegisterEvent("PLAYER_FLAGS_CHANGED", "CheckPvP") self:RegisterEvent("UNIT_FACTION", "CheckPvP") + self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle") + self:RegisterEvent("UNIT_ENTERING_VEHICLE", "EnteringVehicle") + self:RegisterEvent("UNIT_EXITING_VEHICLE", "ExitingVehicle") + self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle") + if AceLibrary:HasInstance("LibHealComm-3.0") then HealComm = AceLibrary("LibHealComm-3.0") HealComm.RegisterCallback(self, "HealComm_DirectHealStart", function(event, healerName, healSize, endTime, ...) self:HealComm_DirectHealStart(event, healerName, healSize, endTime, ...) end) @@ -643,6 +648,20 @@ function PlayerHealth.prototype:GetOptions() end +function PlayerHealth.prototype:EnteringVehicle() + self.unit = "vehicle" + self:RegisterFontStrings() + self:Update(self.unit) +end + + +function PlayerHealth.prototype:ExitingVehicle() + self.unit = "player" + self:RegisterFontStrings() + self:Update(self.unit) +end + + function PlayerHealth.prototype:CreateFrame() PlayerHealth.super.prototype.CreateFrame(self) diff --git a/modules/PlayerMana.lua b/modules/PlayerMana.lua index 5e0dc3d..f4126b5 100644 --- a/modules/PlayerMana.lua +++ b/modules/PlayerMana.lua @@ -111,6 +111,11 @@ function PlayerMana.prototype:Enable(core) self:RegisterEvent("UNIT_ENERGY", "UpdateEnergy") self:RegisterEvent("UNIT_RUNIC_POWER", "Update") + self:RegisterEvent("UNIT_ENTERED_VEHICLE", "EnteringVehicle") + self:RegisterEvent("UNIT_ENTERING_VEHICLE", "EnteringVehicle") + self:RegisterEvent("UNIT_EXITING_VEHICLE", "ExitingVehicle") + self:RegisterEvent("UNIT_EXITED_VEHICLE", "ExitingVehicle") + -- allow new 'predicted power' stuff to show the power updates constantly instead of ticking if GetCVarBool("predictedPower") then self:SetupOnUpdate(true) @@ -139,6 +144,20 @@ function PlayerMana.prototype:SetupOnUpdate(enable) end +function PlayerMana.prototype:EnteringVehicle() + self.unit = "vehicle" + self:RegisterFontStrings() + self:Update(self.unit) +end + + +function PlayerMana.prototype:ExitingVehicle() + self.unit = "player" + self:RegisterFontStrings() + self:Update(self.unit) +end + + function PlayerMana.prototype:MyOnUpdate() PlayerMana.super.prototype.MyOnUpdate(self) @@ -192,10 +211,17 @@ end function PlayerMana.prototype:Update(unit) PlayerMana.super.prototype.Update(self) - if (unit and (unit ~= "player")) then + if (unit and (unit ~= self.unit)) then return end + if self.unit == "vehicle" and ((not UnitExists(unit)) or (self.maxMana == 0)) then + self:Show(false) + return + else + self:Show(true) + end + -- the user can toggle the predictedPower cvar at any time and the addon will not get notified. handle it. if not self.tickerFrame and self:ShouldUseTicker() then self:CreateTickerFrame() @@ -272,7 +298,7 @@ end function PlayerMana.prototype:UpdateEnergy(unit) - if (unit and (unit ~= "player")) then + if (unit and (unit ~= self.unit)) then return end