finicu212

modular e2 police lightbar

Jun 22nd, 2021
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.76 KB | None | 0 0
  1. @name police lightbar
  2. @inputs Horn
  3. @outputs I Mode SegsOn:array DELAYS_LIGHT_ORDERS:array
  4. @persist [SETTINGS LIGHT_ORDERS]:table DELAYS_LIGHT_ORDERS:array [Pos_L Pos_R]:vector HoloIdx Mode I DELAY
  5. @trigger none
  6. @model models/sprops/rectangles_thin/size_1/rect_6x12x1_5.mdl
  7.  
  8. if (duped() | dupefinished() | first())
  9. {
  10. entity():setAlpha(0)
  11.  
  12. SETTINGS = table() # because so easy to persist
  13. SETTINGS["NUM_SEGMENTS" ,number] = 4 # how many segments of main size?
  14. SETTINGS["MDL_SEGMENT" ,string] = "models/sprops/rectangles_thin/size_1_5/rect_6x12x1_5.mdl"
  15. SETTINGS["ANGLE" ,number] = 0
  16. SETTINGS["SIZE_SEGMENT" ,vector2] = vec2(6, 12) # sizes of segment prop in x and y dimensions
  17. SETTINGS["POS" ,vector] = entity():pos() + vec(0, 0, 0) # where to start with placement?
  18. SETTINGS["SCALE_SEGMENT" ,number] = 0.8 # scale in x dimension of main seg
  19. SETTINGS["START_DELAY" ,number] = 0 # in milis
  20. SETTINGS["SOUND" ,number] = 1 # 0 / 1
  21. SETTINGS["COLOR_OFF_ON" ,vector2] = vec2(60, 255) # x = off, y = on. to be used vec3(ON or OFF, 0, 0) for RED, etc.
  22.  
  23. # returns vec(1, 0, 0) for red, vec(0, 0, 1) for blue
  24. function vector getColorVec(HoloIdx:number)
  25. {
  26. return (HoloIdx % 2) == 1 ? vec(1, 0, 0) : vec(0, 0, 1)
  27. }
  28.  
  29. function setSegment(HoloIdx:number, OnOrOff:number)
  30. {
  31. Col = OnOrOff ? SETTINGS["COLOR_OFF_ON", vector2]:y() : SETTINGS["COLOR_OFF_ON", vector2]:x()
  32. holoColor(HoloIdx, getColorVec(HoloIdx) * Col)
  33. }
  34.  
  35. HoloIdx = 1
  36. function entity createMainSeg(Pos:vector)
  37. {
  38. local E = holoCreate(HoloIdx,
  39. Pos,
  40. vec(SETTINGS["SCALE_SEGMENT", number], 1, 1),
  41. ang(0, 0, SETTINGS["ANGLE", number]),
  42. SETTINGS["COLOR_OFF_ON", vector2]:x() * getColorVec(HoloIdx),
  43. SETTINGS["MDL_SEGMENT", string]
  44. )
  45. holoMaterial(HoloIdx, "WTP/paint_1")
  46. HoloIdx++
  47.  
  48. return E
  49. }
  50.  
  51. # --- # # # CREATING MAIN SEGMENTS # # # --- #
  52. Pos = SETTINGS["POS", vector]
  53. for (I = 1, SETTINGS["NUM_SEGMENTS", number]) # main segs
  54. {
  55. local Pos_Init = SETTINGS["SIZE_SEGMENT", vector2]:y() * vec(0.5, 0, 0) * SETTINGS["SCALE_SEGMENT", number]
  56. local Pos_Adjust = SETTINGS["SIZE_SEGMENT", vector2]:y() * vec(0.99, 0, 0) * (I - 1) * SETTINGS["SCALE_SEGMENT", number]
  57. local Pos_R = Pos + Pos_Init + Pos_Adjust
  58. local Pos_L = Pos - Pos_Init - Pos_Adjust
  59.  
  60. createMainSeg(Pos_R)
  61. createMainSeg(Pos_L)
  62. }
  63.  
  64. # --- # # # CREATING LIGHT ORDER TABLES # # # --- #
  65. LIGHT_ORDERS = table()
  66. DELAYS_LIGHT_ORDERS = array() # in milis
  67.  
  68. WAIL = table()
  69. for (I = 1, SETTINGS["NUM_SEGMENTS", number] * 2, SETTINGS["NUM_SEGMENTS", number] / 2)
  70. {
  71. Group1 = array(I, I + 2)
  72. Group2 = array(I + 1, I + 3)
  73. WAIL:pushArray(Group1)
  74. WAIL:pushArray(Group2)
  75. }
  76.  
  77. DELAYS_LIGHT_ORDERS:pushNumber(100)
  78. LIGHT_ORDERS:pushTable(WAIL)
  79.  
  80. YELP = table()
  81. for (I = 1, SETTINGS["NUM_SEGMENTS", number])
  82. {
  83. YELP:pushArray(array(I))
  84. }
  85.  
  86. for (I = SETTINGS["NUM_SEGMENTS", number] * 2, SETTINGS["NUM_SEGMENTS", number] + 1, -1)
  87. {
  88. YELP:pushArray(array(I))
  89. }
  90. DELAYS_LIGHT_ORDERS:pushNumber(50)
  91. LIGHT_ORDERS:pushTable(YELP)
  92.  
  93. CustomMode = table()
  94.  
  95.  
  96. function array getSegmentsOn(Mode:number, IdxCurrent:number)
  97. {
  98. Order = LIGHT_ORDERS[Mode, table]
  99. return Order[IdxCurrent % Order:count() + 1, array]
  100. }
  101.  
  102. I = 1
  103. Mode = 1
  104.  
  105. if (SETTINGS["SOUND", number])
  106. {
  107. timer("startSiren", SETTINGS["START_DELAY", number])
  108. }
  109.  
  110. interval(1)
  111. }
  112. elseif(clk("startSiren"))
  113. {
  114. soundPlay(0, 0, "acf_mikespack_two/other/horns/another_siern.wav")
  115. soundVolume(0, 0.05)
  116. soundStop(1)
  117. }
  118. else
  119. {
  120. I = 1 + I % (SETTINGS["NUM_SEGMENTS", number] * 2)
  121. if (changed(Horn))
  122. {
  123. if (Horn)
  124. {
  125. Mode = Mode % LIGHT_ORDERS:count() + 1
  126. if (SETTINGS["SOUND", number])
  127. {
  128. soundStop(0)
  129. soundPlay(1, 0, "acf_mikespack_two/other/horns/police_low_loop.wav")
  130. }
  131. }
  132. else
  133. {
  134. timer("startSiren", SETTINGS["START_DELAY", number])
  135. }
  136. }
  137. interval(DELAYS_LIGHT_ORDERS[Mode, number])
  138.  
  139. for (J = 1, SETTINGS["NUM_SEGMENTS", number] * 2) # shut all down
  140. {
  141. setSegment(J, 0)
  142. }
  143.  
  144. SegsOn = getSegmentsOn(Mode, I)
  145. for (J = 1, SegsOn:count()) # turn desired on
  146. {
  147. setSegment(SegsOn[J, number], 1)
  148. }
  149. }
  150.  
Advertisement
Add Comment
Please, Sign In to add comment