Space Engineers - Элементарный ховер: Замечания к прошлым видео, испытания, размышления и тормоза
Связь: https://discord.gg/N5bYTDf Донат: https://www.donationalerts.com/r/drabont7
Код примера:
public Program() { Runtime.UpdateFrequency = UpdateFrequency.Update10; }
Vector3D o_pos = new Vector3D(0);
bool fz = false;
public void Main(string arg) {
var deg = (float)Math.PI / 180; //градус в радианах
fz = arg=="1"?!fz:fz; //аргумент 1 переключает "тормоз Z"
//находим нужные блоки
var sc = (IMyShipController)GridTerminalSystem.GetBlockWithName("Control Seat");
var gy = (IMyGyro)GridTerminalSystem.GetBlockWithName("Gyroscope");
//берем центр планеты и переводим его в целочисленный вектор в пространстве сетки
var g_pos = Me.CubeGrid.GetPosition(); //grid position, координаты судна
var p_cen = g_pos; sc.TryGetPlanetPosition(out p_cen); //planet center, координаты центра планеты
var cen = Me.CubeGrid.WorldToGridInteger( p_cen );
if(o_pos==Vector3D.Zero) o_pos = g_pos; //инициализация
var g_spd = Me.CubeGrid.WorldToGridInteger( o_pos ); //grid speed
o_pos = g_pos;
//вычисляем углы отклонения (-pi..pi)
var ax = Math.Atan2( cen.X, -cen.Y );
var az = Math.Atan2( cen.Z, -cen.Y );
//гироскоп установить основанием вверх, зелёным пятном назад
//подаём управляющие сигналы (-2pi..2pi) на гироскоп
gy.Yaw = - sc.RotationIndicator.Y * deg * 10;
gy.Pitch = (float) az *2 - (fz?g_spd.Z*deg*2:0) - (sc.MoveIndicator.Z *2 + sc.RotationIndicator.X) * deg * 10;
gy.Roll = (float) ax *2 - g_spd.X*deg*2- (sc.MoveIndicator.X *2 + sc.RollIndicator *9) * deg * 10;
gy.GyroOverride = true;
}
Other Videos By Богдан Гаврилюк
Other Statistics
Space Engineers Statistics For Богдан Гаврилюк
Богдан Гаврилюк currently has 9,035 views spread across 172 videos for Space Engineers. His channel published over 15 days worth of content for the game, roughly 10.65% of Space Engineers content that Богдан Гаврилюк has uploaded to YouTube.