WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   oUF (Otravi Unit Frames) (https://www.wowinterface.com/forums/forumdisplay.php?f=87)
-   -   Orb colour change with health (https://www.wowinterface.com/forums/showthread.php?t=27685)

Arcage 10-06-09 06:38 AM

Orb colour change with health
 
Hi Guys,

I'm sry if this has been covered, I've just spend close to 2hrs scowering through pages of code and replies.

Is there a way to make the health colour change with the values (in my case it would be the orb colour (rothui)).
Meaning at 100 = class colour, 75 = yellow, 50 = orange, 25 = red (prehaps changing the animation/background texture). Ideally with a smooth transition bewteen colours.

I saw a few posts talking about min/max health, though being new to Lua code I'm not sure they were referring to this or more the text colour.
I get in the situation when multimob grinding, my health gets to 25% and I havent even noticed because it;'s still the same colour, and the swirl animation tends to hide somewhat the empty orb.

If I'm not in the right area, please let me know.

Keep up the great work. ;)

zork 10-06-09 07:37 AM

This can be done.

Adjust this function with a color calculation: d3o2_updatePlayerHealth

Fully OK (100%) = green color.
Green color is in RGB = 0,1,0

Nearly dead = red color.
Red color is in RGB = 1,0,0

Thus:
Code:

    local calc_perc = min/max
    local calc_red
    local calc_green
   
    -- 100% = 0,1,0
    -- 75%  = 0.5,1,0
    -- 50%  = 1,1,0
    -- 25%  = 1,0.5,0
    -- 0%  = 1,0,0
   
    if calc_perc >= 0.5 then
      calc_green = 1
    else
      calc_green = calc_perc*2
    end
   
    if calc_perc <= 0.5 then
      calc_red = 1
    else
      calc_red = (1-calc_perc)*2
    end 

Now lets apply the color to the orb:
Code:

--colorize the orb filling
self.Health.Filling:SetVertexColor(calc_red,calc_green,0,1)
--add color to the galaxies aswell
self.gal1:SetVertexColor(calc_red,calc_green,0,1)
self.gal2:SetVertexColor(calc_red,calc_green,0,1)
self.gal3:SetVertexColor(calc_red,calc_green,0,1)

Final function could look like:

Code:

  --update player health func
  local function d3o2_updatePlayerHealth(self, event, unit, bar, min, max)
    local d = floor(min/max*100)
    self.Health.Filling:SetHeight((min / max) * self.Health:GetWidth())
    self.Health.Filling:SetTexCoord(0,1,  math.abs(min / max - 1),1)
    if useglow == 1 then
      self.pm1:SetAlpha((min/max)/fog_smoother)
      self.pm2:SetAlpha((min/max)/fog_smoother)
    end
    if usegalaxy == 1 then
      self.gal1:SetAlpha(min/max)
      self.gal2:SetAlpha(min/max)
      self.gal3:SetAlpha(min/max)
    end
    if d <= 25 and min > 1 then
      self.LowHP:Show()
    else
      self.LowHP:Hide()
    end
   
    local calc_perc = min/max
    local calc_red
    local calc_green
   
    -- 100% = 0,1,0
    -- 75%  = 0.5,1,0
    -- 50%  = 1,1,0
    -- 25%  = 1,0.5,0
    -- 0%  = 1,0,0
   
    if calc_perc >= 0.5 then
      calc_green = 1
    else
      calc_green = calc_perc*2
    end
   
    if calc_perc <= 0.5 then
      calc_red = 1
    else
      calc_red = (1-calc_perc)*2
    end   
   
    --colorize the orb filling
    self.Health.Filling:SetVertexColor(calc_red,calc_green,0,1)
    --add color to the galaxies aswell
    self.gal1:SetVertexColor(calc_red,calc_green,0,1)
    self.gal2:SetVertexColor(calc_red,calc_green,0,1)
    self.gal3:SetVertexColor(calc_red,calc_green,0,1)

   
  end


Arcage 10-06-09 08:51 AM

Tyvm for the quick response zork.

with my limited (rapidly increasing ^^ ) knowledge of lua, would I be correct in thinking:

Code:

    local calc_perc = min/max
    local calc_red
    local calc_green
   
    -- 100% = 0
    -- 75%  = 0.5,1,0
    -- 50%  = 1,1,0
    -- 25%  = 1,0.5,0
    -- 0%  = 1,0,0
   
    if calc_perc >= 0.5 then
      calc_green = 1
    else
      calc_green = calc_perc*2
    end
   
    if calc_perc <= 0.5 then
      calc_red = 1
    else
      calc_red = (1-calc_perc)*2
    end

would make the default (full) colour the class colour, based on the
Code:

  -- healthcolor defines what healthcolor will be used
  -- 0 = class color, 1 = red, 2 = green, 3 = blue, 4 = yellow, 5 = runic
  local healthcolor = 0

arguement mentioned eariler in the code, or does this addition require you to use the RGB code sequence?
I'm ok with green as default colour tbh, just wondering if this code still pulls in rules from previous lines or it's a independant cmd.

Also at 25% would it be asking for trouble to add a cmd to lighten to glow of the orb, to make it more promenent.
using the
Code:

local fog_smoother = 1
rule.

Hope you understand what i mean, as I dont know the all the lingo.

Appreciate your patience and help.

for the moment I'll try the above code you have supplied once I get home, and see how it looks.

EDIT: Just looking at some RGB values, and it seems the ones in the code are a lot more simple than other RGB codes I've seen: Example

Just to confirm, the RGB in this code is based on the opacity for each colour?
0 = not visible 0.25 = 25% opacity of that colour for example?

cheers.

zork 10-06-09 09:14 AM

You only need to adjust the UpdatePlayerHealth function. (Replace it with the one I posted)
This function is called each time the health of the player changes.

Other values will become obsolete, especially those that are set at startup.
The only thing that should be adjusted is the initial Healthcolor value at startup.

RGB in the real world is from 0 to 255. In WoW its from 0 to 1 or for you, from 0/255 to 255/255.

Just try my function, it should work.

My healhcolor value in my config is just an index number that is used to find the correct line in the orb-table. It has nothing to do with color values. But the color value inside that line on the table does.

example:
Code:

  local orbtab = {
    [0] = {r = player_class_color.r*0.8, g = player_class_color.g*0.8,  b = player_class_color.b*0.8, scale = 0.9, z = -12, x = -0.5, y = -0.8, anim = "SPELLS\WhiteRadiationFog.m2"}, -- class color
    [1] = {r = 0.8, g = 0, b = 0, scale = 0.8, z = -12, x = 0.8, y = -1.7, anim = "SPELLS\\RedRadiationFog.m2"}, -- red
    [2] = {r = 0.2, g = 0.8, b = 0, scale = 0.75, z = -12, x = 0, y = -1.1, anim = "SPELLS\\GreenRadiationFog.m2"}, -- green
    [3] = {r = 0, g = 0.35,  b = 0.9, scale = 0.75, z = -12, x = 1.2, y = -1, anim = "SPELLS\\BlueRadiationFog.m2"}, -- blue
    [4] = {r = 0.9, g = 0.7, b = 0.1, scale = 0.75, z = -12, x = -0.3, y = -1.2, anim = "SPELLS\\OrangeRadiationFog.m2"}, -- yellow
    [5] = {r = 0.1, g = 0.8,  b = 0.7, scale = 0.9, z = -12, x = -0.5, y = -0.8, anim = "SPELLS\\WhiteRadiationFog.m2"}, -- runic
  }

That color value for green should be 0,1,0 (RGB) for what you are looking to do and healthcolor should be set to 2 (healthcolor = 2).

Arcage 10-06-09 11:55 AM

Hi Zork,

I tried this and it looks sweet tbh, thank you.
though it's created a problem.

I'll detail what I did, as it's probably my fault.

I had both rBottomBarStyler, and roth IU, not rly knowing any better (cause RBBS has /cmds that seemed easier to work with.

As this code didnt work at first, I realised there is probably a conflict there.

I deleted RBBS addon, and set local use_rbottombarstyler = 0 (as it was originally)

With code added, I reloaded to find I now have a sexy green health orb that changes colour as it depletes, and also glows red under 25% (nice touch btw).

although I have no mana orb now. I have the blue orb yes, but it's not registering my mana value at all, so there is no text, and stays full when I use mana.

it's probably something daft, but staring at the code isnt helping, and as I didnt change anything in the "power" part of the code, I cant see where this issue lies..

Any help would be appreciated.

cheers :)

EDIT:

oUF_D3Orbs\oUF_D3Orbs.lua:294: attempt to call method 'SetVertexColor' (a nil value)
oUF-1.3.21\elements\health.lua:98: in function `func'
oUF-1.3.21\ouf.lua:506: in function <Interface\AddOns\oUF\ouf.lua:501>
(tail call): ?:

i pulled this error out of it. not sure if it's related (though I tend to think so).

Arcage 10-06-09 12:46 PM

update:

I replaced the code back to what it was:
Code:

  --update player health func
  local function d3o2_updatePlayerHealth(self, event, unit, bar, min, max)
    local d = floor(min/max*100)
    self.Health.Filling:SetHeight((min / max) * self.Health:GetWidth())
    self.Health.Filling:SetTexCoord(0,1,  math.abs(min / max - 1),1)
    if useglow == 1 then
      self.pm1:SetAlpha((min/max)/fog_smoother)
      self.pm2:SetAlpha((min/max)/fog_smoother)
    end
    if usegalaxy == 1 then
      self.gal1:SetAlpha(min/max)
      self.gal2:SetAlpha(min/max)
      self.gal3:SetAlpha(min/max)
    end
    if d <= 25 and min > 1 then
      self.LowHP:Show()
    else
      self.LowHP:Hide()
    end
  end

and it's back to normal.

Question is..what part of the addition is causing this to happen?

I did try adding the last "end" cmd, but this just removed the orbs all together.

I'll keep playing and let you know if I figure it out...

best way to learn eh ^^

Arcage 10-07-09 03:10 AM

well with no success as yet, I'll checking the code in SciTE (not that I rly know what I'm doing).

It's odd that this addition would affect the mana values.

any Ideas are appreciated. :D


All times are GMT -6. The time now is 05:27 AM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI