Script - Example HUD

From FreeSpace Wiki
Revision as of 19:27, 18 April 2010 by TopAce (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Script-hudexample.jpg
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