- Одержимость питомца: ПКМ с книгой - вселиться, E - отозвать (и изнутри питомца), пояс скрыт, надпись о враге у тела. - Одержимый стервятник: полёт, рывок на ЛКМ с 10 м с прямым уроном, звуком и кровотечением, обычный прицел краснеет на цели; посадка в позу 0 и взлёт на пробел; ПКМ - клич-приманка (паникующая курица, откат 0.5 с); F - питаться трупами и блоками-падалью, доеденное исчезает. - Дух змеи атакует только нежить; фиолетовая метка на карте у змеи и одержимого. - Череп из красного трупа (этап 1 цинерария); глава книги «Письмо архимага» с видео. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
65 lines
3.9 KiB
C#
65 lines
3.9 KiB
C#
using UnityEngine;
|
||
|
||
namespace NecromancerTome
|
||
{
|
||
/// <summary>
|
||
/// Метка на карте для того, кем сейчас управляет игрок: дух змеи и одержимый (зомби или питомец).
|
||
/// Указание 06.10: «Змея всё ещё не появляется на карте. Подозреваю, что питомцы в режиме одержимости тоже».
|
||
///
|
||
/// ПОЧЕМУ НЕ Entity.AddNavObject (так было у змеи с 02.10). У сущности одна общая NavObject на все её
|
||
/// классы меток; у змеи от ванильного animalSnake там уже лежат twitch_spawn, animaltracking_snake,
|
||
/// clear_sleeper. AddNavObject только дописывает класс в этот список, а какой из них показывать,
|
||
/// игра решает сама (NavObject.HandleActiveNavClass), и карта (XUiC_MapArea.updateNavObjectList)
|
||
/// заводит спрайт метки один раз по её ключу. Метка змеи так и не появилась ни разу.
|
||
///
|
||
/// ЗДЕСЬ - как у транспорта (EntityVehicle.HandleNavObject: RegisterNavObject(класс,
|
||
/// vehicle.GetMeshTransform()), разбор 06.10): своя, отдельная NavObject, привязанная к Transform (перегрузка
|
||
/// NavObjectManager.RegisterNavObject(className, Transform)): своя запись, свой ключ, один класс.
|
||
/// Позиция - transform.position (NavObject.GetPosition для TrackTypes.Transform), т.е. сама модель.
|
||
/// Снимается UnRegisterNavObject; если сущность исчезла, игра снимет метку сама (IsValid).
|
||
///
|
||
/// ЧУЖУЮ МЕТКУ НЕ ТРОГАТЬ (проверка на утечки 06.10). Снятые метки игра кладёт в пул
|
||
/// (removedNavObjectPool) и раздаёт заново. Если модель исчезла раньше нашего Hide, игра сама сняла
|
||
/// метку, и пул мог уже отдать этот же объект другому (метка чутья, транспорт). Поэтому снимаем, только
|
||
/// если объект ещё в NavObjectList и следит за НАШЕЙ моделью; иначе просто забываем ссылку.
|
||
/// Класс necroSnakeSpirit (nav_objects.xml) - только карта, фиолетовый; значок - OverrideSpriteName.
|
||
/// </summary>
|
||
public static class NecroMapMarker
|
||
{
|
||
public const string NavClass = "necroSnakeSpirit";
|
||
|
||
/// <summary>Метка и модель, за которой она следит.</summary>
|
||
public class Marker
|
||
{
|
||
public NavObject Nav;
|
||
public Transform Tracked;
|
||
}
|
||
|
||
public static Marker Show(EntityAlive _e, string _sprite)
|
||
{
|
||
if (_e == null || _e.transform == null || NavObjectManager.Instance == null)
|
||
{
|
||
return null;
|
||
}
|
||
NavObject nav = NavObjectManager.Instance.RegisterNavObject(NavClass, _e.transform, _sprite, true);
|
||
Debug.Log("[NecromancerTome] NecroMapMarker: метка на карте для " + _e.EntityName + " (" + _e.entityId + ") - " + nav);
|
||
return new Marker { Nav = nav, Tracked = _e.transform };
|
||
}
|
||
|
||
public static void Hide(ref Marker _m)
|
||
{
|
||
NavObjectManager manager = NavObjectManager.Instance;
|
||
if (_m != null && _m.Nav != null && manager != null && _m.Tracked != null &&
|
||
manager.NavObjectList.Contains(_m.Nav) && _m.Nav.IsTrackedTransform(_m.Tracked))
|
||
{
|
||
manager.UnRegisterNavObject(_m.Nav);
|
||
}
|
||
_m = null;
|
||
}
|
||
|
||
/// <summary>Значок одержимого (зомби или питомца) - значок дебаффа «Почти смерть» (buffNearDeathTrauma,
|
||
/// вешается игроку после гибели), указание 06.10.</summary>
|
||
public const string PossessedSprite = "ui_game_symbol_near_death_trauma";
|
||
}
|
||
}
|