HunterPetPersonalPowerBar

🧩 Syntax:
-- percentages at which bar should change color
PETHEALTH_YELLOW_TRANSITION = .60
PETHEALTH_RED_TRANSITION = .30

-- table indices of bar colors
PETHEALTH_GREEN_INDEX = 1;
PETHEALTH_YELLOW_INDEX = 2;
PETHEALTH_RED_INDEX = 3;

HunterPetHealthBarMixin = {};

function HunterPetHealthBarMixin:Initialize()
	self.frequentUpdates = true;
	self.requiredClass = "HUNTER";

	self.baseMixin.Initialize(self);
end

function HunterPetHealthBarMixin:UpdatePower()
	self:UpdateMinMaxPower();
	self.baseMixin.UpdatePower(self);
	self:UpdateArt();
end

function HunterPetHealthBarMixin:UpdateArt()
	if not self.currentPower or not self.maxPower then
		self.overrideArtInfo = nil;
		self.baseMixin.UpdateArt(self);
		return;
	end

	local percent = self.maxPower > 0 and self.currentPower / self.maxPower or 0;
	local artInfo = PowerBarColor["STAGGER"];

	if percent <= PETHEALTH_RED_TRANSITION then
		artInfo = artInfo[PETHEALTH_RED_INDEX];
	elseif percent <= PETHEALTH_YELLOW_TRANSITION then
		artInfo = artInfo[PETHEALTH_YELLOW_INDEX];
	else
		artInfo = artInfo[PETHEALTH_GREEN_INDEX];
	end
	self.overrideArtInfo = artInfo;

	self.baseMixin.UpdateArt(self);
end

function HunterPetHealthBarMixin:EvaluateUnit()
	local meetsRequirements = false;

	local _, class = UnitClass(self:GetUnit());
	meetsRequirements = class == self.requiredClass;

	self:SetBarEnabled(meetsRequirements);
end

function HunterPetHealthBarMixin:OnBarEnabled()
	self:UpdatePower();
end

function HunterPetHealthBarMixin:GetCurrentPower()
	return UnitHealth("pet") or 0;
end

function HunterPetHealthBarMixin:GetCurrentMinMaxPower()
	local maxHealth = UnitHealthMax("pet");
	return 0, maxHealth;
end