mArt, тема 8
Ритуал...
В созвездии Треугольника, на расстоянии около 2,4 миллиона световых лет от Земли, находится одна из самых завораживающих структур ближнего космоса — туманность NGC 604. Она расположена в галактике Треугольник (M 33), входящей в Местную группу вместе с Млечным Путем и Андромедой.
NGC 604 представляет собой гигантскую область ионизированного газа, которая светится под воздействием мощного ультрафиолетового излучения звезд. По своим размерам она примерно в 50 раз превосходит знаменитую туманность Ориона в нашей Галактике, простираясь почти на 1 500 световых лет.
Внутри NGC 604 наблюдается чрезвычайно бурное звездообразование. Астрономам удалось идентифицировать более 200 молодых и в то же время уже "пожилых" по меркам массивных звезд светил, большинство из которых в десятки раз тяжелее Солнца.
Эти звездные гиганты живут ярко, но недолго: их возраст составляет "всего" 3-5 миллионов лет, тогда как продолжительность жизни таких объектов обычно не превышает десяти миллионов лет — мгновение по космическим меркам.
Специфический зеленоватый оттенок NGC 604 связан с излучением дважды ионизированного кислорода. Жесткое ультрафиолетовое излучение горячих звезд выбивает электроны из атомов газа, заставляя его светиться. Температура внутри туманности составляет примерно 10 000 градусов Цельсия, а мощные звездные ветры, скорость которых достигает десятков километров в секунду, выдувают в окружающем веществе огромные полости и пузыри.
Это способствует фрагментации газопылевых облаков, их постепенному остыванию, сжатию и превращению в протозвезды — звезды на начальном этапе эволюции.
NGC 604 — уникальная природная лаборатория, позволяющая изучать рождение, эволюцию и гибель одних из самых массивных звезд во Вселенной. Благодаря этому уточняются модели звездообразования и эволюции галактик, а значит, и наше понимание космического пространства.
Работы с прошлой темы:
@Kukabara, вот!
Знаете, я к своим вещами отношусь трепетно и аккуратно. Вот, допустим, я не разбила ни одного стекла на своих телефонах. Не потеряла, не утопила случайно. Все в целости и сохранности. Да, аккумулятор может не вынести моей осторожности и жахнуться сам, чтоб, значит, я додумалась новую модель телефона купить и оставить его в покое на старости лет. А так нет, так я вещи берегу.
И особенно мне некомфортно, когда мои вещи берёт кто-то другой. Даже если и с моего разрешения. А тем более ─ если кто-то вещь неаккуратно спиздит.
Тут я, конечно, теряю самоконтроль.
Учила я как-то детей резать по дереву. Конечно, в полном смысле детьми этих оболтусов назвать нельзя ─ в основном это хулиганистые подростки, которые достались мне от предыдущего педагога, Доминика ─ настоящего художника и резчика. (Он совсем не вовремя спился и начал резать портреты и эпитафии на каменных могильных плитах).
Этот бывший педагог человеком был добрым и покладистым, много им позволял, потому что всегда был или подшофе, или с бодуна. И ко мне эта банда попала с расшатанной психикой и неровными моральными принципами.
И вот они у меня сидят. Скучают по своему любимому Доминику и режут… Его резаками в основном режут (добрейший Доминик передал мне и все резаки, и все дрова).
Но, конечно, не только его ученики были. Были и мои личные. И резаки мои личные тоже были. Пара штук, но были. Мне их подарил другой резчик. Они мне, может, дороги как память. Я их, может, привела в порядок, покрасила морилкой и любуюсь всякую минуту.
И вот как-то смотрю ─ а нет на месте одного моего резака!! Вот совсем нет! Такого чтоб резаки пропадали ─ такого эти раненые в душу подростки ещё не видели. И очень огорчились. И обещали сломать руки, нос и шею гаду, который покусился на святое.
Надо, конечно, понимать, что мальчики были в очень растрёпанных чувствах после ухода (в запой и с работы, а не то что вы подумали...) любимого педагога. Их можно понять. И хотя возобновление занятий по резьбе несколько примирило их с потерей, но угроза расправы с любым, кто попадёт под подозрение, оставалась.
─ Не переживайте, ─ поспешила я их успокоить, ─ любой, кто притронется к моим вещами без спроса ─ обязательно пострадает!
Самое главное, думаю я, не допустить рукоприкладства. Смотрю, вроде успокоились. Хорошо, сидим, дальше, пытаемся изобразить что-то из дерева, потому что изобразить что-то приличное на лице не получается: они свирепы, я скалюсь, как идиотка.
Проходит, может, час. Или другое какое-то время. Некоторые уже и домой ушли.
И входит тут ко мне в кабинет преподаватель с первого этажа и говорит, что я нарушаю технику безопасности, разбрасываю везде свои резаки, и дети, может быть, об них травмируются. И вводит в кабинет пострадавшего отрока лет двенадцати. Мой.
─ Как это нарушаю, — говорю, ─ нету такого. Весь инструмент на месте. А если кто и спёр чего по недомыслию ─ то я тут не виновата. Это пусть их родители отвечают.
─ А я, ─ говорит преподаватель, ─ не интересуюсь, кто отвечает. Это пусть милиция разбирается. А только вот вам пострадавший! ─ и толкает ко мне этого отрока. ─ Он, ─ говорит преподаватель, ─ порезался, и ему даже пришлось клеить лейкопластырь на пострадавшую область!..
А отрок глазки прячет и смущается. С чего бы это? Вроде так-то тип нагловатый…
— …Вот туда! ─ громогласно заканчивает обличительную речь преподаватель с первого этажа и указывает пальцем на задницу отрока.
Мы все дружно смотрим туда же. А отрок блеет:
─ Я, ─ говорит, ─ сел на лавочку переобуться, а оно мне как впилось!.. ─ и вздыхает.
Преподаватель с первого этажа ушла, осуждающе окинув всех взглядом.
Мы с остатками мстителей внимательно смотрим на пострадавшего.
─ Вот ваш резак, ─ робко говорит он и выкладывает на стол пропажу.
Мы смотрим и понимаем, что как ни пристраивай на него свою жопу, порезать её не получится. Тем более ─ если жопа в толстых трикотажных штанах.
─ А ну! ─ один из мстителей несколько грубо развернул отрока пострадавшей частью тела к нам: дырки на штанах на означенном месте не наблюдалось.
─ Да там царапина просто, ─ заюлил отрок и начал отступать к двери. ─ Кто-то бросил резак на лавку… Наверное слышал, что вы сказали… Испугался…
Он не уточнил, кто именно и что сказал: то ли про нос и шею, то ли про другие неприятности.
─ Знаете, как иголкой кольнуло, ─ продолжал отрок, продолжая отступать. Мы молчали. ─ Ну, от иголки же штаны не рвутся? ─ он неестественно засмеялся и сдриснул из кабинета.
Никто за ним не побежал. По лицам присутствующих было понятно, что отроку никто не поверил.
─ Надо было внутри кармана посмотреть, там дырка, ─ предположил один.
─ Догоним? ─ это второй.
─ Догонишь его, он как заяц подстреленный, ─ это третий.
─ Не надо никого догонять, ─ это я. ─ И лезть в карманы не надо ─ это незаконно, ─ постаралась я предупредить незаконные действия подопечных.
Конечно, опасения были. Но, с другой стороны, резак вот он, лежит на столе. А значит, и репрессии надо отменять.
Больше у меня в кабинете ничего не пропадало. Или я просто не замечала. А только с того времени меня стали называть ведьмой. Не то чтобы прямо в глаза. А при случае. Не может кто-то найти, допустим, батарейку или какой другой необходимый предмет, ножницы какие-нибудь.
─ Ничего, ─ говорят, ─ вот кто щас ногу сломает ─ тот и спёр.
─ Не бери без спроса, ─ учили новеньких, ─ а то с лестницы свалишься и шею сломаешь.
Такие разговоры дошли и до моего начальства…
Но это уже совсем другая история.
@Kukabara держи птифс!
Это вяхирь. Вообще они лесные, но Кисловодский парк им видимо так понравился, что они решили там поселиться. Я их понимаю: посчитала, оказалось что мы шестой раз были в Кисловодске )
Когда первый раз его увидели, муж утверждал, что это просто голубь так разъелся, и меня пытался в этом убедить. Считаю что это был газлайтинг ) Пришлось гуглить )
Птиц реально сильно крупнее обычной гульки, ходит вразвалочку, видно что более массивный и тяжёлый (кстати это охотничий вид, их стреляють и жруть, поэтому они не с таким энтузиазмом селятся в городах, как обычные голуби).
Это сойка, у нас они не водятся, а в Кисловодске их полно. Мы их с любовью называем "слойки". Стоя у одной и приманивая орешком, услышала как вслед за нами их так же стала называть прошедшая мимо пара. Распространяем новое название :-)
Ещё синичка
О, уже две!
А вот это другая синичка, маленькая. Такие более храбрые, их больше садилось чем обычных жёлтеньких
Что-то уткоподобное плавает в озере
Похожи на огарей, которых мы видели в Москве
Стоит оговориться, что речь не просто про Godot как таковой. Потому как я сделал форк Redot'а (форка Godot'а) и там уже в исходниках движка внёс исправления.
Мне показалось странным, что такой базовой вещи, как менеджер пакетов нет в движке из коробки, поэтому я вооружился буквами и пошёл насыпать их в код. В качестве первого этапа разработки подключил АПИ NuGet'а, дальше в будущем планирую добавить добавление пакетов из гита и в последствии, думаю, это будет логично, планирую поднять собственный репозиторий, чтобы хранить там свои какие-то переиспользуемые пакеты или пакеты, предназначенные только для движка.
Вообще, если вы используете для работы не встроенный редактор скриптов, а VS, то стандартного нюгет пакета вполне хватит на первое время, но так как я сморю чуть дальше и чуть глубже, я пошёл по пути собственного инструмента. Дополнительно: я пишу на шарпе, а Годот по умолчанию работает с GDScript и шарп у него подключается отдельно. Я сбилдил свою версию так, чтоб она по умолчанию работала с шарпом.
И так, что же у нас тут по менеджеру пакетов?
В папочке modules/mono/editor/GodotTools/GodotTools/ создаём новую папку нашего инструмента, я назвал её NuGet на текущем этапе. При доработках думаю, переименую уже во что-то более универсальное.
Внутри папки создаётся три файла: NuGetManagerWindow.cs
Класс описывающий окно, наследует и имплементрирует ConfirmationDialog, ISerializationListener. Описать обязательно несколько методов:
public override void _Ready()
{
Title = "NuGet Package Manager";
Size = new Vector2I(800, 600);
Exclusive = true;
_apiClient = new NuGetApiClient();
BuildUI();
RefreshInstalledPackages();
}
BuildUI и RefreshInstalledPackages соответственно это не обязательные прям с точки зрения Годота методы, просто я в них вынес нужную мне логику.
Второй класс NuGetPackageInfo - это буквально описание каждого пакета. То есть просто DTO для пакетов с основной информации:
/// <summary>
/// Represents a NuGet package from search results.
/// </summary>
public class NuGetPackageInfo
{
[JsonPropertyName("id")]
public string Id { get; set; } = string.Empty;
[JsonPropertyName("version")]
public string Version { get; set; } = string.Empty;
[JsonPropertyName("description")]
public string Description { get; set; } = string.Empty;
[JsonPropertyName("authors")]
[JsonConverter(typeof(StringOrArrayConverter))]
public List<string> Authors { get; set; } = new();
[JsonPropertyName("projectUrl")]
public string ProjectUrl { get; set; } = string.Empty;
[JsonPropertyName("iconUrl")]
public string IconUrl { get; set; } = string.Empty;
[JsonPropertyName("totalDownloads")]
public long TotalDownloads { get; set; }
[JsonPropertyName("versions")]
public List<NuGetVersionInfo> Versions { get; set; } = new();
public string AuthorsString => string.Join(", ", Authors);
}
Ну и NuGetApiClient – логично, что дёргает запросы в сторону нюгета, для получения информации о пакетах.
После того, как мы всё что нужно описали, надо отредактировать GodotSharpEditor.cs и добавить туда ссылку на наше окно, добавить пункт меню и его обработчик для открытия нашего окна
_menuPopup.AddItem("NuGet Packages...".TTR(), (int)MenuOptions.NuGetPackages);
private enum MenuOptions
{
CreateSln,
NuGetPackages,
}
private void OpenNuGetManager()
{
if (!File.Exists(GodotSharpDirs.ProjectCsProjPath))
{
ShowErrorDialog("No C# project found. Create a C# solution first.".TTR());
return;
}
if (_nugetWindow == null)
{
_nugetWindow = new NuGetManagerWindow();
_nugetWindow.SetUnparentWhenInvisible(true);
}
EditorInterface.Singleton.PopupDialogCentered(_nugetWindow);
}
На выходе получаем удобный способ управления внешними пакетами
Если есть упоротые, которые пойти по пути внесения правок в исходники движка, могу поделиться решением и скинуть архив с файликами.
Макароны на молоке нас обоих смущают)
Ничего не понятно, но очень интересно :)
В итоге выбрала себя