(include "sci.sh")
(use "Main")
(use "n982")
(use "Obj")
(script 984)


(local
    newEventHandler
    newEventHandler_3
    newEventHandler_2

)
(procedure public (proc984_0)
    (var newEventHandler, newEventHandler_2, newEventHandler_3)
    = newEventHandler (EventHandler:new())
    (send newEventHandler:
        add()
        name("fl")
    )
    = newEventHandler_2 (EventHandler:new())
    (send newEventHandler_2:
        add()
        name("ol")
    )
    = newEventHandler_3 (EventHandler:new())
    (send newEventHandler_3:
        add()
        name("bl")
    )
    = newEventHandler (EventHandler:new())
    (send newEventHandler:name("fl2"))
    = newEventHandler_2 (EventHandler:new())
    (send newEventHandler_2:name("ol2"))
    = newEventHandler_3 (EventHandler:new())
    (send newEventHandler_3:name("bl2"))
    (send gCast:eachElementDo(99 preSortCode))
    (send gFeatures:eachElementDo(99 preSortCode))
    Sort(newEventHandler newEventHandler frontSortCode)
    (send gSFeatures:add(newEventHandler))
    Sort(newEventHandler_2 newEventHandler_2 frontSortCode)
    (send gSFeatures:add(newEventHandler_2))
    (send gSFeatures:add(gRegions))
    (send gSFeatures:add(global28))
    Sort(newEventHandler_3 newEventHandler_3 backSortCode)
    (send gSFeatures:add(newEventHandler_3))
    (send newEventHandler:
        release()
        dispose()
    )
    (send newEventHandler_2:
        release()
        dispose()
    )
    (send newEventHandler_3:
        release()
        dispose()
    )
)


(instance preSortCode of Code
    (properties)

    (method (doit param1)
        (if (proc982_1(param1 gEgo))
            (send newEventHandler_3:add(param1))
        )(else
            (if (proc982_0(param1))
                (send newEventHandler_2:add(param1))
            )(else
                (send newEventHandler:add(param1))
            )
        )
    )

)
(instance frontSortCode of Code
    (properties)

    (method (doit param1)
        (var temp0, temp1)
        = temp0 (send gEgo:distanceTo(param1))
        = temp1 proc982_2((send gEgo:heading) GetAngle((send gEgo:x) (send gEgo:y) (send param1:x) (send param1:y)))
        (if (== proc999_1(temp1 90) 0)
            --temp1
        )
        (if (> Abs(temp1) 90)
            = temp1 89
            = temp0 (* temp0 10)
        )
        = temp0 Abs(CosDiv(temp1 temp0))
        (if (< temp0 0)
            = temp0 32767
        )
        return temp0
    )

)
(instance backSortCode of Code
    (properties)

    (method (doit param1)
        (var temp0, temp1)
        = temp0 (send gEgo:distanceTo(param1))
        = temp1 proc982_2((send gEgo:heading) GetAngle((send gEgo:x) (send gEgo:y) (send param1:x) (send param1:y)))
        (if (== proc999_1(temp1 90) 0)
            --temp1
        )
        = temp0 SinDiv(temp1 temp0)
        (if (< temp0 0)
            = temp0 32767
        )
    )

)
