Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @name police lightbar
- @inputs Horn
- @outputs I Mode SegsOn:array DELAYS_LIGHT_ORDERS:array
- @persist [SETTINGS LIGHT_ORDERS]:table DELAYS_LIGHT_ORDERS:array [Pos_L Pos_R]:vector HoloIdx Mode I DELAY
- @trigger none
- @model models/sprops/rectangles_thin/size_1/rect_6x12x1_5.mdl
- if (duped() | dupefinished() | first())
- {
- entity():setAlpha(0)
- SETTINGS = table() # because so easy to persist
- SETTINGS["NUM_SEGMENTS" ,number] = 4 # how many segments of main size?
- SETTINGS["MDL_SEGMENT" ,string] = "models/sprops/rectangles_thin/size_1_5/rect_6x12x1_5.mdl"
- SETTINGS["ANGLE" ,number] = 0
- SETTINGS["SIZE_SEGMENT" ,vector2] = vec2(6, 12) # sizes of segment prop in x and y dimensions
- SETTINGS["POS" ,vector] = entity():pos() + vec(0, 0, 0) # where to start with placement?
- SETTINGS["SCALE_SEGMENT" ,number] = 0.8 # scale in x dimension of main seg
- SETTINGS["START_DELAY" ,number] = 0 # in milis
- SETTINGS["SOUND" ,number] = 1 # 0 / 1
- SETTINGS["COLOR_OFF_ON" ,vector2] = vec2(60, 255) # x = off, y = on. to be used vec3(ON or OFF, 0, 0) for RED, etc.
- # returns vec(1, 0, 0) for red, vec(0, 0, 1) for blue
- function vector getColorVec(HoloIdx:number)
- {
- return (HoloIdx % 2) == 1 ? vec(1, 0, 0) : vec(0, 0, 1)
- }
- function setSegment(HoloIdx:number, OnOrOff:number)
- {
- Col = OnOrOff ? SETTINGS["COLOR_OFF_ON", vector2]:y() : SETTINGS["COLOR_OFF_ON", vector2]:x()
- holoColor(HoloIdx, getColorVec(HoloIdx) * Col)
- }
- HoloIdx = 1
- function entity createMainSeg(Pos:vector)
- {
- local E = holoCreate(HoloIdx,
- Pos,
- vec(SETTINGS["SCALE_SEGMENT", number], 1, 1),
- ang(0, 0, SETTINGS["ANGLE", number]),
- SETTINGS["COLOR_OFF_ON", vector2]:x() * getColorVec(HoloIdx),
- SETTINGS["MDL_SEGMENT", string]
- )
- holoMaterial(HoloIdx, "WTP/paint_1")
- HoloIdx++
- return E
- }
- # --- # # # CREATING MAIN SEGMENTS # # # --- #
- Pos = SETTINGS["POS", vector]
- for (I = 1, SETTINGS["NUM_SEGMENTS", number]) # main segs
- {
- local Pos_Init = SETTINGS["SIZE_SEGMENT", vector2]:y() * vec(0.5, 0, 0) * SETTINGS["SCALE_SEGMENT", number]
- local Pos_Adjust = SETTINGS["SIZE_SEGMENT", vector2]:y() * vec(0.99, 0, 0) * (I - 1) * SETTINGS["SCALE_SEGMENT", number]
- local Pos_R = Pos + Pos_Init + Pos_Adjust
- local Pos_L = Pos - Pos_Init - Pos_Adjust
- createMainSeg(Pos_R)
- createMainSeg(Pos_L)
- }
- # --- # # # CREATING LIGHT ORDER TABLES # # # --- #
- LIGHT_ORDERS = table()
- DELAYS_LIGHT_ORDERS = array() # in milis
- WAIL = table()
- for (I = 1, SETTINGS["NUM_SEGMENTS", number] * 2, SETTINGS["NUM_SEGMENTS", number] / 2)
- {
- Group1 = array(I, I + 2)
- Group2 = array(I + 1, I + 3)
- WAIL:pushArray(Group1)
- WAIL:pushArray(Group2)
- }
- DELAYS_LIGHT_ORDERS:pushNumber(100)
- LIGHT_ORDERS:pushTable(WAIL)
- YELP = table()
- for (I = 1, SETTINGS["NUM_SEGMENTS", number])
- {
- YELP:pushArray(array(I))
- }
- for (I = SETTINGS["NUM_SEGMENTS", number] * 2, SETTINGS["NUM_SEGMENTS", number] + 1, -1)
- {
- YELP:pushArray(array(I))
- }
- DELAYS_LIGHT_ORDERS:pushNumber(50)
- LIGHT_ORDERS:pushTable(YELP)
- CustomMode = table()
- function array getSegmentsOn(Mode:number, IdxCurrent:number)
- {
- Order = LIGHT_ORDERS[Mode, table]
- return Order[IdxCurrent % Order:count() + 1, array]
- }
- I = 1
- Mode = 1
- if (SETTINGS["SOUND", number])
- {
- timer("startSiren", SETTINGS["START_DELAY", number])
- }
- interval(1)
- }
- elseif(clk("startSiren"))
- {
- soundPlay(0, 0, "acf_mikespack_two/other/horns/another_siern.wav")
- soundVolume(0, 0.05)
- soundStop(1)
- }
- else
- {
- I = 1 + I % (SETTINGS["NUM_SEGMENTS", number] * 2)
- if (changed(Horn))
- {
- if (Horn)
- {
- Mode = Mode % LIGHT_ORDERS:count() + 1
- if (SETTINGS["SOUND", number])
- {
- soundStop(0)
- soundPlay(1, 0, "acf_mikespack_two/other/horns/police_low_loop.wav")
- }
- }
- else
- {
- timer("startSiren", SETTINGS["START_DELAY", number])
- }
- }
- interval(DELAYS_LIGHT_ORDERS[Mode, number])
- for (J = 1, SETTINGS["NUM_SEGMENTS", number] * 2) # shut all down
- {
- setSegment(J, 0)
- }
- SegsOn = getSegmentsOn(Mode, I)
- for (J = 1, SegsOn:count()) # turn desired on
- {
- setSegment(SegsOn[J, number], 1)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment