RiseAboveHate

TEST E22

Jul 10th, 2025
567
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.13 KB | None | 0 0
  1. @name PN Guidance → Vector Thruster (safe zero-range)
  2. @inputs N:number TargetPos:vector Mass:number
  3. @persist LastTime LastPos LastVel
  4. @outputs OutForce:vector
  5.  
  6. interval(1)
  7.  
  8. # 0) Default to zero force every tick
  9. OutForce = vec(0,0,0)
  10.  
  11. # 1) Get time and Δt
  12. Time = clk()
  13. if (LastTime == 0) {
  14.     # first tick: init persists
  15.     LastTime = Time
  16.     LastPos  = entity():pos()
  17.     LastVel  = vec(0,0,0)
  18. }
  19. Dt = Time - LastTime
  20. LastTime = Time
  21.  
  22. # 2) Only proceed if Δt positive
  23. if (Dt > 0) {
  24.     # 3) Compute LOS
  25.     Pos   = entity():pos()
  26.     R     = TargetPos - Pos
  27.     Range = R:length()
  28.  
  29.     # 4) Only proceed if range positive
  30.     if (Range > 0) {
  31.         U    = R / Range
  32.  
  33.         # 5) Compute your own velocity and relative velocity
  34.         Vel      = (Pos - LastPos) / Dt
  35.         Vrel     = Vel - LastVel
  36.  
  37.         # 6) PN guidance law
  38.         Vc       = -Vrel:dot(U)
  39.         UDot     = (Vrel - U*(Vrel:dot(U))) / Range
  40.         ACmd     = UDot * (N * Vc)
  41.  
  42.         # 7) Output force = m·a
  43.         OutForce = ACmd * Mass
  44.  
  45.         # 8) Persist for next tick
  46.         LastVel = Vel
  47.     }
  48.     LastPos = Pos
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment