Advertisement
Whiplash141

Whip's Inertial Thrust Manager v2

Mar 9th, 2016
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.51 KB | None | 0 0
  1. /*
  2. /// Dampener Directional Manager v2 - 2/18/16 ///
  3.  
  4. Code by Whiplash141
  5. */
  6.  
  7. //=========================================================================================
  8. //You can edit these name tags to what you like
  9.  
  10.     const string strRemoteTag = "Reference"; //name tag of reference remote
  11.     const string strUpThrustTag = "[Up]"; //group name of upwards thrust
  12.     const string strDownThrustTag = "[Down]"; //group name of downwards thrust
  13.     const string strLeftThrustTag = "[Left]"; //group name of left thrust
  14.     const string strRightThrustTag = "[Right]"; //group name of right thrust
  15.     const string strForwardThrustTag = "[Forward]"; //group name of forward thrust
  16.     const string strBackwardThrustTag = "[Backward]"; //group name of backward thrust
  17.    
  18. //=========================================================================================
  19. //Dont touch anything down here :P
  20.  
  21.     List<IMyTerminalBlock> listUpThrust = new List<IMyTerminalBlock>();
  22.     List<IMyTerminalBlock> listDownThrust = new List<IMyTerminalBlock>();
  23.     List<IMyTerminalBlock> listLeftThrust = new List<IMyTerminalBlock>();
  24.     List<IMyTerminalBlock> listRightThrust = new List<IMyTerminalBlock>();
  25.     List<IMyTerminalBlock> listForwardThrust = new List<IMyTerminalBlock>();
  26.     List<IMyTerminalBlock> listBackwardThrust = new List<IMyTerminalBlock>();
  27.     List<IMyTerminalBlock> listRemotes = new List<IMyTerminalBlock>();
  28.    
  29.     IMyTerminalBlock reference;
  30.    
  31.     Vector3D lastPosition = new Vector3D(0, 0, 0);
  32.  
  33. void Main(string arg)        
  34. {
  35. //get our thruster lists
  36.     var GTS = GridTerminalSystem; //because im lazy lol
  37.    
  38.     var groupUp = GTS.GetBlockGroupWithName(strUpThrustTag);
  39.     if(groupUp != null) listUpThrust = groupUp.Blocks;
  40.    
  41.     var groupDown = GTS.GetBlockGroupWithName(strDownThrustTag);
  42.     if(groupDown != null) listDownThrust = groupDown.Blocks;
  43.    
  44.     var groupLeft = GTS.GetBlockGroupWithName(strLeftThrustTag);
  45.     if(groupLeft != null) listLeftThrust = groupLeft.Blocks;
  46.    
  47.     var groupRight = GTS.GetBlockGroupWithName(strRightThrustTag);
  48.     if(groupRight != null) listRightThrust = groupRight.Blocks;
  49.    
  50.     var groupForward = GTS.GetBlockGroupWithName(strForwardThrustTag);
  51.     if(groupForward != null) listForwardThrust = groupForward.Blocks;
  52.    
  53.     var groupBackward = GTS.GetBlockGroupWithName(strBackwardThrustTag);
  54.     if(groupBackward != null) listBackwardThrust = groupBackward.Blocks;
  55.  
  56. //grab our remote
  57.     GTS.SearchBlocksOfName(strRemoteTag, listRemotes);
  58.     if(listRemotes.Count != 0)
  59.         reference = listRemotes[0];
  60.     else
  61.         return;
  62.  
  63. //get orientation vectors
  64.     MatrixD orientation = reference.WorldMatrix;
  65.     Vector3D forwardVec = orientation.Forward;
  66.     Vector3D leftVec = orientation.Left;
  67.     Vector3D upVec = orientation.Up;
  68.  
  69. //get our travel vector
  70.     Vector3D position = reference.GetPosition();
  71.     Vector3D travelVec = position - lastPosition;
  72.  
  73. //check if we are moving slow
  74.     if(travelVec.Length() == 0)
  75.     {
  76.         ToggleDampenersOn(listForwardThrust, false);
  77.         ToggleDampenersOn(listBackwardThrust, false);
  78.         ToggleDampenersOn(listLeftThrust, false);
  79.         ToggleDampenersOn(listRightThrust, false);
  80.         ToggleDampenersOn(listUpThrust, false);
  81.         ToggleDampenersOn(listDownThrust, false);
  82.         return;
  83.     }else{
  84.     //get dot products to test the direction
  85.         double dotForward = forwardVec.Dot(travelVec);
  86.         double dotLeft = leftVec.Dot(travelVec);
  87.         double dotUp = upVec.Dot(travelVec);
  88.  
  89.     //test directions
  90.         if(dotForward > 0)
  91.         {
  92.             ToggleDampenersOn(listForwardThrust, false);
  93.             ToggleDampenersOn(listBackwardThrust, true);
  94.         }
  95.         else if(dotForward < 0)
  96.         {
  97.             ToggleDampenersOn(listForwardThrust, true);
  98.             ToggleDampenersOn(listBackwardThrust, false);
  99.         }else{
  100.             ToggleDampenersOn(listForwardThrust, false);
  101.             ToggleDampenersOn(listBackwardThrust, false);
  102.         }
  103.  
  104.         if(dotLeft > 0)
  105.         {
  106.             ToggleDampenersOn(listLeftThrust, false);
  107.             ToggleDampenersOn(listRightThrust, true);
  108.         }
  109.         else if(dotLeft < 0)
  110.         {
  111.             ToggleDampenersOn(listLeftThrust, true);
  112.             ToggleDampenersOn(listRightThrust, false);
  113.         }else{
  114.             ToggleDampenersOn(listLeftThrust, false);
  115.             ToggleDampenersOn(listRightThrust, false);
  116.         }
  117.  
  118.         if(dotUp > 0)
  119.         {
  120.             ToggleDampenersOn(listUpThrust, false);
  121.             ToggleDampenersOn(listDownThrust, true);
  122.         }
  123.         else if(dotUp < 0)
  124.         {
  125.             ToggleDampenersOn(listUpThrust, true);
  126.             ToggleDampenersOn(listDownThrust, false);
  127.         }else{
  128.             ToggleDampenersOn(listUpThrust, false);
  129.             ToggleDampenersOn(listDownThrust, false);
  130.         }
  131.     }
  132.     lastPosition = position;
  133. }
  134.  
  135. void ToggleDampenersOn (List<IMyTerminalBlock> thrusterList, bool turnThrustOn)
  136. {
  137.     for(int i = 0; i < thrusterList.Count; i++)
  138.     {
  139.         var thisThrust = thrusterList[0] as IMyThrust;
  140.         if(thisThrust != null)
  141.         {
  142.             if(turnThrustOn)
  143.             {
  144.                 bool isOn = thisThrust.GetValue<bool>("OnOff");
  145.                 if(!isOn) thisThrust.ApplyAction("OnOff_On");
  146.             }else{
  147.                 bool isOn = thisThrust.GetValue<bool>("OnOff");
  148.                 if(isOn) thisThrust.ApplyAction("OnOff_Off");
  149.             }
  150.         }
  151.     }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement