From 06155ff014e47fd07fd839c425fbd906b44577dd Mon Sep 17 00:00:00 2001 From: AlexCube Date: Fri, 16 Oct 2026 20:55:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B8=D1=82=D0=B8=20=D0=B2=D0=B8=D0=B4?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D1=81=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B6=D0=BE=D0=BC=20=D1=85=D0=B2=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D0=BC=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=B8=D1=82=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=B2=20=D1=80=D1=83=D0=BA=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- HarmonySrc/CinerariumThreads.cs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/HarmonySrc/CinerariumThreads.cs b/HarmonySrc/CinerariumThreads.cs index 42cbd61..d21ab6f 100644 --- a/HarmonySrc/CinerariumThreads.cs +++ b/HarmonySrc/CinerariumThreads.cs @@ -256,7 +256,8 @@ namespace NecromancerTome } } - /// Нити одной урны: провисающие линии и бегущие по ним огоньки (направление). Дочерний объект модели урны - + /// Нити одной урны: провисающие линии и бегущие по ним огоньки (направление). Видны, только пока в руках нож + /// хватом для нитей. Дочерний объект модели урны - /// сдвиги Origin и выгрузка чанка его не теряют; точки - в осях модели. [Preserve] public class CinerariumThreadView : MonoBehaviour @@ -272,7 +273,7 @@ namespace NecromancerTome const int SparksPerThread = 3; public static float SparkSpeed = 1.2f; // м/с - /// _pairs - концы в координатах сцены (без Origin). + /// _pairs - концы в координатах сцены (без Origin). Видимость - заново по ножу в руке (Update). public void Build(List<(Vector3 a, Vector3 b)> _pairs) { foreach (Transform c in transform) @@ -297,19 +298,37 @@ namespace NecromancerTome } _threads.Add(th); } + _shown = -1; } float _nextSleepCheck; bool _asleep; + int _shown = -1; + + /// 16.10: «Нити должны быть видны, только когда нож в режиме нитей и в руках». + public static bool ToolInHand() + { + EntityPlayerLocal pl = GameManager.Instance?.World?.GetPrimaryPlayer(); + return pl != null && CinerariumThreads.IsThreadKnife(pl.inventory?.holdingItem); + } void Update() { if (Time.time >= _nextSleepCheck) { - _nextSleepCheck = Time.time + 0.5f; + _nextSleepCheck = Time.time + 0.25f; _asleep = CinerariumGenie.PlayerFar(transform.position); // засыпание (16.10): огоньки стоят + int show = ToolInHand() ? 1 : 0; + if (show != _shown) + { + _shown = show; + foreach (Renderer r in GetComponentsInChildren(true)) + { + r.enabled = show == 1; + } + } } - if (_asleep) + if (_asleep || _shown != 1) { return; }