RiseAboveHate

TEST E2

Jul 9th, 2025
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.96 KB | None | 0 0
  1. @name Simple PN Guidance
  2. @inputs N:number TargetPos:vector
  3. @persist LastR:vector LastTime:time LastPos:vector LastVel:vector
  4. @outputs OutForce:vector
  5.  
  6. interval(1)
  7. # 1) Time & positions
  8. local t = clk()
  9. local dt = t - (LastTime?:t)
  10. if (dt <= 0) { LastTime = t return }
  11. LastTime = t
  12.  
  13. local Pos = entity():pos()
  14. local R = TargetPos - Pos
  15. local Range = R:length()
  16. if (Range <= 0) { return }
  17.  
  18. # 2) LOS unit & relative velocity
  19. local u = R / Range
  20. local Vel = (Pos - (LastPos?:Pos)) / dt
  21. local Vrel = Vel - (LastVel?:vec(0,0,0))
  22. LastPos = Pos
  23. LastVel = Vel
  24.  
  25. # 3) Closing speed
  26. local Vc = -Vrel:dot(u)
  27.  
  28. # 4) LOS rate
  29. # ū̇ = (Vrel − u*(Vrel·u)) / R
  30. local uDot = (Vrel - u*(Vrel:dot(u))) / Range
  31.  
  32. # 5) Commanded accel
  33. local aCmd = uDot * (N * Vc)
  34.  
  35. # 6) Turn into force for a vector thruster: F = m·a
  36. # assume you set mass elsewhere, e.g. Mass input or convar
  37. local mass = entity():getMass() # or pass in as @input
  38. OutForce @= aCmd * mass
  39.  
Advertisement
Add Comment
Please, Sign In to add comment