Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Управляющий скрипт для монокоптера H-Ori-30nt, СС0 ( https://youtu.be/ukHAXVj3F8o )
- //ʕ ᵔᴥᵔ ʔ
- Vector3D o_pos; public Program() { o_pos = Me.CubeGrid.GetPosition(); Runtime.UpdateFrequency = UpdateFrequency.Update10; }
- public void Main(string arg) {
- var deg = (float)Math.PI / 180; //градус выраженный в радианах
- //находим нужные блоки по именам
- var gy = (IMyGyro)GridTerminalSystem.GetBlockWithName("Gyroscope");
- var sc = (IMyShipController)GridTerminalSystem.GetBlockWithName("Control Seat");
- var tr = (IMyThrust)GridTerminalSystem.GetBlockWithName("Atmospheric Thrusters");
- //берем центр планеты и переводим его в целочисленный вектор в пространстве сетки
- var g_pos = Me.CubeGrid.GetPosition();
- var p_cen = g_pos; var g_ovr = sc.TryGetPlanetPosition(out p_cen);
- var cen = Me.CubeGrid.WorldToGridInteger( p_cen );
- var spd = Me.CubeGrid.WorldToGridInteger( o_pos ); o_pos = g_pos;
- //вычисляем углы отклонения (-pi..pi)
- var ax = (float) Math.Atan2( cen.X, -cen.Y );
- var az = (float) Math.Atan2( cen.Z, -cen.Y );
- //формируем управляющие сигналы (-2pi..2pi) на оси гироскопа
- var uv = new Vector3(0); uv.Y = sc.RotationIndicator.Y *deg*10;
- uv.Z = -(ax *2 - spd.X *deg*4 - sc.MoveIndicator.X *deg*20 - sc.RollIndicator *deg*90);
- uv.X = (az *2 - (sc.HandBrake? spd.Z *deg*5: 0) - sc.MoveIndicator.Z *deg*20 - sc.RotationIndicator.X *deg*10);
- //применяем сигналы к гироскопу с учетом ориентации гироскопа
- Matrix ma; gy.Orientation.GetMatrix(out ma); var tv = Vector3.Transform( uv, Matrix.Transpose( ma ));
- gy.Pitch = (float)tv.X; gy.Yaw = (float)tv.Y; gy.Roll = (float)tv.Z; gy.GyroOverride = g_ovr;
- //Dampeners ассистент, включаем демпфирование на безопасной высоте
- double alt; sc.TryGetPlanetElevation( MyPlanetElevation.Surface, out alt ); //9.81 - ускорение \|/ свободного падения
- var sh = Math.Pow(sc.GetShipSpeed(),2)/(tr.MaxEffectiveThrust/sc.CalculateShipMass().TotalMass-9.81);
- sc.DampenersOverride = sh>=alt | sc.DampenersOverride;
- }
Add Comment
Please, Sign In to add comment