Некротехнолог: работа духа - расходники коллекторов и готовое из станций

Раз в 3 с одно дело: (1) пополнить из ящиков зоны и сумки урны ячейки
расходников любого коллектора (банки, цветы, корм, сферы) и катализатора
(куры, по одной в пустую ячейку); (2) забрать готовое из коллекторов и
станций (верстак, кузня, химстанция, костёр...) в ящики зоны - сначала
к таким же, потом в пустое, ящики полны - в сумку урны; некуда - дух
чернеет и замирает, оживает сам. Модификации, инструменты, топливо и
сырьё станций не трогаются; открытое у игрока и закреплённые ячейки -
тоже. Модель духа плывёт к месту работы и обратно. Грядки - позже.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-16 15:43:36 +03:00
co-authored by Claude Opus 5.5
parent 0558f46069
commit 0890ffe1e9
4 changed files with 369 additions and 2 deletions
+29
View File
@@ -148,6 +148,35 @@ namespace NecromancerTome
SpawnBounds();
}
SyncGenie(false);
Work(_world);
}
float _nextWork;
public bool Stuck;
/// <summary>Работа духа (CinerariumWork): раз в StepSeconds одно дело, только с черепом и только на сервере.</summary>
void Work(World _world)
{
if (!HasSkull || _world == null || !ConnectionManager.Instance.IsServer || Time.time < _nextWork)
{
return;
}
_nextWork = Time.time + CinerariumWork.StepSeconds;
Vector3i? at = CinerariumWork.Step(_world, this, out bool stuck);
if (stuck != Stuck)
{
Stuck = stuck;
Debug.Log("[NecromancerTome] Cinerarium: дух урны " + ToWorldPos() + (stuck ? " почернел - готовое класть некуда" : " ожил"));
}
CinerariumGenieMotion motion = _genie != null ? _genie.GetComponent<CinerariumGenieMotion>() : null;
if (motion != null)
{
motion.SetStuck(Stuck && at == null);
if (at.HasValue)
{
motion.Visit(World.blockToTransformPos(at.Value) - Origin.position);
}
}
}
// ------------------------------------------------------------------