Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. #! /usr/bin/lua
  2.  
  3. local lfs = require( "lfs" )
  4.  
  5. local used_shaders = { }
  6.  
  7. local function process_map( filename )
  8. local f = io.open( filename )
  9. local contents = f:read( "*all" )
  10. f:close()
  11.  
  12. for shader in contents:gmatch( "(textures/%Z+)" ) do
  13. used_shaders[ shader ] = true
  14. end
  15. end
  16.  
  17. process_map( "maps/wbomb1.bsp" )
  18.  
  19.  
  20. local shader_textures = { }
  21.  
  22. local function stripext( str )
  23. return ( str:gsub( "%.[^.]*$", "" ) )
  24. end
  25.  
  26. local function add_textures( name, shader, key )
  27. for line in shader:gmatch( key .. "%s+([^\n]+)" ) do
  28. for tex in line:gmatch( "%S+" ) do
  29. table.insert( shader_textures[ name ], stripext( tex ) )
  30. end
  31. end
  32. end
  33.  
  34. local function process_shader( filename )
  35. local f = io.open( filename )
  36. local contents = f:read( "*all" )
  37. f:close()
  38.  
  39. for name, shader in contents:gmatch( "(%S+)%s*(%b{})" ) do
  40. if not shader_textures[ name ] then
  41. shader_textures[ name ] = { }
  42. end
  43.  
  44. add_textures( name, shader, "map" )
  45. add_textures( name, shader, "animmap" )
  46. add_textures( name, shader, "animMap" )
  47. add_textures( name, shader, "material" )
  48.  
  49. for tex in shader:gmatch( "celshade%s+%S+%s+%S+%s+(%S+)" ) do
  50. table.insert( shader_textures[ name ], stripext( tex ) )
  51. end
  52.  
  53. for tex in shader:gmatch( "sky[pP]arms%s+(%S+)" ) do
  54. table.insert( shader_textures[ name ], stripext( tex ) .. "_px" )
  55. table.insert( shader_textures[ name ], stripext( tex ) .. "_nx" )
  56. table.insert( shader_textures[ name ], stripext( tex ) .. "_py" )
  57. table.insert( shader_textures[ name ], stripext( tex ) .. "_ny" )
  58. table.insert( shader_textures[ name ], stripext( tex ) .. "_pz" )
  59. table.insert( shader_textures[ name ], stripext( tex ) .. "_nz" )
  60. table.insert( shader_textures[ name ], stripext( tex ) .. "_rt" )
  61. table.insert( shader_textures[ name ], stripext( tex ) .. "_lf" )
  62. table.insert( shader_textures[ name ], stripext( tex ) .. "_ft" )
  63. table.insert( shader_textures[ name ], stripext( tex ) .. "_bk" )
  64. table.insert( shader_textures[ name ], stripext( tex ) .. "_up" )
  65. table.insert( shader_textures[ name ], stripext( tex ) .. "_dn" )
  66. end
  67. end
  68. end
  69.  
  70. for f in lfs.dir( "scripts" ) do
  71. if f ~= "." and f ~= ".." then
  72. process_shader( "scripts/" .. f )
  73. end
  74. end
  75.  
  76. local used_textures = { }
  77.  
  78. for shader in pairs( used_shaders ) do
  79. if shader_textures[ shader ] then
  80. for _, texture in ipairs( shader_textures[ shader ] ) do
  81. used_textures[ texture ] = true
  82. end
  83. else
  84. -- print( "no textures for ", "[" .. shader .. "]" )
  85. end
  86. end
  87.  
  88. for line in io.stdin:lines() do
  89. if not used_textures[ stripext( line ) ] then
  90. print( "rm " .. line )
  91. else
  92. print( "# " .. line )
  93. end
  94. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement