def draw_hp
@hp, @maxhp = actor.hp, actor.maxhp
rate = (@maxhp > 0 ? @hp.to_f / @maxhp : 0)
b1 = RPG::Cache.picture(BlizzCFG::Z_HP_FILE)
b2 = RPG::Cache.picture(BlizzCFG::Z_HP_FILE_EMPTY)
if BlizzCFG::Z_HP_TILING
tiles = @maxhp / BlizzCFG::Z_HP_PER_TILE
rows = (tiles.to_f / BlizzCFG::Z_HP_TILE_COLUMNS).ceil
w, h = b1.width, b1.height
self.bitmap.fill_rect(@hp_x, @hp_y, w * BlizzCFG::Z_HP_TILE_COLUMNS,
h * rows, Color.new(0, 0, 0, 0))
full_tiles = (rate * tiles).to_i
semi_full = ((rate * tiles != full_tiles) ? 1 : 0)
(0...full_tiles).each {|i|
x = @hp_x + (i % BlizzCFG::Z_HP_TILE_COLUMNS) * w
y = @hp_y + (i / BlizzCFG::Z_HP_TILE_COLUMNS) * h
self.bitmap.blt(x, y, b1, Rect.new(0, 0, w, h))}
if semi_full > 0
x = @hp_x + (full_tiles % BlizzCFG::Z_HP_TILE_COLUMNS) * w
y = @hp_y + (full_tiles / BlizzCFG::Z_HP_TILE_COLUMNS) * h
if BlizzCFG::Z_HP_FILL_UP
h2 = ((1 - rate * tiles + full_tiles) * h).to_i
self.bitmap.blt(x, y, b2, Rect.new(0, 0, w, h2))
self.bitmap.blt(x, y + h2, b1, Rect.new(0, h2, w, h - h2))
else
w2 = ((rate * tiles - full_tiles) * w).to_i
self.bitmap.blt(x, y, b1, Rect.new(0, 0, w2, h))
self.bitmap.blt(x + w2, y, b2, Rect.new(w2, 0, w - w2, h))
end
end
((full_tiles + semi_full)...tiles).each {|i|
x = @hp_x + (i % BlizzCFG::Z_HP_TILE_COLUMNS) * w
y = @hp_y + (i / BlizzCFG::Z_HP_TILE_COLUMNS) * h
self.bitmap.blt(x, y, b2, Rect.new(0, 0, w, h))}
else
w1 = (b1.width * rate).to_i
w2 = b2.width - w1
self.bitmap.fill_rect(@hp_x, @hp_y, b1.width, b1.height, Color.new(0, 0, 0, 0))
self.bitmap.blt(@hp_x, @hp_y, b1, Rect.new(0, 0, w1, b1.height))
self.bitmap.blt(@hp_x + w1, @hp_y, b2, Rect.new(w1, 0, w2, b2.height))
end
draw_sp
end