Python1320

Health Hud

Mar 27th, 2011
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.05 KB | None | 0 0
  1. local Tag="3DHeart"
  2. local hp=false
  3. local armor=false
  4. local LocalPlayer=LocalPlayer
  5.  
  6. local heart_model=nil
  7.  
  8. local scale=1
  9. local EyeVectorOffset= Vector(-100,150,0)
  10. local EyeAngleOffset = Angle(0,180,0)
  11.  
  12. local accel=0
  13. local oldhp=nil
  14. timer.Create(Tag,0.05,0,function()
  15.  
  16.   local p = LocalPlayer()
  17.   if not p:IsValid() then return end
  18.   hp    = p:Alive() and p:Health() or false
  19.   armor = p:Armor()>0 and p:Armor()
  20.   oldhp=oldhp or hp
  21. --MsgN("O: ",accel,"\t",hp,"\t",oldhp)
  22.   if not hp then accel=0 oldhp=100 return end
  23.  
  24.   if oldhp!=hp then
  25.     local diff=oldhp-hp
  26.     if diff > 0 then
  27.         accel=accel+diff*0.01
  28.     end
  29.   end
  30.   accel=(accel<0 and 0) or (accel>1000 and 1000) or accel
  31.  
  32.     --MsgN("N: ",accel,"\t",hp,"\t",oldhp)
  33.   oldhp=hp
  34.  
  35.   if not IsValid(heart_model) then
  36.     heart_model=ClientsideModel("models/Items/hevsuit.mdl",RENDERGROUP_OPAQUE)
  37.     heart_model:SetNoDraw(true)
  38.     --heart_model:SetMaterial"brick/brick_model"
  39.    
  40.   end
  41.    
  42. end)
  43.  
  44. local  function CalcOffset(pos,ang,off)
  45.     return pos + ang:Right() * off.x + ang:Forward() * off.y + ang:Up() * off.z;
  46.   end
  47.  
  48.  
  49.  
  50.  
  51. local function DrawHUDScreen()
  52.     if not IsValid(heart_model) or !hp then return end
  53.    
  54.   accel=accel*0.95
  55.  
  56.     local RenderPos = EyePos()
  57.     local RenderAng = EyeAngles()
  58.     --local rotatespeed=hp > 100 and 100 or hp < 1 and 1
  59.     --rotatespeed=100-rotatespeed
  60.     cam.Start3D( RenderPos, RenderAng )
  61.         cam.IgnoreZ( true )  
  62.             render.SuppressEngineLighting( true )
  63.                 render.EnableClipping( true );
  64.                     RenderPos=CalcOffset(RenderPos,RenderAng,EyeVectorOffset)
  65.                     --RenderAng:RotateAroundAxis(RenderAng:Forward(),EyeAngleOffset.p)
  66.                     RenderAng:RotateAroundAxis(RenderAng:Up(),CurTime()%360*100* (1-accel))
  67.                     --RenderAng:RotateAroundAxis(RenderAng:Right(),EyeAngleOffset.r)
  68.                     heart_model:SetRenderAngles(RenderAng)
  69.                     heart_model:SetRenderOrigin(RenderPos)
  70.                     local mn, mx = heart_model:GetRenderBounds()
  71.                     local Up = (mx-mn):GetNormal()
  72.                     local Bottom =  RenderPos + mn;
  73.                     local Top = RenderPos + mx;
  74.  
  75.                     local Fraction = hp>100 and 1 or hp < 1 and 0 or hp/100
  76.  
  77.                     local Lerped = LerpVector( Fraction, Top, Bottom )
  78.  
  79.                     local normal = -EyeAngles():Up()
  80.                     local distance = normal:Dot( Lerped );
  81.                     --heart_model:SetModelScale(Vector()*(1+math.sin(CurTime()*5)*0.1))
  82. --                  render.SetAmbientLight(255,255,255)
  83.                     render.SetBlend( 1 ) -- ugly with less than 1
  84.                     render.PushCustomClipPlane( -normal, -distance );
  85.                         --heart_model:SetMaterial""
  86.                         heart_model:DrawModel()
  87.                     render.PopCustomClipPlane()
  88.                     render.SetBlend( 0.7+math.sin(CurTime())*0.3 )
  89.                     --render.ResetModelLighting()
  90.                     render.PushCustomClipPlane( normal, distance );
  91.                         --heart_model:SetMaterial"models/debug/debugwhite"
  92.                         render.SetColorModulation( 5,0.4,0.4)
  93.  
  94.                         heart_model:DrawModel()
  95.                     render.PopCustomClipPlane()
  96.                 render.EnableClipping( false )
  97.             render.SuppressEngineLighting( false )
  98.         cam.IgnoreZ( false )
  99.  
  100.     cam.End3D()
  101.    
  102.   end
  103.  
  104.   hook.Add("RenderScreenspaceEffects",Tag, DrawHUDScreen)
Advertisement
Add Comment
Please, Sign In to add comment