71 lines
2.0 KiB
Lua
71 lines
2.0 KiB
Lua
bar_meter={}
|
|
|
|
function bar_meter.new(scr_x, scr_y, width, height, _value, _max_value, _actor, _color_ok, _color_warn, _color_danger)
|
|
_color_ok = _color_ok or 10; -- verd
|
|
_color_warn = _color_warn or 8; -- groc
|
|
_color_danger = _color_danger or 3; -- roig
|
|
return {
|
|
x = scr_x,
|
|
y = scr_y,
|
|
w = width,
|
|
h = height,
|
|
value = _value,
|
|
max_value = _max_value,
|
|
draw=bar_meter.draw,
|
|
actor=_actor,
|
|
color_ok = _color_ok,
|
|
color_warn = _color_warn,
|
|
color_danger = _color_danger,
|
|
}
|
|
end
|
|
|
|
function bar_meter:draw()
|
|
if self.actor~=nil and not empty_table(self.actor) then
|
|
self.value=self.actor.energia
|
|
self.max_value=self.actor.max_energia
|
|
end
|
|
-- local x = 0
|
|
-- local y = 2
|
|
-- local w = 6
|
|
-- local h = 7
|
|
local x = self.x
|
|
local y = self.y
|
|
local w = self.w
|
|
local h = self.h
|
|
-- borde blau
|
|
draw.hline(x+1, y, x+w-1, 15)
|
|
draw.hline(x+1, y+h, x+w-1, 15)
|
|
|
|
draw.vline(x , y+1, y+h-1, 15)
|
|
draw.vline(x+w, y+1, y+h-1, 15)
|
|
|
|
draw.rectf(x+1, y+1, w-1, h-1, 16 ); -- fons negre
|
|
|
|
if self.value>self.max_value/2 then
|
|
-- 50%
|
|
color = self.color_ok
|
|
elseif self.value>self.max_value/3 then
|
|
-- 33%
|
|
color = self.color_warn
|
|
else
|
|
color = self.color_danger
|
|
end
|
|
|
|
local lifebar_w = w-3
|
|
local segment_w = lifebar_w/self.max_value
|
|
local life_w = math.floor(lifebar_w*(self.value/self.max_value))
|
|
-- if self.value==self.max_value then curr_width=curr_width-2 end
|
|
if self.value>0 then
|
|
-- barra de vida
|
|
draw.rectf( x+2, y+2, life_w, h-3, color );
|
|
-- segments
|
|
for n_segment=1,self.value-1 do
|
|
x_segment = math.floor((x+2)+segment_w*n_segment)
|
|
-- if n_segment==self.max_value then
|
|
-- x_segment=x+w-2
|
|
-- end
|
|
draw.vline( x_segment, y+2, y+h-2, 16)
|
|
end
|
|
-- draw.vline( x+2+segment_w*n_segment, y+2, y+h-2, 16)
|
|
end
|
|
end |