Оссуарий: три образца - столбец хранилища под каждым; одна ячейка топлива; огонёк в окошки; трассер (#66, #69)
- 22.10: «Пусть можно будет положить 3 разных образца, и тогда в ячейки под ними пойдут такие же ресурсы»: выходы os1/os4 - образец 1, os2/os5 - 2, os3/os6 - 3. Описание на 13 языках поправлено. - Лишние ячейки топлива снова показывались: сетка топлива каждый кадр выставляет видимость по высоте - прятать в Update. Видна одна. - Огонёк: окошки на 30°, 90°... (на 0°, 60°... - полосы металла; 22.10 «Светлячок заходит в полосы металла, и игнорирует окошки»). - necroossuary wisp trace - линии путей огонька; necroossuary open - окно как по E. Проверено в test8: окно (3 образца, 1 топливо, хранилище 2x3), уголь во втором образце -> стак угля в 5-й ячейке; трассер - путь через центр окошка. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ead6823c8a
commit
be7c203abe
@@ -53,21 +53,23 @@ namespace NecromancerTome
|
||||
|
||||
public static bool Is(TileEntityCollector te) => te != null && Is(te.blockValue.Block);
|
||||
|
||||
/// <summary>Ячейка образца для выхода: у котла (#66, 22.10) образец один - все выходы os1..os6 берут ресурс из
|
||||
/// ячейки 0 («Ячейка под образец - одна»). Не наш выход - -1.</summary>
|
||||
/// <summary>Ячейка образца для выхода: хранилище 2 ряда по 3, столбец - образец над ним (os1 и os4 - образец 1, os2 и
|
||||
/// os5 - 2, os3 и os6 - 3). 22.10 сначала решили «ячейка под образец - одна», но спрятать две лишние не вышло с первого
|
||||
/// раза, и пользователь: «Пусть можно будет положить 3 разных образца, и тогда в ячейки под ними пойдут такие же ресурсы.
|
||||
/// Примерно так оссуарий и работал». Не наш выход - -1.</summary>
|
||||
public static int ModSlotOf(BlockCollector.OutputType outputType)
|
||||
{
|
||||
string name = outputType?.Name;
|
||||
if (name == null || name.Length != 3 || !name.StartsWith("os"))
|
||||
return -1;
|
||||
return 0;
|
||||
return (name[2] - '1') % 3;
|
||||
}
|
||||
|
||||
/// <summary>Видимых в окне ячеек образца и топлива (#66, 22.10: «Ячейка под образец - одна; ячейка под кровавую
|
||||
/// сферу (или камень) - одна»). В данных их по-прежнему 3 и 6: длины пишутся в сейв, а при загрузке игра обрезает
|
||||
/// лишнее по конфигу - уменьшение молча выбросило бы содержимое. Лишние прячутся в окне, их старое содержимое
|
||||
/// переносит в хранилище Patch_TileEntityCollector_UpdateTick_GeoOssuaryMigrate.</summary>
|
||||
public const int VisibleModSlots = 1;
|
||||
public const int VisibleModSlots = 3; // все три (см. ModSlotOf); прятать нечего, перенос образцов не нужен
|
||||
public const int VisibleFuelSlots = 1;
|
||||
|
||||
/// <summary>Ресурс в ячейке модификации, если он из списка; иначе null.</summary>
|
||||
@@ -107,6 +109,41 @@ namespace NecromancerTome
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Лишние ячейки держать скрытыми каждый кадр, пока окно открыто (22.10: «почему-то ячеек под образец 3, а мы
|
||||
/// планировали сделать 1»): сетка топлива сама выставляет видимость по высоте в своём Update (updateGridHeight), ячейки
|
||||
/// образца тоже показывались снова после SetTileEntity. Сеттер IsVisible при том же значении ничего не делает.</summary>
|
||||
[HarmonyPatch(typeof(XUiC_ItemStackGrid), nameof(XUiC_ItemStackGrid.Update))]
|
||||
public static class Patch_XUiC_ItemStackGrid_Update_GeoOssuary
|
||||
{
|
||||
public static void Postfix(XUiC_ItemStackGrid __instance)
|
||||
{
|
||||
if (__instance is XUiC_DewCollectorModGrid mods)
|
||||
{
|
||||
if (!GeoOssuary.Is(mods.tileEntity))
|
||||
return;
|
||||
for (int i = GeoOssuary.VisibleModSlots; i < mods.itemControllers.Length; i++)
|
||||
mods.itemControllers[i].ViewComponent.IsVisible = false;
|
||||
}
|
||||
else if (__instance is XUiC_CollectorFuelGrid fuel && fuel.fuelBehavior == XUiC_CollectorFuelGrid.FuelBehavior.Fuel &&
|
||||
GeoOssuary.Is(fuel.tileEntity))
|
||||
{
|
||||
GeoOssuaryFuelGrid.Apply(fuel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Сетка топлива меняет видимость после базового Update (updateGridHeight) - прятать и после него.</summary>
|
||||
[HarmonyPatch(typeof(XUiC_VariableHeightGrid), nameof(XUiC_VariableHeightGrid.Update))]
|
||||
public static class Patch_XUiC_VariableHeightGrid_Update_GeoOssuary
|
||||
{
|
||||
public static void Postfix(XUiC_VariableHeightGrid __instance)
|
||||
{
|
||||
if (__instance is XUiC_CollectorFuelGrid fuel && fuel.fuelBehavior == XUiC_CollectorFuelGrid.FuelBehavior.Fuel &&
|
||||
GeoOssuary.Is(fuel.tileEntity))
|
||||
GeoOssuaryFuelGrid.Apply(fuel);
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(TileEntityCollector), nameof(TileEntityCollector.isDisabled))]
|
||||
public static class Patch_TileEntityCollector_isDisabled_GeoOssuary
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user