Advertisement
Guest User

Grandfather of Map Mirror

a guest
Oct 31st, 2014
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.82 KB | None | 0 0
  1. local MirrorRT = GetRenderTarget( "MirrorTexture", ScrW(), ScrH(), false )
  2.  
  3. local FlippedVertical = CreateConVar( "r_flip_vertical", 1, { FCVAR_ARCHIVE } )
  4. local FlippedHorizontal = CreateConVar( "r_flip_horizontal", 0, { FCVAR_ARCHIVE } )
  5.  
  6. local function GetBaseTransform()
  7. return string.format( "center .5 .5 scale %i %i rotate 0 translate 0 0", ( FlippedVertical:GetBool() and -1 or 1 ), ( FlippedHorizontal:GetBool() and -1 or 1 ) )
  8. end
  9.  
  10. local MirroredMaterial = CreateMaterial(
  11. "MirroredMaterial",
  12. "UnlitGeneric",
  13. {
  14. [ '$basetexture' ] = MirrorRT,
  15. [ '$basetexturetransform' ] = GetBaseTransform(),
  16. }
  17. )
  18.  
  19. /*
  20. --Doesn't work :(
  21. local function UpdateTransform()
  22. MirroredMaterial:SetString( "$basetexturetransform", GetBaseTransform() )
  23. end
  24.  
  25. cvars.AddChangeCallback( "r_flip_vertical", function( cvar, prev, new )
  26. UpdateTransform()
  27. end )
  28.  
  29. cvars.AddChangeCallback( "r_flip_horizontal", function( cvar, prev, new )
  30. UpdateTransform()
  31. end )
  32. */
  33.  
  34. local view = {}
  35.  
  36. hook.Add( "RenderScene", "Mirror.RenderScene", function( Origin, Angles )
  37.  
  38. view.x = 0
  39. view.y = 0
  40. view.w = ScrW()
  41. view.h = ScrH()
  42. view.origin = Origin
  43. view.angles = Angles
  44. view.drawhud = true
  45.  
  46. // get the old rendertarget
  47. local oldrt = render.GetRenderTarget()
  48.  
  49. // set the rendertarget
  50. render.SetRenderTarget( MirrorRT )
  51.  
  52. // clear
  53. render.Clear( 0, 0, 0, 255, true )
  54. render.ClearDepth()
  55. render.ClearStencil()
  56. render.RenderView( view )
  57.  
  58.  
  59. // restore
  60. render.SetRenderTarget( oldrt )
  61.  
  62. MirroredMaterial:SetTexture( "$basetexture", MirrorRT )
  63. render.SetMaterial( MirroredMaterial )
  64. render.DrawScreenQuad()
  65. render.RenderHUD(0,0,view.w,view.h)
  66. return true
  67. end )
  68.  
  69. hook.Add( "InputMouseApply", "flipmouse", function( cmd, x, y, angle )
  70.  
  71. local pitchchange = y * GetConVar( "m_pitch" ):GetFloat()
  72. local yawchange = x * -GetConVar( "m_yaw" ):GetFloat()
  73.  
  74. angle.p = angle.p + pitchchange * ( FlippedHorizontal:GetBool() and -1 or 1 )
  75. angle.y = angle.y + yawchange * ( FlippedVertical:GetBool() and -1 or 1 )
  76.  
  77. cmd:SetViewAngles( angle )
  78.  
  79. return true
  80.  
  81. end )
  82.  
  83.  
  84. hook.Add( "CreateMove", "flipmove", function( cmd ) -- Override player movement
  85.  
  86. local forward = 0;
  87. local right = 0
  88. local maxspeed = LocalPlayer():GetMaxSpeed() * ( FlippedHorizontal:GetBool() and -1 or 1 )
  89.  
  90. if cmd:KeyDown( IN_FORWARD ) then
  91. forward = forward + maxspeed
  92. end
  93. if cmd:KeyDown( IN_BACK ) then
  94. forward = forward - maxspeed
  95. end
  96. if cmd:KeyDown( IN_MOVERIGHT ) then
  97. right = right - maxspeed
  98. end
  99. if cmd:KeyDown( IN_MOVELEFT ) then
  100. right = right + maxspeed
  101. end
  102.  
  103. cmd:SetForwardMove( forward )
  104. cmd:SetSideMove( right )
  105.  
  106. end )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement