using Sandbox.ModAPI.Ingame; using System; using System.Collections.Generic; using VRage.Game.ModAPI.Ingame.Utilities; namespace IngameScript { partial class Program { public class SequenceablePiston : ISequenceable { public bool Running { get; private set; } = false; public int Step { get; set; } private Program _program; private IMyPistonBase _piston; private float _deployPosition; private float _stowPosition; private float _velocity; public SequenceablePiston(Program program, IMyPistonBase piston, string sectionName) { _program = program; _piston = piston; MyIni ini = _program.Ini; ini.TryParse(piston.CustomData); _deployPosition = ini.Get(sectionName, "deployPosition").ToSingle(10F); _stowPosition = ini.Get(sectionName, "stowPosition").ToSingle(0F); _velocity = ini.Get(sectionName, "velocity").ToSingle(5F); Step = ini.Get(sectionName, "step").ToInt32(0); } public IEnumerator Run(bool deploy) { if (Running) yield break; Running = true; float targetValue = _stowPosition; float lastValue = -1; if (deploy) targetValue = _deployPosition; _piston.MoveToPosition(targetValue, _velocity); while (lastValue != _piston.CurrentPosition) { lastValue = _piston.CurrentPosition; yield return true; } Running = false; } } } }