SpaceEngineersで作成した『戦車砲塔操作用プログラム』をメモ代わりに公開

コピペ等ご自由にして下さい

 

銃座などにも使えるかもしれませんね

 

また当方プログラミングの初心者なので

ここをこうしたほうが良いなどのアドバイスがあったらありがたいです

 

/*******************************************************************************

戦車砲塔操作用プログラム 試作品

※.マウス操作を砲塔操作に変換するので、ジャイロと操作がかぶります。
  ジャイロをOffにするか、自動制御にすることを推奨します。

*******************************************************************************/
bool useSubGrid = true;


List<IMyTerminalBlock> allRemoteControl = new List<IMyTerminalBlock>();
List<IMyTerminalBlock> allRotor = new List<IMyTerminalBlock>();

Vector2 MOUSEControl;

public Program()
{
 Runtime.UpdateFrequency = UpdateFrequency.Update10;
}

void Main()
{
  if (useSubGrid == true)
 {
  GridTerminalSystem.GetBlocksOfType<IMyRemoteControl>(allRemoteControl);
  GridTerminalSystem.GetBlocksOfType<IMyMotorAdvancedStator>(allRotor);
 }

else if (useSubGrid == false)
{
 GridTerminalSystem.GetBlocksOfType<IMyRemoteControl>(allRemoteControl, b => b.CubeGrid == Me.CubeGrid);
 GridTerminalSystem.GetBlocksOfType<IMyMotorAdvancedStator>(allRotor, b => b.CubeGrid == Me.CubeGrid);
}

  foreach (IMyRemoteControl RemoteControl in allRemoteControl)
  {
    if (RemoteControl.CustomName.Contains("[RC]"))
    {
     MOUSEControl = RemoteControl.RotationIndicator;
    }
   foreach (IMyMotorAdvancedStator Rotor in allRotor)
   {
    var a = MOUSEControl.Y / 2;
    var b = MOUSEControl.X /2.5;

     if (MOUSEControl.Y > 0)
     {
       if (Rotor.CustomName.Contains("[Azimuth]"))
       {
        Rotor.SetValue("UpperLimit", Convert.ToSingle(360));
        Rotor.SetValue("LowerLimit", Convert.ToSingle(-360));
        Rotor.SetValue("Velocity", Convert.ToSingle(a));
       }
     }
     if (MOUSEControl.Y < 0)
     {
       if (Rotor.CustomName.Contains("[Azimuth]"))
       {
        Rotor.SetValue("UpperLimit", Convert.ToSingle(360));
        Rotor.SetValue("LowerLimit", Convert.ToSingle(-360));        
        Rotor.SetValue("Velocity", Convert.ToSingle(a));
       }
     }
     if (MOUSEControl.Y == 0)
     {
      if (Rotor.CustomName.Contains("[Azimuth]"))
       {
         var c = Rotor.Angle;
         var d = c + 1;
         var e = c - 1;
         Rotor.SetValue("UpperLimit", Convert.ToSingle(d));
         Rotor.SetValue("LowerLimit", Convert.ToSingle(e));
         Rotor.SetValue("Velocity", Convert.ToSingle(0));
       }
     }
     if (MOUSEControl.X < 0)
     {
       if (Rotor.CustomName.Contains("[Elevation]"))
       {
        Rotor.SetValue("UpperLimit", Convert.ToSingle(360));
        Rotor.SetValue("LowerLimit", Convert.ToSingle(-360));
        Rotor.SetValue("Velocity", Convert.ToSingle(b));
       }
     }
     if (MOUSEControl.X > 0)
     {
       if (Rotor.CustomName.Contains("[Elevation]"))
       {
         Rotor.SetValue("UpperLimit", Convert.ToSingle(360));
         Rotor.SetValue("LowerLimit", Convert.ToSingle(-360));
         Rotor.SetValue("Velocity", Convert.ToSingle(b));
       }
     }
     if (MOUSEControl.X == 0)
     {
       if (Rotor.CustomName.Contains("[Elevation]"))
       {
         var f = Rotor.Angle;
         var g = f + 1;
         var h = f - 1;
         Rotor.SetValue("UpperLimit", Convert.ToSingle(g));
         Rotor.SetValue("LowerLimit", Convert.ToSingle(h));
         Rotor.SetValue("Velocity", Convert.ToSingle(0));
       }
     }
   }
 }
}