Skip to content

Instantly share code, notes, and snippets.

@ElectroluxV2
Created October 25, 2021 18:58
Show Gist options
  • Save ElectroluxV2/68a9940d4fed415361326403f29a5f56 to your computer and use it in GitHub Desktop.
Save ElectroluxV2/68a9940d4fed415361326403f29a5f56 to your computer and use it in GitHub Desktop.
SE TRAIN CONTROLER
float targetSpeed;
public Program()
{
// Initialize Storage
if (String.IsNullOrEmpty(Storage)) Storage = "0.0";
targetSpeed = float.Parse(Storage);
}
public void Save()
{
// Save Storage
Storage = targetSpeed.ToString("0.00");
}
public void Main(string argument, UpdateType updateSource)
{
// Left Wheels
var leftWheelsListGeneric = new List<IMyTerminalBlock>();
var leftWheelsGroup = GridTerminalSystem.GetBlockGroupWithName("LeftWheels") as IMyBlockGroup;
leftWheelsGroup.GetBlocks(leftWheelsListGeneric);
var leftWheelsList = leftWheelsListGeneric.Cast<IMyMotorSuspension>().ToList();
// Right Wheels
var rightWheelsListGeneric = new List<IMyTerminalBlock>();
var rightWheelsGroup = GridTerminalSystem.GetBlockGroupWithName("RightWheels") as IMyBlockGroup;
rightWheelsGroup.GetBlocks(rightWheelsListGeneric);
var rightWheelsList = rightWheelsListGeneric.Cast<IMyMotorSuspension>().ToList();
// Cockpit
var cockpit = GridTerminalSystem.GetBlockWithName("MainCockpit") as IMyTextSurfaceProvider;
// Screens
var screen0 = cockpit.GetSurface(0) as IMyTextSurface;
var screen1 = cockpit.GetSurface(1) as IMyTextSurface;
var screen2 = cockpit.GetSurface(2) as IMyTextSurface;
// Setup screens
screen0.FontSize = 3;
screen1.FontSize = 3;
screen2.FontSize = 3;
// Adjust speed
targetSpeed += argument.Equals("up") ? 5f : -5f;
// Inform user
screen0.WriteText(String.Format("Target Speed\n{0:f}\n", targetSpeed));
var shouldStop = Math.Abs(targetSpeed) <= 0.001;
// Set speed to left wheels
foreach (var leftWheel in leftWheelsList) {
leftWheel.Propulsion = !shouldStop;
leftWheel.Brake = shouldStop;
leftWheel.PropulsionOverride = Math.Sign(targetSpeed) * 100;
leftWheel.SetValue<float>("Speed Limit", targetSpeed);
}
// Set negative speed to right wheels
foreach (var rightWheel in rightWheelsList) {
rightWheel.Propulsion = !shouldStop;
rightWheel.Brake = shouldStop;
rightWheel.PropulsionOverride = -1 * Math.Sign(targetSpeed) * 100;
rightWheel.SetValue<float>("Speed Limit", targetSpeed);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment