The new The Ravine repository, where game will be finished in full
C#
3
201 commits
updated Oct 3, 2026
Open-world sandbox game developed in Unity.
Все скрипты: Assets/Scripts/ (~364 файла). Сборки (asmdef): Core, BehavioursMap, EntitySystem, ObjectSystem, UIInventory.
GameInitializer (Terminal/GameInitializer.cs, DontDestroyOnLoad, Awake)Создаёт все глобальные сервисы до загрузки игровой сцены:
RavineLogger → ServiceLocator.ServicesActionMapController (Core/NewInputSystem/)GlobalSettingsController (настройки качества, трава, управление)WorldRegistry (список миров, текущий мир)AutosaveCoordinatorWorldSettingsController⚠️ Очистка сервисов в OnDestroy закомментирована — при перезаходе возможны «зомби»-сервисы (см. «Известные проблемы»).
GameSceneManagerSystem/Menu/WorldManagerUI — список миров, создание/удаление/переименованиеWorldSettingsUI — конфиг мира (сложность, autosave interval, timeScale)NetworkUIController — выбор host/server/client, IPSceneLaunchService (Core/) — переход на игровую сценуGameSceneManagerSystem/StateMachine/Bootstrap → GameStateMachine; состояния в States/: BootstrapState → InitialState → LoadingState → GameState.
Каждое состояние запускает очередь ISetAble сервисов через ServiceRegisterMachine. Там же: WorldStateMachine, PlayerStateMachine, AIStateMachine.
Порядок регистрации сервисов (грубо):
DayCycle, AmbientSystemObjectSystem, EntitySystem, MobControllerMapGenerator, MobGenerator, UIInventory, PauseUICore/ServiceLocator/)ServiceLocator.Services — Dictionary<Type, object> — игровые сервисы
ServiceLocator.Players — PlayerContainer — зарегистрированные игроки
ServiceContainer.Register молча игнорирует повторную регистрацию (нет replace) — важно при перезаходе на сцену.
AEntity — базовый класс сущности (Model/BehavioursMap/AEntity.cs)Dictionary<Type, IComponent> — компоненты
ReactiveProperty<bool> IsActive
ReactiveCommand<Unit> OnUpdate
IComponent, реализации в Model/BehavioursMap/)| Компонент | Назначение |
|---|---|
MainComponent | имя, prefabID, clientID |
TransformComponent | entity/model трансформы |
MovementComponent (BehavioursMap/Movement/) | BaseSpeed, Acceleration, Deceleration, velocity |
EnergyComponent (BehavioursMap/Energy/) | energy, maxEnergy (ReactiveProperty) |
CurrencyComponent (BehavioursMap/Currency/) | валюта (SafeInt + ReactiveProperty, только сервер пишет) |
AimComponent (BehavioursMap/Aim/) | CrosshairDistance, PickDistance |
EventBusComponent (Model/Actions&Events/) | EventBus для внутренних событий сущности |
StatePatternComponent (EntitySystem/) | FSM — текущее состояние (AState) + командный планировщик CommandScheduler |
SkillComponent (Model/EntitySkills/) | Dictionary<string, ISkill> |
CameraComponent (EntitySystem/Entityes/) | логика камеры (follow + aim offset) |
EntitySystem/Entityes/)PlayerEntity — игрок (Player/, init в PlayerModelView.OnNetworkSpawn())BotEntity — NPC с FSM-поведениями (Bot/)MobEntity — мобы, движение через RoamMoveController + MobController (Jobs) (Mob/)Mimic — сущность-имитатор с процедурными ногами (LegPlanner, LegPool, SurfaceMotor, IVelocitySource)EntitySystem/MobGenerator.csChunk-based спавн/деспавн сущностей по позиции игрока, синхронизирован с чанками MapGenerator; дифф-буферы _diffBuf/_pruneBuf без аллокаций. Глобальный реестр живых сущностей — список global в EntitySystem/EntitySystem.cs.
EntitySystem/Command/)CommandScheduler (async-очередь, живёт в стейтах), ICommand, MoveAlongPathCommand, SpawnObjectsCommand, PrintMessageCommand.
AEntityViewModel : NetworkBehaviour — подписывается на Entity.IsActive, Entity.OnUpdateAEntityView : MonoBehaviour — биндинги UI на ViewModelPlayerModelView — конкретная ViewModel игрока, спавнит камеру через ServerRpcPlayerModelView.OnNetworkSpawn — инициализация на каждом клиентеDayCycle (Core/DayCycle.cs) — NetworkVariable isDay, сервер управляет временемCurrencyNetworkComponent — NetworkVariable, только сервер пишет, RPC от клиентаPlayerController.MoveServerRpc — движение валидируется на сервереNetCode/NetworkSpawner.cs — ServerRpc-спавн по имени префаба (⚠️ авторизация не работает — см. «Известные проблемы»); NetCode/RavineNetworkManager.cs — мёртвый код (полностью закомментирован, старый UNet)GameSceneManagerSystem/NetworkConnectionManager.cs, NetworkTransportConfig.cs, NetworkUIController.csCore/Storage/, Core/Settings/)IAsyncPersistentStorage
└── EncryptedPlayerPrefsStorage (AES-CBC + MemoryPack, default)
└── JsonPlayerPrefsStorage (отладка)
IFileManager<TId, TEntity>
└── WorldStateRepository (ключ: "world_data_{id}")
└── WorldConfigRepository (ключ: "world_settings_{id}")
└── GlobalSettingsRepository (ключ: "global_game_settings")
└── ScriptFileManager (ключ: "script_file_{name}")
Core/Settings/WorldData/, WorldSettings/, GameSettings/)GlobalSettings — качество, трава, тип управления (MemoryPack)WorldState — seed, позиция игрока, cycleCount, инвентарь[], lastSaveTimeWorldConfiguration — имя мира, сложность, autosave interval, timeScaleWorldRegistry (Core/Settings/WorldRegistry.cs)Центральный менеджер миров: Create/Load/Unload/Delete/Rename/Save.
AvailableWorlds: ObservableList<string> — UI подписывается напрямую.
AutosaveCoordinatorЗапускает цикл автосохранения. Поддерживает SubscribeBeforeSave(Func<CT, UniTask>) — хуки до сохранения.
ObjectSystem/Map/WorldGeneration/)MapGenerator : MonoBehaviour, ISetAbleNoise (кешированные октавные офсеты)ChunkData = heightMap[40,40] + temperatureMap[40,40] + SortedSet objectsToInstChunkGenerator + ChunkJobs/ (Burst)GrassGenerator/, WaterSystem/ (вкл. RippleSystem/), ObjectGenerator/IEndless/)EndlessTerrain — обновляет единый Mesh (3x3 чанка), MeshColliderEndlessLiquids — двигает водный planeEndlessObjects — переиспользует объекты через ObjectSystem (pool)ObjectSystem (ObjectSystem/ObjectSystem.cs)Dictionary<Vector2Int, ObjectInstInfo> — глобальный реестр размещённых объектовPoolManager (Core/PoolManager.cs) — Dictionary<prefabID, Queue>ObjectInfoRegistry : ScriptableObject — база всех объектов; SO-данные предметов — ScriptableData/Item/ (Environment, NPC, квесты, описания)ObjectSystem/TreeGenerator/ — деревья; ObjectInfo/NAL/ — NAL-поведение объектовNAL_PC.csПсевдо-экосистема: объекты размножаются/умирают по вероятностям.
BehaviourType: None | NAL | GROW
При смерти/подборе — SpreadPattern (spawn новых объектов вокруг)
WorldGeneration/StructGenerator/WaveFunctionCollapseAlgorithm + StructureGenerator: процедурная генерация структур из тайловых правил (TileRuleSO, TilePatternSO).
EntitySystem/AI/) — ядро проектаВстроена в основной EntitySystem (не sandbox): сущности AI/Entity/ имеют собственный MVP (EntityModel / EntityViewModel / EntityView), компоненты (AI/Entity/Components/: BrainComponent, PerceptionComponent, MortalityComponent, StatsComponent, SpeechComponent, PointsOfInterestComponent, VisualCullingComponent) и состояния действий (AI/Entity/State/EntityActionState.cs — действия с ценой энергии/HP).
SharedHierarchicalBrain (AI/SharedAI/SharedHierarchicalBrain.cs)Двухуровневая иерархия, веса общие на всех сущностей (эволюция на уровне популяции), пер-сущностные контексты EntityBrainContext:
ActionSubsets)Пер-сущностное состояние: SharedAI/LSTMContext.cs, SharedAI/PerceptronContext.cs (пул состояний RentState/ReturnState, BPTT-истории).
AI/DelayedPerceptron/ — continuous-time RNN с τ-весами; Truncated BPTT (8 шагов), reward-weighted; ε-greedy с adaptive epsilon по entropyAI/SharedAI/ValueCritic.cs — линейный TD-критик (baseline для reward)AI/SharedAI/RandomNetworkDistillation.cs — intrinsic motivation (RND: target+predictor сети, novelty reward)AI/GeneticParameters.cs — LR, lambda, temperature и пр.; AI/MimicPhenotype.cs — фенотип мимикрииAI/LSTM/ — LSTMMemory; AI/InputVectorizer.cs — векторизация наблюдений; AI/FoodObject.cs, AI/EntityAction.csAI/EntityManager.csСпавн, смерть, размножение (обычное + crossover), эволюция весов (EvolveSharedWeights), сохранение моделей (NeuralModelStorage.cs, ModelInfo.cs).
AI/AISpeech/) — «речь» агентовГенетические аудио-профили: AgentAudioProfile, GeneticAudioProfile (+Cache), AgentAudioProfileBuilder, TimbreResolver, AudioParameterMapper; синтез: StringToAudioGenerator (hash строки → гармоники → Jobs → AudioClip) + AudioSynthesizer (Burst IJobParallelFor, 4 формы волны) + StableHashService (детерминированный хеш → ADSR огибающая).
Model/InventoryModel/, UI/Inventory/)InventoryModel — чистая модель (слоты, стаки, крафт)EventDrivenInventoryProxy — обёртка с событиями (Added/Removed/Changed)UIInventory : ISetAble — View, подписан на PlaceEvent/PickUpEvent из EventBus игрокаCraftService (UI/CraftService.cs) — проверяет рецепты, заполняет прогресс-бар; CraftPresenter — MVP-слой; CraftModel.cs — мёртвый кодUIDragger — drag-and-drop (PC мышь + mobile touch)LLMItemDescriptionService с debounce (0.4s), кеш в ItemDescriptionRegistryCore/Timer/)TimeInvoker : MonoBehaviour (DontDestroyOnLoad, singleton) — тикает из Update(): OnUpdateTimeTickedEvent, OnOneSyncedSecondTickedEvent (+ unscaled варианты)SyncedTimer — подписывается на TimeInvoker, поддерживает Pause/Unpause; также TimeChangingSource.cs, TimerType.csTerminal/)GameInitializer.cs — точка входа (см. выше); Terminal.cs — UI консоль с историей (50 строк, ZString); UI/Console/CommandManager — Dictionary команд по имени/псевдониму; BaseCommands, GeneratorCommands, SetPlayerCommandTerminal/Rive/) — собственный интерпретируемый язык:
int, массивы int[]if/else/end, for x = N to M, wait, log, get (stdin), send(interactor, val)~команда — вызов терминальных команд из скриптаRiveParser → AST → RiveExecutor (stack-based scopes, MAX 10000 ops)RiveRuntime — реестр программ, built-in функции (abs/min/max/clamp/pow/sqrt/rand)InteractorRegistry — игровые головоломки (DigitalLock, Collatz, Checksum, SequenceValidator)Terminal/PDollar/ — $P recognizer: GestureRecognizer — распознавание жестов → диспетчер командCore/NewInputSystem/)ActionMapController — переключение Action Maps: Gameplay / Pause / Inventory / UIInputBindingAdapter (Core/) — связывает Button.onClick + InputAction.performed в одном объектеIController — абстракция над PCController (мышь+клавиатура) и JoistickControllerDoubleTapDetector — детектор двойного нажатия для бустаSFX/): UISounds/, AmbientSounds/, RadioSounds/, MusicSoudns/, SFXSounds/, Audio/ — обычные плееры/миксыEntitySystem/AI/AISpeech/)Core/DayCycle.cs — сетевой цикл дня/ночи (NetworkVariable), skybox; Core/FogCycle.cs — туманEntitySystem/Job/BoidsBehaviour — Jobs-система: InitSpatialGridJob (hash grid) + AccelerationJob (separation/alignment/cohesion) + MoveJobNativeParallelMultiHashMap<int2, int> — пространственная решётка для поиска соседейBoidsInfo : ScriptableObjectEntitySystem/Casino/) — слоты: CasinoSlots, CalculateWin, UICasinoSlotsEntitySystem/PlayerTasks/) — задания: ITask, TaskManager, TaskOfDeliveryEntitySystem/StaticNPC/) — LLM-чат NPC: IsaNPCchatBot, LLMGetterEntitySystem/InteractionSystem/, EntitySystem/Info/InteractionComponent/) — взаимодействия с объектамиModel/DetectorModel/) — детектор/детектируемые (DetectorBehaviour, DetectableBehaviour)Model/BuildingsBehaviours/) — строительствоTrollMovementTransition и глобальные монобехиParallaxEffect, PlayerDialogOutput, ChangeRandomSpritePriorityQueue, IndexedSet, Dence3DGrid, EnumerableSnapshot, CodeHelpers, ExtentionsMarketSimulator, PriceChart, PointDraw и пр. — экспериментальный/мёртвый код (кандидаты на вынос в отдельную asmdef или удаление)| Паттерн | Где |
|---|---|
| Service Locator | ServiceLocator (Core/ServiceLocator/) |
| Component | AEntity + IComponent (Model/BehavioursMap/) |
| State Machine | StatePatternComponent + AState + FSM игры (GameSceneManagerSystem/StateMachine/) |
| Command | ICommand (EntitySystem/Command/) + ICommand (Terminal/) — разные интерфейсы! |
| Repository | WorldStateRepository, WorldConfigRepository, etc. (Core/Storage/) |
| Observer / Reactive | R3 ReactiveProperty, Subject, Observable |
| Object Pool | PoolManager (Core/PoolManager.cs) |
| MVVM (частично) | AEntityViewModel + AEntityView; AI: EntityModel/EntityViewModel/EntityView |
EntitySystem.FixedUpdate и EntityManager.EntityTickLoopAsync оба крутят UpdateEntityCycle — нужен один драйвер.Reuse/Deactivate сразу возвращают объект в очередь — нет разделения free/busy.EntitySystem.CreateMob ищет ViewModel через GetComponentInChildren, MobNAL.RunLifecycle — через GetComponent на корне; при расхождении сущность не регистрируется.NetworkSpawner.IsAuthorizedClient не работает (на сервере LocalClientId=0 — проверка бессмысленна).AEntityViewModel.SetupSubscriptions не в DisposableBag; CommandScheduler.ResetCancellation не диспоузит старый CTS; вечные async-лупы; очистка сервисов в GameInitializer.OnDestroy закомментирована.lr умножается на знаковый reward в DelayedPerceptron.Train (отрицательная награда инвертирует градиент); EvolveSharedWeights использует AverageEntropy как fitness; new DelayedItem каждый тик (нужен кольцевой буфер).RavineNetworkManager.cs, RpcTest.cs, CraftModel.cs, PlayerUIService.cs, папка Test/.C#
96.3%
ShaderLab
3.2%
The new The Ravine repository, where game will be finished in full
C#
3
201 commits
updated Oct 3, 2026
Open-world sandbox game developed in Unity.
Все скрипты: Assets/Scripts/ (~364 файла). Сборки (asmdef): Core, BehavioursMap, EntitySystem, ObjectSystem, UIInventory.
GameInitializer (Terminal/GameInitializer.cs, DontDestroyOnLoad, Awake)Создаёт все глобальные сервисы до загрузки игровой сцены:
RavineLogger → ServiceLocator.ServicesActionMapController (Core/NewInputSystem/)GlobalSettingsController (настройки качества, трава, управление)WorldRegistry (список миров, текущий мир)AutosaveCoordinatorWorldSettingsController⚠️ Очистка сервисов в OnDestroy закомментирована — при перезаходе возможны «зомби»-сервисы (см. «Известные проблемы»).
GameSceneManagerSystem/Menu/WorldManagerUI — список миров, создание/удаление/переименованиеWorldSettingsUI — конфиг мира (сложность, autosave interval, timeScale)NetworkUIController — выбор host/server/client, IPSceneLaunchService (Core/) — переход на игровую сценуGameSceneManagerSystem/StateMachine/Bootstrap → GameStateMachine; состояния в States/: BootstrapState → InitialState → LoadingState → GameState.
Каждое состояние запускает очередь ISetAble сервисов через ServiceRegisterMachine. Там же: WorldStateMachine, PlayerStateMachine, AIStateMachine.
Порядок регистрации сервисов (грубо):
DayCycle, AmbientSystemObjectSystem, EntitySystem, MobControllerMapGenerator, MobGenerator, UIInventory, PauseUICore/ServiceLocator/)ServiceLocator.Services — Dictionary<Type, object> — игровые сервисы
ServiceLocator.Players — PlayerContainer — зарегистрированные игроки
ServiceContainer.Register молча игнорирует повторную регистрацию (нет replace) — важно при перезаходе на сцену.
AEntity — базовый класс сущности (Model/BehavioursMap/AEntity.cs)Dictionary<Type, IComponent> — компоненты
ReactiveProperty<bool> IsActive
ReactiveCommand<Unit> OnUpdate
IComponent, реализации в Model/BehavioursMap/)| Компонент | Назначение |
|---|---|
MainComponent | имя, prefabID, clientID |
TransformComponent | entity/model трансформы |
MovementComponent (BehavioursMap/Movement/) | BaseSpeed, Acceleration, Deceleration, velocity |
EnergyComponent (BehavioursMap/Energy/) | energy, maxEnergy (ReactiveProperty) |
CurrencyComponent (BehavioursMap/Currency/) | валюта (SafeInt + ReactiveProperty, только сервер пишет) |
AimComponent (BehavioursMap/Aim/) | CrosshairDistance, PickDistance |
EventBusComponent (Model/Actions&Events/) | EventBus для внутренних событий сущности |
StatePatternComponent (EntitySystem/) | FSM — текущее состояние (AState) + командный планировщик CommandScheduler |
SkillComponent (Model/EntitySkills/) | Dictionary<string, ISkill> |
CameraComponent (EntitySystem/Entityes/) | логика камеры (follow + aim offset) |
EntitySystem/Entityes/)PlayerEntity — игрок (Player/, init в PlayerModelView.OnNetworkSpawn())BotEntity — NPC с FSM-поведениями (Bot/)MobEntity — мобы, движение через RoamMoveController + MobController (Jobs) (Mob/)Mimic — сущность-имитатор с процедурными ногами (LegPlanner, LegPool, SurfaceMotor, IVelocitySource)EntitySystem/MobGenerator.csChunk-based спавн/деспавн сущностей по позиции игрока, синхронизирован с чанками MapGenerator; дифф-буферы _diffBuf/_pruneBuf без аллокаций. Глобальный реестр живых сущностей — список global в EntitySystem/EntitySystem.cs.
EntitySystem/Command/)CommandScheduler (async-очередь, живёт в стейтах), ICommand, MoveAlongPathCommand, SpawnObjectsCommand, PrintMessageCommand.
AEntityViewModel : NetworkBehaviour — подписывается на Entity.IsActive, Entity.OnUpdateAEntityView : MonoBehaviour — биндинги UI на ViewModelPlayerModelView — конкретная ViewModel игрока, спавнит камеру через ServerRpcPlayerModelView.OnNetworkSpawn — инициализация на каждом клиентеDayCycle (Core/DayCycle.cs) — NetworkVariable isDay, сервер управляет временемCurrencyNetworkComponent — NetworkVariable, только сервер пишет, RPC от клиентаPlayerController.MoveServerRpc — движение валидируется на сервереNetCode/NetworkSpawner.cs — ServerRpc-спавн по имени префаба (⚠️ авторизация не работает — см. «Известные проблемы»); NetCode/RavineNetworkManager.cs — мёртвый код (полностью закомментирован, старый UNet)GameSceneManagerSystem/NetworkConnectionManager.cs, NetworkTransportConfig.cs, NetworkUIController.csCore/Storage/, Core/Settings/)IAsyncPersistentStorage
└── EncryptedPlayerPrefsStorage (AES-CBC + MemoryPack, default)
└── JsonPlayerPrefsStorage (отладка)
IFileManager<TId, TEntity>
└── WorldStateRepository (ключ: "world_data_{id}")
└── WorldConfigRepository (ключ: "world_settings_{id}")
└── GlobalSettingsRepository (ключ: "global_game_settings")
└── ScriptFileManager (ключ: "script_file_{name}")
Core/Settings/WorldData/, WorldSettings/, GameSettings/)GlobalSettings — качество, трава, тип управления (MemoryPack)WorldState — seed, позиция игрока, cycleCount, инвентарь[], lastSaveTimeWorldConfiguration — имя мира, сложность, autosave interval, timeScaleWorldRegistry (Core/Settings/WorldRegistry.cs)Центральный менеджер миров: Create/Load/Unload/Delete/Rename/Save.
AvailableWorlds: ObservableList<string> — UI подписывается напрямую.
AutosaveCoordinatorЗапускает цикл автосохранения. Поддерживает SubscribeBeforeSave(Func<CT, UniTask>) — хуки до сохранения.
ObjectSystem/Map/WorldGeneration/)MapGenerator : MonoBehaviour, ISetAbleNoise (кешированные октавные офсеты)ChunkData = heightMap[40,40] + temperatureMap[40,40] + SortedSet objectsToInstChunkGenerator + ChunkJobs/ (Burst)GrassGenerator/, WaterSystem/ (вкл. RippleSystem/), ObjectGenerator/IEndless/)EndlessTerrain — обновляет единый Mesh (3x3 чанка), MeshColliderEndlessLiquids — двигает водный planeEndlessObjects — переиспользует объекты через ObjectSystem (pool)ObjectSystem (ObjectSystem/ObjectSystem.cs)Dictionary<Vector2Int, ObjectInstInfo> — глобальный реестр размещённых объектовPoolManager (Core/PoolManager.cs) — Dictionary<prefabID, Queue>ObjectInfoRegistry : ScriptableObject — база всех объектов; SO-данные предметов — ScriptableData/Item/ (Environment, NPC, квесты, описания)ObjectSystem/TreeGenerator/ — деревья; ObjectInfo/NAL/ — NAL-поведение объектовNAL_PC.csПсевдо-экосистема: объекты размножаются/умирают по вероятностям.
BehaviourType: None | NAL | GROW
При смерти/подборе — SpreadPattern (spawn новых объектов вокруг)
WorldGeneration/StructGenerator/WaveFunctionCollapseAlgorithm + StructureGenerator: процедурная генерация структур из тайловых правил (TileRuleSO, TilePatternSO).
EntitySystem/AI/) — ядро проектаВстроена в основной EntitySystem (не sandbox): сущности AI/Entity/ имеют собственный MVP (EntityModel / EntityViewModel / EntityView), компоненты (AI/Entity/Components/: BrainComponent, PerceptionComponent, MortalityComponent, StatsComponent, SpeechComponent, PointsOfInterestComponent, VisualCullingComponent) и состояния действий (AI/Entity/State/EntityActionState.cs — действия с ценой энергии/HP).
SharedHierarchicalBrain (AI/SharedAI/SharedHierarchicalBrain.cs)Двухуровневая иерархия, веса общие на всех сущностей (эволюция на уровне популяции), пер-сущностные контексты EntityBrainContext:
ActionSubsets)Пер-сущностное состояние: SharedAI/LSTMContext.cs, SharedAI/PerceptronContext.cs (пул состояний RentState/ReturnState, BPTT-истории).
AI/DelayedPerceptron/ — continuous-time RNN с τ-весами; Truncated BPTT (8 шагов), reward-weighted; ε-greedy с adaptive epsilon по entropyAI/SharedAI/ValueCritic.cs — линейный TD-критик (baseline для reward)AI/SharedAI/RandomNetworkDistillation.cs — intrinsic motivation (RND: target+predictor сети, novelty reward)AI/GeneticParameters.cs — LR, lambda, temperature и пр.; AI/MimicPhenotype.cs — фенотип мимикрииAI/LSTM/ — LSTMMemory; AI/InputVectorizer.cs — векторизация наблюдений; AI/FoodObject.cs, AI/EntityAction.csAI/EntityManager.csСпавн, смерть, размножение (обычное + crossover), эволюция весов (EvolveSharedWeights), сохранение моделей (NeuralModelStorage.cs, ModelInfo.cs).
AI/AISpeech/) — «речь» агентовГенетические аудио-профили: AgentAudioProfile, GeneticAudioProfile (+Cache), AgentAudioProfileBuilder, TimbreResolver, AudioParameterMapper; синтез: StringToAudioGenerator (hash строки → гармоники → Jobs → AudioClip) + AudioSynthesizer (Burst IJobParallelFor, 4 формы волны) + StableHashService (детерминированный хеш → ADSR огибающая).
Model/InventoryModel/, UI/Inventory/)InventoryModel — чистая модель (слоты, стаки, крафт)EventDrivenInventoryProxy — обёртка с событиями (Added/Removed/Changed)UIInventory : ISetAble — View, подписан на PlaceEvent/PickUpEvent из EventBus игрокаCraftService (UI/CraftService.cs) — проверяет рецепты, заполняет прогресс-бар; CraftPresenter — MVP-слой; CraftModel.cs — мёртвый кодUIDragger — drag-and-drop (PC мышь + mobile touch)LLMItemDescriptionService с debounce (0.4s), кеш в ItemDescriptionRegistryCore/Timer/)TimeInvoker : MonoBehaviour (DontDestroyOnLoad, singleton) — тикает из Update(): OnUpdateTimeTickedEvent, OnOneSyncedSecondTickedEvent (+ unscaled варианты)SyncedTimer — подписывается на TimeInvoker, поддерживает Pause/Unpause; также TimeChangingSource.cs, TimerType.csTerminal/)GameInitializer.cs — точка входа (см. выше); Terminal.cs — UI консоль с историей (50 строк, ZString); UI/Console/CommandManager — Dictionary команд по имени/псевдониму; BaseCommands, GeneratorCommands, SetPlayerCommandTerminal/Rive/) — собственный интерпретируемый язык:
int, массивы int[]if/else/end, for x = N to M, wait, log, get (stdin), send(interactor, val)~команда — вызов терминальных команд из скриптаRiveParser → AST → RiveExecutor (stack-based scopes, MAX 10000 ops)RiveRuntime — реестр программ, built-in функции (abs/min/max/clamp/pow/sqrt/rand)InteractorRegistry — игровые головоломки (DigitalLock, Collatz, Checksum, SequenceValidator)Terminal/PDollar/ — $P recognizer: GestureRecognizer — распознавание жестов → диспетчер командCore/NewInputSystem/)ActionMapController — переключение Action Maps: Gameplay / Pause / Inventory / UIInputBindingAdapter (Core/) — связывает Button.onClick + InputAction.performed в одном объектеIController — абстракция над PCController (мышь+клавиатура) и JoistickControllerDoubleTapDetector — детектор двойного нажатия для бустаSFX/): UISounds/, AmbientSounds/, RadioSounds/, MusicSoudns/, SFXSounds/, Audio/ — обычные плееры/миксыEntitySystem/AI/AISpeech/)Core/DayCycle.cs — сетевой цикл дня/ночи (NetworkVariable), skybox; Core/FogCycle.cs — туманEntitySystem/Job/BoidsBehaviour — Jobs-система: InitSpatialGridJob (hash grid) + AccelerationJob (separation/alignment/cohesion) + MoveJobNativeParallelMultiHashMap<int2, int> — пространственная решётка для поиска соседейBoidsInfo : ScriptableObjectEntitySystem/Casino/) — слоты: CasinoSlots, CalculateWin, UICasinoSlotsEntitySystem/PlayerTasks/) — задания: ITask, TaskManager, TaskOfDeliveryEntitySystem/StaticNPC/) — LLM-чат NPC: IsaNPCchatBot, LLMGetterEntitySystem/InteractionSystem/, EntitySystem/Info/InteractionComponent/) — взаимодействия с объектамиModel/DetectorModel/) — детектор/детектируемые (DetectorBehaviour, DetectableBehaviour)Model/BuildingsBehaviours/) — строительствоTrollMovementTransition и глобальные монобехиParallaxEffect, PlayerDialogOutput, ChangeRandomSpritePriorityQueue, IndexedSet, Dence3DGrid, EnumerableSnapshot, CodeHelpers, ExtentionsMarketSimulator, PriceChart, PointDraw и пр. — экспериментальный/мёртвый код (кандидаты на вынос в отдельную asmdef или удаление)| Паттерн | Где |
|---|---|
| Service Locator | ServiceLocator (Core/ServiceLocator/) |
| Component | AEntity + IComponent (Model/BehavioursMap/) |
| State Machine | StatePatternComponent + AState + FSM игры (GameSceneManagerSystem/StateMachine/) |
| Command | ICommand (EntitySystem/Command/) + ICommand (Terminal/) — разные интерфейсы! |
| Repository | WorldStateRepository, WorldConfigRepository, etc. (Core/Storage/) |
| Observer / Reactive | R3 ReactiveProperty, Subject, Observable |
| Object Pool | PoolManager (Core/PoolManager.cs) |
| MVVM (частично) | AEntityViewModel + AEntityView; AI: EntityModel/EntityViewModel/EntityView |
EntitySystem.FixedUpdate и EntityManager.EntityTickLoopAsync оба крутят UpdateEntityCycle — нужен один драйвер.Reuse/Deactivate сразу возвращают объект в очередь — нет разделения free/busy.EntitySystem.CreateMob ищет ViewModel через GetComponentInChildren, MobNAL.RunLifecycle — через GetComponent на корне; при расхождении сущность не регистрируется.NetworkSpawner.IsAuthorizedClient не работает (на сервере LocalClientId=0 — проверка бессмысленна).AEntityViewModel.SetupSubscriptions не в DisposableBag; CommandScheduler.ResetCancellation не диспоузит старый CTS; вечные async-лупы; очистка сервисов в GameInitializer.OnDestroy закомментирована.lr умножается на знаковый reward в DelayedPerceptron.Train (отрицательная награда инвертирует градиент); EvolveSharedWeights использует AverageEntropy как fitness; new DelayedItem каждый тик (нужен кольцевой буфер).RavineNetworkManager.cs, RpcTest.cs, CraftModel.cs, PlayerUIService.cs, папка Test/.C#
96.3%
ShaderLab
3.2%