Advertisement
Guest User

Nyancars script by Puma for MTA

a guest
Apr 20th, 2012
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.80 KB | None | 0 0
  1. -- EDITABLE (NO RECOMMENDED)
  2. parts = 10                      -- amount of sides that is displayed behind the vehicle (you can see the corners)
  3. partLength = 1                  -- length of every part in SA coördinates
  4. lineThickness = 15              -- thickness of every line (not sure about the unit)
  5. xOff, yOff, zOff = 0, -2.5, 0   -- offset of the rainbow
  6. fadeLength = 5                  -- amount of parts from the end to the front that's in the fade, for some reason it starts bugging when you make it larger than 5
  7.  
  8. colors = {                      -- colors in the rainbow in RGB
  9.     { 255, 0, 0 },
  10.     { 255, 150, 0 },
  11.     { 255, 255, 0 },
  12.     { 50, 255, 0 },
  13.     { 0, 150, 255 },
  14.     { 100, 50, 255 }
  15.         }
  16.  
  17. -- DO NOT EDIT ANYTHING BELOW HERE, UNLESS YOU KNOW WHAT YOU'RE DOING
  18. lineOffsetZMultiplier = 0.01
  19. vehicleTable = {}
  20. oldPosTable = {}
  21. partsTable = {}
  22. if fadeLength >= parts then
  23.     fadeLength = parts - 1
  24. end
  25. startFade = parts - fadeLength
  26. fadeIndex = 255 / fadeLength
  27. lineOffsetZ = lineThickness * lineOffsetZMultiplier
  28.  
  29.  
  30.  
  31. lineStartZ = zOff + #colors * lineOffsetZ * 0.5
  32.  
  33. function render ()
  34.     for i, v in pairs ( getElementsByType ( "vehicle" ) ) do
  35.         if not vehicleTable[v] then
  36.             vehicleTable[v] = {}
  37.         else
  38.             local vx, vy, vz = getElementPosition ( v )
  39.            
  40.             local matrix = getElementMatrix ( v )
  41.             local x = xOff * matrix[1][1] + yOff * matrix[2][1] + zOff * matrix[3][1] + 1 * matrix[4][1]
  42.             local y = xOff * matrix[1][2] + yOff * matrix[2][2] + zOff * matrix[3][2] + 1 * matrix[4][2]
  43.             local z = xOff * matrix[1][3] + yOff * matrix[2][3] + zOff * matrix[3][3] + 1 * matrix[4][3]
  44.            
  45.             if oldPosTable[v] then
  46.                 local oldX, oldY, oldZ = unpack ( oldPosTable[v] )
  47.                 if getDistanceBetweenPoints3D ( x, y, z, oldX, oldY, oldZ ) > partLength then
  48.                     table.insert ( vehicleTable[v], { oldX, oldY, oldZ, x, y, z } )
  49.                     oldPosTable[v] = { x, y, z }
  50.                 end
  51.                
  52.                 for i, part in pairs ( vehicleTable[v] ) do
  53.                     if #vehicleTable[v] <= parts or i >= #vehicleTable[v] - parts then
  54.                         local a = 255
  55.                         if i < #vehicleTable[v] - parts + fadeLength then
  56.                             local index = i - ( #vehicleTable[v] - parts )
  57.                             a = 255 * fadeIndex * ( fadeLength - index )
  58.                         end
  59.                         local px1, py1, pz1, px2, py2, pz2 = unpack ( part )
  60.                         drawRainbow ( px1, py1, pz1, px2, py2, pz2, a )
  61.                     end
  62.                 end
  63.                
  64.                 drawRainbow ( x, y, z, oldX, oldY, oldZ, 255 )
  65.             else
  66.                 oldPosTable[v] = { x, y, z }
  67.             end
  68.         end
  69.     end
  70. end
  71. addEventHandler ( "onClientRender", getRootElement(), render )
  72.  
  73. function drawRainbow ( x1, y1, z1, x2, y2, z2, alpha )
  74.     for i, color in pairs ( colors ) do
  75.         local i = #colors - i
  76.         local r, g, b = unpack ( color )
  77.         local z1 = z1 + - lineStartZ + ( i - 1 ) *  lineOffsetZ
  78.         local z2 = z2 + - lineStartZ + ( i - 1 ) *  lineOffsetZ
  79.         dxDrawLine3D ( x1, y1, z1, x2, y2, z2, tocolor(r, g, b, alpha), lineThickness )
  80.     end
  81. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement