Урна-цинерарий: своя модель, свечение по черепу, кровь в рецепте
Модель (бандл necrocinerarium, BlenderWork/necroCinerarium/make_urn.py): тело вращения в чёрной глазури, по четырём сторонам - вдавленные лицевые части черепа, наклонённые вниз; руны старшего футарка кровью «SERVU ĜIS LA LASTA CINDRO» («Служи до последнего пепла»), меандр на ножке, бусины на шейке, пояс черепов в двух линиях. Руны тлеют красным, глазницы светятся фиолетовым, только когда в урне череп (_EmissionColor через MaterialPropertyBlock). Своя иконка. Коллайдер-тег - DecorColliderTagPatch. Дух: выше на 10 см и на 7 см вперёд в своей системе (хвост не вылезает сзади), necrogenie fwd. Рецепт: + кровь некроманта, копия на соке розы. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
94bf0a5f5c
commit
9f813bb699
@@ -245,6 +245,7 @@ namespace NecromancerTome
|
||||
/// <summary>_sound - череп только что положили или вынули (порыв); при загрузке чанка дух появляется молча.</summary>
|
||||
public void SyncGenie(bool _sound)
|
||||
{
|
||||
SyncGlow();
|
||||
if (HasSkull && _genie == null)
|
||||
{
|
||||
_genie = CinerariumGenie.Spawn(ModelTransform());
|
||||
@@ -259,6 +260,37 @@ namespace NecromancerTome
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Руны кровью и глазницы черепов светятся, только когда в урне череп (16.10): _EmissionColor через
|
||||
/// MaterialPropertyBlock на рендерерах модели урны (материал общий не трогается), духа не задевает.</summary>
|
||||
public static Color GlowColor = new Color(2.2f, 2.2f, 2.2f, 1f);
|
||||
static readonly MaterialPropertyBlock _glowBlock = new MaterialPropertyBlock();
|
||||
static readonly int EmissionColorId = Shader.PropertyToID("_EmissionColor");
|
||||
int _glowState = -1; // -1 - не ставили на эту модель
|
||||
|
||||
void SyncGlow()
|
||||
{
|
||||
Transform t = ModelTransform();
|
||||
int want = HasSkull ? 1 : 0;
|
||||
if (t == null || (_glowState == want && _glowModel == t))
|
||||
{
|
||||
return;
|
||||
}
|
||||
foreach (Renderer r in t.GetComponentsInChildren<Renderer>(true))
|
||||
{
|
||||
if (_genie != null && r.transform.IsChildOf(_genie.transform) || _bounds != null && r.transform.IsChildOf(_bounds.transform))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
r.GetPropertyBlock(_glowBlock);
|
||||
_glowBlock.SetColor(EmissionColorId, HasSkull ? GlowColor : Color.black);
|
||||
r.SetPropertyBlock(_glowBlock);
|
||||
}
|
||||
_glowState = want;
|
||||
_glowModel = t;
|
||||
}
|
||||
|
||||
Transform _glowModel;
|
||||
|
||||
void RemoveGenie(bool _sound)
|
||||
{
|
||||
if (_genie == null)
|
||||
|
||||
Reference in New Issue
Block a user