Script - Example HUD
From FreeSpace Wiki
| Partial HUD created with scripting |
|---|
Creates new HUD or rather an example of scripted HUD. (Original source by WMCoolmon)
Table Entry
Scripting.tbl
#Global Hooks $GameInit: [[init.lua]] $HUD: [[hud.lua]] +Override: true #End
init.lua
--#################### HUD ####################--
drawBevRect = function(x1, y1, x2, y2)
-------Draw background
gr.setColor(0, 0, 48)
for x=1,5 do
--"/ \"
gr.drawLine(x1+(5-x), y1+x, x2-(5-x), y1+x)
--"\ /"
gr.drawLine(x1+(5-x), y2-x, x2-(5-x), y2-x)
end
-- "| |"
gr.drawRectangle(x1+1, y1+5, x2, y2-6, true)
-------Draw lines
gr.setColor(0, 128, 255)
--" - "
gr.drawLine(x1+5, y1, x2-6, y1)
--"/ \"
gr.drawLine(x1, y1+5, x1+5, y1)
gr.drawLine(x2, y1+5, x2-5, y1)
--"| |"
gr.drawLine(x1, y1+5, x1, y2-5)
gr.drawLine(x2, y1+5, x2, y2-5)
--"\ /"
gr.drawLine(x1, y2-5, x1+5, y2)
gr.drawLine(x2, y2-5, x2-5, y2)
--" - "
gr.drawLine(x1+5, y2, x2-6, y2)
end
setDamageColor = function(dcm)
local r
local g
local b
if dcm > .5 then
r = 255 * math.sin(dcm*math.pi)
g = 128+128 * math.sin(dcm*math.pi)
b = -255 * math.cos(2*dcm*math.pi)
else
r = 255
g = 255 * math.sin(dcm*math.pi)
b = 0
end
gr.setColor(r, g, b)
end
hud.lua
if slf then
-------Draw speed
x = 50
y = 50
drawBevRect(x, y, x+100, y+30)
local vel = slf.Orientation:rotateVector(slf.Velocity)
local mvel = slf.MaxVelocity
--Skip beveled area
x = x+5
y = y+5
--Draw X component
local speed = (vel.x/mvel.x)*10
gr.drawRectangle(x, y+5, x+20, y+15, false)
gr.drawRectangle(x+10, y+5, x+10+speed, y+15)
--Skip last gauge(20 px)
x = x+20+5
--Draw Y component
local speed = (vel.y/mvel.y)*10
gr.drawRectangle(x, y, x+10, y+20, false)
gr.drawRectangle(x, y+15, x+10, y+15+speed)
--Skip last gauge(10 px)
x=x+10+5
--Draw Z component
local speed = (vel.z/mvel.z)*50
gr.drawRectangle(x, y+5, x+50, y+15, false)
gr.drawRectangle(x, y+5, x+speed, y+15)
-------Draw life
x = 25
y = 200
drawBevRect(x, y, x+20, y+110)
x = x+5
y = y+5
dcm = slf.HitpointsLeft/slf.HitpointsMax
--Draw bar
gr.drawRectangle(x, y, x+10, y+100, false)
setDamageColor(dcm)
gr.drawRectangle(x, y+(1-dcm)*100, x+10, y+100)
-------Draw mission time
x = gr.getScreenWidth()-125
y = 200
drawBevRect(x, y, x+100, y+20)
x = x+5
y = y+5
gr.drawString("Flight time: ", x, y)
-------Draw gun ammo
x = 25
y = gr.getScreenHeight()-45
local pbank = slf.PrimaryBanks[1]
if pbank then
local ammo = pbank.AmmoLeft/pbank.AmmoMax*70
drawBevRect(x, y, x+120, y+20)
--Skip beveled area
x = x+5
y = y+5
--Draw bar
gr.drawRectangle(x, y, x+70, y+10, false)
gr.drawRectangle(x, y, x+ammo, y+10)
--Skip bar(70px)
x = x+70+5
--Draw number
gr.drawString(pbank.AmmoLeft, x, y)
end
-------Draw missile ammo
x = gr.getScreenWidth()-190
y = gr.getScreenHeight()-45
local sbank = slf.SecondaryBanks[1]
if sbank then
local sb_left = sbank.AmmoLeft
local sb_max = sbank.AmmoMax
drawBevRect(x, y, x+165, y+20)
x = x+5
y = y+5
for i = 1,16 do
if i > sb_max then
break
elseif i > sb_left then
gr.drawRectangle(x, y, x+5, y+10, false)
else
gr.drawRectangle(x, y, x+5, y+10)
end
x = x+10
end
end
-------Draw countermeasures
x = (gr.getScreenWidth()/2)-(105/2)
y = gr.getScreenHeight()-40
local cm_max = slf.Class.CountermeasuresMax
if cm_max then
local cm_left = slf.CountermeasuresLeft
drawBevRect(x, y, x+105, y+15)
x = x+5
y = y+5
for i = 1,10 do
if i > cm_max then
break
elseif i > cm_left then
--"-"
gr.drawLine(x+2, y+2, x+3, y+2)
--"|"
gr.drawLine(x+2, y+2, x+2, y+3)
else
--"-"
gr.drawLine(x, y+2, x+5, y+2)
--"|"
gr.drawLine(x+2, y, x+2, y+5)
--"\"
gr.drawLine(x, y, x+5, y+5)
--"/"
gr.drawLine(x, y+5, x+5, y)
end
x = x+10
end
end
--/slf
end