space engineers скрипт для поршня
Space engineers скрипт для поршня
/* Управление гироскопами
Выравнивание по вектору гравитации через арктангенс
*/
//объявляем блоки «Уд. управления» и «гироскоп»
IMyShipController DrillShip;
List Gyros;
float Kg = 2;
public Program()
<
//находим эти блоки
Vector3D GravityVector = DrillShip.GetNaturalGravity();
Vector3D GravNorm = Vector3D.Normalize(GravityVector);
// получаем вектора относительно блока уд. управления
float VecForward = (float)GravNorm.Dot(DrillShip.WorldMatrix.Forward);
float VecLeft = (float)GravNorm.Dot(DrillShip.WorldMatrix.Left);
float VecUp = (float)GravNorm.Dot(DrillShip.WorldMatrix.Up);
//получаем сигналы на крен и тангаж скалярным произведением.(!Тангаж перевернут!)
// на рысканье можно напроимер вывести сигнал с контроллера
float YawInput = DrillShip.RotationIndicator.Y;
// устанавливаем гироскопу текущие значения по тангажу и крену
foreach (IMyGyro gyro in Gyros)
<
gyro.GyroOverride = true;
gyro.Yaw = YawInput;
gyro.Roll = RollInput * Kg;
gyro.Pitch = PitchInput * Kg;
/* Если сигнал слабый, можно ввести коэффицент и умножить его на значения по тангажу и крену */
>
Space engineers скрипт для поршня
Скрипт для посадки на планеты.
Аля «Остановить поршень когда посадочное шасси зацепится за астероид»
================================================================
void Main(string argument)
<
IMyPistonBase LandingPiston = GridTerminalSystem.GetBlockWithName(«LandingPistonName») as IMyPistonBase;
IMyLandingGear LandingGear = GridTerminalSystem.GetBlockWithName(«LandingGearName») as IMyLandingGear;
if(LandingGear.IsLocked)
<
LandingPiston.GetActionWithName(«ResetVelocity»).Apply(LandingPiston);
LandingPiston.GetActionWithName(«IncreaseVelocity»).Apply(LandingPiston);;
>
КАК заставить это работать:
LandingPistonName и LandingGearName это названия в панели управления (в терминале) поршня и шасси соответственно. Желательно использовать англ.язык и названия без пробелов. К примеру: LandPiston_1; Gear2 и т.п. Я не ручаюсь за работу с кирилицей)
Это все, что вам нужно заменить в скрипте.
Далее таймер: выставляем задержку таймера в 1 секунду (на минимум), ставим в Setup Action запуск отчета таймера и Run программируемого блока.
ВАЖНО!:
Это скрипт только для одной системы поршень-шасси. Если хотите больше, советую натыкать программируемых блоков и таймеров для корректной работы.
p.s. в воркшоп выставлю позже, когда будет готов прототип и видеодемонстрация.
Автоматический шлюз.
Звуковая и световая сигнализация, вывод состояния на LCD панель, автоматическое переключение откачки/накачки воздуха, автоматическое открытие/закрытие/блокировка дверей.
http://steamcommunity.com/sharedfiles/filedetails/?id..
Для работы ЛЮБОГО количества шлюзов требуется ОДИН программируемый блок.
Отображение провреждённых/недостоенных блоков.
Само собой автоматическое 🙂
Невероятно полезный скрипт, который позволяет с помощью одного нажатия кнопки выбрать положение ротора или поршня. За подробностями смотрите видео по ссылке.
Переименовываете все орудия одинаково, к примеру «Пушка», без номеров и всего остального.
Запускаете прогблок. Включаете блок с именем «sequencerToggle».
Заряжаете орудия жмете на гашетку. Для автоматизации стрельбы просто соберите заскриптованные орудия в группу, и повесьте на горячую клавишу вкл/выкл стрельбы.
При начале стрельбы бывает стреляет сразу из двух орудий.
Простой скрипт, который на левый дисплей выводит предупреждения о повреждениях, заканчивающемся боезапасе и малом количестве ресурсов. На правый дисплей выводится содержимое всех хранилищ корабля. Центральный дисплей отображает визуальное предупреждение (картинкой).
Имеет возможность небольшой настройки под себя в самом начале скрипта, где необходимо будет прописать свои ЖК панели для работы скрипта. По-умолчанию стоит: ЖК панель слева, ЖК панель справа, ЖК панель центр
Работает на версии 01_171_003 без модов на пиратке.
Побудило написать свой скрипт, так как большинство сложных скриптов у меня не работает. Да и скучно было.
В программируемом блоке появилась возможность сохранять переменные.
Если заметили, по-умолчанию кроме Main() в редакторе появились две функции public Program() и public void Save().
Конструктор Program() автоматически запускается при первом запуске компьютера. Туда можно запихнуть инициализацию всех переменных и первоначальную настройку оборудования, чтобы не тратить на это время при очередном запуске скрипта.
Функция Save() так же автоматически запускается и сохраняет предоставленное строковое значение. Сохранение происходит не каждый запуск скрипта. Заметил, что сохраняется, когда открываю редактор программируемого блока или сохраняю игру, других триггеров для срабатывания этой функции я не обнаружил.
Если снести программируемый блок, построить другой и вставить туда идентичный код, сохранения не восстанавливаются.
Переменная сохраняется после редактирования скрипта, отключения бортового питания и перезапуска игры (пока не нашел случая, в котором переменная бы не загрузилась).
Пример прикреплен ниже.
Описание: Скрипт подсчитывает содержимое инвентарей, перемещает позицию, которая не строится в конец очереди сборщика.
Умеет сортировать содержимое по контейнерам и дозаказывать компоненты в ассемблере на основании установленных лимитов.
Настройка:
в поле CustomData вносятся параметры для инициализации скрипта: (любая из строк может быть пустой и будет пропущена)
При первом запуске скрипта инициализация производится автоматически, далее по команде.
Команды: Скрипт поддерживает команды с параметрами. Команда и параметр разделяются «:»
>:МаскаПоискаКонтейнера:ЧтоВНемЛежит,ЧтоВНемЛежит
устанавливает отбор для сортировки элементов в контейнере. Если перед первым параметром добавить +, будут добавлены доступные элементы иначе заменены
mask:маска поиска блоков
Устанавливает маску которая применяется при поиске обрабатываемых инвентарей, если маска пустая строка обрабатываются все доступные инвентари
reload:bloc,ass
Находит и запоминает все ассемблеры и блоки в которых будет в дальнейшем происходить поиск. Параметрами можно ограничивать что нужно искать. Без параметров ищет все.
Unload:маска
Производит единоразовое перемещение элементов из блоков подходящих под маску в установленные контейнеры. Полезно при разгрузке бурового корабля.
Скрипт находит все блоки ассемблеров и инвентаре, а затем обходит эти списки. Поэтому если необходимо заново найти инвентари или ассемблеры вызовите команду reload. Если необходимо переинициализировать текстовые панели воспользуйтесь командой init. Это поможет при разрушении готовых или достройке новых блоков.
Все настройки скрипт сохраняет и восстанавливает автоматически, при перезагрузке ничего перенастраивать не нужно
Как я строил гексапод в Space Engineers. Часть 1
Здравствуйте. Я хочу рассказать про проектирование и программирование системы управления конечностями в гексаподе, построенном в Space Engineers.
Забегая вперед скажу, что всё, что касается программирования в Space Engineer, будет в следующей статье. В этой я расскажу про обратную кинематику и покажу прототип на HTML Canvas в котором я занимался отладкой алгоритмов.
Предыстория и постановка задачи.
Изначально было построено сочлененное шасси, а затем на нем копательный агрегат. Такая конфигурация обеспечивала контакт всх колес с поверхностью на больших неровностях, в том числе и при скручивании.
Но я столкнулся с невозожностью его точно разместить на месторождении, так-как колеса часто соскальзывали вниз (проблема физики — большинство блоков (в том числе и колеса) имеют слишком малый коэффициент трения). Колесная платформа с цельноповоротными колесными модулями оказалась слишком громоздкой и страдала от периодических physics explosion. В результате было решено строить шагающего робота — а именно — гексапод, как самую стабильную шагаюшую платфрому.
С чего начнет строить гексапод нормальный человек? Наверное зайдет в игру и начнет строить тело робота с конечностями, а потом думать как это всё оживлять. Но это не наш метод (ц)
Я начал с теории
Для строения ноги была выбрана следующая схема:
Inner joint — внутренний сустав, качающийся по оси рысканья (yaw)
Mid joint и outer joint — внешние суставы, качающиеся по оси тангажа (pitch). Направление отсчета — от основания ноги к концу ноги.
Угол 0 для всех суставов означает, что нога полностью выпрямлена (прямую ногу будет проще строить в игре).
Задача — при заданной целевой точке найти такие углы поворота сустовов, что-бы конец ноги оказался в заданной точке. Значит время вспоминать тригонометрию.
Угол внутреннего сустава можно найти через арктангенс горизонтальных координат цели.
С двумя другими суставами посложнее. У нас есть длина всех суставов. Можно найти угол к горизонту и расстояние между средним суставом и землей, а так-же расстояние до целевой точки.
Дальше через теорему косинусов нужно найти углы треугольника по известным сторонам.
Так это выглядит в коде:
Движение
Далее. Робот должен ходить, верно? То-есть мы должны передавать N раз в секунду каждой ноге координаты заданной позиции. С учетом того, что ног 6 и 3 из них двигаются в противофазе получается как-то сложно. Нужно ввести новый уровень абстракции.
А что если мы представим что нога движется по окружности и ей нужно передавать угол обозначающий позицию на этой окружности? Удаление в сторону становится постоянным и нужно передавать только один параметр, меняющийся циклично. Тогда целевые координыты находятся через синус и косинус.
Обдумывая как всё будет работать я понял, что задача слишком сложная для того, что-бы всё заработало с первого раза (с дебагом в Space Engineers всё плохо, но об этом в следующей части).
Поэтому я решил написать визуализатор. Мне хотелось его сделать без дополнительных библиотек и иметь возможность запускать его в один клик и без привязки к окружению.
Поэтому был выбран JS + HTML Canvas.
А сейчас нарисуем сову.
Шаг — структура данных для управления ногой:
Но для отрисовки понадобятся еще несколько классов:
Обертка над Canvas:
В классе Leg есть метод для получения текущих координат суставов. Вот эти координаты мы и будем отрисовывать.
Так-же я добавил отрисовку точек, в которых находилась нога в N последних тиков.
И наконец Worker, который будет запускать симуляцию:
Здесь видно, что траектория движения ног отличается от окружности. Движение по вертикали напоминает урезанную синусоиду, а движение по горизонтали линейно. Это должно уменьшить нагрузку на ноги.
Теперь несколько пояснений, что происходит в коде.
Как научить робота поворачивать?
Для поворота я рассмотрел 2 ситуации:
Если робот стоит — ноги двигаются по окружности.
Единственное но — движение именно по окружности сильно усложнило-бы код с текущей реализацией. Поэтому ноги двигаются по касательной к окружности.
Когда робот двигается нужно реализовать что-то вроде Ackermann steering geometry с дифференциалом.
То-есть длина шага ног, двигающихся по меньшему радиусу, — меньше. А угол поворота — больше.
Что-бы реализовать изменение угла поворота для каждой ноги я придумал следующий алгоритм:
1. Считаем угол от изначального положения ноги к центру робота:
2. Считаем угол от изначального положения ноги к (центру робота + смещение, которое отвечает за поворот — это изменяемый параметр):
3. Поворачиваем шаг на разницу этих углов:
Но это не всё. Еще нужно изменять длину шага. Реализация в лоб — домножать длину шага на изменение расстояния до центра — имело фатальный недостаток — внешние ноги слишком широко шагали и начинали задевать друг друга.
Поэтому пришлось усложнить реализацию:
1. Считаем изменение расстояния до центра для каждой ноги:
0.3 — магическое число
2. Находим отношение между минимальным и максимальным изменением
Этот множитель отражает разницу между минимальным и максимальным изменением расстояния до центра. Он всегда меньше 1 и если на него домножать длину шага — она при повороте не будет увеличиваться даже для внешних по отношению к направлению поворота ног.
Вот как это работает (gif 2 мегабайта):
→ Поиграться с результатом можно тут
Для более пристального изучения рекомендую сохранить содержимое в html файл и продолжить в любимом текстовом редакторе.
В следующей публикации я расскажу как заставил всё это работать в Space Engineers.
Спойлер: в Programmable Block можно писать на C# почти последней версии.
Подпишитесь, чтобы загрузить
MART | Whip’s Mouse Aimed Rotor Turret Script
Digi has made a mod that fixes the inputs for all seats! Try it out here!
https://steamcommunity.com/sharedfiles/filedetails/?id=2304767743
You can get the tank shown above HERE!
This script allows the user to control player made rotor using direct mouse inputs from a cockpit or control seat. No gyroscope or remote control is needed to do this since the code reads the user’s mouse movement and directly converts it to rotor velocity. Rotor turrets using this code will emulate the movement of a manually controlled AI turret 🙂
Mouse aimed rotor turrets (MARTs) can have one or more Elevation rotors per turret group and the angles of each elevation rotor will be synced; however, only one Azimuth rotor can be used per MART group. You can fire the weapons in a turret group by pressing the default button for «crouch» [C].
Since the program can read mouse inputs directly from a cockpit or control seat, you are able to make land-based tanks using MARTs that can be fully crewed by just one person! You can also control multiple MARTs with only one code!
It is recommended that you read all the instructions before attempting
to use this code! This will make troubleshooting any issues much easier «
Where is the unique identification tag of the rotor turret.
This would set the rest angle for the rotor to be 30 degrees
I had initially envisioned this code to make multi crewed vessels possible, but bugs have smashed that dream. If they ever fix the bug where multiple seats can’t be controlled, this code will still work without modification. Here’s hoping!
Post any questions, suggestions, or issues you have in the comments! next plan long term stretch goal is to make this code interface with my Turret Slaving Script to allow a MART to control other rotor turret’s angles. This; however, is near the back of my current priority list.
Weapon Core guns do not show up as «guns» to the script API, so they will not register as valid weapons or tools.
Space engineers скрипт для поршня
Functional radar ingame programming script that uses either sensors or remote control blocks mounted on a rotor. It works with or without sensor mods.
This is an updated version of my Graphical Sensor Radar: http://steamcommunity.com/sharedfiles/filede.
This is an InGame Programming Script.
You only need:
1 Timer Block
1 Programming Block
1 LCD / Text Panel
1 Remote Control Block
(1 Power source, obviously)
1) Put the script in the programming block
2) Put the programming block in the timer
3.
Previously titled: «Whip’s Planetary Bearing & Compass Script»
Update the script if your turrets aren’t responding (with Auto Target off or without sensors).
> Read the full guide to the GFCS script here.
This is a modified version of the BlueG_Radar mod by BlueG.
This version is meant to be used with the [url=http://steamcommu.
This is a script for programming blocks. It will not show up in your mod list, it will only show up in your scripts list when you edit programming blocks.
Decorative Digital Clock
Displays the real Local or UTC Time
I know you could just use the Steam Overlay to check the time 😉
UTC time may be swapped with Ingame Time at some point if i can figure out a satisfying result.
Large Grid: 1x1x1
Small.
The new major update of this script was released here:
I hope you will like it! Merry Christmas everyone!
Lock-on script to be used on Semi-Active Radar Homing Missile Systems (SARH). This script is revamped again for optimized and accurate lock-on plus more simple setup.
GetFreeDestination is officially removed from game, therefore this item is now only a relic of the past.
NEW! Checkout my new replacement script, the Camera Raycast Lock-On Script:
This mod is obsolete, use the vanilla inter-grid communication system.
This mod allows you to send data between antennas/ships ingame. While some ingame scripts already send data between grids they use exploits in the programmable block which wil.
This script draws the Floor Plan Layout of your ship to a Text Panel. It is customizable with zooming, panning and manipulation of ship layout. Now drawn with Monospace Font.
This is a Vanilla Script. NO MODS are required.
NOTE: Some modded blocks will cause this script to break.
Second note: This script has been in a pretty stable place for a while, and I really want to write it again from scratch (since I was still learning C# when I wrote this). That said, I am going t.
This script adds support for CustomData of LCDs instead of deprecated Private Text.
Use Public Title to enter commands as normal or use UseTextCommands command and
enter commands to CustomData of LCD just as you did with Private Text before.
NOTE: this version has been superseded by my EZ turret AI, and is held for archive purposes only, please see my workshop for the latest version!
The arms race continues! This time with a new script that will give AI to any playe.
For those of you coming from the LSG video, here’s a link to my forum article. If you need any help, don’t be afraid to ask: http://forums.keenswh.com/post/multiturret-control-system-control-multiple-turrets-with-your-mouse-code-published-7262456
This mod adds the ability for Timer Blocks and Programmable Blocks to be triggered/ran when the input (key/mouse/gamepad/game control) is pressed and/or released by a player controlling a cockpit/RC/seat in the same grid system.
The system is very flexi.
This script will allow you to add as many rotors as you like and then control their angles
in one easy step.
* Add the rotor(s) you want to control to th.
V 2.01: script now also works if you have set the game to run in other languages than english
Version 2.0 notes
Version 2.0 is here! The new version allows you to set pretty much every slider in the game, for example allowing you to cha.
Formerly Named «Whip’s Rotor Thruster Manager»
Ship Health Bars is a simple mod that gives a Health-Bar functionality to the vanilla beacon block.
This script enables you to save a lot of hydrogen when landing on a planet
Control all your fixed weapons from a single block!
Place a weapon control block on your ship.
Add it to your cockpit toolbar.
When you select the weapon control block the HUD will appear.
Right click to change fire group, left click to fire.
.
put your thrusters on rotors!
This is the ship speed mod to end all ship speed mods.
1. Programming Block
The programming block needs to be loaded with «Inventory Viewer», checked (compiled), and remembered.
This version is held for ARCHIVE AND REFERENCE ONLY
NOTE* This script is now superseded by my latest guided missile script and is being held for archive only
Before accusing me of removal of something from the mod, read this.
Donation is now possible! Here’s the [url=htt.
Updated and Working again 🙂
HudLcd displays the Text of selected LCDs on your HUD!
This is an InGame Programming Script that simply uses a sensor mounted on a rotor. It can detect anything that sensors can detect, including spiders. It works with or without sensor mods.
You only need:
1 timer block
1 programming block
1 rotor
1 s.
[img=https://i.imgur.com/Vw0h1Xy.png]
This code allows you to make automatic drop pods that will safely land themselves. This is a mu.
Everything you will ever need to know about your ship and station displayed in real time on LCD panels in any vanilla games. modded games and servers! Now with cockpit panels support!
v:2.0178 [latest game version compatible, workaround for rotat.
Lidar Homing uses the latest Camera Raycast Lock-On. This is a Fire and Forget missile script. After initial aiming and achieving lock-on, missile will be fully autonomous and tracks the target with leading intercept.
NEW!! Revamped Guidance Syst
This script is used to launch missiles guided by the Easy Lidar Homing Script. It is recommended to use this script for launching said missiles.
Easy Lidar Homing Script can be found at:
This script is used together with the Easy Radar Homing Script, to get the missile lock-on status:
Easy Lidar Homing Script can be found at:
**Translated by Google Translation**
Terminal Block Manager is an ingame script that allows non-programmer players write their own scripts for terminal blocks in a very simple and easy to learn language.
Since Space Engineers update 1.190, this script will give you warnings when installing. They’re nothing to worry about. It doesn’t affect the script. I’ll fix it shortly.
Tired of wasting fuel when leaving a gravity well? What you need is cruise contr.
Rdav’s AI-Autominer Script allows any player to convert any vessel to a fully automatic mining ship capable of automatic resource gathering and drop off.
This script measures the height from ground or sealevel and triggers a timer block if a certain height was reached. This can be great for automating starting or landing sequences.
Version: 1.1.1
Date: 2019-04-09
This is the Manual Refresh version of the Floor Plan Script Mk1. It functions exactly the same, except that the LCD refresh is not automatic. You need to triger the REFRESH command to have the script updates its LCD Panels.
This script prints bars of your container fill level on a LCD that is directly attached to it. Optionally it will show the name and the percentage of the container. It will also colorize the text depending on the fill level.
(Previously titled: «Whip’s AI Rotor Turret Control Script»)
In the documentation below, «rotor» refers to both rotors and hinges! This is because the game considers hinges to be just fancy sideways rotors.
This mod adds target lead indicators to the HUD. They work with any weapon and any other HUD mod!
A complete rewrite of my Smart Turrets mod, Smart Turrets 2 is a turret AI overall that give you an excessive amount of control over exactly what your turrets are shooting at.