|
2 | 2 |
|
3 | 3 | All notable changes to this project will be documented in this file. |
4 | 4 |
|
| 5 | +## [6.0.5] - Unreleased |
| 6 | + |
| 7 | +### Tools / Move — недоработки и улучшения модуля |
| 8 | + |
| 9 | +- **UniversalRotator** — `using UnityEditor` обёрнут в `#if UNITY_EDITOR` (исправление для билдов). |
| 10 | +- **ScreenPositioner** — проверка `_targetCamera == null` в ApplyScreenPosition с логом; режим «use screen position» использует `_screenEdge` вместо жёсткого BottomLeft; опция `_updateEveryFrame` и обновление в LateUpdate для динамического размещения; поля унифицированы в `[SerializeField] private`. |
| 11 | +- **DistanceChecker** — гистерезис (`hysteresisOffset`, пороги approach/depart); настраиваемый `continuousEventThreshold` для onDistanceChanged; метод `SetCurrentObject(Transform)`; пересчёт порогов в Awake/OnValidate/SetDistanceThreshold. |
| 12 | +- **Follow** — опциональный автопоиск цели по тегу (`findTargetByTag`, `targetTag`); событие `onTargetLost` при потере цели; тултип для `activationDistance`; публичные геттеры `GetFollowPosition()`, `GetFollowRotation()`. |
| 13 | +- **AdvancedForceApplier** — события `OnApplyFailed` (при отсутствии Rigidbody) и `OnApplyForce`; опция `clampSpeedEveryFixedUpdate`; публичные методы `SetTarget(Transform)`, `SetDirectionMode(DirectionMode)`, `SetCustomDirection(Vector3)`. |
| 14 | +- **CameraConstraint** — событие `onConstraintFailed` и однократный `Debug.LogWarning` при ошибке инициализации; `SetBoundsSource(Object)` возвращает `bool`. |
| 15 | +- **CameraRotationController** — выбор кнопки мыши (`mouseButton`) и опциональный модификатор (`modifierKey`); отдельный множитель `mouseSensitivity`; события `onRotateStart`, `onRotateEnd`. |
| 16 | +- **CursorLockController** — режимы курсора: **LockAndHide**, **OnlyHide**, **OnlyLock** (enum `CursorStateMode`); в документации — описание режимов и использование с New Input System (вызов `SetCursorLocked`/`ToggleCursorState` из callback). |
| 17 | +- **PlayerController2DPhysics / PlayerController3DPhysics** — события `OnMoveStart`, `OnMoveStop` при начале/окончании движения; при `_groundCheck == null` в Awake выводится однократный `Debug.LogWarning`; `Teleport` уже присутствовал в обоих. |
| 18 | +- **KeyboardMover** — настраиваемые имена осей `horizontalAxis`, `verticalAxis`; опция ввода **Input Backend** (Legacy / New Input System / AutoPreferNew) с использованием `OptionalInputSystemBridge.ReadMove()`. |
| 19 | +- **ConstantMover / ConstantRotator** — тултип для `useDeltaTime` (units per second vs per frame); публичные методы `SetSpeed(float)` и `SetDegreesPerSecond(float)`. |
| 20 | +- **MouseMover2D / MouseMover3D** — в Awake при отсутствии камеры подставляется `Camera.main`, при отсутствии — однократный `Debug.LogWarning`; настраиваемые `mouseButton` и `arrivalThreshold`; **MouseMover3D** реализует интерфейс `IMover` (`MoveDelta(Vector2)`, `MoveToPoint(Vector2)` с проекцией на плоскость); в `RaycastCursor` проверка `cam == null`. |
| 21 | +- Документация обновлена: CursorLockController.md, KeyboardMover.md, MouseMover3D.md, ConstantMover.md, IMover.md, PlayerController2DPhysics.md, PlayerController3DPhysics.md, README Move. |
| 22 | + |
| 23 | +### Tools / Components — исправления и устойчивость |
| 24 | + |
| 25 | +- **ScoreManager** — исправлена логика `SetBestScore(int?)`: без аргумента обновляет рекорд из текущего счёта, с аргументом — заданное значение (если больше текущего рекорда). Убран лишний вызов `OnValueChange` в `ResetScore()` (сеттер Score уже вызывает событие). |
| 26 | +- **Counter** — в `SaveValue()` после `SetFloat` вызывается `SaveProvider.Save()` (соответствие документации и поведению Money). |
| 27 | +- **Loot** — проверка `lootItems == null || lootItems.Length == 0` в `DropLoot()` и `GetRandomPrefab()` (защита от NullReferenceException). Namespace приведён к `Neo.Tools`. |
| 28 | +- **TextScore** — в `Init()` перед подпиской вызывается `RemoveListener(Set)` для исключения двойной подписки при повторной инициализации. |
| 29 | +- **Health** — в XML-документации класса указана реализация IDamageable, IHealable, IRestorable для интеграции с AttackExecution. |
| 30 | +- Документация: ScoreManager.md (описание SetBestScore), SCRIPT_IMPROVEMENTS.md — актуализирован (выполненные пункты отмечены). |
| 31 | + |
| 32 | +## [6.0.4] - Unreleased |
| 33 | + |
| 34 | +### Tools / Random — универсальный No-Code и API |
| 35 | + |
| 36 | +- **ChanceSystemBehaviour** — расширены события для настройки и подписки без кода: |
| 37 | + - **On Index And Weight Selected (int, float)** — выбранный индекс и нормализованная вероятность (0..1). |
| 38 | + - **On Roll Complete** — вызывается один раз после каждого броска (UI, звук). |
| 39 | + - **Events By Index** — список UnityEvent по исходам: при выпадении индекса N вызывается событие на позиции N (разные действия на каждый исход без кода). |
| 40 | + - **LastSelectedIndex**, **LastSelectedEntry** — результат последнего броска. |
| 41 | + - **EvaluateAndNotify()** — бросок с вызовом всех событий, возврат Entry. |
| 42 | + - **SetResultAndNotify(int)** — задать результат по индексу и вызвать события. |
| 43 | + - **GetNormalizedWeight(int)**, **GetOrAddEventForIndex(int)** — для кода. |
| 44 | + - Обратная совместимость: **OnIdGenerated** и **OnIndexSelected** сохранены. |
| 45 | +- **ChanceManager** — **TryEvaluate(out int index, out Entry entry)** и **TryEvaluate(float randomValue, out int index, out Entry entry)** для удобного доступа к индексу и записи одним вызовом (в т.ч. детерминированный бросок). |
| 46 | +- **ChanceData** — в документации указано использовать ChanceSystemBehaviour для сценарных событий по индексу. |
| 47 | +- Документация: ChanceSystemBehaviour.md, ChanceManager.md, README Random обновлены. |
| 48 | + |
5 | 49 | ## [6.0.3] - Unreleased |
6 | 50 |
|
7 | 51 | ### UI: SceneFlowController и реестр устаревших |
|
0 commit comments