Advertisement
Starkkz

Starkkz's Gyropod V3.1 (E2 Chip)

Dec 18th, 2013
3,106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. @name Gyropod V3 by Starkkz
  2.  
  3. #Basic inputs
  4. @inputs EyePod:wirelink Core:entity Active Unfreeze Level RollLock Boost
  5.  
  6. #Movement inputs
  7. @inputs Forward Back MoveLeft MoveRight MoveUp MoveDown
  8.  
  9. #Angle inputs
  10. @inputs PitchUp PitchDown PitchAbs YawLeft YawRight YawAbs RollLeft RollRight RollAbs
  11.  
  12. #Multiplier inputs
  13. @inputs PitchMult YawMult RollMult SpeedMult
  14.  
  15. #Aiming inputs
  16. @inputs AimMode AimX AimY AimZ AimVec:vector
  17.  
  18. #Gyropod outputs
  19. @outputs Angle:angle Velocity:vector AngularVelocity:angle
  20. @outputs Mass
  21.  
  22. #Global variables
  23. @persist Initialized LastEnv:string
  24. @persist Control ControlIndex
  25. @persist CurrentMass
  26. @persist Parent:entity Parts:array
  27. if (dupefinished()){reset()}
  28.  
  29. function setName2(Text:string){
  30.     setName("Gyropod V3 by Starkkz\n"+Text)
  31. }
  32.  
  33. function normal pitchMult(){
  34.     if (PitchMult){
  35.         return PitchMult
  36.     }
  37.     return 1
  38. }
  39.  
  40. function normal yawMult(){
  41.     if (YawMult){
  42.         return YawMult
  43.     }
  44.     return 1
  45. }
  46.  
  47. function normal rollMult(){
  48.     if (RollMult){
  49.         return RollMult
  50.     }
  51.     return 1
  52. }
  53.  
  54. function normal speedMult(){
  55.     if (SpeedMult){
  56.         return SpeedMult
  57.     }
  58.     return 1
  59. }
  60.  
  61. function updateParent(){
  62.     Parent = entity():parent()
  63.     if (!Parent){Parent = entity():isConstrainedTo()}
  64.     if (!Parent){Parent = entity()}
  65.     Parts = Parent:getConstraints()
  66.     Parts[Parts:count() + 1, entity] = Parent
  67.     LastEnv = Parent:lsName()
  68. }
  69.  
  70. function controlParts(){
  71.     if (Control > 0){
  72.         while (ControlIndex <= Parts:count()){
  73.             if (minquota() <= 100){
  74.                 timer("controlParts", 1)
  75.                 exit()
  76.             }
  77.             local Part = Parts[ControlIndex, entity]
  78.            
  79.             if (Control == 1){
  80.                 #Check constraints
  81.                 if (Part != Parent & !Part:isVehicle()){
  82.                     if (Part:isWeldedTo() == Parent){
  83.                         if (Part:parent() == noentity()){
  84.                             Part:propFreeze(1)
  85.                         }
  86.                         Part:unConstrain()
  87.                         if (Core){Part:weld(Core)}
  88.                         Part:noCollide(Parent)
  89.                     }elseif (Part:isWeldedTo() != Core){
  90.                         Part:unWeld()
  91.                         Part:weld(Core)
  92.                     }
  93.                 }
  94.             }elseif (Control == 2){
  95.                 #Calculate mass
  96.                 CurrentMass = CurrentMass + Part:mass()
  97.             }elseif (Control == 3){
  98.                 #Freeze
  99.                 Part:propFreeze(1)
  100.             }elseif (Control == 4){
  101.                 #Unfreeze
  102.                 Part:propFreeze(0)
  103.             }elseif (Control == 5){
  104.                 #Disable gravity
  105.                 Part:propGravity(0)
  106.             }elseif (Control == 6){
  107.                 #Enable gravity
  108.                 Part:propGravity(1)
  109.             }
  110.             ControlIndex = ControlIndex + 1
  111.         }
  112.     }
  113.        
  114.     if (ControlIndex > Parts:count()){
  115.         if (Control == 1){
  116.             timer("checkConstraints", 20000)
  117.             if (Parent == entity()){
  118.                 setName2("Using E2 as parent")
  119.             }else{
  120.                 setName2("Found parent\nCached "+Parts:count()+" entities")
  121.             }
  122.             Initialized = 1
  123.         }elseif (Control == 2){
  124.             Mass = CurrentMass
  125.             CurrentMass = 0
  126.             timer("calculateMass", 10000)
  127.         }
  128.        
  129.         ControlIndex = 0
  130.         Control = 0
  131.     }
  132. }
  133.  
  134. function update(){
  135.     if (Active){
  136.         local Pitch = PitchUp - PitchDown + PitchAbs
  137.         local Yaw = YawLeft - YawRight + YawAbs
  138.         local Roll = RollLeft - RollRight + RollAbs
  139.        
  140.         local AngleVel = ang(Pitch, Yaw, Roll) * 15
  141.         if (EyePod){
  142.             AngleVel = AngleVel - ang(EyePod["Y", normal], EyePod["X", normal], 0):setRoll(0) * 10
  143.         }
  144.         if (Level){
  145.             AngleVel = -Parent:angles():setYaw(-AngleVel:yaw()) * 4
  146.         }elseif (RollLock){
  147.             AngleVel = -Parent:angles():setYaw(-AngleVel:yaw()):setPitch(-AngleVel:pitch()) * 4
  148.         }elseif (AimMode){
  149.             local Vec = vec(AimX, AimY, AimZ)
  150.             if (AimVec){Vec = AimVec}
  151.             AngleVel = -Parent:heading(AimVec) * 5
  152.         }
  153.         AngleVel = ang(AngleVel:pitch() * pitchMult(), AngleVel:yaw() * yawMult(), AngleVel:roll() * rollMult())
  154.        
  155.         local MoveX = Forward - Back
  156.         local MoveY = MoveRight - MoveLeft
  157.         local MoveZ = MoveUp - MoveDown
  158.         local VelMult = 800
  159.         if (Boost){VelMult = 5000}
  160.         local Vel = (Parent:forward() * MoveX + Parent:right() * MoveY + Parent:up() * MoveZ) * speedMult() * VelMult
  161.        
  162.         Parent:setVel(Vel)
  163.         Parent:setAngVel(shiftR(AngleVel))
  164.     }
  165. }
  166.  
  167. if (first()){
  168.     #Initialize
  169.     runOnLast(1)
  170.    
  171.     updateParent()
  172.     timer("checkConstraints", 1)
  173.     timer("calculateMass", 1000)
  174.     timer("update", 1000)
  175. }elseif (last()){
  176.     #End
  177. }
  178.  
  179. if (Parent & Parent:lsName() != LastEnv){
  180.     LastEnv = Parent:lsName()
  181.     if (Active){timer("Activate", 1)}
  182. }
  183.  
  184. if (~Active){
  185.     if (Active){
  186.         timer("Activate", 1)
  187.     }else{
  188.         timer("Deactivate", 1)
  189.     }
  190.     EyePod["Enable", normal] = Active
  191. }elseif (~Unfreeze){
  192.     if (Unfreeze){
  193.         timer("Unfreeze", 1)
  194.     }else{
  195.         timer("Freeze", 1)
  196.     }
  197. }elseif (clk("controlParts")){
  198.     controlParts()
  199. }elseif (clk("update")){
  200.     if (Initialized){
  201.         update()
  202.     }
  203.     timer("update", 200)
  204. }elseif (clk("Activate")){
  205.     if (Control == 0){
  206.         Control = 5
  207.         controlParts()
  208.     }else{
  209.         timer("Activate", 100)
  210.     }
  211. }elseif (clk("Deactivate")){
  212.     if (Control == 0){
  213.         Control = 6
  214.         controlParts()
  215.     }else{
  216.         timer("Dectivate", 100)
  217.     }
  218. }elseif (clk("Freeze")){
  219.     if (Control == 0){
  220.         Control = 3
  221.         controlParts()
  222.     }else{
  223.         timer("Freeze", 100)
  224.     }
  225. }elseif (clk("Unfreeze")){
  226.     if (Control == 0){
  227.         Control = 4
  228.         controlParts()
  229.     }else{
  230.         timer("Unfreeze", 100)
  231.     }
  232. }elseif (clk("checkConstraints")){
  233.     if (Control == 0){
  234.         Control = 1
  235.         updateParent()
  236.         controlParts()
  237.     }else{
  238.         timer("checkConstraints", 100)
  239.     }
  240. }elseif (clk("calculateMass")){
  241.     if (Control == 0){
  242.         Control = 2
  243.         controlParts()
  244.     }else{
  245.         timer("calculateMass", 100)
  246.     }
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement