Нити видны только с ножом хватом для нитей в руках

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-16 20:55:25 +03:00
co-authored by Claude Opus 5.5
parent f5be0e7f43
commit 06155ff014
+23 -4
View File
@@ -256,7 +256,8 @@ namespace NecromancerTome
} }
} }
/// <summary>Нити одной урны: провисающие линии и бегущие по ним огоньки (направление). Дочерний объект модели урны - /// <summary>Нити одной урны: провисающие линии и бегущие по ним огоньки (направление). Видны, только пока в руках нож
/// хватом для нитей. Дочерний объект модели урны -
/// сдвиги Origin и выгрузка чанка его не теряют; точки - в осях модели.</summary> /// сдвиги Origin и выгрузка чанка его не теряют; точки - в осях модели.</summary>
[Preserve] [Preserve]
public class CinerariumThreadView : MonoBehaviour public class CinerariumThreadView : MonoBehaviour
@@ -272,7 +273,7 @@ namespace NecromancerTome
const int SparksPerThread = 3; const int SparksPerThread = 3;
public static float SparkSpeed = 1.2f; // м/с public static float SparkSpeed = 1.2f; // м/с
/// <summary>_pairs - концы в координатах сцены (без Origin).</summary> /// <summary>_pairs - концы в координатах сцены (без Origin). Видимость - заново по ножу в руке (Update).</summary>
public void Build(List<(Vector3 a, Vector3 b)> _pairs) public void Build(List<(Vector3 a, Vector3 b)> _pairs)
{ {
foreach (Transform c in transform) foreach (Transform c in transform)
@@ -297,19 +298,37 @@ namespace NecromancerTome
} }
_threads.Add(th); _threads.Add(th);
} }
_shown = -1;
} }
float _nextSleepCheck; float _nextSleepCheck;
bool _asleep; bool _asleep;
int _shown = -1;
/// <summary>16.10: «Нити должны быть видны, только когда нож в режиме нитей и в руках».</summary>
public static bool ToolInHand()
{
EntityPlayerLocal pl = GameManager.Instance?.World?.GetPrimaryPlayer();
return pl != null && CinerariumThreads.IsThreadKnife(pl.inventory?.holdingItem);
}
void Update() void Update()
{ {
if (Time.time >= _nextSleepCheck) if (Time.time >= _nextSleepCheck)
{ {
_nextSleepCheck = Time.time + 0.5f; _nextSleepCheck = Time.time + 0.25f;
_asleep = CinerariumGenie.PlayerFar(transform.position); // засыпание (16.10): огоньки стоят _asleep = CinerariumGenie.PlayerFar(transform.position); // засыпание (16.10): огоньки стоят
int show = ToolInHand() ? 1 : 0;
if (show != _shown)
{
_shown = show;
foreach (Renderer r in GetComponentsInChildren<Renderer>(true))
{
r.enabled = show == 1;
} }
if (_asleep) }
}
if (_asleep || _shown != 1)
{ {
return; return;
} }