Need help with Arenalive
Hi guys, I am trying to get the portraits in Arenalive into 2D instead of 3D (for mobs and pets). Or to make the 3D portraits still. They move way too much and become a huge distraction in the arena and BGs.
I am a noob to lua codes, and since the customization of this addon is quite lacking, I have been trying to get it done through change lua codes, but so far not much progress. Any help would be appreciated.
Code:
--[[ ArenaLive Core Functions: Portrait Handler
Created by: Vadrak
Creation Date: 09.06.2013
Last Update: "
This file contains all relevant functions for portrait and 3D Portrait frames.
]]--
-- Local version is said to be faster.
local ArenaLiveCore = ArenaLiveCore;
-- Set up a new handler.
local Portrait = ArenaLiveCore:AddHandler("Portrait", "EventCore");
-- Get the global UnitFrame handler.
local UnitFrame = ArenaLiveCore:GetHandler("UnitFrame");
-- Register the handler for all needed events.
Portrait:RegisterEvent("UNIT_MODEL_CHANGED");
Portrait:RegisterEvent("PLAYER_TARGET_CHANGED");
Portrait:RegisterEvent("PLAYER_FOCUS_CHANGED");
-- *** FRAME FUNCTIONS ***
local function Update (self, event)
local unit = self.unitFrame.unit;
if ( not unit ) then
self.texture:SetTexture(0, 0, 0, 1);
self.texture:SetTexCoord(0, 1, 0, 1);
self.threeDFrame:Hide();
return;
end
local portraitType = ArenaLiveCore:GetDBEntry(self.unitFrame.addonName, self.unitFrame.frameType.."/Portrait/Type");
if ( portraitType == "threeD" ) then
if ( event == "UNIT_MODEL_CHANGED" or event == "PLAYER_TARGET_CHANGED" or event == "PLAYER_FOCUS_CHANGED" ) then
self.threeDFrame:SetUnit(unit);
self.threeDFrame:SetCamera(0);
self.texture:SetTexture(0, 0, 0, 1);
self.texture:SetTexCoord(0, 1, 0, 1);
self.threeDFrame:Show();
end
elseif ( portraitType == "class" ) then
local _, class = UnitClass(unit);
local unitType = string.match(unit, "^([a-z]+)[0-9]+$") or unit;
local unitNumber = tonumber(string.match(unit, "^[a-z]+([0-9]+)$"));
local isPlayer = UnitIsPlayer(unit);
if ( class and isPlayer ) then
self.threeDFrame:Hide();
self.texture:SetTexture("Interface\\Glues\\CharacterCreate\\UI-CharacterCreate-Classes");
self.texture:SetTexCoord(unpack(CLASS_BUTTONS[class]));
elseif ( unitType == "arena" and unitNumber ) then
--[[ For ArenaFrames we can get the class via GetArenaOpponentSpec() and GetSpecializationInfoByID().
Therefore we need to have a fallback option when "ARENA_PREP_OPPONENT_SPECIALIZATIONS" fires.]]--
if ( class ) then
self.threeDFrame:Hide();
self.texture:SetTexture("Interface\\Glues\\CharacterCreate\\UI-CharacterCreate-Classes");
self.texture:SetTexCoord(unpack(CLASS_BUTTONS[class]));
else
self.texture:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark");
self.texture:SetTexCoord(0, 1, 0, 1);
end
elseif (not isPlayer ) then
-- If the unit is a NPC we fall back to 3D-Portrait.
self.texture:SetTexture(0, 0, 0, 1);
self.texture:SetTexCoord(0, 1, 0, 1);
self.threeDFrame:Show();
self.threeDFrame:SetUnit(unit);
self.threeDFrame:SetCamera(0);
end
end
end
local function OnShow (self, event)
local portraitType = ArenaLiveCore:GetDBEntry(self.unitFrame.addonName, self.unitFrame.frameType.."/Portrait/Type");
local unit = self.unitFrame.unit;
if ( not unit ) then
self.threeDFrame:Hide();
self.texture:SetTexture();
self.texture:SetTexCoord(0, 1, 0, 1);
return;
end
local isPlayer = UnitIsPlayer(unit);
local _, race = UnitRace(unit);
if ( portraitType == "threeD" ) then
self.threeDFrame:SetUnit(unit);
self.threeDFrame:SetCamera(0);
self.threeDFrame:Show();
elseif ( ( portraitType == "class" ) and ( not isPlayer ) ) then
-- Fix for NPCs to show the portrait camera correctly.
self.threeDFrame:SetUnit(unit);
self.threeDFrame:SetCamera(0);
self.threeDFrame:Show();
end
end
-- *** HANDLER FUNCTIONS ***
--[[ Function: AddFrame
Adds a portrait frame to a unit frame.
Arguments:
portrait: The superordinated portrait frame.
texture: The texture of the portrait frame. This will be used as background for 3D portraits or as a class icon.
threeDFrame: PlayerModel frame that is used to display 3D portraits.
unitFrame: The unit frame the healthbar belongs to.
]]--
function Portrait:AddFrame (portrait, texture, threeDFrame, unitFrame)
-- Create a reference for the healthbar inside the unit frame and vice versa.
unitFrame.portrait = portrait;
portrait.unitFrame = unitFrame;
-- Register the healthbar in the unit frame's handler list.
unitFrame.handlerList.portrait = true;
-- Set References for 3D Frame and texture.
portrait.texture = texture;
portrait.threeDFrame = threeDFrame;
portrait.Update = Update;
portrait.OnShow = OnShow;
portrait:SetScript("OnShow", portrait.OnShow);
end
--[[ Function: OnEvent
OnEvent function for the Portrait handler.
Arguments:
event: The event that fired.
...: A list of arguments that accompany the event.
]]--
local affectedFrame;
function Portrait:OnEvent (event, ...)
local unit = ...;
if( event == "PLAYER_TARGET_CHANGED" ) then
unit = "target";
end
if( event == "PLAYER_FOCUS_CHANGED" ) then
unit = "focus";
end
if ( event == "UNIT_MODEL_CHANGED" or event == "PLAYER_TARGET_CHANGED" or event == "PLAYER_FOCUS_CHANGED" ) then
if ( UnitFrame.UnitIDTable[unit] ) then
for key, value in pairs(UnitFrame.UnitIDTable[unit]) do
if ( value and UnitFrame.UnitFrameTable[key] ) then
affectedFrame = UnitFrame.UnitFrameTable[key];
if ( affectedFrame.portrait ) then
affectedFrame.portrait:Update(event);
end
end
end
end
end
end
|