//Текст скрипта. Просто скопируйте его ctrl-c, ctrl-v прямо в программный блок. //КОНФИГУРАЦИЯ double SCAN_DISTANCE = 1000; //Дальность сканирования камеры-дальномера string Camera_name = "Camera"; //Название камеры-дальномера string Panel_name = "Cockpit [LCD]"; //Название блока (панели или кокпита), куда выводятся данные int display_no = 0; //число от 0 до 5 - номер дисплея, на который будет выводится информация. Для LCD панелей - 0 //----------------------
float PITCH = 0; float YAW = 0; private IMyCameraBlock camera; private MyDetectedEntityInfo info; private StringBuilder info_strings = new StringBuilder(); private IMyTextSurface textSurface; public Program(){ // частота обновления информации: Update1 - раз в секунду, Update10 - раз в 10 сек и т.п. Runtime.UpdateFrequency = UpdateFrequency.Update1; List blocks = new List(); GridTerminalSystem.GetBlocks(blocks); camera = GridTerminalSystem.GetBlockWithName(Camera_name) as IMyCameraBlock; camera.EnableRaycast = true; //если используется панель, а не кокпит, закомментарить 2 строки ниже и раскомментарить 2 строки еще ниже IMyTerminalBlock cockpit = GridTerminalSystem.GetBlockWithName(Panel_name); textSurface = ((IMyTextSurfaceProvider)cockpit).GetSurface(display_no); //IMyTextPanel lcd = GridTerminalSystem.GetBlockWithName(Panel_name) as IMyTextPanel; //textSurface = ((IMyTextSurfaceProvider)lcd).GetSurface(display_no); textSurface.ContentType = VRage.Game.GUI.TextPanel.ContentType.TEXT_AND_IMAGE; } public void Main(string args){ if (camera.CanScan(SCAN_DISTANCE)) info = camera.Raycast(SCAN_DISTANCE, PITCH, YAW); info_strings.Clear(); if (info.HitPosition.HasValue) { double dist = Vector3D.Distance(camera.GetPosition(), info.HitPosition.Value); info_strings.Append("Дист: " + dist.ToString("0.00")+" "); info_strings.Append("Имя: " + info.Name + " "); info_strings.Append("Тип: " + info.Type + " "); // info_strings.Append("Скорость: " + info.Velocity.ToString("0.000") + " "); info_strings.Append("Принадлежность: " + info.Relationship + " "); info_strings.Append("Диапазон: " + camera.AvailableScanRange.ToString()); } textSurface.WriteText(info_strings.ToString()); } //конец скрипта
Прекрасный скрипт, есть возможность добавить строчку не со скоростью, а с координатами объекта. info_strings.Append("Скорость: " + info.Velocity.ToString("0.000") + " "); Заменяем Velocity на Position
Есть польза от этого, но мало. Если есть возможность, добавьте также время до столкновения с объектом, то есть проверяется текущая скорость и ускорение по направлению, это было бы гораздо полезнее просто растояния до объекта
UpdateFrequency.Update1 - это количество тиков программы между обновлениями. К слову программа (то бишь космические инженеры) выполняется 60 раз в секунду. Соответственно Update1 будет означать выполнение скрипта 60 раз в секунду. А, допустим, Update100 будет означать выполнение примерно раз в полторы секунды.
//Текст скрипта. Просто скопируйте его ctrl-c, ctrl-v прямо в программный блок.
//КОНФИГУРАЦИЯ
double SCAN_DISTANCE = 1000; //Дальность сканирования камеры-дальномера
string Camera_name = "Camera"; //Название камеры-дальномера
string Panel_name = "Cockpit [LCD]"; //Название блока (панели или кокпита), куда выводятся данные
int display_no = 0; //число от 0 до 5 - номер дисплея, на который будет выводится информация. Для LCD панелей - 0
//----------------------
float PITCH = 0;
float YAW = 0;
private IMyCameraBlock camera;
private MyDetectedEntityInfo info;
private StringBuilder info_strings = new StringBuilder();
private IMyTextSurface textSurface;
public Program(){
// частота обновления информации: Update1 - раз в секунду, Update10 - раз в 10 сек и т.п.
Runtime.UpdateFrequency = UpdateFrequency.Update1;
List blocks = new List();
GridTerminalSystem.GetBlocks(blocks);
camera = GridTerminalSystem.GetBlockWithName(Camera_name) as IMyCameraBlock;
camera.EnableRaycast = true;
//если используется панель, а не кокпит, закомментарить 2 строки ниже и раскомментарить 2 строки еще ниже
IMyTerminalBlock cockpit = GridTerminalSystem.GetBlockWithName(Panel_name);
textSurface = ((IMyTextSurfaceProvider)cockpit).GetSurface(display_no);
//IMyTextPanel lcd = GridTerminalSystem.GetBlockWithName(Panel_name) as IMyTextPanel;
//textSurface = ((IMyTextSurfaceProvider)lcd).GetSurface(display_no);
textSurface.ContentType = VRage.Game.GUI.TextPanel.ContentType.TEXT_AND_IMAGE;
}
public void Main(string args){
if (camera.CanScan(SCAN_DISTANCE)) info = camera.Raycast(SCAN_DISTANCE, PITCH, YAW);
info_strings.Clear();
if (info.HitPosition.HasValue) {
double dist = Vector3D.Distance(camera.GetPosition(), info.HitPosition.Value);
info_strings.Append("Дист: " + dist.ToString("0.00")+"
");
info_strings.Append("Имя: " + info.Name + "
");
info_strings.Append("Тип: " + info.Type + "
");
// info_strings.Append("Скорость: " + info.Velocity.ToString("0.000") + "
");
info_strings.Append("Принадлежность: " + info.Relationship + "
");
info_strings.Append("Диапазон: " + camera.AvailableScanRange.ToString());
}
textSurface.WriteText(info_strings.ToString());
}
//конец скрипта
ооо...огромное ЧЕЛОВЕЧЕСКОЕ СПАСИБО! годнота! Надо попробовать...
Прекрасный скрипт, есть возможность добавить строчку не со скоростью, а с координатами объекта.
info_strings.Append("Скорость: " + info.Velocity.ToString("0.000") + "
");
Заменяем Velocity на Position
Есть польза от этого, но мало. Если есть возможность, добавьте также время до столкновения с объектом, то есть проверяется текущая скорость и ускорение по направлению, это было бы гораздо полезнее просто растояния до объекта
Жалко что мало подписчиков, канал то не плох, и голос приятный и изложение хорошее
Краткость - Мать лаконичности и Сестра таланта! только тихо ))
Класный скриптик, ничего лишнего. Настройка простая, а то я так и не разобрался с Blarg's Fancy Ruler.
Нужная вещь. Спасибо!!!
Спасибо , я именно его и искал
огонь, блавгодарю
Крутой скрипт с точки зрения использования.
Спасибо за скрипт. Удачи в развитии
А что делать если у меня нет кнопки chek code? У меня только кнопка OK
UpdateFrequency.Update1 - это количество тиков программы между обновлениями.
К слову программа (то бишь космические инженеры) выполняется 60 раз в секунду. Соответственно Update1 будет означать выполнение скрипта 60 раз в секунду.
А, допустим, Update100 будет означать выполнение примерно раз в полторы секунды.
Спасибо!
мне всегда было интересно, какой самый тяжёлый предмет, руда или материал в игре?
Сравнивая железную руду, слитки и стальные пластины - пластины тяжелее всего.
Здравствуйте товарищ , можно вопрос ? Как вы увеличили макс скорость до 500м.с , сколько играл всегда было токо 100м.с заранее спасибо
Это мод, так и называется: Speedmod over 500
А вместо камеры возможно применить турель?
Не знаю. Надо будет поэкспериментировать, вдруг что выйдет.
Спасибо
а почему ты его просто сразу в воркшоп не вкинешь ?
смысл? вся суть в коде, который в закрепленном комментарии))
очень хорошие видео все быстро и понятно, только у меня не работает помогите пожалуйста.
А что не работает?