Advertisement
NickNDS

Turret Zeroer

Sep 7th, 2019
1,368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.30 KB | None | 0 0
  1. public double timeToResetTurretsInSeconds = 10;
  2.  
  3. public int turretsToResetPerTick = 5;
  4.  
  5. public bool disableIdleRotation = true;
  6.  
  7. // ----------- END OF USER SETTINGS -----------
  8.  
  9. public List<IMyLargeTurretBase> turrets = new List<IMyLargeTurretBase>();
  10.  
  11. public TimeSpan
  12. getTurretTime = new TimeSpan(0, 0, 0),
  13. resetTurretTime = new TimeSpan(0, 0, 0);
  14.  
  15. public bool resettingTurrets = false;
  16.  
  17. public int currentTurretIndex = 0, checkingMode = 0, activeTurretCount = 0;
  18.  
  19. public Program()
  20. {
  21.     Runtime.UpdateFrequency = UpdateFrequency.Update10;
  22.     GetTurrets();
  23. }
  24.  
  25. public void Save()
  26. {
  27.  
  28. }
  29.  
  30. public void Main(string argument, UpdateType updateSource)
  31. {
  32.     try {
  33.         string pluralA = "", pluralB = "es", pluralC = "", pluralD = "s";
  34.         if (turrets.Count > 1) {
  35.             pluralA = "s";
  36.             pluralB = "";
  37.         }
  38.         if (activeTurretCount > 1) {
  39.             pluralC = "s";
  40.             pluralD = "ve";
  41.         }
  42.         if (getTurretTime.TotalSeconds >= 30.0) GetTurrets();
  43.         else
  44.         {
  45.             TimeSpan timeSinceLastRun = Runtime.TimeSinceLastRun;
  46.             getTurretTime += timeSinceLastRun;
  47.             switch (checkingMode)
  48.             {
  49.                 case 0:
  50.                     resettingTurrets = ResetTurrets();
  51.                     if (!resettingTurrets) {
  52.                         Echo(activeTurretCount + " Turret" + pluralC + " ha" + pluralD + " active target");
  53.                         currentTurretIndex = 0;
  54.                         resetTurretTime = new TimeSpan(0, 0, 0);
  55.                     }
  56.                     else if (turrets.Count > 0) {
  57.                         Echo(turrets.Count + " Turret" + pluralA + " do" + pluralB + " not have active target");
  58.                         if (resetTurretTime.TotalSeconds >= timeToResetTurretsInSeconds) checkingMode = 1;
  59.                         else resetTurretTime += timeSinceLastRun;
  60.                         if (resetTurretTime.TotalSeconds < timeToResetTurretsInSeconds)
  61.                             Echo("Time until reset: " + (timeToResetTurretsInSeconds - resetTurretTime.TotalSeconds).ToString("N1") + "s");
  62.                         else Echo("Resetting " + currentTurretIndex + "/" + turrets.Count + " turret" + pluralA);
  63.                     }
  64.                 break;
  65.                 case 1:
  66.                     Echo(turrets.Count + " Turret" + pluralA + " do" + pluralB + " not have active target");
  67.                     Echo("Resetting " + currentTurretIndex + "/" + turrets.Count + " turret" + pluralA);
  68.                     if (disableIdleRotation) Echo("Disabling idle rotation");
  69.                     else Echo("Not disabling idle rotation");
  70.                     ZeroTurrets();
  71.                     checkingMode = 0;
  72.                 break;
  73.             }
  74.         }
  75.     } catch { Echo("Error Caught In Main"); }
  76. }
  77.  
  78. public void ZeroTurrets()
  79. {
  80.     int reps = 0;
  81.     for (int i = currentTurretIndex; i < turrets.Count; i++)
  82.     {
  83.         try
  84.         {
  85.             if (!turrets[i].IsUnderControl)
  86.             {
  87.                 if (disableIdleRotation)
  88.                 {
  89.                     turrets[i].EnableIdleRotation = false;
  90.                     turrets[i].SyncEnableIdleRotation();
  91.                 }
  92.                 turrets[i].Azimuth = 0f;
  93.                 turrets[i].Elevation = 0f;
  94.                 turrets[i].SyncElevation();
  95.                 turrets[i].SyncAzimuth();
  96.             }
  97.         } catch { }
  98.         reps++;
  99.         currentTurretIndex++;
  100.         if (reps >= turretsToResetPerTick) break;
  101.     }
  102.     if (currentTurretIndex >= turrets.Count)
  103.     {
  104.         currentTurretIndex = 0;
  105.         resetTurretTime = new TimeSpan(0, 0, 0);
  106.     }
  107. }
  108.  
  109. public bool ResetTurrets()
  110. {
  111.     List<IMyLargeTurretBase> tempTurrets = new List<IMyLargeTurretBase>();
  112.     GridTerminalSystem.GetBlocksOfType<IMyLargeTurretBase>(tempTurrets, t => ((IMyLargeTurretBase)t).HasTarget);
  113.     activeTurretCount = tempTurrets.Count;
  114.     return activeTurretCount == 0;
  115. }
  116.  
  117. public void GetTurrets()
  118. {
  119.     getTurretTime = new TimeSpan(0, 0, 0);
  120.     GridTerminalSystem.GetBlocksOfType<IMyLargeTurretBase>(turrets);
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement