From 0e7de0a5f30cc4605ad6e7ca4312fc41350807ac Mon Sep 17 00:00:00 2001 From: Boki Date: Fri, 6 Mar 2026 14:37:05 -0500 Subject: [PATCH] refactor --- Automata.sln => Nexus.sln | 149 +++--- imgui.ini | 15 + src/Automata.Bot/Automata.Bot.csproj | 17 - .../Automata.Inventory.csproj | 13 - .../AtlasExecutor.cs | 12 +- .../BotOrchestrator.cs | 16 +- .../CombatManager.cs | 8 +- .../CraftingExecutor.cs | 8 +- .../DiamondExecutor.cs | 12 +- .../FlaskManager.cs | 6 +- .../GameExecutor.cs | 10 +- .../KulemakExecutor.cs | 14 +- .../MappingExecutor.cs | 14 +- src/Nexus.Bot/Nexus.Bot.csproj | 17 + .../ScrapExecutor.cs | 12 +- .../TradeExecutor.cs | 12 +- src/{Automata.Bot => Nexus.Bot}/TradeQueue.cs | 4 +- .../ActionQueue.cs | 2 +- src/{Roboto.Core => Nexus.Core}/Actions.cs | 2 +- src/{Roboto.Core => Nexus.Core}/BotConfig.cs | 2 +- src/{Roboto.Core => Nexus.Core}/Buff.cs | 2 +- .../CharacterProfile.cs | 2 +- .../CombatSettings.cs | 2 +- .../ConfigStore.cs | 2 +- src/{Automata.Core => Nexus.Core}/Delays.cs | 2 +- .../EntitySnapshot.cs | 2 +- src/{Roboto.Core => Nexus.Core}/Enums.cs | 2 +- .../FlaskSettings.cs | 2 +- src/{Roboto.Core => Nexus.Core}/FlaskState.cs | 2 +- src/{Roboto.Core => Nexus.Core}/GameState.cs | 2 +- .../GroundEffect.cs | 2 +- src/{Automata.Core => Nexus.Core}/Helpers.cs | 2 +- .../IInputController.cs | 2 +- src/{Roboto.Core => Nexus.Core}/ISystem.cs | 2 +- .../LinkManager.cs | 2 +- src/{Automata.Core => Nexus.Core}/Logging.cs | 2 +- .../ModPoolService.cs | 2 +- .../Nexus.Core.csproj} | 2 +- .../PlayerState.cs | 2 +- .../Poe2ScoutClient.cs | 2 +- .../ProfileManager.cs | 2 +- src/{Roboto.Core => Nexus.Core}/QuestInfo.cs | 2 +- .../QuestProgress.cs | 2 +- .../RePoETypes.cs | 2 +- .../SkillProfile.cs | 2 +- src/{Roboto.Core => Nexus.Core}/SkillState.cs | 2 +- .../StashCalibration.cs | 2 +- .../TargetSelection.cs | 2 +- .../TerrainQuery.cs | 2 +- src/{Roboto.Core => Nexus.Core}/ThreatMap.cs | 2 +- src/{Automata.Core => Nexus.Core}/Types.cs | 2 +- .../UiQuestInfo.cs | 2 +- .../WalkabilitySnapshot.cs | 2 +- .../WorldToScreen.cs | 2 +- src/{Roboto.Data => Nexus.Data}/AreaGraph.cs | 2 +- .../AreaNameLookup.cs | 2 +- .../EntityClassifier.cs | 4 +- .../EntityMapper.cs | 6 +- .../GameDataCache.cs | 6 +- .../GameStateEnricher.cs | 4 +- .../MemoryPoller.cs | 10 +- .../Nexus.Data.csproj} | 4 +- .../ClipboardHelper.cs | 2 +- .../GameController.cs | 4 +- .../IGameController.cs | 2 +- .../InputSender.cs | 4 +- .../Nexus.Game.csproj} | 2 +- .../WindowManager.cs | 2 +- .../Components/Actor.cs | 2 +- .../Components/ActorDeployedEntity.cs | 2 +- .../Components/ActorSkill.cs | 2 +- .../Components/ActorSkillCooldown.cs | 4 +- .../Components/ActorVaalSkill.cs | 2 +- .../Components/Animated.cs | 2 +- .../Components/Buffs.cs | 4 +- .../Components/Charges.cs | 2 +- .../Components/Chest.cs | 2 +- .../Components/ComponentHeader.cs | 2 +- .../Components/Life.cs | 2 +- .../Components/Mods.cs | 4 +- .../Components/Player.cs | 4 +- .../Components/Positioned.cs | 2 +- .../Components/Render.cs | 4 +- .../Components/Shrine.cs | 2 +- .../Components/StateMachine.cs | 4 +- .../Components/Stats.cs | 4 +- .../Components/Targetable.cs | 2 +- .../Components/Transitionable.cs | 2 +- .../Components/TriggerableBlockage.cs | 2 +- .../Components/WorldItem.cs | 2 +- .../Entities/Entity.cs | 4 +- .../Entities/EntityTreeNode.cs | 2 +- .../Natives/StdBucket.cs | 2 +- .../Natives/StdList.cs | 2 +- .../Natives/StdMap.cs | 2 +- .../Natives/StdTuple.cs | 2 +- .../Natives/StdVector.cs | 2 +- .../Natives/StdWString.cs | 2 +- .../Natives/Util.cs | 2 +- .../Nexus.GameOffsets.csproj} | 0 .../States/AreaInstance.cs | 4 +- .../States/AreaLoading.cs | 2 +- .../States/ImportantUiElements.cs | 2 +- .../States/InGameState.cs | 2 +- .../States/Inventory.cs | 4 +- .../States/ServerData.cs | 4 +- .../States/WorldData.cs | 2 +- .../Humanizer.cs | 4 +- .../InterceptionInputController.cs | 4 +- .../Nexus.Input.csproj} | 2 +- .../ScanCodes.cs | 2 +- .../SendInputController.cs | 4 +- .../interception.dll | Bin .../IInventoryManager.cs | 6 +- .../InventoryManager.cs | 10 +- .../InventoryTracker.cs | 6 +- src/Nexus.Inventory/Nexus.Inventory.csproj | 13 + .../StashCalibrator.cs | 8 +- .../ItemReader.cs | 6 +- .../Nexus.Items.csproj} | 4 +- .../SidekickBootstrapper.cs | 2 +- .../SidekickSettingsStub.cs | 2 +- .../Diagnostics/MemoryDiagnostics.cs | 6 +- .../Diagnostics/QuestNameLookup.cs | 2 +- .../Files/DatFile.cs | 2 +- .../Files/FileRootScanner.cs | 2 +- .../Files/FilesContainer.cs | 2 +- .../Files/IDatRowParser.cs | 2 +- .../Files/MapPinRow.cs | 2 +- .../Files/QuestRow.cs | 2 +- .../Files/QuestStateRow.cs | 2 +- .../Files/WorldAreaRow.cs | 2 +- .../GameMemoryReader.cs | 4 +- .../GameOffsets.cs | 2 +- .../GameStateReader.cs | 2 +- .../Infrastructure/ComponentReader.cs | 6 +- .../Infrastructure/MemoryContext.cs | 2 +- .../Infrastructure/MemoryProfiler.cs | 2 +- .../Infrastructure/MsvcStringReader.cs | 2 +- .../Infrastructure/Native.cs | 2 +- .../Infrastructure/ObjectRegistry.cs | 2 +- .../Infrastructure/PatternScanner.cs | 2 +- .../Infrastructure/ProcessMemory.cs | 2 +- .../Infrastructure/RttiResolver.cs | 2 +- .../Nexus.Memory.csproj} | 2 +- .../Objects/AreaInstance.cs | 4 +- .../Objects/AreaLoading.cs | 4 +- .../Objects/AreaTemplate.cs | 2 +- .../Objects/EntityList.cs | 8 +- .../Objects/GameStateType.cs | 2 +- .../Objects/GameStates.cs | 4 +- .../Objects/InGameState.cs | 6 +- .../Objects/PlayerSkills.cs | 6 +- .../Objects/QuestFlags.cs | 4 +- .../Objects/Terrain.cs | 6 +- .../Objects/UIElements.cs | 2 +- .../Objects/WorldData.cs | 6 +- .../QuestStateLookup.cs | 2 +- .../RemoteObject.cs | 2 +- .../Snapshots/ConnectedAreaInfo.cs | 2 +- .../Snapshots/Entity.cs | 2 +- .../Snapshots/GameStateSnapshot.cs | 4 +- .../Snapshots/QuestLinkedEntry.cs | 2 +- .../Snapshots/QuestSnapshot.cs | 4 +- .../Snapshots/QuestStateEntry.cs | 2 +- .../Snapshots/SkillSnapshot.cs | 4 +- .../Snapshots/UIElementNode.cs | 2 +- .../Snapshots/UiQuestEntry.cs | 2 +- .../Snapshots/WalkabilityGrid.cs | 2 +- .../AtlasPanorama.cs | 6 +- .../IconDetector.cs | 2 +- .../MinimapCapture.cs | 6 +- .../NavigationExecutor.cs | 8 +- .../NavigationTypes.cs | 4 +- .../Nexus.Navigation.csproj} | 6 +- .../PathFinder.cs | 2 +- .../PerspectiveCalibrator.cs | 6 +- .../StuckDetector.cs | 2 +- .../WallColorTracker.cs | 2 +- .../WorldMap.cs | 2 +- .../NavigationController.cs | 4 +- .../Nexus.Pathfinding.csproj} | 2 +- .../PathFinder.cs | 4 +- .../BossDetector.cs | 4 +- .../DaemonTypes.cs | 4 +- .../DesktopDuplication.cs | 4 +- .../DetectGridHandler.cs | 4 +- .../DetectionTypes.cs | 2 +- .../DiffCropHandler.cs | 4 +- .../EdgeCropHandler.cs | 4 +- .../EnemyDetector.cs | 6 +- .../FramePipeline.cs | 2 +- .../FramePipelineService.cs | 2 +- .../FrameSaver.cs | 4 +- .../GameStateDetector.cs | 4 +- .../GdiCapture.cs | 4 +- .../GridHandler.cs | 4 +- .../GridReader.cs | 4 +- .../HudReader.cs | 6 +- .../IFrameConsumer.cs | 2 +- .../IOcrEngine.cs | 2 +- .../IScreenCapture.cs | 4 +- .../IScreenReader.cs | 4 +- .../ImagePreprocessor.cs | 2 +- .../ImageUtils.cs | 2 +- .../LootDebugDetector.cs | 2 +- .../LootLabel.cs | 2 +- .../Nexus.Screen.csproj} | 2 +- .../Ocr/EasyOcrEngine.cs | 2 +- .../Ocr/OcrEngineFactory.cs | 2 +- .../Ocr/OneOcrEngine.cs | 2 +- .../Ocr/WinOcrEngine.cs | 2 +- .../OnnxYoloDetector.cs | 2 +- .../PythonDetectBridge.cs | 2 +- .../PythonOcrBridge.cs | 2 +- .../ScreenCapture.cs | 4 +- .../ScreenFrame.cs | 4 +- .../ScreenReader.cs | 6 +- .../SignalProcessing.cs | 2 +- .../TemplateMatchHandler.cs | 4 +- .../Bridge/SimInputController.cs | 149 ++++++ src/Nexus.Simulator/Bridge/SimPoller.cs | 112 ++++ src/Nexus.Simulator/Bridge/SimStateBuilder.cs | 115 +++++ src/Nexus.Simulator/Config/SimConfig.cs | 47 ++ src/Nexus.Simulator/Nexus.Simulator.csproj | 23 + src/Nexus.Simulator/Program.cs | 264 ++++++++++ src/Nexus.Simulator/Rendering/DebugPanel.cs | 131 +++++ .../Rendering/EffectRenderer.cs | 92 ++++ .../Rendering/EntityRenderer.cs | 86 ++++ src/Nexus.Simulator/Rendering/PathRenderer.cs | 37 ++ src/Nexus.Simulator/Rendering/SimRenderer.cs | 134 +++++ .../Rendering/TerrainRenderer.cs | 99 ++++ .../Rendering/VeldridImGuiRenderer.cs | 482 ++++++++++++++++++ src/Nexus.Simulator/World/SimEnemy.cs | 76 +++ src/Nexus.Simulator/World/SimPlayer.cs | 58 +++ src/Nexus.Simulator/World/SimProjectile.cs | 34 ++ src/Nexus.Simulator/World/SimSkillEffect.cs | 26 + src/Nexus.Simulator/World/SimWorld.cs | 432 ++++++++++++++++ src/Nexus.Simulator/World/TerrainGenerator.cs | 175 +++++++ .../CombatSystem.cs | 4 +- .../LootSystem.cs | 4 +- .../MovementSystem.cs | 4 +- .../NavigationSystem.cs | 6 +- .../Nexus.Systems.csproj} | 2 +- .../ResourceSystem.cs | 4 +- .../ThreatSystem.cs | 4 +- .../ITradeMonitor.cs | 4 +- .../Nexus.Trade.csproj} | 2 +- .../Selectors.cs | 2 +- .../TradeDaemonBridge.cs | 4 +- src/{Automata.Ui => Nexus.Ui}/App.axaml | 4 +- src/{Automata.Ui => Nexus.Ui}/App.axaml.cs | 32 +- .../Converters/ValueConverters.cs | 6 +- .../Nexus.Ui.csproj} | 20 +- .../Overlay/D2dNativeMethods.cs | 2 +- .../Overlay/D2dOverlay.cs | 10 +- .../Overlay/D2dRenderContext.cs | 2 +- .../Overlay/IOverlayLayer.cs | 6 +- .../Overlay/Layers/D2dDebugTextLayer.cs | 2 +- .../Overlay/Layers/D2dEnemyBoxLayer.cs | 2 +- .../Overlay/Layers/D2dEntityLabelLayer.cs | 10 +- .../Overlay/Layers/D2dHudInfoLayer.cs | 2 +- .../Overlay/Layers/D2dLootLabelLayer.cs | 2 +- src/{Automata.Ui => Nexus.Ui}/Program.cs | 4 +- .../ViewModels/AtlasViewModel.cs | 6 +- .../ViewModels/CraftingViewModel.cs | 8 +- .../ViewModels/DebugViewModel.cs | 10 +- .../ViewModels/MainWindowViewModel.cs | 10 +- .../ViewModels/MappingViewModel.cs | 8 +- .../ViewModels/MemoryViewModel.cs | 10 +- .../ViewModels/ModPoolViewModel.cs | 4 +- .../ViewModels/NexusViewModel.cs} | 20 +- .../ViewModels/ObjectBrowserViewModel.cs | 6 +- .../ViewModels/ParsedModViewModel.cs | 2 +- .../ViewModels/SettingsViewModel.cs | 8 +- .../ViewModels/SkillProfileViewModel.cs | 4 +- .../ViewModels/StashTabViewModel.cs | 4 +- .../Views/MainWindow.axaml | 16 +- .../Views/MainWindow.axaml.cs | 6 +- src/{Automata.Ui => Nexus.Ui}/app.manifest | 2 +- src/Roboto.Core/Roboto.Core.csproj | 7 - 281 files changed, 3188 insertions(+), 611 deletions(-) rename Automata.sln => Nexus.sln (75%) create mode 100644 imgui.ini delete mode 100644 src/Automata.Bot/Automata.Bot.csproj delete mode 100644 src/Automata.Inventory/Automata.Inventory.csproj rename src/{Automata.Bot => Nexus.Bot}/AtlasExecutor.cs (98%) rename src/{Automata.Bot => Nexus.Bot}/BotOrchestrator.cs (99%) rename src/{Automata.Bot => Nexus.Bot}/CombatManager.cs (98%) rename src/{Automata.Bot => Nexus.Bot}/CraftingExecutor.cs (98%) rename src/{Automata.Bot => Nexus.Bot}/DiamondExecutor.cs (98%) rename src/{Automata.Bot => Nexus.Bot}/FlaskManager.cs (96%) rename src/{Automata.Bot => Nexus.Bot}/GameExecutor.cs (98%) rename src/{Automata.Bot => Nexus.Bot}/KulemakExecutor.cs (99%) rename src/{Automata.Bot => Nexus.Bot}/MappingExecutor.cs (99%) create mode 100644 src/Nexus.Bot/Nexus.Bot.csproj rename src/{Automata.Bot => Nexus.Bot}/ScrapExecutor.cs (97%) rename src/{Automata.Bot => Nexus.Bot}/TradeExecutor.cs (97%) rename src/{Automata.Bot => Nexus.Bot}/TradeQueue.cs (97%) rename src/{Roboto.Core => Nexus.Core}/ActionQueue.cs (99%) rename src/{Roboto.Core => Nexus.Core}/Actions.cs (97%) rename src/{Roboto.Core => Nexus.Core}/BotConfig.cs (97%) rename src/{Roboto.Core => Nexus.Core}/Buff.cs (89%) rename src/{Roboto.Core => Nexus.Core}/CharacterProfile.cs (98%) rename src/{Roboto.Core => Nexus.Core}/CombatSettings.cs (93%) rename src/{Automata.Core => Nexus.Core}/ConfigStore.cs (99%) rename src/{Automata.Core => Nexus.Core}/Delays.cs (92%) rename src/{Roboto.Core => Nexus.Core}/EntitySnapshot.cs (98%) rename src/{Roboto.Core => Nexus.Core}/Enums.cs (93%) rename src/{Roboto.Core => Nexus.Core}/FlaskSettings.cs (93%) rename src/{Roboto.Core => Nexus.Core}/FlaskState.cs (91%) rename src/{Roboto.Core => Nexus.Core}/GameState.cs (98%) rename src/{Roboto.Core => Nexus.Core}/GroundEffect.cs (92%) rename src/{Automata.Core => Nexus.Core}/Helpers.cs (95%) rename src/{Roboto.Core => Nexus.Core}/IInputController.cs (95%) rename src/{Roboto.Core => Nexus.Core}/ISystem.cs (88%) rename src/{Automata.Core => Nexus.Core}/LinkManager.cs (99%) rename src/{Automata.Core => Nexus.Core}/Logging.cs (95%) rename src/{Automata.Core => Nexus.Core}/ModPoolService.cs (99%) rename src/{Automata.Core/Automata.Core.csproj => Nexus.Core/Nexus.Core.csproj} (86%) rename src/{Roboto.Core => Nexus.Core}/PlayerState.cs (98%) rename src/{Automata.Core => Nexus.Core}/Poe2ScoutClient.cs (98%) rename src/{Roboto.Core => Nexus.Core}/ProfileManager.cs (99%) rename src/{Roboto.Core => Nexus.Core}/QuestInfo.cs (96%) rename src/{Roboto.Core => Nexus.Core}/QuestProgress.cs (96%) rename src/{Automata.Core => Nexus.Core}/RePoETypes.cs (98%) rename src/{Roboto.Core => Nexus.Core}/SkillProfile.cs (99%) rename src/{Roboto.Core => Nexus.Core}/SkillState.cs (97%) rename src/{Automata.Core => Nexus.Core}/StashCalibration.cs (95%) rename src/{Roboto.Core => Nexus.Core}/TargetSelection.cs (82%) rename src/{Roboto.Core => Nexus.Core}/TerrainQuery.cs (99%) rename src/{Roboto.Core => Nexus.Core}/ThreatMap.cs (95%) rename src/{Automata.Core => Nexus.Core}/Types.cs (99%) rename src/{Roboto.Core => Nexus.Core}/UiQuestInfo.cs (93%) rename src/{Roboto.Core => Nexus.Core}/WalkabilitySnapshot.cs (93%) rename src/{Roboto.Core => Nexus.Core}/WorldToScreen.cs (97%) rename src/{Roboto.Data => Nexus.Data}/AreaGraph.cs (99%) rename src/{Roboto.Data => Nexus.Data}/AreaNameLookup.cs (98%) rename src/{Roboto.Data => Nexus.Data}/EntityClassifier.cs (98%) rename src/{Roboto.Data => Nexus.Data}/EntityMapper.cs (96%) rename src/{Roboto.Data => Nexus.Data}/GameDataCache.cs (98%) rename src/{Roboto.Data => Nexus.Data}/GameStateEnricher.cs (98%) rename src/{Roboto.Data => Nexus.Data}/MemoryPoller.cs (99%) rename src/{Roboto.Data/Roboto.Data.csproj => Nexus.Data/Nexus.Data.csproj} (70%) rename src/{Automata.Game => Nexus.Game}/ClipboardHelper.cs (99%) rename src/{Automata.Game => Nexus.Game}/GameController.cs (98%) rename src/{Automata.Game => Nexus.Game}/IGameController.cs (97%) rename src/{Automata.Game => Nexus.Game}/InputSender.cs (99%) rename src/{Automata.Game/Automata.Game.csproj => Nexus.Game/Nexus.Game.csproj} (80%) rename src/{Automata.Game => Nexus.Game}/WindowManager.cs (99%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Actor.cs (90%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/ActorDeployedEntity.cs (89%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/ActorSkill.cs (96%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/ActorSkillCooldown.cs (92%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/ActorVaalSkill.cs (91%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Animated.cs (90%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Buffs.cs (90%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Charges.cs (93%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Chest.cs (94%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/ComponentHeader.cs (87%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Life.cs (95%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Mods.cs (91%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Player.cs (87%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Positioned.cs (90%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Render.cs (93%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Shrine.cs (88%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/StateMachine.cs (86%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Stats.cs (91%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Targetable.cs (94%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/Transitionable.cs (89%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/TriggerableBlockage.cs (90%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Components/WorldItem.cs (91%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Entities/Entity.cs (96%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Entities/EntityTreeNode.cs (97%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Natives/StdBucket.cs (87%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Natives/StdList.cs (94%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Natives/StdMap.cs (96%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Natives/StdTuple.cs (92%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Natives/StdVector.cs (90%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Natives/StdWString.cs (95%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/Natives/Util.cs (86%) rename src/{Roboto.GameOffsets/Roboto.GameOffsets.csproj => Nexus.GameOffsets/Nexus.GameOffsets.csproj} (100%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/States/AreaInstance.cs (97%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/States/AreaLoading.cs (94%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/States/ImportantUiElements.cs (95%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/States/InGameState.cs (96%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/States/Inventory.cs (95%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/States/ServerData.cs (91%) rename src/{Roboto.GameOffsets => Nexus.GameOffsets}/States/WorldData.cs (97%) rename src/{Roboto.Input => Nexus.Input}/Humanizer.cs (98%) rename src/{Roboto.Input => Nexus.Input}/InterceptionInputController.cs (99%) rename src/{Roboto.Input/Roboto.Input.csproj => Nexus.Input/Nexus.Input.csproj} (89%) rename src/{Roboto.Input => Nexus.Input}/ScanCodes.cs (98%) rename src/{Roboto.Input => Nexus.Input}/SendInputController.cs (99%) rename src/{Roboto.Input => Nexus.Input}/interception.dll (100%) rename src/{Automata.Inventory => Nexus.Inventory}/IInventoryManager.cs (94%) rename src/{Automata.Inventory => Nexus.Inventory}/InventoryManager.cs (99%) rename src/{Automata.Inventory => Nexus.Inventory}/InventoryTracker.cs (98%) create mode 100644 src/Nexus.Inventory/Nexus.Inventory.csproj rename src/{Automata.Inventory => Nexus.Inventory}/StashCalibrator.cs (98%) rename src/{Automata.Items => Nexus.Items}/ItemReader.cs (96%) rename src/{Automata.Items/Automata.Items.csproj => Nexus.Items/Nexus.Items.csproj} (76%) rename src/{Automata.Items => Nexus.Items}/SidekickBootstrapper.cs (98%) rename src/{Automata.Items => Nexus.Items}/SidekickSettingsStub.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Diagnostics/MemoryDiagnostics.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Diagnostics/QuestNameLookup.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Files/DatFile.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Files/FileRootScanner.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Files/FilesContainer.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Files/IDatRowParser.cs (97%) rename src/{Roboto.Memory => Nexus.Memory}/Files/MapPinRow.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Files/QuestRow.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Files/QuestStateRow.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Files/WorldAreaRow.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/GameMemoryReader.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/GameOffsets.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/GameStateReader.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Infrastructure/ComponentReader.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Infrastructure/MemoryContext.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Infrastructure/MemoryProfiler.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Infrastructure/MsvcStringReader.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Infrastructure/Native.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Infrastructure/ObjectRegistry.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Infrastructure/PatternScanner.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Infrastructure/ProcessMemory.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Infrastructure/RttiResolver.cs (98%) rename src/{Roboto.Memory/Roboto.Memory.csproj => Nexus.Memory/Nexus.Memory.csproj} (84%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/AreaInstance.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/AreaLoading.cs (94%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/AreaTemplate.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/EntityList.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/GameStateType.cs (95%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/GameStates.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/InGameState.cs (95%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/PlayerSkills.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/QuestFlags.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/Terrain.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/UIElements.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Objects/WorldData.cs (94%) rename src/{Roboto.Memory => Nexus.Memory}/QuestStateLookup.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/RemoteObject.cs (97%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/ConnectedAreaInfo.cs (94%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/Entity.cs (99%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/GameStateSnapshot.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/QuestLinkedEntry.cs (98%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/QuestSnapshot.cs (88%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/QuestStateEntry.cs (93%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/SkillSnapshot.cs (92%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/UIElementNode.cs (95%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/UiQuestEntry.cs (96%) rename src/{Roboto.Memory => Nexus.Memory}/Snapshots/WalkabilityGrid.cs (94%) rename src/{Automata.Navigation => Nexus.Navigation}/AtlasPanorama.cs (99%) rename src/{Automata.Navigation => Nexus.Navigation}/IconDetector.cs (99%) rename src/{Automata.Navigation => Nexus.Navigation}/MinimapCapture.cs (99%) rename src/{Automata.Navigation => Nexus.Navigation}/NavigationExecutor.cs (99%) rename src/{Automata.Navigation => Nexus.Navigation}/NavigationTypes.cs (99%) rename src/{Automata.Navigation/Automata.Navigation.csproj => Nexus.Navigation/Nexus.Navigation.csproj} (73%) rename src/{Automata.Navigation => Nexus.Navigation}/PathFinder.cs (99%) rename src/{Automata.Navigation => Nexus.Navigation}/PerspectiveCalibrator.cs (99%) rename src/{Automata.Navigation => Nexus.Navigation}/StuckDetector.cs (96%) rename src/{Automata.Navigation => Nexus.Navigation}/WallColorTracker.cs (99%) rename src/{Automata.Navigation => Nexus.Navigation}/WorldMap.cs (99%) rename src/{Roboto.Navigation => Nexus.Pathfinding}/NavigationController.cs (99%) rename src/{Roboto.Navigation/Roboto.Navigation.csproj => Nexus.Pathfinding/Nexus.Pathfinding.csproj} (83%) rename src/{Roboto.Navigation => Nexus.Pathfinding}/PathFinder.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/BossDetector.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/DaemonTypes.cs (97%) rename src/{Automata.Screen => Nexus.Screen}/DesktopDuplication.cs (98%) rename src/{Automata.Screen => Nexus.Screen}/DetectGridHandler.cs (98%) rename src/{Automata.Screen => Nexus.Screen}/DetectionTypes.cs (95%) rename src/{Automata.Screen => Nexus.Screen}/DiffCropHandler.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/EdgeCropHandler.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/EnemyDetector.cs (98%) rename src/{Automata.Screen => Nexus.Screen}/FramePipeline.cs (97%) rename src/{Automata.Screen => Nexus.Screen}/FramePipelineService.cs (96%) rename src/{Automata.Screen => Nexus.Screen}/FrameSaver.cs (98%) rename src/{Automata.Screen => Nexus.Screen}/GameStateDetector.cs (95%) rename src/{Automata.Screen => Nexus.Screen}/GdiCapture.cs (95%) rename src/{Automata.Screen => Nexus.Screen}/GridHandler.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/GridReader.cs (98%) rename src/{Automata.Screen => Nexus.Screen}/HudReader.cs (98%) rename src/{Automata.Screen => Nexus.Screen}/IFrameConsumer.cs (73%) rename src/{Automata.Screen => Nexus.Screen}/IOcrEngine.cs (83%) rename src/{Automata.Screen => Nexus.Screen}/IScreenCapture.cs (69%) rename src/{Automata.Screen => Nexus.Screen}/IScreenReader.cs (96%) rename src/{Automata.Screen => Nexus.Screen}/ImagePreprocessor.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/ImageUtils.cs (97%) rename src/{Automata.Screen => Nexus.Screen}/LootDebugDetector.cs (98%) rename src/{Automata.Screen => Nexus.Screen}/LootLabel.cs (99%) rename src/{Automata.Screen/Automata.Screen.csproj => Nexus.Screen/Nexus.Screen.csproj} (91%) rename src/{Automata.Screen => Nexus.Screen}/Ocr/EasyOcrEngine.cs (96%) rename src/{Automata.Screen => Nexus.Screen}/Ocr/OcrEngineFactory.cs (93%) rename src/{Automata.Screen => Nexus.Screen}/Ocr/OneOcrEngine.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/Ocr/WinOcrEngine.cs (98%) rename src/{Automata.Screen => Nexus.Screen}/OnnxYoloDetector.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/PythonDetectBridge.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/PythonOcrBridge.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/ScreenCapture.cs (96%) rename src/{Automata.Screen => Nexus.Screen}/ScreenFrame.cs (93%) rename src/{Automata.Screen => Nexus.Screen}/ScreenReader.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/SignalProcessing.cs (99%) rename src/{Automata.Screen => Nexus.Screen}/TemplateMatchHandler.cs (98%) create mode 100644 src/Nexus.Simulator/Bridge/SimInputController.cs create mode 100644 src/Nexus.Simulator/Bridge/SimPoller.cs create mode 100644 src/Nexus.Simulator/Bridge/SimStateBuilder.cs create mode 100644 src/Nexus.Simulator/Config/SimConfig.cs create mode 100644 src/Nexus.Simulator/Nexus.Simulator.csproj create mode 100644 src/Nexus.Simulator/Program.cs create mode 100644 src/Nexus.Simulator/Rendering/DebugPanel.cs create mode 100644 src/Nexus.Simulator/Rendering/EffectRenderer.cs create mode 100644 src/Nexus.Simulator/Rendering/EntityRenderer.cs create mode 100644 src/Nexus.Simulator/Rendering/PathRenderer.cs create mode 100644 src/Nexus.Simulator/Rendering/SimRenderer.cs create mode 100644 src/Nexus.Simulator/Rendering/TerrainRenderer.cs create mode 100644 src/Nexus.Simulator/Rendering/VeldridImGuiRenderer.cs create mode 100644 src/Nexus.Simulator/World/SimEnemy.cs create mode 100644 src/Nexus.Simulator/World/SimPlayer.cs create mode 100644 src/Nexus.Simulator/World/SimProjectile.cs create mode 100644 src/Nexus.Simulator/World/SimSkillEffect.cs create mode 100644 src/Nexus.Simulator/World/SimWorld.cs create mode 100644 src/Nexus.Simulator/World/TerrainGenerator.cs rename src/{Roboto.Systems => Nexus.Systems}/CombatSystem.cs (99%) rename src/{Roboto.Systems => Nexus.Systems}/LootSystem.cs (86%) rename src/{Roboto.Systems => Nexus.Systems}/MovementSystem.cs (97%) rename src/{Roboto.Systems => Nexus.Systems}/NavigationSystem.cs (85%) rename src/{Roboto.Systems/Roboto.Systems.csproj => Nexus.Systems/Nexus.Systems.csproj} (83%) rename src/{Roboto.Systems => Nexus.Systems}/ResourceSystem.cs (97%) rename src/{Roboto.Systems => Nexus.Systems}/ThreatSystem.cs (98%) rename src/{Automata.Trade => Nexus.Trade}/ITradeMonitor.cs (93%) rename src/{Automata.Trade/Automata.Trade.csproj => Nexus.Trade/Nexus.Trade.csproj} (77%) rename src/{Automata.Trade => Nexus.Trade}/Selectors.cs (97%) rename src/{Automata.Trade => Nexus.Trade}/TradeDaemonBridge.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/App.axaml (92%) rename src/{Automata.Ui => Nexus.Ui}/App.axaml.cs (89%) rename src/{Automata.Ui => Nexus.Ui}/Converters/ValueConverters.cs (98%) rename src/{Automata.Ui/Automata.Ui.csproj => Nexus.Ui/Nexus.Ui.csproj} (76%) rename src/{Automata.Ui => Nexus.Ui}/Overlay/D2dNativeMethods.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/Overlay/D2dOverlay.cs (98%) rename src/{Automata.Ui => Nexus.Ui}/Overlay/D2dRenderContext.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/Overlay/IOverlayLayer.cs (91%) rename src/{Automata.Ui => Nexus.Ui}/Overlay/Layers/D2dDebugTextLayer.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/Overlay/Layers/D2dEnemyBoxLayer.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/Overlay/Layers/D2dEntityLabelLayer.cs (94%) rename src/{Automata.Ui => Nexus.Ui}/Overlay/Layers/D2dHudInfoLayer.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/Overlay/Layers/D2dLootLabelLayer.cs (98%) rename src/{Automata.Ui => Nexus.Ui}/Program.cs (94%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/AtlasViewModel.cs (98%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/CraftingViewModel.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/DebugViewModel.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/MainWindowViewModel.cs (98%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/MappingViewModel.cs (97%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/MemoryViewModel.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/ModPoolViewModel.cs (93%) rename src/{Automata.Ui/ViewModels/RobotoViewModel.cs => Nexus.Ui/ViewModels/NexusViewModel.cs} (98%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/ObjectBrowserViewModel.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/ParsedModViewModel.cs (97%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/SettingsViewModel.cs (99%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/SkillProfileViewModel.cs (98%) rename src/{Automata.Ui => Nexus.Ui}/ViewModels/StashTabViewModel.cs (95%) rename src/{Automata.Ui => Nexus.Ui}/Views/MainWindow.axaml (99%) rename src/{Automata.Ui => Nexus.Ui}/Views/MainWindow.axaml.cs (98%) rename src/{Automata.Ui => Nexus.Ui}/app.manifest (88%) delete mode 100644 src/Roboto.Core/Roboto.Core.csproj diff --git a/Automata.sln b/Nexus.sln similarity index 75% rename from Automata.sln rename to Nexus.sln index 26c298e..05014f4 100644 --- a/Automata.sln +++ b/Nexus.sln @@ -5,29 +5,39 @@ VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{67A27DFE-D2C5-479D-86FE-7E156BD0CFAA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Core", "src\Automata.Core\Automata.Core.csproj", "{6432F6A5-11A0-4960-AFFC-E810D4325C35}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Core", "src\Nexus.Core\Nexus.Core.csproj", "{A31E6F94-A702-4B58-8317-83658E556B5C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Game", "src\Automata.Game\Automata.Game.csproj", "{97B8362D-777C-4ED1-B964-D6598B333E4C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.GameOffsets", "src\Nexus.GameOffsets\Nexus.GameOffsets.csproj", "{C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Screen", "src\Automata.Screen\Automata.Screen.csproj", "{F92C5EA2-8999-41BC-9B28-D52AD5F3542C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Memory", "src\Nexus.Memory\Nexus.Memory.csproj", "{B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Items", "src\Automata.Items\Automata.Items.csproj", "{9CAB0D49-1E24-4F76-ABF8-9A5ED6819F00}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Input", "src\Nexus.Input\Nexus.Input.csproj", "{E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Trade", "src\Automata.Trade\Automata.Trade.csproj", "{8F73A696-EB54-4C6F-9603-5A6BAC5D334A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Systems", "src\Nexus.Systems\Nexus.Systems.csproj", "{95AC4C34-26A0-4D7F-A712-375EB28B54B8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Log", "src\Automata.Log\Automata.Log.csproj", "{B68D787D-7A83-4D8F-9F10-0B72C2E99B49}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Pathfinding", "src\Nexus.Pathfinding\Nexus.Pathfinding.csproj", "{F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Bot", "src\Automata.Bot\Automata.Bot.csproj", "{188C4F87-153F-4182-B816-9FB56F08CF3A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Data", "src\Nexus.Data\Nexus.Data.csproj", "{1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Inventory", "src\Automata.Inventory\Automata.Inventory.csproj", "{F186DDC8-6843-43E9-8BD3-9F914C5E784E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Engine", "src\Nexus.Engine\Nexus.Engine.csproj", "{C2E97306-20E4-4A69-A7AB-541A72614C76}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Ui", "src\Automata.Ui\Automata.Ui.csproj", "{859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Game", "src\Nexus.Game\Nexus.Game.csproj", "{97B8362D-777C-4ED1-B964-D6598B333E4C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Automata.Navigation", "src\Automata.Navigation\Automata.Navigation.csproj", "{D3F7A2E1-9B4C-4E8D-A6F5-1C2D3E4F5A6B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Screen", "src\Nexus.Screen\Nexus.Screen.csproj", "{F92C5EA2-8999-41BC-9B28-D52AD5F3542C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Roboto.Memory", "src\Roboto.Memory\Roboto.Memory.csproj", "{B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Items", "src\Nexus.Items\Nexus.Items.csproj", "{9CAB0D49-1E24-4F76-ABF8-9A5ED6819F00}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Roboto.GameOffsets", "src\Roboto.GameOffsets\Roboto.GameOffsets.csproj", "{C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Trade", "src\Nexus.Trade\Nexus.Trade.csproj", "{8F73A696-EB54-4C6F-9603-5A6BAC5D334A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Log", "src\Nexus.Log\Nexus.Log.csproj", "{B68D787D-7A83-4D8F-9F10-0B72C2E99B49}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Bot", "src\Nexus.Bot\Nexus.Bot.csproj", "{188C4F87-153F-4182-B816-9FB56F08CF3A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Inventory", "src\Nexus.Inventory\Nexus.Inventory.csproj", "{F186DDC8-6843-43E9-8BD3-9F914C5E784E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Navigation", "src\Nexus.Navigation\Nexus.Navigation.csproj", "{D3F7A2E1-9B4C-4E8D-A6F5-1C2D3E4F5A6B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Ui", "src\Nexus.Ui\Nexus.Ui.csproj", "{859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lib", "lib", "{652F700E-4F84-4E66-BD62-717D3A8D6FBC}" EndProject @@ -47,19 +57,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sidekick.Data", "lib\Sideki EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sidekick.Data.Builder", "lib\Sidekick\src\Sidekick.Data.Builder\Sidekick.Data.Builder.csproj", "{E5C26A34-5EDF-488B-93C7-F8738F2CEB97}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "roboto", "roboto", "{D1A2B3C4-E5F6-7890-ABCD-EF1234567890}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Roboto.Core", "src\Roboto.Core\Roboto.Core.csproj", "{A31E6F94-A702-4B58-8317-83658E556B5C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Roboto.Input", "src\Roboto.Input\Roboto.Input.csproj", "{E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Roboto.Systems", "src\Roboto.Systems\Roboto.Systems.csproj", "{95AC4C34-26A0-4D7F-A712-375EB28B54B8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Roboto.Engine", "src\Roboto.Engine\Roboto.Engine.csproj", "{C2E97306-20E4-4A69-A7AB-541A72614C76}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Roboto.Navigation", "src\Roboto.Navigation\Roboto.Navigation.csproj", "{F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Roboto.Data", "src\Roboto.Data\Roboto.Data.csproj", "{1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nexus.Simulator", "src\Nexus.Simulator\Nexus.Simulator.csproj", "{9198C826-9356-4763-87EF-BBC7166B745B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -70,10 +68,38 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6432F6A5-11A0-4960-AFFC-E810D4325C35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6432F6A5-11A0-4960-AFFC-E810D4325C35}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6432F6A5-11A0-4960-AFFC-E810D4325C35}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6432F6A5-11A0-4960-AFFC-E810D4325C35}.Release|Any CPU.Build.0 = Release|Any CPU + {A31E6F94-A702-4B58-8317-83658E556B5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A31E6F94-A702-4B58-8317-83658E556B5C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A31E6F94-A702-4B58-8317-83658E556B5C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A31E6F94-A702-4B58-8317-83658E556B5C}.Release|Any CPU.Build.0 = Release|Any CPU + {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}.Release|Any CPU.Build.0 = Release|Any CPU + {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}.Release|Any CPU.Build.0 = Release|Any CPU + {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}.Release|Any CPU.Build.0 = Release|Any CPU + {95AC4C34-26A0-4D7F-A712-375EB28B54B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95AC4C34-26A0-4D7F-A712-375EB28B54B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95AC4C34-26A0-4D7F-A712-375EB28B54B8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {95AC4C34-26A0-4D7F-A712-375EB28B54B8}.Release|Any CPU.Build.0 = Release|Any CPU + {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}.Release|Any CPU.Build.0 = Release|Any CPU + {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}.Release|Any CPU.Build.0 = Release|Any CPU + {C2E97306-20E4-4A69-A7AB-541A72614C76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C2E97306-20E4-4A69-A7AB-541A72614C76}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2E97306-20E4-4A69-A7AB-541A72614C76}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C2E97306-20E4-4A69-A7AB-541A72614C76}.Release|Any CPU.Build.0 = Release|Any CPU {97B8362D-777C-4ED1-B964-D6598B333E4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {97B8362D-777C-4ED1-B964-D6598B333E4C}.Debug|Any CPU.Build.0 = Debug|Any CPU {97B8362D-777C-4ED1-B964-D6598B333E4C}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -102,22 +128,14 @@ Global {F186DDC8-6843-43E9-8BD3-9F914C5E784E}.Debug|Any CPU.Build.0 = Debug|Any CPU {F186DDC8-6843-43E9-8BD3-9F914C5E784E}.Release|Any CPU.ActiveCfg = Release|Any CPU {F186DDC8-6843-43E9-8BD3-9F914C5E784E}.Release|Any CPU.Build.0 = Release|Any CPU - {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}.Release|Any CPU.Build.0 = Release|Any CPU {D3F7A2E1-9B4C-4E8D-A6F5-1C2D3E4F5A6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D3F7A2E1-9B4C-4E8D-A6F5-1C2D3E4F5A6B}.Debug|Any CPU.Build.0 = Debug|Any CPU {D3F7A2E1-9B4C-4E8D-A6F5-1C2D3E4F5A6B}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3F7A2E1-9B4C-4E8D-A6F5-1C2D3E4F5A6B}.Release|Any CPU.Build.0 = Release|Any CPU - {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B}.Release|Any CPU.Build.0 = Release|Any CPU - {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F}.Release|Any CPU.Build.0 = Release|Any CPU + {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3}.Release|Any CPU.Build.0 = Release|Any CPU {B858F6F2-389F-475A-87FE-E4E01DA3E948}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B858F6F2-389F-475A-87FE-E4E01DA3E948}.Debug|Any CPU.Build.0 = Debug|Any CPU {B858F6F2-389F-475A-87FE-E4E01DA3E948}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -150,33 +168,20 @@ Global {E5C26A34-5EDF-488B-93C7-F8738F2CEB97}.Debug|Any CPU.Build.0 = Debug|Any CPU {E5C26A34-5EDF-488B-93C7-F8738F2CEB97}.Release|Any CPU.ActiveCfg = Release|Any CPU {E5C26A34-5EDF-488B-93C7-F8738F2CEB97}.Release|Any CPU.Build.0 = Release|Any CPU - {A31E6F94-A702-4B58-8317-83658E556B5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A31E6F94-A702-4B58-8317-83658E556B5C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A31E6F94-A702-4B58-8317-83658E556B5C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A31E6F94-A702-4B58-8317-83658E556B5C}.Release|Any CPU.Build.0 = Release|Any CPU - {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A}.Release|Any CPU.Build.0 = Release|Any CPU - {95AC4C34-26A0-4D7F-A712-375EB28B54B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {95AC4C34-26A0-4D7F-A712-375EB28B54B8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {95AC4C34-26A0-4D7F-A712-375EB28B54B8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {95AC4C34-26A0-4D7F-A712-375EB28B54B8}.Release|Any CPU.Build.0 = Release|Any CPU - {C2E97306-20E4-4A69-A7AB-541A72614C76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2E97306-20E4-4A69-A7AB-541A72614C76}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2E97306-20E4-4A69-A7AB-541A72614C76}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2E97306-20E4-4A69-A7AB-541A72614C76}.Release|Any CPU.Build.0 = Release|Any CPU - {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D}.Release|Any CPU.Build.0 = Release|Any CPU - {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6}.Release|Any CPU.Build.0 = Release|Any CPU + {9198C826-9356-4763-87EF-BBC7166B745B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9198C826-9356-4763-87EF-BBC7166B745B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9198C826-9356-4763-87EF-BBC7166B745B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9198C826-9356-4763-87EF-BBC7166B745B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution - {6432F6A5-11A0-4960-AFFC-E810D4325C35} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} + {A31E6F94-A702-4B58-8317-83658E556B5C} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} + {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} + {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} + {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} + {95AC4C34-26A0-4D7F-A712-375EB28B54B8} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} + {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} + {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} + {C2E97306-20E4-4A69-A7AB-541A72614C76} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} {97B8362D-777C-4ED1-B964-D6598B333E4C} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} {F92C5EA2-8999-41BC-9B28-D52AD5F3542C} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} {9CAB0D49-1E24-4F76-ABF8-9A5ED6819F00} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} @@ -184,10 +189,8 @@ Global {B68D787D-7A83-4D8F-9F10-0B72C2E99B49} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} {188C4F87-153F-4182-B816-9FB56F08CF3A} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} {F186DDC8-6843-43E9-8BD3-9F914C5E784E} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} - {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} {D3F7A2E1-9B4C-4E8D-A6F5-1C2D3E4F5A6B} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} - {B7E3F1A2-4D5C-6E7F-8A9B-0C1D2E3F4A5B} = {D1A2B3C4-E5F6-7890-ABCD-EF1234567890} - {C8D9E0F1-2A3B-4C5D-6E7F-8A9B0C1D2E3F} = {D1A2B3C4-E5F6-7890-ABCD-EF1234567890} + {859F870E-F013-4C2B-AFEC-7A8C6A5FE3F3} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} {B858F6F2-389F-475A-87FE-E4E01DA3E948} = {652F700E-4F84-4E66-BD62-717D3A8D6FBC} {6FEA655D-18E4-4DA1-839F-A41433B03FBB} = {652F700E-4F84-4E66-BD62-717D3A8D6FBC} {74FD0F88-86BC-49AE-9A16-136D92A10090} = {652F700E-4F84-4E66-BD62-717D3A8D6FBC} @@ -196,12 +199,6 @@ Global {8CEE036C-A229-4F22-BD0E-D7CDAE13E54F} = {652F700E-4F84-4E66-BD62-717D3A8D6FBC} {9428D5D4-4061-467A-BD26-C1FEED95E8E6} = {652F700E-4F84-4E66-BD62-717D3A8D6FBC} {E5C26A34-5EDF-488B-93C7-F8738F2CEB97} = {652F700E-4F84-4E66-BD62-717D3A8D6FBC} - {D1A2B3C4-E5F6-7890-ABCD-EF1234567890} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} - {A31E6F94-A702-4B58-8317-83658E556B5C} = {D1A2B3C4-E5F6-7890-ABCD-EF1234567890} - {E61E96C5-3DE7-4B31-A7AD-CCA99BEF8E4A} = {D1A2B3C4-E5F6-7890-ABCD-EF1234567890} - {95AC4C34-26A0-4D7F-A712-375EB28B54B8} = {D1A2B3C4-E5F6-7890-ABCD-EF1234567890} - {C2E97306-20E4-4A69-A7AB-541A72614C76} = {D1A2B3C4-E5F6-7890-ABCD-EF1234567890} - {F4B5C6D7-E8F9-0A1B-2C3D-4E5F6A7B8C9D} = {D1A2B3C4-E5F6-7890-ABCD-EF1234567890} - {1A2B3C4D-5E6F-7A8B-9C0D-E1F2A3B4C5D6} = {D1A2B3C4-E5F6-7890-ABCD-EF1234567890} + {9198C826-9356-4763-87EF-BBC7166B745B} = {67A27DFE-D2C5-479D-86FE-7E156BD0CFAA} EndGlobalSection EndGlobal diff --git a/imgui.ini b/imgui.ini new file mode 100644 index 0000000..6e55fd4 --- /dev/null +++ b/imgui.ini @@ -0,0 +1,15 @@ +[Window][Debug##Default] +Pos=60,60 +Size=400,400 +Collapsed=0 + +[Window][Simulator Controls] +Pos=60,60 +Size=219,425 +Collapsed=0 + +[Window][Simulator] +Pos=11,220 +Size=1200,681 +Collapsed=0 + diff --git a/src/Automata.Bot/Automata.Bot.csproj b/src/Automata.Bot/Automata.Bot.csproj deleted file mode 100644 index 77ae1f4..0000000 --- a/src/Automata.Bot/Automata.Bot.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - net8.0-windows10.0.19041.0 - enable - enable - - - - - - - - - - - - diff --git a/src/Automata.Inventory/Automata.Inventory.csproj b/src/Automata.Inventory/Automata.Inventory.csproj deleted file mode 100644 index bfb3ac5..0000000 --- a/src/Automata.Inventory/Automata.Inventory.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - net8.0-windows10.0.19041.0 - enable - enable - - - - - - - - diff --git a/src/Automata.Bot/AtlasExecutor.cs b/src/Nexus.Bot/AtlasExecutor.cs similarity index 98% rename from src/Automata.Bot/AtlasExecutor.cs rename to src/Nexus.Bot/AtlasExecutor.cs index 2f4e307..65ff5c0 100644 --- a/src/Automata.Bot/AtlasExecutor.cs +++ b/src/Nexus.Bot/AtlasExecutor.cs @@ -1,11 +1,11 @@ -using Automata.Core; -using Automata.Game; -using Automata.Inventory; -using Automata.Navigation; -using Automata.Screen; +using Nexus.Core; +using Nexus.Game; +using Nexus.Inventory; +using Nexus.Navigation; +using Nexus.Screen; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; /// /// Captures the full endgame atlas as a panorama image. diff --git a/src/Automata.Bot/BotOrchestrator.cs b/src/Nexus.Bot/BotOrchestrator.cs similarity index 99% rename from src/Automata.Bot/BotOrchestrator.cs rename to src/Nexus.Bot/BotOrchestrator.cs index 708f005..ab2ca51 100644 --- a/src/Automata.Bot/BotOrchestrator.cs +++ b/src/Nexus.Bot/BotOrchestrator.cs @@ -1,13 +1,13 @@ -using Automata.Core; -using Automata.Game; -using Automata.Inventory; -using Automata.GameLog; -using Automata.Navigation; -using Automata.Screen; -using Automata.Trade; +using Nexus.Core; +using Nexus.Game; +using Nexus.Inventory; +using Nexus.GameLog; +using Nexus.Navigation; +using Nexus.Screen; +using Nexus.Trade; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; public class BotStatus { diff --git a/src/Automata.Bot/CombatManager.cs b/src/Nexus.Bot/CombatManager.cs similarity index 98% rename from src/Automata.Bot/CombatManager.cs rename to src/Nexus.Bot/CombatManager.cs index d494cde..44ce7cf 100644 --- a/src/Automata.Bot/CombatManager.cs +++ b/src/Nexus.Bot/CombatManager.cs @@ -1,10 +1,10 @@ using System.Diagnostics; -using Automata.Core; -using Automata.Game; -using Automata.Screen; +using Nexus.Core; +using Nexus.Game; +using Nexus.Screen; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; /// /// Manages the attack state machine (click → hold) with mana monitoring and flask usage. diff --git a/src/Automata.Bot/CraftingExecutor.cs b/src/Nexus.Bot/CraftingExecutor.cs similarity index 98% rename from src/Automata.Bot/CraftingExecutor.cs rename to src/Nexus.Bot/CraftingExecutor.cs index 3ba22e0..e7add43 100644 --- a/src/Automata.Bot/CraftingExecutor.cs +++ b/src/Nexus.Bot/CraftingExecutor.cs @@ -1,9 +1,9 @@ -using Automata.Core; -using Automata.Game; -using Automata.Items; +using Nexus.Core; +using Nexus.Game; +using Nexus.Items; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; public class CraftingExecutor { diff --git a/src/Automata.Bot/DiamondExecutor.cs b/src/Nexus.Bot/DiamondExecutor.cs similarity index 98% rename from src/Automata.Bot/DiamondExecutor.cs rename to src/Nexus.Bot/DiamondExecutor.cs index 590a58f..fd1ab7f 100644 --- a/src/Automata.Bot/DiamondExecutor.cs +++ b/src/Nexus.Bot/DiamondExecutor.cs @@ -1,12 +1,12 @@ using System.Collections.Concurrent; -using Automata.Core; -using Automata.Game; -using Automata.Inventory; -using Automata.Screen; -using Automata.Trade; +using Nexus.Core; +using Nexus.Game; +using Nexus.Inventory; +using Nexus.Screen; +using Nexus.Trade; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; public class DiamondExecutor { diff --git a/src/Automata.Bot/FlaskManager.cs b/src/Nexus.Bot/FlaskManager.cs similarity index 96% rename from src/Automata.Bot/FlaskManager.cs rename to src/Nexus.Bot/FlaskManager.cs index 476b4b7..591a043 100644 --- a/src/Automata.Bot/FlaskManager.cs +++ b/src/Nexus.Bot/FlaskManager.cs @@ -1,9 +1,9 @@ using System.Diagnostics; -using Automata.Game; -using Automata.Screen; +using Nexus.Game; +using Nexus.Screen; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; /// /// Monitors life/mana and presses flask keys when they drop below thresholds. diff --git a/src/Automata.Bot/GameExecutor.cs b/src/Nexus.Bot/GameExecutor.cs similarity index 98% rename from src/Automata.Bot/GameExecutor.cs rename to src/Nexus.Bot/GameExecutor.cs index 1f7386e..4f6ebe6 100644 --- a/src/Automata.Bot/GameExecutor.cs +++ b/src/Nexus.Bot/GameExecutor.cs @@ -1,11 +1,11 @@ using System.Diagnostics; -using Automata.Core; -using Automata.Game; -using Automata.Inventory; -using Automata.Screen; +using Nexus.Core; +using Nexus.Game; +using Nexus.Inventory; +using Nexus.Screen; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; /// /// Base class for game executors that interact with the game world. diff --git a/src/Automata.Bot/KulemakExecutor.cs b/src/Nexus.Bot/KulemakExecutor.cs similarity index 99% rename from src/Automata.Bot/KulemakExecutor.cs rename to src/Nexus.Bot/KulemakExecutor.cs index 1abd402..e97088a 100644 --- a/src/Automata.Bot/KulemakExecutor.cs +++ b/src/Nexus.Bot/KulemakExecutor.cs @@ -1,12 +1,12 @@ -using Automata.Core; -using Automata.Game; -using Automata.GameLog; -using Automata.Inventory; -using Automata.Navigation; -using Automata.Screen; +using Nexus.Core; +using Nexus.Game; +using Nexus.GameLog; +using Nexus.Inventory; +using Nexus.Navigation; +using Nexus.Screen; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; /// /// Kulemak-specific boss run executor: scripted 4-phase + ring fight, diff --git a/src/Automata.Bot/MappingExecutor.cs b/src/Nexus.Bot/MappingExecutor.cs similarity index 99% rename from src/Automata.Bot/MappingExecutor.cs rename to src/Nexus.Bot/MappingExecutor.cs index a8979ea..88ed649 100644 --- a/src/Automata.Bot/MappingExecutor.cs +++ b/src/Nexus.Bot/MappingExecutor.cs @@ -1,13 +1,13 @@ using System.Diagnostics; -using Automata.Core; -using Automata.Game; -using Automata.GameLog; -using Automata.Inventory; -using Automata.Navigation; -using Automata.Screen; +using Nexus.Core; +using Nexus.Game; +using Nexus.GameLog; +using Nexus.Inventory; +using Nexus.Navigation; +using Nexus.Screen; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; /// /// Shared infrastructure for any map/boss activity: combat loop, WASD navigation, diff --git a/src/Nexus.Bot/Nexus.Bot.csproj b/src/Nexus.Bot/Nexus.Bot.csproj new file mode 100644 index 0000000..d2d07a4 --- /dev/null +++ b/src/Nexus.Bot/Nexus.Bot.csproj @@ -0,0 +1,17 @@ + + + net8.0-windows10.0.19041.0 + enable + enable + + + + + + + + + + + + diff --git a/src/Automata.Bot/ScrapExecutor.cs b/src/Nexus.Bot/ScrapExecutor.cs similarity index 97% rename from src/Automata.Bot/ScrapExecutor.cs rename to src/Nexus.Bot/ScrapExecutor.cs index 3631265..dc4f051 100644 --- a/src/Automata.Bot/ScrapExecutor.cs +++ b/src/Nexus.Bot/ScrapExecutor.cs @@ -1,11 +1,11 @@ -using Automata.Core; -using Automata.Game; -using Automata.Inventory; -using Automata.Screen; -using Automata.Trade; +using Nexus.Core; +using Nexus.Game; +using Nexus.Inventory; +using Nexus.Screen; +using Nexus.Trade; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; public class ScrapExecutor { diff --git a/src/Automata.Bot/TradeExecutor.cs b/src/Nexus.Bot/TradeExecutor.cs similarity index 97% rename from src/Automata.Bot/TradeExecutor.cs rename to src/Nexus.Bot/TradeExecutor.cs index dfb1a34..acac3ce 100644 --- a/src/Automata.Bot/TradeExecutor.cs +++ b/src/Nexus.Bot/TradeExecutor.cs @@ -1,11 +1,11 @@ -using Automata.Core; -using Automata.Game; -using Automata.Inventory; -using Automata.Screen; -using Automata.Trade; +using Nexus.Core; +using Nexus.Game; +using Nexus.Inventory; +using Nexus.Screen; +using Nexus.Trade; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; public class TradeExecutor { diff --git a/src/Automata.Bot/TradeQueue.cs b/src/Nexus.Bot/TradeQueue.cs similarity index 97% rename from src/Automata.Bot/TradeQueue.cs rename to src/Nexus.Bot/TradeQueue.cs index 5521247..7ae9387 100644 --- a/src/Automata.Bot/TradeQueue.cs +++ b/src/Nexus.Bot/TradeQueue.cs @@ -1,7 +1,7 @@ -using Automata.Core; +using Nexus.Core; using Serilog; -namespace Automata.Bot; +namespace Nexus.Bot; public class TradeQueue { diff --git a/src/Roboto.Core/ActionQueue.cs b/src/Nexus.Core/ActionQueue.cs similarity index 99% rename from src/Roboto.Core/ActionQueue.cs rename to src/Nexus.Core/ActionQueue.cs index 0d3a4fd..377c87b 100644 --- a/src/Roboto.Core/ActionQueue.cs +++ b/src/Nexus.Core/ActionQueue.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public class ActionQueue { diff --git a/src/Roboto.Core/Actions.cs b/src/Nexus.Core/Actions.cs similarity index 97% rename from src/Roboto.Core/Actions.cs rename to src/Nexus.Core/Actions.cs index 9bd6e4b..453c5f5 100644 --- a/src/Roboto.Core/Actions.cs +++ b/src/Nexus.Core/Actions.cs @@ -1,6 +1,6 @@ using System.Numerics; -namespace Roboto.Core; +namespace Nexus.Core; public enum ClickType { Left, Right, Middle } public enum KeyActionType { Press, Down, Up } diff --git a/src/Roboto.Core/BotConfig.cs b/src/Nexus.Core/BotConfig.cs similarity index 97% rename from src/Roboto.Core/BotConfig.cs rename to src/Nexus.Core/BotConfig.cs index 230c502..e06fe25 100644 --- a/src/Roboto.Core/BotConfig.cs +++ b/src/Nexus.Core/BotConfig.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public class BotConfig { diff --git a/src/Roboto.Core/Buff.cs b/src/Nexus.Core/Buff.cs similarity index 89% rename from src/Roboto.Core/Buff.cs rename to src/Nexus.Core/Buff.cs index e80ba65..85aab5a 100644 --- a/src/Roboto.Core/Buff.cs +++ b/src/Nexus.Core/Buff.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public record Buff { diff --git a/src/Roboto.Core/CharacterProfile.cs b/src/Nexus.Core/CharacterProfile.cs similarity index 98% rename from src/Roboto.Core/CharacterProfile.cs rename to src/Nexus.Core/CharacterProfile.cs index 8518c32..b592d32 100644 --- a/src/Roboto.Core/CharacterProfile.cs +++ b/src/Nexus.Core/CharacterProfile.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public class CharacterProfile { diff --git a/src/Roboto.Core/CombatSettings.cs b/src/Nexus.Core/CombatSettings.cs similarity index 93% rename from src/Roboto.Core/CombatSettings.cs rename to src/Nexus.Core/CombatSettings.cs index 02cf2a9..a511432 100644 --- a/src/Roboto.Core/CombatSettings.cs +++ b/src/Nexus.Core/CombatSettings.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public class CombatSettings { diff --git a/src/Automata.Core/ConfigStore.cs b/src/Nexus.Core/ConfigStore.cs similarity index 99% rename from src/Automata.Core/ConfigStore.cs rename to src/Nexus.Core/ConfigStore.cs index 6c93261..d0fef6d 100644 --- a/src/Automata.Core/ConfigStore.cs +++ b/src/Nexus.Core/ConfigStore.cs @@ -2,7 +2,7 @@ using System.Text.Json; using System.Text.Json.Serialization; using Serilog; -namespace Automata.Core; +namespace Nexus.Core; public class SavedLink { diff --git a/src/Automata.Core/Delays.cs b/src/Nexus.Core/Delays.cs similarity index 92% rename from src/Automata.Core/Delays.cs rename to src/Nexus.Core/Delays.cs index 01b9f16..907aad0 100644 --- a/src/Automata.Core/Delays.cs +++ b/src/Nexus.Core/Delays.cs @@ -1,4 +1,4 @@ -namespace Automata.Core; +namespace Nexus.Core; public static class Delays { diff --git a/src/Roboto.Core/EntitySnapshot.cs b/src/Nexus.Core/EntitySnapshot.cs similarity index 98% rename from src/Roboto.Core/EntitySnapshot.cs rename to src/Nexus.Core/EntitySnapshot.cs index 7ede015..4e4900d 100644 --- a/src/Roboto.Core/EntitySnapshot.cs +++ b/src/Nexus.Core/EntitySnapshot.cs @@ -1,6 +1,6 @@ using System.Numerics; -namespace Roboto.Core; +namespace Nexus.Core; public enum EntityCategory { diff --git a/src/Roboto.Core/Enums.cs b/src/Nexus.Core/Enums.cs similarity index 93% rename from src/Roboto.Core/Enums.cs rename to src/Nexus.Core/Enums.cs index 1f8821c..1a41bea 100644 --- a/src/Roboto.Core/Enums.cs +++ b/src/Nexus.Core/Enums.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public enum DangerLevel { diff --git a/src/Roboto.Core/FlaskSettings.cs b/src/Nexus.Core/FlaskSettings.cs similarity index 93% rename from src/Roboto.Core/FlaskSettings.cs rename to src/Nexus.Core/FlaskSettings.cs index 8b7da24..39dbf6d 100644 --- a/src/Roboto.Core/FlaskSettings.cs +++ b/src/Nexus.Core/FlaskSettings.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public class FlaskSettings { diff --git a/src/Roboto.Core/FlaskState.cs b/src/Nexus.Core/FlaskState.cs similarity index 91% rename from src/Roboto.Core/FlaskState.cs rename to src/Nexus.Core/FlaskState.cs index 6a4c074..3576f0e 100644 --- a/src/Roboto.Core/FlaskState.cs +++ b/src/Nexus.Core/FlaskState.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public record FlaskState { diff --git a/src/Roboto.Core/GameState.cs b/src/Nexus.Core/GameState.cs similarity index 98% rename from src/Roboto.Core/GameState.cs rename to src/Nexus.Core/GameState.cs index 37b4fca..7baf4c7 100644 --- a/src/Roboto.Core/GameState.cs +++ b/src/Nexus.Core/GameState.cs @@ -1,6 +1,6 @@ using System.Numerics; -namespace Roboto.Core; +namespace Nexus.Core; public class GameState { diff --git a/src/Roboto.Core/GroundEffect.cs b/src/Nexus.Core/GroundEffect.cs similarity index 92% rename from src/Roboto.Core/GroundEffect.cs rename to src/Nexus.Core/GroundEffect.cs index ab7f3f8..f14f752 100644 --- a/src/Roboto.Core/GroundEffect.cs +++ b/src/Nexus.Core/GroundEffect.cs @@ -1,6 +1,6 @@ using System.Numerics; -namespace Roboto.Core; +namespace Nexus.Core; public record GroundEffect { diff --git a/src/Automata.Core/Helpers.cs b/src/Nexus.Core/Helpers.cs similarity index 95% rename from src/Automata.Core/Helpers.cs rename to src/Nexus.Core/Helpers.cs index 19f5205..48b3c16 100644 --- a/src/Automata.Core/Helpers.cs +++ b/src/Nexus.Core/Helpers.cs @@ -1,4 +1,4 @@ -namespace Automata.Core; +namespace Nexus.Core; public static class Helpers { diff --git a/src/Roboto.Core/IInputController.cs b/src/Nexus.Core/IInputController.cs similarity index 95% rename from src/Roboto.Core/IInputController.cs rename to src/Nexus.Core/IInputController.cs index 24f9b86..394e3c1 100644 --- a/src/Roboto.Core/IInputController.cs +++ b/src/Nexus.Core/IInputController.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public interface IInputController { diff --git a/src/Roboto.Core/ISystem.cs b/src/Nexus.Core/ISystem.cs similarity index 88% rename from src/Roboto.Core/ISystem.cs rename to src/Nexus.Core/ISystem.cs index 05b4564..e904755 100644 --- a/src/Roboto.Core/ISystem.cs +++ b/src/Nexus.Core/ISystem.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public interface ISystem { diff --git a/src/Automata.Core/LinkManager.cs b/src/Nexus.Core/LinkManager.cs similarity index 99% rename from src/Automata.Core/LinkManager.cs rename to src/Nexus.Core/LinkManager.cs index 7915a9a..32f0ec2 100644 --- a/src/Automata.Core/LinkManager.cs +++ b/src/Nexus.Core/LinkManager.cs @@ -1,6 +1,6 @@ using Serilog; -namespace Automata.Core; +namespace Nexus.Core; public class TradeLink { diff --git a/src/Automata.Core/Logging.cs b/src/Nexus.Core/Logging.cs similarity index 95% rename from src/Automata.Core/Logging.cs rename to src/Nexus.Core/Logging.cs index bd4f173..742b887 100644 --- a/src/Automata.Core/Logging.cs +++ b/src/Nexus.Core/Logging.cs @@ -1,7 +1,7 @@ using Serilog; using Serilog.Events; -namespace Automata.Core; +namespace Nexus.Core; public static class Logging { diff --git a/src/Automata.Core/ModPoolService.cs b/src/Nexus.Core/ModPoolService.cs similarity index 99% rename from src/Automata.Core/ModPoolService.cs rename to src/Nexus.Core/ModPoolService.cs index 4aeeddc..4000c1f 100644 --- a/src/Automata.Core/ModPoolService.cs +++ b/src/Nexus.Core/ModPoolService.cs @@ -2,7 +2,7 @@ using System.Net.Http; using System.Text.Json; using Serilog; -namespace Automata.Core; +namespace Nexus.Core; public class ModPoolService { diff --git a/src/Automata.Core/Automata.Core.csproj b/src/Nexus.Core/Nexus.Core.csproj similarity index 86% rename from src/Automata.Core/Automata.Core.csproj rename to src/Nexus.Core/Nexus.Core.csproj index 5aff918..4aadc25 100644 --- a/src/Automata.Core/Automata.Core.csproj +++ b/src/Nexus.Core/Nexus.Core.csproj @@ -8,6 +8,6 @@ - + diff --git a/src/Roboto.Core/PlayerState.cs b/src/Nexus.Core/PlayerState.cs similarity index 98% rename from src/Roboto.Core/PlayerState.cs rename to src/Nexus.Core/PlayerState.cs index 1db0729..bcd5f66 100644 --- a/src/Roboto.Core/PlayerState.cs +++ b/src/Nexus.Core/PlayerState.cs @@ -1,6 +1,6 @@ using System.Numerics; -namespace Roboto.Core; +namespace Nexus.Core; public record PlayerState { diff --git a/src/Automata.Core/Poe2ScoutClient.cs b/src/Nexus.Core/Poe2ScoutClient.cs similarity index 98% rename from src/Automata.Core/Poe2ScoutClient.cs rename to src/Nexus.Core/Poe2ScoutClient.cs index 51c07ff..8422d9d 100644 --- a/src/Automata.Core/Poe2ScoutClient.cs +++ b/src/Nexus.Core/Poe2ScoutClient.cs @@ -1,7 +1,7 @@ using System.Text.Json; using Serilog; -namespace Automata.Core; +namespace Nexus.Core; public static class Poe2ScoutClient { diff --git a/src/Roboto.Core/ProfileManager.cs b/src/Nexus.Core/ProfileManager.cs similarity index 99% rename from src/Roboto.Core/ProfileManager.cs rename to src/Nexus.Core/ProfileManager.cs index 3130296..868d2d5 100644 --- a/src/Roboto.Core/ProfileManager.cs +++ b/src/Nexus.Core/ProfileManager.cs @@ -1,7 +1,7 @@ using System.Text.Json; using System.Text.Json.Serialization; -namespace Roboto.Core; +namespace Nexus.Core; public class ProfileConfig { diff --git a/src/Roboto.Core/QuestInfo.cs b/src/Nexus.Core/QuestInfo.cs similarity index 96% rename from src/Roboto.Core/QuestInfo.cs rename to src/Nexus.Core/QuestInfo.cs index 1f75fc2..c62de53 100644 --- a/src/Roboto.Core/QuestInfo.cs +++ b/src/Nexus.Core/QuestInfo.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public class QuestInfo { diff --git a/src/Roboto.Core/QuestProgress.cs b/src/Nexus.Core/QuestProgress.cs similarity index 96% rename from src/Roboto.Core/QuestProgress.cs rename to src/Nexus.Core/QuestProgress.cs index 56a76cc..3929f78 100644 --- a/src/Roboto.Core/QuestProgress.cs +++ b/src/Nexus.Core/QuestProgress.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public record QuestProgress { diff --git a/src/Automata.Core/RePoETypes.cs b/src/Nexus.Core/RePoETypes.cs similarity index 98% rename from src/Automata.Core/RePoETypes.cs rename to src/Nexus.Core/RePoETypes.cs index d62f665..9034de7 100644 --- a/src/Automata.Core/RePoETypes.cs +++ b/src/Nexus.Core/RePoETypes.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Automata.Core; +namespace Nexus.Core; public class RePoEMod { diff --git a/src/Roboto.Core/SkillProfile.cs b/src/Nexus.Core/SkillProfile.cs similarity index 99% rename from src/Roboto.Core/SkillProfile.cs rename to src/Nexus.Core/SkillProfile.cs index 0c6a890..481d0d3 100644 --- a/src/Roboto.Core/SkillProfile.cs +++ b/src/Nexus.Core/SkillProfile.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public enum SkillInputType { KeyPress, LeftClick, RightClick, MiddleClick } diff --git a/src/Roboto.Core/SkillState.cs b/src/Nexus.Core/SkillState.cs similarity index 97% rename from src/Roboto.Core/SkillState.cs rename to src/Nexus.Core/SkillState.cs index 6168749..2205d36 100644 --- a/src/Roboto.Core/SkillState.cs +++ b/src/Nexus.Core/SkillState.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public record SkillState { diff --git a/src/Automata.Core/StashCalibration.cs b/src/Nexus.Core/StashCalibration.cs similarity index 95% rename from src/Automata.Core/StashCalibration.cs rename to src/Nexus.Core/StashCalibration.cs index 587b8b6..98f1cda 100644 --- a/src/Automata.Core/StashCalibration.cs +++ b/src/Nexus.Core/StashCalibration.cs @@ -1,4 +1,4 @@ -namespace Automata.Core; +namespace Nexus.Core; public class StashTabInfo { diff --git a/src/Roboto.Core/TargetSelection.cs b/src/Nexus.Core/TargetSelection.cs similarity index 82% rename from src/Roboto.Core/TargetSelection.cs rename to src/Nexus.Core/TargetSelection.cs index fbcc872..02d3309 100644 --- a/src/Roboto.Core/TargetSelection.cs +++ b/src/Nexus.Core/TargetSelection.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public enum TargetSelection { diff --git a/src/Roboto.Core/TerrainQuery.cs b/src/Nexus.Core/TerrainQuery.cs similarity index 99% rename from src/Roboto.Core/TerrainQuery.cs rename to src/Nexus.Core/TerrainQuery.cs index df403b6..87ed1da 100644 --- a/src/Roboto.Core/TerrainQuery.cs +++ b/src/Nexus.Core/TerrainQuery.cs @@ -1,6 +1,6 @@ using System.Numerics; -namespace Roboto.Core; +namespace Nexus.Core; /// /// Terrain line-of-sight and walkable direction queries on the walkability grid. diff --git a/src/Roboto.Core/ThreatMap.cs b/src/Nexus.Core/ThreatMap.cs similarity index 95% rename from src/Roboto.Core/ThreatMap.cs rename to src/Nexus.Core/ThreatMap.cs index 79e0214..bfeac13 100644 --- a/src/Roboto.Core/ThreatMap.cs +++ b/src/Nexus.Core/ThreatMap.cs @@ -1,6 +1,6 @@ using System.Numerics; -namespace Roboto.Core; +namespace Nexus.Core; public class ThreatMap { diff --git a/src/Automata.Core/Types.cs b/src/Nexus.Core/Types.cs similarity index 99% rename from src/Automata.Core/Types.cs rename to src/Nexus.Core/Types.cs index 69a4deb..972159c 100644 --- a/src/Automata.Core/Types.cs +++ b/src/Nexus.Core/Types.cs @@ -1,4 +1,4 @@ -namespace Automata.Core; +namespace Nexus.Core; public record Region(int X, int Y, int Width, int Height); diff --git a/src/Roboto.Core/UiQuestInfo.cs b/src/Nexus.Core/UiQuestInfo.cs similarity index 93% rename from src/Roboto.Core/UiQuestInfo.cs rename to src/Nexus.Core/UiQuestInfo.cs index e120874..6c0aa1c 100644 --- a/src/Roboto.Core/UiQuestInfo.cs +++ b/src/Nexus.Core/UiQuestInfo.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; /// /// Active quest info as displayed in the game UI. diff --git a/src/Roboto.Core/WalkabilitySnapshot.cs b/src/Nexus.Core/WalkabilitySnapshot.cs similarity index 93% rename from src/Roboto.Core/WalkabilitySnapshot.cs rename to src/Nexus.Core/WalkabilitySnapshot.cs index bf4dfb0..cb1fecc 100644 --- a/src/Roboto.Core/WalkabilitySnapshot.cs +++ b/src/Nexus.Core/WalkabilitySnapshot.cs @@ -1,4 +1,4 @@ -namespace Roboto.Core; +namespace Nexus.Core; public record WalkabilitySnapshot { diff --git a/src/Roboto.Core/WorldToScreen.cs b/src/Nexus.Core/WorldToScreen.cs similarity index 97% rename from src/Roboto.Core/WorldToScreen.cs rename to src/Nexus.Core/WorldToScreen.cs index 33f12d0..96e5a76 100644 --- a/src/Roboto.Core/WorldToScreen.cs +++ b/src/Nexus.Core/WorldToScreen.cs @@ -1,6 +1,6 @@ using System.Numerics; -namespace Roboto.Core; +namespace Nexus.Core; public static class WorldToScreen { diff --git a/src/Roboto.Data/AreaGraph.cs b/src/Nexus.Data/AreaGraph.cs similarity index 99% rename from src/Roboto.Data/AreaGraph.cs rename to src/Nexus.Data/AreaGraph.cs index 4e5aaf4..c7d57f5 100644 --- a/src/Roboto.Data/AreaGraph.cs +++ b/src/Nexus.Data/AreaGraph.cs @@ -1,6 +1,6 @@ using System.Text.Json; -namespace Roboto.Data; +namespace Nexus.Data; public record AreaNode( string Id, diff --git a/src/Roboto.Data/AreaNameLookup.cs b/src/Nexus.Data/AreaNameLookup.cs similarity index 98% rename from src/Roboto.Data/AreaNameLookup.cs rename to src/Nexus.Data/AreaNameLookup.cs index 7e7ca68..34bb3ae 100644 --- a/src/Roboto.Data/AreaNameLookup.cs +++ b/src/Nexus.Data/AreaNameLookup.cs @@ -1,6 +1,6 @@ using System.Text.Json; -namespace Roboto.Data; +namespace Nexus.Data; /// /// Resolves area IDs (e.g. "G1_4") to display names (e.g. "The Grelwood") diff --git a/src/Roboto.Data/EntityClassifier.cs b/src/Nexus.Data/EntityClassifier.cs similarity index 98% rename from src/Roboto.Data/EntityClassifier.cs rename to src/Nexus.Data/EntityClassifier.cs index c390fed..cebf3e5 100644 --- a/src/Roboto.Data/EntityClassifier.cs +++ b/src/Nexus.Data/EntityClassifier.cs @@ -1,6 +1,6 @@ -using Roboto.Core; +using Nexus.Core; -namespace Roboto.Data; +namespace Nexus.Data; /// /// Classifies entities from path + component data into EntityCategory. diff --git a/src/Roboto.Data/EntityMapper.cs b/src/Nexus.Data/EntityMapper.cs similarity index 96% rename from src/Roboto.Data/EntityMapper.cs rename to src/Nexus.Data/EntityMapper.cs index d1edf12..6234a1e 100644 --- a/src/Roboto.Data/EntityMapper.cs +++ b/src/Nexus.Data/EntityMapper.cs @@ -1,8 +1,8 @@ using System.Numerics; -using Roboto.Core; -using MemEntity = Roboto.Memory.Entity; +using Nexus.Core; +using MemEntity = Nexus.Memory.Entity; -namespace Roboto.Data; +namespace Nexus.Data; /// /// Maps raw Memory.Entity → Core.EntitySnapshot. Single source of truth for entity mapping. diff --git a/src/Roboto.Data/GameDataCache.cs b/src/Nexus.Data/GameDataCache.cs similarity index 98% rename from src/Roboto.Data/GameDataCache.cs rename to src/Nexus.Data/GameDataCache.cs index 0ca85c0..5859878 100644 --- a/src/Roboto.Data/GameDataCache.cs +++ b/src/Nexus.Data/GameDataCache.cs @@ -1,8 +1,8 @@ using System.Numerics; -using Roboto.Core; -using Roboto.Memory; +using Nexus.Core; +using Nexus.Memory; -namespace Roboto.Data; +namespace Nexus.Data; /// /// Immutable snapshot of player position for lock-free cross-thread reads. diff --git a/src/Roboto.Data/GameStateEnricher.cs b/src/Nexus.Data/GameStateEnricher.cs similarity index 98% rename from src/Roboto.Data/GameStateEnricher.cs rename to src/Nexus.Data/GameStateEnricher.cs index 3112e60..1cb35fb 100644 --- a/src/Roboto.Data/GameStateEnricher.cs +++ b/src/Nexus.Data/GameStateEnricher.cs @@ -1,7 +1,7 @@ using System.Numerics; -using Roboto.Core; +using Nexus.Core; -namespace Roboto.Data; +namespace Nexus.Data; /// /// Computes all derived fields on GameState once per tick. diff --git a/src/Roboto.Data/MemoryPoller.cs b/src/Nexus.Data/MemoryPoller.cs similarity index 99% rename from src/Roboto.Data/MemoryPoller.cs rename to src/Nexus.Data/MemoryPoller.cs index ef46ffe..8fda25e 100644 --- a/src/Roboto.Data/MemoryPoller.cs +++ b/src/Nexus.Data/MemoryPoller.cs @@ -1,10 +1,10 @@ using System.Diagnostics; using System.Numerics; -using Roboto.Memory; -using Roboto.Core; +using Nexus.Memory; +using Nexus.Core; using Serilog; -namespace Roboto.Data; +namespace Nexus.Data; /// /// Owns the memory read thread. Runs a two-tier loop: @@ -28,7 +28,7 @@ public sealed class MemoryPoller : IDisposable private nint _playerLifeAddr; private nint _inGameStateAddr; private nint _controllerAddr; - private Roboto.Memory.GameOffsets? _offsets; + private Nexus.Memory.GameOffsets? _offsets; private ProcessMemory? _mem; private int _hotHz; @@ -64,7 +64,7 @@ public sealed class MemoryPoller : IDisposable _thread = new Thread(PollLoop) { - Name = "Roboto.MemoryPoller", + Name = "Nexus.MemoryPoller", IsBackground = true, }; _thread.Start(); diff --git a/src/Roboto.Data/Roboto.Data.csproj b/src/Nexus.Data/Nexus.Data.csproj similarity index 70% rename from src/Roboto.Data/Roboto.Data.csproj rename to src/Nexus.Data/Nexus.Data.csproj index 38208e6..0d85deb 100644 --- a/src/Roboto.Data/Roboto.Data.csproj +++ b/src/Nexus.Data/Nexus.Data.csproj @@ -8,7 +8,7 @@ - - + + diff --git a/src/Automata.Game/ClipboardHelper.cs b/src/Nexus.Game/ClipboardHelper.cs similarity index 99% rename from src/Automata.Game/ClipboardHelper.cs rename to src/Nexus.Game/ClipboardHelper.cs index c895916..dc2e3c4 100644 --- a/src/Automata.Game/ClipboardHelper.cs +++ b/src/Nexus.Game/ClipboardHelper.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; using System.Text; -namespace Automata.Game; +namespace Nexus.Game; /// /// Win32 clipboard access without WinForms dependency. diff --git a/src/Automata.Game/GameController.cs b/src/Nexus.Game/GameController.cs similarity index 98% rename from src/Automata.Game/GameController.cs rename to src/Nexus.Game/GameController.cs index 5b82b3c..abbc59c 100644 --- a/src/Automata.Game/GameController.cs +++ b/src/Nexus.Game/GameController.cs @@ -1,7 +1,7 @@ -using Automata.Core; +using Nexus.Core; using Serilog; -namespace Automata.Game; +namespace Nexus.Game; public class GameController : IGameController { diff --git a/src/Automata.Game/IGameController.cs b/src/Nexus.Game/IGameController.cs similarity index 97% rename from src/Automata.Game/IGameController.cs rename to src/Nexus.Game/IGameController.cs index 9359f16..5b3984d 100644 --- a/src/Automata.Game/IGameController.cs +++ b/src/Nexus.Game/IGameController.cs @@ -1,4 +1,4 @@ -namespace Automata.Game; +namespace Nexus.Game; public interface IGameController { diff --git a/src/Automata.Game/InputSender.cs b/src/Nexus.Game/InputSender.cs similarity index 99% rename from src/Automata.Game/InputSender.cs rename to src/Nexus.Game/InputSender.cs index 4942aeb..b2c6c22 100644 --- a/src/Automata.Game/InputSender.cs +++ b/src/Nexus.Game/InputSender.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Automata.Core; +using Nexus.Core; -namespace Automata.Game; +namespace Nexus.Game; public class InputSender { diff --git a/src/Automata.Game/Automata.Game.csproj b/src/Nexus.Game/Nexus.Game.csproj similarity index 80% rename from src/Automata.Game/Automata.Game.csproj rename to src/Nexus.Game/Nexus.Game.csproj index fa49371..2a268b4 100644 --- a/src/Automata.Game/Automata.Game.csproj +++ b/src/Nexus.Game/Nexus.Game.csproj @@ -6,6 +6,6 @@ true - + diff --git a/src/Automata.Game/WindowManager.cs b/src/Nexus.Game/WindowManager.cs similarity index 99% rename from src/Automata.Game/WindowManager.cs rename to src/Nexus.Game/WindowManager.cs index f593cfb..168252d 100644 --- a/src/Automata.Game/WindowManager.cs +++ b/src/Nexus.Game/WindowManager.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; using Serilog; -namespace Automata.Game; +namespace Nexus.Game; public class WindowManager { diff --git a/src/Roboto.GameOffsets/Components/Actor.cs b/src/Nexus.GameOffsets/Components/Actor.cs similarity index 90% rename from src/Roboto.GameOffsets/Components/Actor.cs rename to src/Nexus.GameOffsets/Components/Actor.cs index e95c6cb..a933bcd 100644 --- a/src/Roboto.GameOffsets/Components/Actor.cs +++ b/src/Nexus.GameOffsets/Components/Actor.cs @@ -1,4 +1,4 @@ -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// /// Actor component offsets — confirmed from ExileCore2. diff --git a/src/Roboto.GameOffsets/Components/ActorDeployedEntity.cs b/src/Nexus.GameOffsets/Components/ActorDeployedEntity.cs similarity index 89% rename from src/Roboto.GameOffsets/Components/ActorDeployedEntity.cs rename to src/Nexus.GameOffsets/Components/ActorDeployedEntity.cs index cfd3811..648cf78 100644 --- a/src/Roboto.GameOffsets/Components/ActorDeployedEntity.cs +++ b/src/Nexus.GameOffsets/Components/ActorDeployedEntity.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// A deployed entity (totem, mine, etc.). [StructLayout(LayoutKind.Sequential, Pack = 1)] diff --git a/src/Roboto.GameOffsets/Components/ActorSkill.cs b/src/Nexus.GameOffsets/Components/ActorSkill.cs similarity index 96% rename from src/Roboto.GameOffsets/Components/ActorSkill.cs rename to src/Nexus.GameOffsets/Components/ActorSkill.cs index 5000be5..1c27db5 100644 --- a/src/Roboto.GameOffsets/Components/ActorSkill.cs +++ b/src/Nexus.GameOffsets/Components/ActorSkill.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// /// An entry in the ActiveSkills vector: shared_ptr pair (0x10 bytes). diff --git a/src/Roboto.GameOffsets/Components/ActorSkillCooldown.cs b/src/Nexus.GameOffsets/Components/ActorSkillCooldown.cs similarity index 92% rename from src/Roboto.GameOffsets/Components/ActorSkillCooldown.cs rename to src/Nexus.GameOffsets/Components/ActorSkillCooldown.cs index d0f242c..819224f 100644 --- a/src/Roboto.GameOffsets/Components/ActorSkillCooldown.cs +++ b/src/Nexus.GameOffsets/Components/ActorSkillCooldown.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// /// Cooldown state for a skill. Entries in Actor+0xB18 vector. diff --git a/src/Roboto.GameOffsets/Components/ActorVaalSkill.cs b/src/Nexus.GameOffsets/Components/ActorVaalSkill.cs similarity index 91% rename from src/Roboto.GameOffsets/Components/ActorVaalSkill.cs rename to src/Nexus.GameOffsets/Components/ActorVaalSkill.cs index 3cdd359..93c08fc 100644 --- a/src/Roboto.GameOffsets/Components/ActorVaalSkill.cs +++ b/src/Nexus.GameOffsets/Components/ActorVaalSkill.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Vaal soul tracking. [StructLayout(LayoutKind.Explicit, Pack = 1)] diff --git a/src/Roboto.GameOffsets/Components/Animated.cs b/src/Nexus.GameOffsets/Components/Animated.cs similarity index 90% rename from src/Roboto.GameOffsets/Components/Animated.cs rename to src/Nexus.GameOffsets/Components/Animated.cs index 3766d1a..2425ff4 100644 --- a/src/Roboto.GameOffsets/Components/Animated.cs +++ b/src/Nexus.GameOffsets/Components/Animated.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Animated component — reference to the animated entity. [StructLayout(LayoutKind.Explicit, Size = 0x300)] diff --git a/src/Roboto.GameOffsets/Components/Buffs.cs b/src/Nexus.GameOffsets/Components/Buffs.cs similarity index 90% rename from src/Roboto.GameOffsets/Components/Buffs.cs rename to src/Nexus.GameOffsets/Components/Buffs.cs index 761392d..db335f9 100644 --- a/src/Roboto.GameOffsets/Components/Buffs.cs +++ b/src/Nexus.GameOffsets/Components/Buffs.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Buffs component — active status effects. [StructLayout(LayoutKind.Explicit, Size = 0x178)] diff --git a/src/Roboto.GameOffsets/Components/Charges.cs b/src/Nexus.GameOffsets/Components/Charges.cs similarity index 93% rename from src/Roboto.GameOffsets/Components/Charges.cs rename to src/Nexus.GameOffsets/Components/Charges.cs index c2231b2..4f84081 100644 --- a/src/Roboto.GameOffsets/Components/Charges.cs +++ b/src/Nexus.GameOffsets/Components/Charges.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Charges component — flask/skill charges. [StructLayout(LayoutKind.Explicit, Size = 0x20)] diff --git a/src/Roboto.GameOffsets/Components/Chest.cs b/src/Nexus.GameOffsets/Components/Chest.cs similarity index 94% rename from src/Roboto.GameOffsets/Components/Chest.cs rename to src/Nexus.GameOffsets/Components/Chest.cs index b86d397..688fffa 100644 --- a/src/Roboto.GameOffsets/Components/Chest.cs +++ b/src/Nexus.GameOffsets/Components/Chest.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Chest component. [StructLayout(LayoutKind.Explicit, Size = 0x170)] diff --git a/src/Roboto.GameOffsets/Components/ComponentHeader.cs b/src/Nexus.GameOffsets/Components/ComponentHeader.cs similarity index 87% rename from src/Roboto.GameOffsets/Components/ComponentHeader.cs rename to src/Nexus.GameOffsets/Components/ComponentHeader.cs index f0f6910..2db11b0 100644 --- a/src/Roboto.GameOffsets/Components/ComponentHeader.cs +++ b/src/Nexus.GameOffsets/Components/ComponentHeader.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Common header at the start of every component. [StructLayout(LayoutKind.Explicit, Size = 0x10)] diff --git a/src/Roboto.GameOffsets/Components/Life.cs b/src/Nexus.GameOffsets/Components/Life.cs similarity index 95% rename from src/Roboto.GameOffsets/Components/Life.cs rename to src/Nexus.GameOffsets/Components/Life.cs index f85275b..2b4e4f1 100644 --- a/src/Roboto.GameOffsets/Components/Life.cs +++ b/src/Nexus.GameOffsets/Components/Life.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Life component — contains Health, Mana, and ES vitals. [StructLayout(LayoutKind.Explicit, Size = 0x268)] diff --git a/src/Roboto.GameOffsets/Components/Mods.cs b/src/Nexus.GameOffsets/Components/Mods.cs similarity index 91% rename from src/Roboto.GameOffsets/Components/Mods.cs rename to src/Nexus.GameOffsets/Components/Mods.cs index 9184a09..20e901b 100644 --- a/src/Roboto.GameOffsets/Components/Mods.cs +++ b/src/Nexus.GameOffsets/Components/Mods.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Mods component — ModsAndObjectMagicProperties inline at +0x00. Rarity at +0x94. [StructLayout(LayoutKind.Explicit, Pack = 1, Size = 0x1A0)] diff --git a/src/Roboto.GameOffsets/Components/Player.cs b/src/Nexus.GameOffsets/Components/Player.cs similarity index 87% rename from src/Roboto.GameOffsets/Components/Player.cs rename to src/Nexus.GameOffsets/Components/Player.cs index 7fa7af5..74c0e35 100644 --- a/src/Roboto.GameOffsets/Components/Player.cs +++ b/src/Nexus.GameOffsets/Components/Player.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Player component — name, XP, level. [StructLayout(LayoutKind.Explicit, Size = 0x208)] diff --git a/src/Roboto.GameOffsets/Components/Positioned.cs b/src/Nexus.GameOffsets/Components/Positioned.cs similarity index 90% rename from src/Roboto.GameOffsets/Components/Positioned.cs rename to src/Nexus.GameOffsets/Components/Positioned.cs index be35bda..21da95a 100644 --- a/src/Roboto.GameOffsets/Components/Positioned.cs +++ b/src/Nexus.GameOffsets/Components/Positioned.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Positioned component — reaction (friendly/hostile/neutral). [StructLayout(LayoutKind.Explicit, Size = 0x1E8)] diff --git a/src/Roboto.GameOffsets/Components/Render.cs b/src/Nexus.GameOffsets/Components/Render.cs similarity index 93% rename from src/Roboto.GameOffsets/Components/Render.cs rename to src/Nexus.GameOffsets/Components/Render.cs index 7301451..c7f868d 100644 --- a/src/Roboto.GameOffsets/Components/Render.cs +++ b/src/Nexus.GameOffsets/Components/Render.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Render component — world position, bounds, terrain height. [StructLayout(LayoutKind.Explicit, Size = 0x1B0)] diff --git a/src/Roboto.GameOffsets/Components/Shrine.cs b/src/Nexus.GameOffsets/Components/Shrine.cs similarity index 88% rename from src/Roboto.GameOffsets/Components/Shrine.cs rename to src/Nexus.GameOffsets/Components/Shrine.cs index 680efe4..45968ab 100644 --- a/src/Roboto.GameOffsets/Components/Shrine.cs +++ b/src/Nexus.GameOffsets/Components/Shrine.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Shrine component. [StructLayout(LayoutKind.Explicit, Size = 0x28)] diff --git a/src/Roboto.GameOffsets/Components/StateMachine.cs b/src/Nexus.GameOffsets/Components/StateMachine.cs similarity index 86% rename from src/Roboto.GameOffsets/Components/StateMachine.cs rename to src/Nexus.GameOffsets/Components/StateMachine.cs index d912bf7..2ce904b 100644 --- a/src/Roboto.GameOffsets/Components/StateMachine.cs +++ b/src/Nexus.GameOffsets/Components/StateMachine.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// StateMachine component — entity state management. [StructLayout(LayoutKind.Explicit, Size = 0x178)] diff --git a/src/Roboto.GameOffsets/Components/Stats.cs b/src/Nexus.GameOffsets/Components/Stats.cs similarity index 91% rename from src/Roboto.GameOffsets/Components/Stats.cs rename to src/Nexus.GameOffsets/Components/Stats.cs index 5f74b43..c6b43db 100644 --- a/src/Roboto.GameOffsets/Components/Stats.cs +++ b/src/Nexus.GameOffsets/Components/Stats.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Stats component — item stats, weapon index, shapeshift. [StructLayout(LayoutKind.Explicit, Size = 0x180)] diff --git a/src/Roboto.GameOffsets/Components/Targetable.cs b/src/Nexus.GameOffsets/Components/Targetable.cs similarity index 94% rename from src/Roboto.GameOffsets/Components/Targetable.cs rename to src/Nexus.GameOffsets/Components/Targetable.cs index bc74585..3dfdb4e 100644 --- a/src/Roboto.GameOffsets/Components/Targetable.cs +++ b/src/Nexus.GameOffsets/Components/Targetable.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Targetable component — whether entity can be targeted/highlighted. [StructLayout(LayoutKind.Explicit, Pack = 1, Size = 0x58)] diff --git a/src/Roboto.GameOffsets/Components/Transitionable.cs b/src/Nexus.GameOffsets/Components/Transitionable.cs similarity index 89% rename from src/Roboto.GameOffsets/Components/Transitionable.cs rename to src/Nexus.GameOffsets/Components/Transitionable.cs index 25ec8d9..79f4f24 100644 --- a/src/Roboto.GameOffsets/Components/Transitionable.cs +++ b/src/Nexus.GameOffsets/Components/Transitionable.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// Transitionable component — area transition state. [StructLayout(LayoutKind.Explicit, Size = 0x128)] diff --git a/src/Roboto.GameOffsets/Components/TriggerableBlockage.cs b/src/Nexus.GameOffsets/Components/TriggerableBlockage.cs similarity index 90% rename from src/Roboto.GameOffsets/Components/TriggerableBlockage.cs rename to src/Nexus.GameOffsets/Components/TriggerableBlockage.cs index 4268448..90d1b82 100644 --- a/src/Roboto.GameOffsets/Components/TriggerableBlockage.cs +++ b/src/Nexus.GameOffsets/Components/TriggerableBlockage.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// TriggerableBlockage component — door/gate blocked state. [StructLayout(LayoutKind.Explicit, Size = 0x38)] diff --git a/src/Roboto.GameOffsets/Components/WorldItem.cs b/src/Nexus.GameOffsets/Components/WorldItem.cs similarity index 91% rename from src/Roboto.GameOffsets/Components/WorldItem.cs rename to src/Nexus.GameOffsets/Components/WorldItem.cs index ed39760..cf462e8 100644 --- a/src/Roboto.GameOffsets/Components/WorldItem.cs +++ b/src/Nexus.GameOffsets/Components/WorldItem.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Components; +namespace Nexus.GameOffsets.Components; /// WorldItem component — contains pointer to inner item entity at +0x28 (TBD from diagnostic). [StructLayout(LayoutKind.Explicit, Size = 0x30)] diff --git a/src/Roboto.GameOffsets/Entities/Entity.cs b/src/Nexus.GameOffsets/Entities/Entity.cs similarity index 96% rename from src/Roboto.GameOffsets/Entities/Entity.cs rename to src/Nexus.GameOffsets/Entities/Entity.cs index c6b7a00..d2ebfa5 100644 --- a/src/Roboto.GameOffsets/Entities/Entity.cs +++ b/src/Nexus.GameOffsets/Entities/Entity.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.Entities; +namespace Nexus.GameOffsets.Entities; /// Item struct — wraps an entity pointer for inventory items. [StructLayout(LayoutKind.Sequential, Pack = 1)] diff --git a/src/Roboto.GameOffsets/Entities/EntityTreeNode.cs b/src/Nexus.GameOffsets/Entities/EntityTreeNode.cs similarity index 97% rename from src/Roboto.GameOffsets/Entities/EntityTreeNode.cs rename to src/Nexus.GameOffsets/Entities/EntityTreeNode.cs index 9b9e0cd..a37cd6e 100644 --- a/src/Roboto.GameOffsets/Entities/EntityTreeNode.cs +++ b/src/Nexus.GameOffsets/Entities/EntityTreeNode.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Entities; +namespace Nexus.GameOffsets.Entities; /// MSVC std::map tree node for entity storage. Red-black tree node layout. [StructLayout(LayoutKind.Explicit, Size = 0x30)] diff --git a/src/Roboto.GameOffsets/Natives/StdBucket.cs b/src/Nexus.GameOffsets/Natives/StdBucket.cs similarity index 87% rename from src/Roboto.GameOffsets/Natives/StdBucket.cs rename to src/Nexus.GameOffsets/Natives/StdBucket.cs index 94f2b84..ee515de 100644 --- a/src/Roboto.GameOffsets/Natives/StdBucket.cs +++ b/src/Nexus.GameOffsets/Natives/StdBucket.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Natives; +namespace Nexus.GameOffsets.Natives; /// Bucket structure used in hash containers. [StructLayout(LayoutKind.Explicit, Size = 0x20)] diff --git a/src/Roboto.GameOffsets/Natives/StdList.cs b/src/Nexus.GameOffsets/Natives/StdList.cs similarity index 94% rename from src/Roboto.GameOffsets/Natives/StdList.cs rename to src/Nexus.GameOffsets/Natives/StdList.cs index a1284c7..97dc432 100644 --- a/src/Roboto.GameOffsets/Natives/StdList.cs +++ b/src/Nexus.GameOffsets/Natives/StdList.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Natives; +namespace Nexus.GameOffsets.Natives; /// MSVC std::list layout: head node pointer + size. [StructLayout(LayoutKind.Sequential, Pack = 1)] diff --git a/src/Roboto.GameOffsets/Natives/StdMap.cs b/src/Nexus.GameOffsets/Natives/StdMap.cs similarity index 96% rename from src/Roboto.GameOffsets/Natives/StdMap.cs rename to src/Nexus.GameOffsets/Natives/StdMap.cs index 6195ad1..fac819a 100644 --- a/src/Roboto.GameOffsets/Natives/StdMap.cs +++ b/src/Nexus.GameOffsets/Natives/StdMap.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Natives; +namespace Nexus.GameOffsets.Natives; /// MSVC std::map layout: head node pointer + size. [StructLayout(LayoutKind.Sequential, Pack = 1)] diff --git a/src/Roboto.GameOffsets/Natives/StdTuple.cs b/src/Nexus.GameOffsets/Natives/StdTuple.cs similarity index 92% rename from src/Roboto.GameOffsets/Natives/StdTuple.cs rename to src/Nexus.GameOffsets/Natives/StdTuple.cs index 2258e00..6d55f8a 100644 --- a/src/Roboto.GameOffsets/Natives/StdTuple.cs +++ b/src/Nexus.GameOffsets/Natives/StdTuple.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Natives; +namespace Nexus.GameOffsets.Natives; /// 2D tuple (e.g., terrain dimensions). [StructLayout(LayoutKind.Sequential, Pack = 1)] diff --git a/src/Roboto.GameOffsets/Natives/StdVector.cs b/src/Nexus.GameOffsets/Natives/StdVector.cs similarity index 90% rename from src/Roboto.GameOffsets/Natives/StdVector.cs rename to src/Nexus.GameOffsets/Natives/StdVector.cs index beeb591..3e3028f 100644 --- a/src/Roboto.GameOffsets/Natives/StdVector.cs +++ b/src/Nexus.GameOffsets/Natives/StdVector.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Natives; +namespace Nexus.GameOffsets.Natives; /// MSVC std::vector layout: begin/end/capacity pointers. [StructLayout(LayoutKind.Sequential, Pack = 1)] diff --git a/src/Roboto.GameOffsets/Natives/StdWString.cs b/src/Nexus.GameOffsets/Natives/StdWString.cs similarity index 95% rename from src/Roboto.GameOffsets/Natives/StdWString.cs rename to src/Nexus.GameOffsets/Natives/StdWString.cs index 0587dfb..cc38300 100644 --- a/src/Roboto.GameOffsets/Natives/StdWString.cs +++ b/src/Nexus.GameOffsets/Natives/StdWString.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.Natives; +namespace Nexus.GameOffsets.Natives; /// MSVC std::wstring (basic_string<wchar_t>) with SSO. [StructLayout(LayoutKind.Explicit, Size = 0x20)] diff --git a/src/Roboto.GameOffsets/Natives/Util.cs b/src/Nexus.GameOffsets/Natives/Util.cs similarity index 86% rename from src/Roboto.GameOffsets/Natives/Util.cs rename to src/Nexus.GameOffsets/Natives/Util.cs index e4972ca..2cd77ef 100644 --- a/src/Roboto.GameOffsets/Natives/Util.cs +++ b/src/Nexus.GameOffsets/Natives/Util.cs @@ -1,4 +1,4 @@ -namespace Roboto.GameOffsets.Natives; +namespace Nexus.GameOffsets.Natives; public static class Util { diff --git a/src/Roboto.GameOffsets/Roboto.GameOffsets.csproj b/src/Nexus.GameOffsets/Nexus.GameOffsets.csproj similarity index 100% rename from src/Roboto.GameOffsets/Roboto.GameOffsets.csproj rename to src/Nexus.GameOffsets/Nexus.GameOffsets.csproj diff --git a/src/Roboto.GameOffsets/States/AreaInstance.cs b/src/Nexus.GameOffsets/States/AreaInstance.cs similarity index 97% rename from src/Roboto.GameOffsets/States/AreaInstance.cs rename to src/Nexus.GameOffsets/States/AreaInstance.cs index 6e02ac2..7c6afe4 100644 --- a/src/Roboto.GameOffsets/States/AreaInstance.cs +++ b/src/Nexus.GameOffsets/States/AreaInstance.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.States; +namespace Nexus.GameOffsets.States; /// AreaInstance (IngameData) — current area data, entities, terrain. [StructLayout(LayoutKind.Explicit, Size = 0xCD0)] diff --git a/src/Roboto.GameOffsets/States/AreaLoading.cs b/src/Nexus.GameOffsets/States/AreaLoading.cs similarity index 94% rename from src/Roboto.GameOffsets/States/AreaLoading.cs rename to src/Nexus.GameOffsets/States/AreaLoading.cs index 6774c68..af34573 100644 --- a/src/Roboto.GameOffsets/States/AreaLoading.cs +++ b/src/Nexus.GameOffsets/States/AreaLoading.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.States; +namespace Nexus.GameOffsets.States; /// AreaLoading state — loading screen info. [StructLayout(LayoutKind.Explicit, Size = 0xE58)] diff --git a/src/Roboto.GameOffsets/States/ImportantUiElements.cs b/src/Nexus.GameOffsets/States/ImportantUiElements.cs similarity index 95% rename from src/Roboto.GameOffsets/States/ImportantUiElements.cs rename to src/Nexus.GameOffsets/States/ImportantUiElements.cs index b636ed3..ff5e83e 100644 --- a/src/Roboto.GameOffsets/States/ImportantUiElements.cs +++ b/src/Nexus.GameOffsets/States/ImportantUiElements.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.States; +namespace Nexus.GameOffsets.States; /// Important UI element pointers within InGameState. [StructLayout(LayoutKind.Explicit, Size = 0x740)] diff --git a/src/Roboto.GameOffsets/States/InGameState.cs b/src/Nexus.GameOffsets/States/InGameState.cs similarity index 96% rename from src/Roboto.GameOffsets/States/InGameState.cs rename to src/Nexus.GameOffsets/States/InGameState.cs index ff49244..f3a657f 100644 --- a/src/Roboto.GameOffsets/States/InGameState.cs +++ b/src/Nexus.GameOffsets/States/InGameState.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.GameOffsets.States; +namespace Nexus.GameOffsets.States; /// InGameState — the main in-game state containing all sub-structures. [StructLayout(LayoutKind.Explicit, Size = 0x310)] diff --git a/src/Roboto.GameOffsets/States/Inventory.cs b/src/Nexus.GameOffsets/States/Inventory.cs similarity index 95% rename from src/Roboto.GameOffsets/States/Inventory.cs rename to src/Nexus.GameOffsets/States/Inventory.cs index 81d0acc..b0bb0a1 100644 --- a/src/Roboto.GameOffsets/States/Inventory.cs +++ b/src/Nexus.GameOffsets/States/Inventory.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.States; +namespace Nexus.GameOffsets.States; /// Pre-inventory wrapper — contains the actual inventory pointer. [StructLayout(LayoutKind.Explicit, Size = 0x10)] diff --git a/src/Roboto.GameOffsets/States/ServerData.cs b/src/Nexus.GameOffsets/States/ServerData.cs similarity index 91% rename from src/Roboto.GameOffsets/States/ServerData.cs rename to src/Nexus.GameOffsets/States/ServerData.cs index de1e35c..705d811 100644 --- a/src/Roboto.GameOffsets/States/ServerData.cs +++ b/src/Nexus.GameOffsets/States/ServerData.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Natives; -namespace Roboto.GameOffsets.States; +namespace Nexus.GameOffsets.States; /// ServerData — player server-side data. [StructLayout(LayoutKind.Explicit, Size = 0x58)] diff --git a/src/Roboto.GameOffsets/States/WorldData.cs b/src/Nexus.GameOffsets/States/WorldData.cs similarity index 97% rename from src/Roboto.GameOffsets/States/WorldData.cs rename to src/Nexus.GameOffsets/States/WorldData.cs index badd798..80a131b 100644 --- a/src/Roboto.GameOffsets/States/WorldData.cs +++ b/src/Nexus.GameOffsets/States/WorldData.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; using System.Numerics; -namespace Roboto.GameOffsets.States; +namespace Nexus.GameOffsets.States; /// WorldData — world area details and camera. [StructLayout(LayoutKind.Explicit, Size = 0xA8)] diff --git a/src/Roboto.Input/Humanizer.cs b/src/Nexus.Input/Humanizer.cs similarity index 98% rename from src/Roboto.Input/Humanizer.cs rename to src/Nexus.Input/Humanizer.cs index 36a56ab..668b73d 100644 --- a/src/Roboto.Input/Humanizer.cs +++ b/src/Nexus.Input/Humanizer.cs @@ -1,6 +1,6 @@ -using Roboto.Core; +using Nexus.Core; -namespace Roboto.Input; +namespace Nexus.Input; public sealed class Humanizer { diff --git a/src/Roboto.Input/InterceptionInputController.cs b/src/Nexus.Input/InterceptionInputController.cs similarity index 99% rename from src/Roboto.Input/InterceptionInputController.cs rename to src/Nexus.Input/InterceptionInputController.cs index e4e1ff1..12dfcae 100644 --- a/src/Roboto.Input/InterceptionInputController.cs +++ b/src/Nexus.Input/InterceptionInputController.cs @@ -1,9 +1,9 @@ using System.Runtime.InteropServices; using InputInterceptorNS; -using Roboto.Core; +using Nexus.Core; using Serilog; -namespace Roboto.Input; +namespace Nexus.Input; public sealed partial class InterceptionInputController : IInputController, IDisposable { diff --git a/src/Roboto.Input/Roboto.Input.csproj b/src/Nexus.Input/Nexus.Input.csproj similarity index 89% rename from src/Roboto.Input/Roboto.Input.csproj rename to src/Nexus.Input/Nexus.Input.csproj index d216727..a8e735e 100644 --- a/src/Roboto.Input/Roboto.Input.csproj +++ b/src/Nexus.Input/Nexus.Input.csproj @@ -10,7 +10,7 @@ - + diff --git a/src/Roboto.Input/ScanCodes.cs b/src/Nexus.Input/ScanCodes.cs similarity index 98% rename from src/Roboto.Input/ScanCodes.cs rename to src/Nexus.Input/ScanCodes.cs index d0432ba..959b878 100644 --- a/src/Roboto.Input/ScanCodes.cs +++ b/src/Nexus.Input/ScanCodes.cs @@ -1,4 +1,4 @@ -namespace Roboto.Input; +namespace Nexus.Input; /// /// Hardware scan codes for keyboard input via Interception driver. diff --git a/src/Roboto.Input/SendInputController.cs b/src/Nexus.Input/SendInputController.cs similarity index 99% rename from src/Roboto.Input/SendInputController.cs rename to src/Nexus.Input/SendInputController.cs index 242cb31..8e4ed9d 100644 --- a/src/Roboto.Input/SendInputController.cs +++ b/src/Nexus.Input/SendInputController.cs @@ -1,8 +1,8 @@ using System.Runtime.InteropServices; -using Roboto.Core; +using Nexus.Core; using Serilog; -namespace Roboto.Input; +namespace Nexus.Input; /// /// Fallback input controller using Win32 SendInput with KEYEVENTF_SCANCODE. diff --git a/src/Roboto.Input/interception.dll b/src/Nexus.Input/interception.dll similarity index 100% rename from src/Roboto.Input/interception.dll rename to src/Nexus.Input/interception.dll diff --git a/src/Automata.Inventory/IInventoryManager.cs b/src/Nexus.Inventory/IInventoryManager.cs similarity index 94% rename from src/Automata.Inventory/IInventoryManager.cs rename to src/Nexus.Inventory/IInventoryManager.cs index ee1a93d..9817755 100644 --- a/src/Automata.Inventory/IInventoryManager.cs +++ b/src/Nexus.Inventory/IInventoryManager.cs @@ -1,7 +1,7 @@ -using Automata.Core; -using Automata.Screen; +using Nexus.Core; +using Nexus.Screen; -namespace Automata.Inventory; +namespace Nexus.Inventory; public interface IInventoryManager { diff --git a/src/Automata.Inventory/InventoryManager.cs b/src/Nexus.Inventory/InventoryManager.cs similarity index 99% rename from src/Automata.Inventory/InventoryManager.cs rename to src/Nexus.Inventory/InventoryManager.cs index 1e31c55..c68dc31 100644 --- a/src/Automata.Inventory/InventoryManager.cs +++ b/src/Nexus.Inventory/InventoryManager.cs @@ -1,10 +1,10 @@ -using Automata.Core; -using Automata.Game; -using Automata.GameLog; -using Automata.Screen; +using Nexus.Core; +using Nexus.Game; +using Nexus.GameLog; +using Nexus.Screen; using Serilog; -namespace Automata.Inventory; +namespace Nexus.Inventory; public class InventoryManager : IInventoryManager { diff --git a/src/Automata.Inventory/InventoryTracker.cs b/src/Nexus.Inventory/InventoryTracker.cs similarity index 98% rename from src/Automata.Inventory/InventoryTracker.cs rename to src/Nexus.Inventory/InventoryTracker.cs index ef33f4f..562fc63 100644 --- a/src/Automata.Inventory/InventoryTracker.cs +++ b/src/Nexus.Inventory/InventoryTracker.cs @@ -1,8 +1,8 @@ -using Automata.Core; -using Automata.Screen; +using Nexus.Core; +using Nexus.Screen; using Serilog; -namespace Automata.Inventory; +namespace Nexus.Inventory; public class PlacedItem { diff --git a/src/Nexus.Inventory/Nexus.Inventory.csproj b/src/Nexus.Inventory/Nexus.Inventory.csproj new file mode 100644 index 0000000..6d2333c --- /dev/null +++ b/src/Nexus.Inventory/Nexus.Inventory.csproj @@ -0,0 +1,13 @@ + + + net8.0-windows10.0.19041.0 + enable + enable + + + + + + + + diff --git a/src/Automata.Inventory/StashCalibrator.cs b/src/Nexus.Inventory/StashCalibrator.cs similarity index 98% rename from src/Automata.Inventory/StashCalibrator.cs rename to src/Nexus.Inventory/StashCalibrator.cs index 657f9d6..8c2e576 100644 --- a/src/Automata.Inventory/StashCalibrator.cs +++ b/src/Nexus.Inventory/StashCalibrator.cs @@ -1,9 +1,9 @@ -using Automata.Core; -using Automata.Game; -using Automata.Screen; +using Nexus.Core; +using Nexus.Game; +using Nexus.Screen; using Serilog; -namespace Automata.Inventory; +namespace Nexus.Inventory; public class StashCalibrator { diff --git a/src/Automata.Items/ItemReader.cs b/src/Nexus.Items/ItemReader.cs similarity index 96% rename from src/Automata.Items/ItemReader.cs rename to src/Nexus.Items/ItemReader.cs index 7475780..06b9c37 100644 --- a/src/Automata.Items/ItemReader.cs +++ b/src/Nexus.Items/ItemReader.cs @@ -1,10 +1,10 @@ -using Automata.Core; -using Automata.Game; +using Nexus.Core; +using Nexus.Game; using Sidekick.Apis.Poe.Items; using Sidekick.Apis.Poe.Trade.Parser; using Serilog; -namespace Automata.Items; +namespace Nexus.Items; /// /// Reads item data by hovering and pressing Ctrl+C to copy item text to clipboard. diff --git a/src/Automata.Items/Automata.Items.csproj b/src/Nexus.Items/Nexus.Items.csproj similarity index 76% rename from src/Automata.Items/Automata.Items.csproj rename to src/Nexus.Items/Nexus.Items.csproj index 014b17a..69f3196 100644 --- a/src/Automata.Items/Automata.Items.csproj +++ b/src/Nexus.Items/Nexus.Items.csproj @@ -5,8 +5,8 @@ enable - - + + diff --git a/src/Automata.Items/SidekickBootstrapper.cs b/src/Nexus.Items/SidekickBootstrapper.cs similarity index 98% rename from src/Automata.Items/SidekickBootstrapper.cs rename to src/Nexus.Items/SidekickBootstrapper.cs index 8b3b215..7cf81a5 100644 --- a/src/Automata.Items/SidekickBootstrapper.cs +++ b/src/Nexus.Items/SidekickBootstrapper.cs @@ -9,7 +9,7 @@ using Sidekick.Common.Settings; using Sidekick.Data; using Serilog; -namespace Automata.Items; +namespace Nexus.Items; /// /// Bootstraps a minimal Sidekick DI container for item parsing. diff --git a/src/Automata.Items/SidekickSettingsStub.cs b/src/Nexus.Items/SidekickSettingsStub.cs similarity index 98% rename from src/Automata.Items/SidekickSettingsStub.cs rename to src/Nexus.Items/SidekickSettingsStub.cs index 4a8a54b..9dfa7fe 100644 --- a/src/Automata.Items/SidekickSettingsStub.cs +++ b/src/Nexus.Items/SidekickSettingsStub.cs @@ -1,6 +1,6 @@ using Sidekick.Common.Settings; -namespace Automata.Items; +namespace Nexus.Items; /// /// Minimal ISettingsService returning defaults for Sidekick initialization. diff --git a/src/Roboto.Memory/Diagnostics/MemoryDiagnostics.cs b/src/Nexus.Memory/Diagnostics/MemoryDiagnostics.cs similarity index 99% rename from src/Roboto.Memory/Diagnostics/MemoryDiagnostics.cs rename to src/Nexus.Memory/Diagnostics/MemoryDiagnostics.cs index 95c9df4..41e9204 100644 --- a/src/Roboto.Memory/Diagnostics/MemoryDiagnostics.cs +++ b/src/Nexus.Memory/Diagnostics/MemoryDiagnostics.cs @@ -3,10 +3,10 @@ using System.Drawing.Imaging; using System.Globalization; using System.Runtime.InteropServices; using System.Text; -using Roboto.Memory.Objects; +using Nexus.Memory.Objects; using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Diagnostic and scan methods extracted from GameMemoryReader. @@ -7583,7 +7583,7 @@ public sealed class MemoryDiagnostics var modsPtr = _ctx.Memory.ReadPointer(iFirst + modsIdx * 8); if (modsPtr != 0) { - var mods = _ctx.Memory.Read(modsPtr); + var mods = _ctx.Memory.Read(modsPtr); sb.AppendLine($" Mods.Rarity: {mods.Rarity}"); } } diff --git a/src/Roboto.Memory/Diagnostics/QuestNameLookup.cs b/src/Nexus.Memory/Diagnostics/QuestNameLookup.cs similarity index 98% rename from src/Roboto.Memory/Diagnostics/QuestNameLookup.cs rename to src/Nexus.Memory/Diagnostics/QuestNameLookup.cs index 3cda3e9..cae14b4 100644 --- a/src/Roboto.Memory/Diagnostics/QuestNameLookup.cs +++ b/src/Nexus.Memory/Diagnostics/QuestNameLookup.cs @@ -1,7 +1,7 @@ using System.Text.Json; using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Loads quest name mappings from a JSON file (generated by tools/dump_quest_names.py). diff --git a/src/Roboto.Memory/Files/DatFile.cs b/src/Nexus.Memory/Files/DatFile.cs similarity index 99% rename from src/Roboto.Memory/Files/DatFile.cs rename to src/Nexus.Memory/Files/DatFile.cs index a3fde7c..e220a22 100644 --- a/src/Roboto.Memory/Files/DatFile.cs +++ b/src/Nexus.Memory/Files/DatFile.cs @@ -1,6 +1,6 @@ using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Generic wrapper for a single .dat table. Bulk-reads all rows in one RPM call, diff --git a/src/Roboto.Memory/Files/FileRootScanner.cs b/src/Nexus.Memory/Files/FileRootScanner.cs similarity index 99% rename from src/Roboto.Memory/Files/FileRootScanner.cs rename to src/Nexus.Memory/Files/FileRootScanner.cs index 7287154..12beda1 100644 --- a/src/Roboto.Memory/Files/FileRootScanner.cs +++ b/src/Nexus.Memory/Files/FileRootScanner.cs @@ -1,7 +1,7 @@ using System.Text; using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Info about a discovered .dat file in memory: first record address, row size, and row count. diff --git a/src/Roboto.Memory/Files/FilesContainer.cs b/src/Nexus.Memory/Files/FilesContainer.cs similarity index 99% rename from src/Roboto.Memory/Files/FilesContainer.cs rename to src/Nexus.Memory/Files/FilesContainer.cs index f94957c..07c37c9 100644 --- a/src/Roboto.Memory/Files/FilesContainer.cs +++ b/src/Nexus.Memory/Files/FilesContainer.cs @@ -1,6 +1,6 @@ using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Facade for all in-memory .dat file access. Owns the diff --git a/src/Roboto.Memory/Files/IDatRowParser.cs b/src/Nexus.Memory/Files/IDatRowParser.cs similarity index 97% rename from src/Roboto.Memory/Files/IDatRowParser.cs rename to src/Nexus.Memory/Files/IDatRowParser.cs index e72cbea..be9a8fb 100644 --- a/src/Roboto.Memory/Files/IDatRowParser.cs +++ b/src/Nexus.Memory/Files/IDatRowParser.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Stateless parser for a single .dat row schema. One implementation per .dat file type. diff --git a/src/Roboto.Memory/Files/MapPinRow.cs b/src/Nexus.Memory/Files/MapPinRow.cs similarity index 98% rename from src/Roboto.Memory/Files/MapPinRow.cs rename to src/Nexus.Memory/Files/MapPinRow.cs index 995c7a2..92e44e3 100644 --- a/src/Roboto.Memory/Files/MapPinRow.cs +++ b/src/Nexus.Memory/Files/MapPinRow.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Parsed row from MapPins.dat. diff --git a/src/Roboto.Memory/Files/QuestRow.cs b/src/Nexus.Memory/Files/QuestRow.cs similarity index 98% rename from src/Roboto.Memory/Files/QuestRow.cs rename to src/Nexus.Memory/Files/QuestRow.cs index 321e9b4..7d907f2 100644 --- a/src/Roboto.Memory/Files/QuestRow.cs +++ b/src/Nexus.Memory/Files/QuestRow.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Parsed row from Quest.dat. Fields mirror the in-memory Quest object layout. diff --git a/src/Roboto.Memory/Files/QuestStateRow.cs b/src/Nexus.Memory/Files/QuestStateRow.cs similarity index 99% rename from src/Roboto.Memory/Files/QuestStateRow.cs rename to src/Nexus.Memory/Files/QuestStateRow.cs index 555b725..991d816 100644 --- a/src/Roboto.Memory/Files/QuestStateRow.cs +++ b/src/Nexus.Memory/Files/QuestStateRow.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Parsed row from QuestStates.dat (208 bytes per row). diff --git a/src/Roboto.Memory/Files/WorldAreaRow.cs b/src/Nexus.Memory/Files/WorldAreaRow.cs similarity index 99% rename from src/Roboto.Memory/Files/WorldAreaRow.cs rename to src/Nexus.Memory/Files/WorldAreaRow.cs index ef95113..cb47a02 100644 --- a/src/Roboto.Memory/Files/WorldAreaRow.cs +++ b/src/Nexus.Memory/Files/WorldAreaRow.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Parsed row from WorldAreas.dat (same layout as AreaTemplate offsets). diff --git a/src/Roboto.Memory/GameMemoryReader.cs b/src/Nexus.Memory/GameMemoryReader.cs similarity index 99% rename from src/Roboto.Memory/GameMemoryReader.cs rename to src/Nexus.Memory/GameMemoryReader.cs index acf3743..9fb6667 100644 --- a/src/Roboto.Memory/GameMemoryReader.cs +++ b/src/Nexus.Memory/GameMemoryReader.cs @@ -1,8 +1,8 @@ using System.Numerics; -using Roboto.Memory.Objects; +using Nexus.Memory.Objects; using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; public class GameMemoryReader : IDisposable { diff --git a/src/Roboto.Memory/GameOffsets.cs b/src/Nexus.Memory/GameOffsets.cs similarity index 99% rename from src/Roboto.Memory/GameOffsets.cs rename to src/Nexus.Memory/GameOffsets.cs index 283783d..ac0828c 100644 --- a/src/Roboto.Memory/GameOffsets.cs +++ b/src/Nexus.Memory/GameOffsets.cs @@ -3,7 +3,7 @@ using System.Text.Json; using System.Text.Json.Serialization; using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Reads/writes int as hex strings ("0x1A8") or plain numbers (424). diff --git a/src/Roboto.Memory/GameStateReader.cs b/src/Nexus.Memory/GameStateReader.cs similarity index 99% rename from src/Roboto.Memory/GameStateReader.cs rename to src/Nexus.Memory/GameStateReader.cs index 71ab564..a2d536a 100644 --- a/src/Roboto.Memory/GameStateReader.cs +++ b/src/Nexus.Memory/GameStateReader.cs @@ -1,6 +1,6 @@ using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Resolves GameState → Controller → InGameState, reads state slots, loading/escape state. diff --git a/src/Roboto.Memory/Infrastructure/ComponentReader.cs b/src/Nexus.Memory/Infrastructure/ComponentReader.cs similarity index 99% rename from src/Roboto.Memory/Infrastructure/ComponentReader.cs rename to src/Nexus.Memory/Infrastructure/ComponentReader.cs index 2da856d..eea5517 100644 --- a/src/Roboto.Memory/Infrastructure/ComponentReader.cs +++ b/src/Nexus.Memory/Infrastructure/ComponentReader.cs @@ -1,9 +1,9 @@ using System.Text; -using Roboto.GameOffsets.Components; -using Roboto.GameOffsets.Natives; +using Nexus.GameOffsets.Components; +using Nexus.GameOffsets.Natives; using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Reads entity components via ECS: component list discovery, vitals, position, component lookup. diff --git a/src/Roboto.Memory/Infrastructure/MemoryContext.cs b/src/Nexus.Memory/Infrastructure/MemoryContext.cs similarity index 98% rename from src/Roboto.Memory/Infrastructure/MemoryContext.cs rename to src/Nexus.Memory/Infrastructure/MemoryContext.cs index dc42940..9baee9e 100644 --- a/src/Roboto.Memory/Infrastructure/MemoryContext.cs +++ b/src/Nexus.Memory/Infrastructure/MemoryContext.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Shared state for all memory reader classes. Holds the process handle, offsets, registry, diff --git a/src/Roboto.Memory/Infrastructure/MemoryProfiler.cs b/src/Nexus.Memory/Infrastructure/MemoryProfiler.cs similarity index 98% rename from src/Roboto.Memory/Infrastructure/MemoryProfiler.cs rename to src/Nexus.Memory/Infrastructure/MemoryProfiler.cs index e7d5626..390a8e8 100644 --- a/src/Roboto.Memory/Infrastructure/MemoryProfiler.cs +++ b/src/Nexus.Memory/Infrastructure/MemoryProfiler.cs @@ -1,6 +1,6 @@ using System.Collections.Concurrent; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Thread-static section profiler for memory reads. When enabled, attributes each diff --git a/src/Roboto.Memory/Infrastructure/MsvcStringReader.cs b/src/Nexus.Memory/Infrastructure/MsvcStringReader.cs similarity index 99% rename from src/Roboto.Memory/Infrastructure/MsvcStringReader.cs rename to src/Nexus.Memory/Infrastructure/MsvcStringReader.cs index c1b0014..110dcf0 100644 --- a/src/Roboto.Memory/Infrastructure/MsvcStringReader.cs +++ b/src/Nexus.Memory/Infrastructure/MsvcStringReader.cs @@ -1,6 +1,6 @@ using System.Text; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Reads MSVC std::string and std::wstring from process memory. diff --git a/src/Roboto.Memory/Infrastructure/Native.cs b/src/Nexus.Memory/Infrastructure/Native.cs similarity index 98% rename from src/Roboto.Memory/Infrastructure/Native.cs rename to src/Nexus.Memory/Infrastructure/Native.cs index 1294226..105c02e 100644 --- a/src/Roboto.Memory/Infrastructure/Native.cs +++ b/src/Nexus.Memory/Infrastructure/Native.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Roboto.Memory; +namespace Nexus.Memory; internal static partial class Native { diff --git a/src/Roboto.Memory/Infrastructure/ObjectRegistry.cs b/src/Nexus.Memory/Infrastructure/ObjectRegistry.cs similarity index 99% rename from src/Roboto.Memory/Infrastructure/ObjectRegistry.cs rename to src/Nexus.Memory/Infrastructure/ObjectRegistry.cs index 020ed1c..92f8cb5 100644 --- a/src/Roboto.Memory/Infrastructure/ObjectRegistry.cs +++ b/src/Nexus.Memory/Infrastructure/ObjectRegistry.cs @@ -1,7 +1,7 @@ using System.Text.Json; using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Persistent registry of discovered strings, organized by category. diff --git a/src/Roboto.Memory/Infrastructure/PatternScanner.cs b/src/Nexus.Memory/Infrastructure/PatternScanner.cs similarity index 99% rename from src/Roboto.Memory/Infrastructure/PatternScanner.cs rename to src/Nexus.Memory/Infrastructure/PatternScanner.cs index 379d880..ce3e9c7 100644 --- a/src/Roboto.Memory/Infrastructure/PatternScanner.cs +++ b/src/Nexus.Memory/Infrastructure/PatternScanner.cs @@ -1,6 +1,6 @@ using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; public sealed class PatternScanner { diff --git a/src/Roboto.Memory/Infrastructure/ProcessMemory.cs b/src/Nexus.Memory/Infrastructure/ProcessMemory.cs similarity index 99% rename from src/Roboto.Memory/Infrastructure/ProcessMemory.cs rename to src/Nexus.Memory/Infrastructure/ProcessMemory.cs index 1f1d1e4..72a9435 100644 --- a/src/Roboto.Memory/Infrastructure/ProcessMemory.cs +++ b/src/Nexus.Memory/Infrastructure/ProcessMemory.cs @@ -2,7 +2,7 @@ using System.Diagnostics; using System.Runtime.CompilerServices; using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; public sealed class ProcessMemory : IDisposable { diff --git a/src/Roboto.Memory/Infrastructure/RttiResolver.cs b/src/Nexus.Memory/Infrastructure/RttiResolver.cs similarity index 98% rename from src/Roboto.Memory/Infrastructure/RttiResolver.cs rename to src/Nexus.Memory/Infrastructure/RttiResolver.cs index 0337b4f..a1b02fc 100644 --- a/src/Roboto.Memory/Infrastructure/RttiResolver.cs +++ b/src/Nexus.Memory/Infrastructure/RttiResolver.cs @@ -1,6 +1,6 @@ using System.Text; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Resolves MSVC x64 RTTI type names from vtable addresses and classifies pointers. diff --git a/src/Roboto.Memory/Roboto.Memory.csproj b/src/Nexus.Memory/Nexus.Memory.csproj similarity index 84% rename from src/Roboto.Memory/Roboto.Memory.csproj rename to src/Nexus.Memory/Nexus.Memory.csproj index ebdf0c2..d43d983 100644 --- a/src/Roboto.Memory/Roboto.Memory.csproj +++ b/src/Nexus.Memory/Nexus.Memory.csproj @@ -10,6 +10,6 @@ - + diff --git a/src/Roboto.Memory/Objects/AreaInstance.cs b/src/Nexus.Memory/Objects/AreaInstance.cs similarity index 99% rename from src/Roboto.Memory/Objects/AreaInstance.cs rename to src/Nexus.Memory/Objects/AreaInstance.cs index 644e605..0c7fb53 100644 --- a/src/Roboto.Memory/Objects/AreaInstance.cs +++ b/src/Nexus.Memory/Objects/AreaInstance.cs @@ -1,6 +1,6 @@ -using Roboto.Memory; +using Nexus.Memory; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads fields from the AreaInstance (IngameData) address. diff --git a/src/Roboto.Memory/Objects/AreaLoading.cs b/src/Nexus.Memory/Objects/AreaLoading.cs similarity index 94% rename from src/Roboto.Memory/Objects/AreaLoading.cs rename to src/Nexus.Memory/Objects/AreaLoading.cs index 37f93b2..de10f14 100644 --- a/src/Roboto.Memory/Objects/AreaLoading.cs +++ b/src/Nexus.Memory/Objects/AreaLoading.cs @@ -1,6 +1,6 @@ -using Roboto.Memory; +using Nexus.Memory; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads AreaLoading state (slot 0). Individual field reads — the full struct is 3672B, wasteful to bulk-read. diff --git a/src/Roboto.Memory/Objects/AreaTemplate.cs b/src/Nexus.Memory/Objects/AreaTemplate.cs similarity index 98% rename from src/Roboto.Memory/Objects/AreaTemplate.cs rename to src/Nexus.Memory/Objects/AreaTemplate.cs index 2ee258d..7337936 100644 --- a/src/Roboto.Memory/Objects/AreaTemplate.cs +++ b/src/Nexus.Memory/Objects/AreaTemplate.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads AreaTemplate fields from WorldData → WorldAreaDetailsPtr. diff --git a/src/Roboto.Memory/Objects/EntityList.cs b/src/Nexus.Memory/Objects/EntityList.cs similarity index 99% rename from src/Roboto.Memory/Objects/EntityList.cs rename to src/Nexus.Memory/Objects/EntityList.cs index c7dc3f4..bfd8f98 100644 --- a/src/Roboto.Memory/Objects/EntityList.cs +++ b/src/Nexus.Memory/Objects/EntityList.cs @@ -1,8 +1,8 @@ -using Roboto.Memory; -using Roboto.GameOffsets.Components; -using Roboto.GameOffsets.Entities; +using Nexus.Memory; +using Nexus.GameOffsets.Components; +using Nexus.GameOffsets.Entities; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads entity list from AreaInstance's std::map red-black tree. diff --git a/src/Roboto.Memory/Objects/GameStateType.cs b/src/Nexus.Memory/Objects/GameStateType.cs similarity index 95% rename from src/Roboto.Memory/Objects/GameStateType.cs rename to src/Nexus.Memory/Objects/GameStateType.cs index 421b04f..254083c 100644 --- a/src/Roboto.Memory/Objects/GameStateType.cs +++ b/src/Nexus.Memory/Objects/GameStateType.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Game state types by slot index. Order must match the state array in the controller. diff --git a/src/Roboto.Memory/Objects/GameStates.cs b/src/Nexus.Memory/Objects/GameStates.cs similarity index 99% rename from src/Roboto.Memory/Objects/GameStates.cs rename to src/Nexus.Memory/Objects/GameStates.cs index 1c35d2c..1089229 100644 --- a/src/Roboto.Memory/Objects/GameStates.cs +++ b/src/Nexus.Memory/Objects/GameStates.cs @@ -1,6 +1,6 @@ -using Roboto.Memory; +using Nexus.Memory; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Root state orchestrator. Reads controller from GameStateBase, resolves state slot pointers, diff --git a/src/Roboto.Memory/Objects/InGameState.cs b/src/Nexus.Memory/Objects/InGameState.cs similarity index 95% rename from src/Roboto.Memory/Objects/InGameState.cs rename to src/Nexus.Memory/Objects/InGameState.cs index 87e678c..080b1b3 100644 --- a/src/Roboto.Memory/Objects/InGameState.cs +++ b/src/Nexus.Memory/Objects/InGameState.cs @@ -1,7 +1,7 @@ -using Roboto.Memory; -using IgsStruct = Roboto.GameOffsets.States.InGameState; +using Nexus.Memory; +using IgsStruct = Nexus.GameOffsets.States.InGameState; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads InGameState struct (784B, 1 RPM instead of 4 individual reads). diff --git a/src/Roboto.Memory/Objects/PlayerSkills.cs b/src/Nexus.Memory/Objects/PlayerSkills.cs similarity index 98% rename from src/Roboto.Memory/Objects/PlayerSkills.cs rename to src/Nexus.Memory/Objects/PlayerSkills.cs index ba1dff8..68e11aa 100644 --- a/src/Roboto.Memory/Objects/PlayerSkills.cs +++ b/src/Nexus.Memory/Objects/PlayerSkills.cs @@ -1,7 +1,7 @@ -using Roboto.Memory; -using Roboto.GameOffsets.Components; +using Nexus.Memory; +using Nexus.GameOffsets.Components; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads active skills from the local player's Actor component. diff --git a/src/Roboto.Memory/Objects/QuestFlags.cs b/src/Nexus.Memory/Objects/QuestFlags.cs similarity index 99% rename from src/Roboto.Memory/Objects/QuestFlags.cs rename to src/Nexus.Memory/Objects/QuestFlags.cs index 969ee14..dc15645 100644 --- a/src/Roboto.Memory/Objects/QuestFlags.cs +++ b/src/Nexus.Memory/Objects/QuestFlags.cs @@ -1,7 +1,7 @@ -using Roboto.Memory; +using Nexus.Memory; using Serilog; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads quest flags from ServerData → PlayerServerData → QuestFlags. diff --git a/src/Roboto.Memory/Objects/Terrain.cs b/src/Nexus.Memory/Objects/Terrain.cs similarity index 98% rename from src/Roboto.Memory/Objects/Terrain.cs rename to src/Nexus.Memory/Objects/Terrain.cs index c9fe865..8c18033 100644 --- a/src/Roboto.Memory/Objects/Terrain.cs +++ b/src/Nexus.Memory/Objects/Terrain.cs @@ -1,8 +1,8 @@ -using Roboto.Memory; +using Nexus.Memory; using Serilog; -using TerrainStruct = Roboto.GameOffsets.States.Terrain; +using TerrainStruct = Nexus.GameOffsets.States.Terrain; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads terrain walkability grid from AreaInstance. diff --git a/src/Roboto.Memory/Objects/UIElements.cs b/src/Nexus.Memory/Objects/UIElements.cs similarity index 99% rename from src/Roboto.Memory/Objects/UIElements.cs rename to src/Nexus.Memory/Objects/UIElements.cs index 1bcf01b..d0672a7 100644 --- a/src/Roboto.Memory/Objects/UIElements.cs +++ b/src/Nexus.Memory/Objects/UIElements.cs @@ -1,6 +1,6 @@ using System.Text; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads the UIElement tree from InGameState → UiRootStruct → GameUi. diff --git a/src/Roboto.Memory/Objects/WorldData.cs b/src/Nexus.Memory/Objects/WorldData.cs similarity index 94% rename from src/Roboto.Memory/Objects/WorldData.cs rename to src/Nexus.Memory/Objects/WorldData.cs index 3f4ad12..e04ca65 100644 --- a/src/Roboto.Memory/Objects/WorldData.cs +++ b/src/Nexus.Memory/Objects/WorldData.cs @@ -1,8 +1,8 @@ using System.Numerics; -using Roboto.Memory; -using WdStruct = Roboto.GameOffsets.States.WorldData; +using Nexus.Memory; +using WdStruct = Nexus.GameOffsets.States.WorldData; -namespace Roboto.Memory.Objects; +namespace Nexus.Memory.Objects; /// /// Reads WorldData struct (168B, 1 RPM) and resolves the camera matrix. diff --git a/src/Roboto.Memory/QuestStateLookup.cs b/src/Nexus.Memory/QuestStateLookup.cs similarity index 99% rename from src/Roboto.Memory/QuestStateLookup.cs rename to src/Nexus.Memory/QuestStateLookup.cs index aa67409..3b8beed 100644 --- a/src/Roboto.Memory/QuestStateLookup.cs +++ b/src/Nexus.Memory/QuestStateLookup.cs @@ -1,6 +1,6 @@ using Serilog; -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Builds a (questDatRowPtr, stateId) → text lookup from QuestStates.dat. diff --git a/src/Roboto.Memory/RemoteObject.cs b/src/Nexus.Memory/RemoteObject.cs similarity index 97% rename from src/Roboto.Memory/RemoteObject.cs rename to src/Nexus.Memory/RemoteObject.cs index 6afc901..cdffe06 100644 --- a/src/Roboto.Memory/RemoteObject.cs +++ b/src/Nexus.Memory/RemoteObject.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Base class for state objects that read a section of game memory. diff --git a/src/Roboto.Memory/Snapshots/ConnectedAreaInfo.cs b/src/Nexus.Memory/Snapshots/ConnectedAreaInfo.cs similarity index 94% rename from src/Roboto.Memory/Snapshots/ConnectedAreaInfo.cs rename to src/Nexus.Memory/Snapshots/ConnectedAreaInfo.cs index 02edeb3..7e752ea 100644 --- a/src/Roboto.Memory/Snapshots/ConnectedAreaInfo.cs +++ b/src/Nexus.Memory/Snapshots/ConnectedAreaInfo.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Lightweight connected area info from WorldAreas.dat for the snapshot. diff --git a/src/Roboto.Memory/Snapshots/Entity.cs b/src/Nexus.Memory/Snapshots/Entity.cs similarity index 99% rename from src/Roboto.Memory/Snapshots/Entity.cs rename to src/Nexus.Memory/Snapshots/Entity.cs index 782acd6..a77a27a 100644 --- a/src/Roboto.Memory/Snapshots/Entity.cs +++ b/src/Nexus.Memory/Snapshots/Entity.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; public enum EntityType { diff --git a/src/Roboto.Memory/Snapshots/GameStateSnapshot.cs b/src/Nexus.Memory/Snapshots/GameStateSnapshot.cs similarity index 98% rename from src/Roboto.Memory/Snapshots/GameStateSnapshot.cs rename to src/Nexus.Memory/Snapshots/GameStateSnapshot.cs index 2a5396c..5622202 100644 --- a/src/Roboto.Memory/Snapshots/GameStateSnapshot.cs +++ b/src/Nexus.Memory/Snapshots/GameStateSnapshot.cs @@ -1,7 +1,7 @@ using System.Numerics; -using Roboto.Memory.Objects; +using Nexus.Memory.Objects; -namespace Roboto.Memory; +namespace Nexus.Memory; public class GameStateSnapshot { diff --git a/src/Roboto.Memory/Snapshots/QuestLinkedEntry.cs b/src/Nexus.Memory/Snapshots/QuestLinkedEntry.cs similarity index 98% rename from src/Roboto.Memory/Snapshots/QuestLinkedEntry.cs rename to src/Nexus.Memory/Snapshots/QuestLinkedEntry.cs index 7c6d285..7574e2d 100644 --- a/src/Roboto.Memory/Snapshots/QuestLinkedEntry.cs +++ b/src/Nexus.Memory/Snapshots/QuestLinkedEntry.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// A quest entry from the GameUi linked lists. diff --git a/src/Roboto.Memory/Snapshots/QuestSnapshot.cs b/src/Nexus.Memory/Snapshots/QuestSnapshot.cs similarity index 88% rename from src/Roboto.Memory/Snapshots/QuestSnapshot.cs rename to src/Nexus.Memory/Snapshots/QuestSnapshot.cs index 3d902f2..20de386 100644 --- a/src/Roboto.Memory/Snapshots/QuestSnapshot.cs +++ b/src/Nexus.Memory/Snapshots/QuestSnapshot.cs @@ -1,8 +1,8 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Lightweight quest data from ServerData quest flags. -/// Stored in GameStateSnapshot; mapped to Roboto.Core.QuestProgress in the Data layer. +/// Stored in GameStateSnapshot; mapped to Nexus.Core.QuestProgress in the Data layer. /// public sealed class QuestSnapshot { diff --git a/src/Roboto.Memory/Snapshots/QuestStateEntry.cs b/src/Nexus.Memory/Snapshots/QuestStateEntry.cs similarity index 93% rename from src/Roboto.Memory/Snapshots/QuestStateEntry.cs rename to src/Nexus.Memory/Snapshots/QuestStateEntry.cs index 8675b0b..1caf5a1 100644 --- a/src/Roboto.Memory/Snapshots/QuestStateEntry.cs +++ b/src/Nexus.Memory/Snapshots/QuestStateEntry.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// A quest state entry from the AreaInstance quest state container. diff --git a/src/Roboto.Memory/Snapshots/SkillSnapshot.cs b/src/Nexus.Memory/Snapshots/SkillSnapshot.cs similarity index 92% rename from src/Roboto.Memory/Snapshots/SkillSnapshot.cs rename to src/Nexus.Memory/Snapshots/SkillSnapshot.cs index 851e54d..cee55a1 100644 --- a/src/Roboto.Memory/Snapshots/SkillSnapshot.cs +++ b/src/Nexus.Memory/Snapshots/SkillSnapshot.cs @@ -1,8 +1,8 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Lightweight skill data from the Actor component's ActiveSkills vector. -/// Stored in GameStateSnapshot; mapped to Roboto.Core.SkillState in the Data layer. +/// Stored in GameStateSnapshot; mapped to Nexus.Core.SkillState in the Data layer. /// public sealed class SkillSnapshot { diff --git a/src/Roboto.Memory/Snapshots/UIElementNode.cs b/src/Nexus.Memory/Snapshots/UIElementNode.cs similarity index 95% rename from src/Roboto.Memory/Snapshots/UIElementNode.cs rename to src/Nexus.Memory/Snapshots/UIElementNode.cs index f7325a4..0b93c1f 100644 --- a/src/Roboto.Memory/Snapshots/UIElementNode.cs +++ b/src/Nexus.Memory/Snapshots/UIElementNode.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// Lightweight snapshot of a single UIElement from the game's UI tree. diff --git a/src/Roboto.Memory/Snapshots/UiQuestEntry.cs b/src/Nexus.Memory/Snapshots/UiQuestEntry.cs similarity index 96% rename from src/Roboto.Memory/Snapshots/UiQuestEntry.cs rename to src/Nexus.Memory/Snapshots/UiQuestEntry.cs index 5516512..8ce2b6d 100644 --- a/src/Roboto.Memory/Snapshots/UiQuestEntry.cs +++ b/src/Nexus.Memory/Snapshots/UiQuestEntry.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; /// /// A quest group from the UI element tree (one per quest_display). diff --git a/src/Roboto.Memory/Snapshots/WalkabilityGrid.cs b/src/Nexus.Memory/Snapshots/WalkabilityGrid.cs similarity index 94% rename from src/Roboto.Memory/Snapshots/WalkabilityGrid.cs rename to src/Nexus.Memory/Snapshots/WalkabilityGrid.cs index 4b52073..22f5453 100644 --- a/src/Roboto.Memory/Snapshots/WalkabilityGrid.cs +++ b/src/Nexus.Memory/Snapshots/WalkabilityGrid.cs @@ -1,4 +1,4 @@ -namespace Roboto.Memory; +namespace Nexus.Memory; public sealed class WalkabilityGrid { diff --git a/src/Automata.Navigation/AtlasPanorama.cs b/src/Nexus.Navigation/AtlasPanorama.cs similarity index 99% rename from src/Automata.Navigation/AtlasPanorama.cs rename to src/Nexus.Navigation/AtlasPanorama.cs index 354baa6..b4a90b8 100644 --- a/src/Automata.Navigation/AtlasPanorama.cs +++ b/src/Nexus.Navigation/AtlasPanorama.cs @@ -1,10 +1,10 @@ using System.Diagnostics; using OpenCvSharp; -using Automata.Core; -using Automata.Screen; +using Nexus.Core; +using Nexus.Screen; using Serilog; -namespace Automata.Navigation; +namespace Nexus.Navigation; public record AtlasProgress(int TilesCaptured, int Row, string Phase); diff --git a/src/Automata.Navigation/IconDetector.cs b/src/Nexus.Navigation/IconDetector.cs similarity index 99% rename from src/Automata.Navigation/IconDetector.cs rename to src/Nexus.Navigation/IconDetector.cs index 9312879..a466d36 100644 --- a/src/Automata.Navigation/IconDetector.cs +++ b/src/Nexus.Navigation/IconDetector.cs @@ -1,7 +1,7 @@ using OpenCvSharp; using Serilog; -namespace Automata.Navigation; +namespace Nexus.Navigation; /// /// Detects minimap icons (doors, checkpoints) via template matching. diff --git a/src/Automata.Navigation/MinimapCapture.cs b/src/Nexus.Navigation/MinimapCapture.cs similarity index 99% rename from src/Automata.Navigation/MinimapCapture.cs rename to src/Nexus.Navigation/MinimapCapture.cs index e7e3093..f0aae8e 100644 --- a/src/Automata.Navigation/MinimapCapture.cs +++ b/src/Nexus.Navigation/MinimapCapture.cs @@ -1,10 +1,10 @@ using OpenCvSharp; -using Automata.Screen; +using Nexus.Screen; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; using Size = OpenCvSharp.Size; -namespace Automata.Navigation; +namespace Nexus.Navigation; public class MinimapCapture : IFrameConsumer, IDisposable { diff --git a/src/Automata.Navigation/NavigationExecutor.cs b/src/Nexus.Navigation/NavigationExecutor.cs similarity index 99% rename from src/Automata.Navigation/NavigationExecutor.cs rename to src/Nexus.Navigation/NavigationExecutor.cs index a179164..da36c11 100644 --- a/src/Automata.Navigation/NavigationExecutor.cs +++ b/src/Nexus.Navigation/NavigationExecutor.cs @@ -1,11 +1,11 @@ using System.Diagnostics; using OpenCvSharp; -using Automata.Core; -using Automata.Game; -using Automata.Screen; +using Nexus.Core; +using Nexus.Game; +using Nexus.Screen; using Serilog; -namespace Automata.Navigation; +namespace Nexus.Navigation; public class NavigationExecutor : IDisposable { diff --git a/src/Automata.Navigation/NavigationTypes.cs b/src/Nexus.Navigation/NavigationTypes.cs similarity index 99% rename from src/Automata.Navigation/NavigationTypes.cs rename to src/Nexus.Navigation/NavigationTypes.cs index 65080af..884a833 100644 --- a/src/Automata.Navigation/NavigationTypes.cs +++ b/src/Nexus.Navigation/NavigationTypes.cs @@ -1,7 +1,7 @@ -using Automata.Core; +using Nexus.Core; using OpenCvSharp; -namespace Automata.Navigation; +namespace Nexus.Navigation; public enum MinimapMode { diff --git a/src/Automata.Navigation/Automata.Navigation.csproj b/src/Nexus.Navigation/Nexus.Navigation.csproj similarity index 73% rename from src/Automata.Navigation/Automata.Navigation.csproj rename to src/Nexus.Navigation/Nexus.Navigation.csproj index 29698e6..bd3c70c 100644 --- a/src/Automata.Navigation/Automata.Navigation.csproj +++ b/src/Nexus.Navigation/Nexus.Navigation.csproj @@ -12,8 +12,8 @@ - - - + + + diff --git a/src/Automata.Navigation/PathFinder.cs b/src/Nexus.Navigation/PathFinder.cs similarity index 99% rename from src/Automata.Navigation/PathFinder.cs rename to src/Nexus.Navigation/PathFinder.cs index 9445e81..2988fbd 100644 --- a/src/Automata.Navigation/PathFinder.cs +++ b/src/Nexus.Navigation/PathFinder.cs @@ -1,7 +1,7 @@ using OpenCvSharp; using Serilog; -namespace Automata.Navigation; +namespace Nexus.Navigation; /// /// Last BFS result for visualization. diff --git a/src/Automata.Navigation/PerspectiveCalibrator.cs b/src/Nexus.Navigation/PerspectiveCalibrator.cs similarity index 99% rename from src/Automata.Navigation/PerspectiveCalibrator.cs rename to src/Nexus.Navigation/PerspectiveCalibrator.cs index 1f3ab8f..8d6da04 100644 --- a/src/Automata.Navigation/PerspectiveCalibrator.cs +++ b/src/Nexus.Navigation/PerspectiveCalibrator.cs @@ -1,9 +1,9 @@ using OpenCvSharp; -using Automata.Core; -using Automata.Screen; +using Nexus.Core; +using Nexus.Screen; using Serilog; -namespace Automata.Navigation; +namespace Nexus.Navigation; public record CalibrationResult(float BestFactor, double BestConfidence, Dictionary AllResults); diff --git a/src/Automata.Navigation/StuckDetector.cs b/src/Nexus.Navigation/StuckDetector.cs similarity index 96% rename from src/Automata.Navigation/StuckDetector.cs rename to src/Nexus.Navigation/StuckDetector.cs index 5dd02c5..3168233 100644 --- a/src/Automata.Navigation/StuckDetector.cs +++ b/src/Nexus.Navigation/StuckDetector.cs @@ -1,4 +1,4 @@ -namespace Automata.Navigation; +namespace Nexus.Navigation; /// /// Detects when the player hasn't moved significantly over a window of frames. diff --git a/src/Automata.Navigation/WallColorTracker.cs b/src/Nexus.Navigation/WallColorTracker.cs similarity index 99% rename from src/Automata.Navigation/WallColorTracker.cs rename to src/Nexus.Navigation/WallColorTracker.cs index a28d810..d9e9896 100644 --- a/src/Automata.Navigation/WallColorTracker.cs +++ b/src/Nexus.Navigation/WallColorTracker.cs @@ -1,7 +1,7 @@ using OpenCvSharp; using Serilog; -namespace Automata.Navigation; +namespace Nexus.Navigation; /// /// Tracks HSV distribution of confirmed wall pixels and computes an adaptive diff --git a/src/Automata.Navigation/WorldMap.cs b/src/Nexus.Navigation/WorldMap.cs similarity index 99% rename from src/Automata.Navigation/WorldMap.cs rename to src/Nexus.Navigation/WorldMap.cs index 4435fd5..922cbd2 100644 --- a/src/Automata.Navigation/WorldMap.cs +++ b/src/Nexus.Navigation/WorldMap.cs @@ -2,7 +2,7 @@ using System.Diagnostics; using OpenCvSharp; using Serilog; -namespace Automata.Navigation; +namespace Nexus.Navigation; public class WorldMap : IDisposable { diff --git a/src/Roboto.Navigation/NavigationController.cs b/src/Nexus.Pathfinding/NavigationController.cs similarity index 99% rename from src/Roboto.Navigation/NavigationController.cs rename to src/Nexus.Pathfinding/NavigationController.cs index 4a88f65..831d587 100644 --- a/src/Roboto.Navigation/NavigationController.cs +++ b/src/Nexus.Pathfinding/NavigationController.cs @@ -1,8 +1,8 @@ using System.Numerics; -using Roboto.Core; +using Nexus.Core; using Serilog; -namespace Roboto.Navigation; +namespace Nexus.Pathfinding; public enum NavMode { diff --git a/src/Roboto.Navigation/Roboto.Navigation.csproj b/src/Nexus.Pathfinding/Nexus.Pathfinding.csproj similarity index 83% rename from src/Roboto.Navigation/Roboto.Navigation.csproj rename to src/Nexus.Pathfinding/Nexus.Pathfinding.csproj index bcebb88..60b2b65 100644 --- a/src/Roboto.Navigation/Roboto.Navigation.csproj +++ b/src/Nexus.Pathfinding/Nexus.Pathfinding.csproj @@ -8,6 +8,6 @@ - + diff --git a/src/Roboto.Navigation/PathFinder.cs b/src/Nexus.Pathfinding/PathFinder.cs similarity index 99% rename from src/Roboto.Navigation/PathFinder.cs rename to src/Nexus.Pathfinding/PathFinder.cs index 4b5e4b6..cbc05c9 100644 --- a/src/Roboto.Navigation/PathFinder.cs +++ b/src/Nexus.Pathfinding/PathFinder.cs @@ -1,8 +1,8 @@ using System.Numerics; -using Roboto.Core; +using Nexus.Core; using Serilog; -namespace Roboto.Navigation; +namespace Nexus.Pathfinding; public static class PathFinder { diff --git a/src/Automata.Screen/BossDetector.cs b/src/Nexus.Screen/BossDetector.cs similarity index 99% rename from src/Automata.Screen/BossDetector.cs rename to src/Nexus.Screen/BossDetector.cs index 2fb6f31..c0e80ff 100644 --- a/src/Automata.Screen/BossDetector.cs +++ b/src/Nexus.Screen/BossDetector.cs @@ -1,8 +1,8 @@ using OpenCvSharp; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; -namespace Automata.Screen; +namespace Nexus.Screen; /// /// Detects bosses using YOLO running on a background thread. diff --git a/src/Automata.Screen/DaemonTypes.cs b/src/Nexus.Screen/DaemonTypes.cs similarity index 97% rename from src/Automata.Screen/DaemonTypes.cs rename to src/Nexus.Screen/DaemonTypes.cs index f149805..fd27194 100644 --- a/src/Automata.Screen/DaemonTypes.cs +++ b/src/Nexus.Screen/DaemonTypes.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Automata.Screen; +namespace Nexus.Screen; public class OcrWord { @@ -49,7 +49,7 @@ public class DiffOcrResponse { public string Text { get; set; } = ""; public List Lines { get; set; } = []; - public Automata.Core.Region? Region { get; set; } + public Nexus.Core.Region? Region { get; set; } } public class TemplateMatchResult diff --git a/src/Automata.Screen/DesktopDuplication.cs b/src/Nexus.Screen/DesktopDuplication.cs similarity index 98% rename from src/Automata.Screen/DesktopDuplication.cs rename to src/Nexus.Screen/DesktopDuplication.cs index 4d81bcf..40b4e39 100644 --- a/src/Automata.Screen/DesktopDuplication.cs +++ b/src/Nexus.Screen/DesktopDuplication.cs @@ -5,9 +5,9 @@ using SharpGen.Runtime; using Vortice.Direct3D; using Vortice.Direct3D11; using Vortice.DXGI; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; -namespace Automata.Screen; +namespace Nexus.Screen; public sealed class DesktopDuplication : IScreenCapture { diff --git a/src/Automata.Screen/DetectGridHandler.cs b/src/Nexus.Screen/DetectGridHandler.cs similarity index 98% rename from src/Automata.Screen/DetectGridHandler.cs rename to src/Nexus.Screen/DetectGridHandler.cs index ab4b4f0..581076c 100644 --- a/src/Automata.Screen/DetectGridHandler.cs +++ b/src/Nexus.Screen/DetectGridHandler.cs @@ -1,10 +1,10 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; class DetectGridHandler { diff --git a/src/Automata.Screen/DetectionTypes.cs b/src/Nexus.Screen/DetectionTypes.cs similarity index 95% rename from src/Automata.Screen/DetectionTypes.cs rename to src/Nexus.Screen/DetectionTypes.cs index 2ada4bf..4252710 100644 --- a/src/Automata.Screen/DetectionTypes.cs +++ b/src/Nexus.Screen/DetectionTypes.cs @@ -1,4 +1,4 @@ -namespace Automata.Screen; +namespace Nexus.Screen; public record DetectedEnemy( float Confidence, diff --git a/src/Automata.Screen/DiffCropHandler.cs b/src/Nexus.Screen/DiffCropHandler.cs similarity index 99% rename from src/Automata.Screen/DiffCropHandler.cs rename to src/Nexus.Screen/DiffCropHandler.cs index acd300f..4b3781a 100644 --- a/src/Automata.Screen/DiffCropHandler.cs +++ b/src/Nexus.Screen/DiffCropHandler.cs @@ -1,10 +1,10 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; class DiffCropHandler { diff --git a/src/Automata.Screen/EdgeCropHandler.cs b/src/Nexus.Screen/EdgeCropHandler.cs similarity index 99% rename from src/Automata.Screen/EdgeCropHandler.cs rename to src/Nexus.Screen/EdgeCropHandler.cs index 6fbe46b..301390f 100644 --- a/src/Automata.Screen/EdgeCropHandler.cs +++ b/src/Nexus.Screen/EdgeCropHandler.cs @@ -1,10 +1,10 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; class EdgeCropHandler { diff --git a/src/Automata.Screen/EnemyDetector.cs b/src/Nexus.Screen/EnemyDetector.cs similarity index 98% rename from src/Automata.Screen/EnemyDetector.cs rename to src/Nexus.Screen/EnemyDetector.cs index 37727bf..2e1406a 100644 --- a/src/Automata.Screen/EnemyDetector.cs +++ b/src/Nexus.Screen/EnemyDetector.cs @@ -1,9 +1,9 @@ using OpenCvSharp; -using Automata.Core; +using Nexus.Core; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; -namespace Automata.Screen; +namespace Nexus.Screen; /// /// Detects enemies on screen using two-stage approach: diff --git a/src/Automata.Screen/FramePipeline.cs b/src/Nexus.Screen/FramePipeline.cs similarity index 97% rename from src/Automata.Screen/FramePipeline.cs rename to src/Nexus.Screen/FramePipeline.cs index e8734e5..b5e52cf 100644 --- a/src/Automata.Screen/FramePipeline.cs +++ b/src/Nexus.Screen/FramePipeline.cs @@ -1,4 +1,4 @@ -namespace Automata.Screen; +namespace Nexus.Screen; public class FramePipeline : IDisposable { diff --git a/src/Automata.Screen/FramePipelineService.cs b/src/Nexus.Screen/FramePipelineService.cs similarity index 96% rename from src/Automata.Screen/FramePipelineService.cs rename to src/Nexus.Screen/FramePipelineService.cs index b213661..42e5362 100644 --- a/src/Automata.Screen/FramePipelineService.cs +++ b/src/Nexus.Screen/FramePipelineService.cs @@ -1,6 +1,6 @@ using Serilog; -namespace Automata.Screen; +namespace Nexus.Screen; public class FramePipelineService : IDisposable { diff --git a/src/Automata.Screen/FrameSaver.cs b/src/Nexus.Screen/FrameSaver.cs similarity index 98% rename from src/Automata.Screen/FrameSaver.cs rename to src/Nexus.Screen/FrameSaver.cs index 2eb2c88..3e7831c 100644 --- a/src/Automata.Screen/FrameSaver.cs +++ b/src/Nexus.Screen/FrameSaver.cs @@ -1,8 +1,8 @@ using OpenCvSharp; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; -namespace Automata.Screen; +namespace Nexus.Screen; /// /// Saves full-screen frames as JPEGs for YOLO training data collection. diff --git a/src/Automata.Screen/GameStateDetector.cs b/src/Nexus.Screen/GameStateDetector.cs similarity index 95% rename from src/Automata.Screen/GameStateDetector.cs rename to src/Nexus.Screen/GameStateDetector.cs index 89be1bd..5061e17 100644 --- a/src/Automata.Screen/GameStateDetector.cs +++ b/src/Nexus.Screen/GameStateDetector.cs @@ -1,7 +1,7 @@ -using Automata.Core; +using Nexus.Core; using Serilog; -namespace Automata.Screen; +namespace Nexus.Screen; /// /// Classifies the current game UI state by probing known pixel positions on each frame. diff --git a/src/Automata.Screen/GdiCapture.cs b/src/Nexus.Screen/GdiCapture.cs similarity index 95% rename from src/Automata.Screen/GdiCapture.cs rename to src/Nexus.Screen/GdiCapture.cs index ff72148..0a6313c 100644 --- a/src/Automata.Screen/GdiCapture.cs +++ b/src/Nexus.Screen/GdiCapture.cs @@ -3,9 +3,9 @@ using System.Drawing.Imaging; using System.Runtime.InteropServices; using OpenCvSharp; using OpenCvSharp.Extensions; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; -namespace Automata.Screen; +namespace Nexus.Screen; public sealed class GdiCapture : IScreenCapture { diff --git a/src/Automata.Screen/GridHandler.cs b/src/Nexus.Screen/GridHandler.cs similarity index 99% rename from src/Automata.Screen/GridHandler.cs rename to src/Nexus.Screen/GridHandler.cs index 6943bcd..7a5c3ba 100644 --- a/src/Automata.Screen/GridHandler.cs +++ b/src/Nexus.Screen/GridHandler.cs @@ -1,8 +1,8 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Drawing; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; public class GridHandler { diff --git a/src/Automata.Screen/GridReader.cs b/src/Nexus.Screen/GridReader.cs similarity index 98% rename from src/Automata.Screen/GridReader.cs rename to src/Nexus.Screen/GridReader.cs index 0a9285d..8be4fd0 100644 --- a/src/Automata.Screen/GridReader.cs +++ b/src/Nexus.Screen/GridReader.cs @@ -1,7 +1,7 @@ -using Automata.Core; +using Nexus.Core; using Serilog; -namespace Automata.Screen; +namespace Nexus.Screen; public class GridLayout { diff --git a/src/Automata.Screen/HudReader.cs b/src/Nexus.Screen/HudReader.cs similarity index 98% rename from src/Automata.Screen/HudReader.cs rename to src/Nexus.Screen/HudReader.cs index 3e60e93..2fe83ed 100644 --- a/src/Automata.Screen/HudReader.cs +++ b/src/Nexus.Screen/HudReader.cs @@ -1,9 +1,9 @@ using OpenCvSharp; -using Automata.Core; +using Nexus.Core; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; -namespace Automata.Screen; +namespace Nexus.Screen; public record HudSnapshot { diff --git a/src/Automata.Screen/IFrameConsumer.cs b/src/Nexus.Screen/IFrameConsumer.cs similarity index 73% rename from src/Automata.Screen/IFrameConsumer.cs rename to src/Nexus.Screen/IFrameConsumer.cs index b7089c6..ca96ebb 100644 --- a/src/Automata.Screen/IFrameConsumer.cs +++ b/src/Nexus.Screen/IFrameConsumer.cs @@ -1,4 +1,4 @@ -namespace Automata.Screen; +namespace Nexus.Screen; public interface IFrameConsumer { diff --git a/src/Automata.Screen/IOcrEngine.cs b/src/Nexus.Screen/IOcrEngine.cs similarity index 83% rename from src/Automata.Screen/IOcrEngine.cs rename to src/Nexus.Screen/IOcrEngine.cs index 6822e5c..a66bf7b 100644 --- a/src/Automata.Screen/IOcrEngine.cs +++ b/src/Nexus.Screen/IOcrEngine.cs @@ -1,6 +1,6 @@ using System.Drawing; -namespace Automata.Screen; +namespace Nexus.Screen; public interface IOcrEngine : IDisposable { diff --git a/src/Automata.Screen/IScreenCapture.cs b/src/Nexus.Screen/IScreenCapture.cs similarity index 69% rename from src/Automata.Screen/IScreenCapture.cs rename to src/Nexus.Screen/IScreenCapture.cs index 4e96887..f354f93 100644 --- a/src/Automata.Screen/IScreenCapture.cs +++ b/src/Nexus.Screen/IScreenCapture.cs @@ -1,7 +1,7 @@ using OpenCvSharp; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; -namespace Automata.Screen; +namespace Nexus.Screen; public interface IScreenCapture : IDisposable { diff --git a/src/Automata.Screen/IScreenReader.cs b/src/Nexus.Screen/IScreenReader.cs similarity index 96% rename from src/Automata.Screen/IScreenReader.cs rename to src/Nexus.Screen/IScreenReader.cs index 3d5e808..dbeaf98 100644 --- a/src/Automata.Screen/IScreenReader.cs +++ b/src/Nexus.Screen/IScreenReader.cs @@ -1,6 +1,6 @@ -using Automata.Core; +using Nexus.Core; -namespace Automata.Screen; +namespace Nexus.Screen; public interface IScreenReader : IDisposable { diff --git a/src/Automata.Screen/ImagePreprocessor.cs b/src/Nexus.Screen/ImagePreprocessor.cs similarity index 99% rename from src/Automata.Screen/ImagePreprocessor.cs rename to src/Nexus.Screen/ImagePreprocessor.cs index 4e374e6..b935b75 100644 --- a/src/Automata.Screen/ImagePreprocessor.cs +++ b/src/Nexus.Screen/ImagePreprocessor.cs @@ -1,4 +1,4 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Drawing; using OpenCvSharp; diff --git a/src/Automata.Screen/ImageUtils.cs b/src/Nexus.Screen/ImageUtils.cs similarity index 97% rename from src/Automata.Screen/ImageUtils.cs rename to src/Nexus.Screen/ImageUtils.cs index 8cb346b..dde7e84 100644 --- a/src/Automata.Screen/ImageUtils.cs +++ b/src/Nexus.Screen/ImageUtils.cs @@ -1,4 +1,4 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Drawing; using System.Drawing.Imaging; diff --git a/src/Automata.Screen/LootDebugDetector.cs b/src/Nexus.Screen/LootDebugDetector.cs similarity index 98% rename from src/Automata.Screen/LootDebugDetector.cs rename to src/Nexus.Screen/LootDebugDetector.cs index 47c2f4c..0a5c7cb 100644 --- a/src/Automata.Screen/LootDebugDetector.cs +++ b/src/Nexus.Screen/LootDebugDetector.cs @@ -1,6 +1,6 @@ using Serilog; -namespace Automata.Screen; +namespace Nexus.Screen; /// /// Debug-only: periodically captures the screen, runs loot label detection, diff --git a/src/Automata.Screen/LootLabel.cs b/src/Nexus.Screen/LootLabel.cs similarity index 99% rename from src/Automata.Screen/LootLabel.cs rename to src/Nexus.Screen/LootLabel.cs index a3fd8d3..99e56eb 100644 --- a/src/Automata.Screen/LootLabel.cs +++ b/src/Nexus.Screen/LootLabel.cs @@ -1,4 +1,4 @@ -namespace Automata.Screen; +namespace Nexus.Screen; /// /// A detected loot label on screen with its position and classified tier. diff --git a/src/Automata.Screen/Automata.Screen.csproj b/src/Nexus.Screen/Nexus.Screen.csproj similarity index 91% rename from src/Automata.Screen/Automata.Screen.csproj rename to src/Nexus.Screen/Nexus.Screen.csproj index 780d038..e2b7096 100644 --- a/src/Automata.Screen/Automata.Screen.csproj +++ b/src/Nexus.Screen/Nexus.Screen.csproj @@ -15,6 +15,6 @@ - + diff --git a/src/Automata.Screen/Ocr/EasyOcrEngine.cs b/src/Nexus.Screen/Ocr/EasyOcrEngine.cs similarity index 96% rename from src/Automata.Screen/Ocr/EasyOcrEngine.cs rename to src/Nexus.Screen/Ocr/EasyOcrEngine.cs index 47d6655..1a81fd8 100644 --- a/src/Automata.Screen/Ocr/EasyOcrEngine.cs +++ b/src/Nexus.Screen/Ocr/EasyOcrEngine.cs @@ -1,6 +1,6 @@ using System.Drawing; -namespace Automata.Screen.Ocr; +namespace Nexus.Screen.Ocr; /// /// OCR engine wrapping the Python EasyOCR daemon. diff --git a/src/Automata.Screen/Ocr/OcrEngineFactory.cs b/src/Nexus.Screen/Ocr/OcrEngineFactory.cs similarity index 93% rename from src/Automata.Screen/Ocr/OcrEngineFactory.cs rename to src/Nexus.Screen/Ocr/OcrEngineFactory.cs index 8ee2636..e4cd982 100644 --- a/src/Automata.Screen/Ocr/OcrEngineFactory.cs +++ b/src/Nexus.Screen/Ocr/OcrEngineFactory.cs @@ -1,6 +1,6 @@ using Serilog; -namespace Automata.Screen.Ocr; +namespace Nexus.Screen.Ocr; public static class OcrEngineFactory { diff --git a/src/Automata.Screen/Ocr/OneOcrEngine.cs b/src/Nexus.Screen/Ocr/OneOcrEngine.cs similarity index 99% rename from src/Automata.Screen/Ocr/OneOcrEngine.cs rename to src/Nexus.Screen/Ocr/OneOcrEngine.cs index a982024..dd9a5ec 100644 --- a/src/Automata.Screen/Ocr/OneOcrEngine.cs +++ b/src/Nexus.Screen/Ocr/OneOcrEngine.cs @@ -3,7 +3,7 @@ using System.Drawing.Imaging; using System.Runtime.InteropServices; using Serilog; -namespace Automata.Screen.Ocr; +namespace Nexus.Screen.Ocr; /// /// OCR engine using OneOCR (Windows 11 Snipping Tool's built-in engine). diff --git a/src/Automata.Screen/Ocr/WinOcrEngine.cs b/src/Nexus.Screen/Ocr/WinOcrEngine.cs similarity index 98% rename from src/Automata.Screen/Ocr/WinOcrEngine.cs rename to src/Nexus.Screen/Ocr/WinOcrEngine.cs index f9688f1..b1e7cd5 100644 --- a/src/Automata.Screen/Ocr/WinOcrEngine.cs +++ b/src/Nexus.Screen/Ocr/WinOcrEngine.cs @@ -7,7 +7,7 @@ using Windows.Storage.Streams; using BitmapDecoder = Windows.Graphics.Imaging.BitmapDecoder; using SdImageFormat = System.Drawing.Imaging.ImageFormat; -namespace Automata.Screen.Ocr; +namespace Nexus.Screen.Ocr; public sealed class WinOcrEngine : IOcrEngine { diff --git a/src/Automata.Screen/OnnxYoloDetector.cs b/src/Nexus.Screen/OnnxYoloDetector.cs similarity index 99% rename from src/Automata.Screen/OnnxYoloDetector.cs rename to src/Nexus.Screen/OnnxYoloDetector.cs index 0ac27bd..0da8399 100644 --- a/src/Automata.Screen/OnnxYoloDetector.cs +++ b/src/Nexus.Screen/OnnxYoloDetector.cs @@ -5,7 +5,7 @@ using OpenCvSharp; using OpenCvSharp.Dnn; using Serilog; -namespace Automata.Screen; +namespace Nexus.Screen; /// /// YOLO11 object detection via ONNX Runtime with CUDA GPU acceleration. diff --git a/src/Automata.Screen/PythonDetectBridge.cs b/src/Nexus.Screen/PythonDetectBridge.cs similarity index 99% rename from src/Automata.Screen/PythonDetectBridge.cs rename to src/Nexus.Screen/PythonDetectBridge.cs index 6a083a3..4249144 100644 --- a/src/Automata.Screen/PythonDetectBridge.cs +++ b/src/Nexus.Screen/PythonDetectBridge.cs @@ -1,4 +1,4 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Diagnostics; using System.Text.Json; diff --git a/src/Automata.Screen/PythonOcrBridge.cs b/src/Nexus.Screen/PythonOcrBridge.cs similarity index 99% rename from src/Automata.Screen/PythonOcrBridge.cs rename to src/Nexus.Screen/PythonOcrBridge.cs index ef206d9..544135f 100644 --- a/src/Automata.Screen/PythonOcrBridge.cs +++ b/src/Nexus.Screen/PythonOcrBridge.cs @@ -1,4 +1,4 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Diagnostics; using System.Drawing; diff --git a/src/Automata.Screen/ScreenCapture.cs b/src/Nexus.Screen/ScreenCapture.cs similarity index 96% rename from src/Automata.Screen/ScreenCapture.cs rename to src/Nexus.Screen/ScreenCapture.cs index 8d64f61..4018ee6 100644 --- a/src/Automata.Screen/ScreenCapture.cs +++ b/src/Nexus.Screen/ScreenCapture.cs @@ -1,9 +1,9 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; static class ScreenCapture { diff --git a/src/Automata.Screen/ScreenFrame.cs b/src/Nexus.Screen/ScreenFrame.cs similarity index 93% rename from src/Automata.Screen/ScreenFrame.cs rename to src/Nexus.Screen/ScreenFrame.cs index 7acceeb..5377be0 100644 --- a/src/Automata.Screen/ScreenFrame.cs +++ b/src/Nexus.Screen/ScreenFrame.cs @@ -1,7 +1,7 @@ using OpenCvSharp; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; -namespace Automata.Screen; +namespace Nexus.Screen; public class ScreenFrame : IDisposable { diff --git a/src/Automata.Screen/ScreenReader.cs b/src/Nexus.Screen/ScreenReader.cs similarity index 99% rename from src/Automata.Screen/ScreenReader.cs rename to src/Nexus.Screen/ScreenReader.cs index c2457a7..3a92ca7 100644 --- a/src/Automata.Screen/ScreenReader.cs +++ b/src/Nexus.Screen/ScreenReader.cs @@ -3,12 +3,12 @@ using System.Drawing.Imaging; using System.Runtime.InteropServices; using OpenCvSharp; using OpenCvSharp.Extensions; -using Automata.Core; +using Nexus.Core; using Serilog; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; using Size = OpenCvSharp.Size; -namespace Automata.Screen; +namespace Nexus.Screen; public class ScreenReader : IScreenReader { diff --git a/src/Automata.Screen/SignalProcessing.cs b/src/Nexus.Screen/SignalProcessing.cs similarity index 99% rename from src/Automata.Screen/SignalProcessing.cs rename to src/Nexus.Screen/SignalProcessing.cs index 3f9fee9..84a810d 100644 --- a/src/Automata.Screen/SignalProcessing.cs +++ b/src/Nexus.Screen/SignalProcessing.cs @@ -1,4 +1,4 @@ -namespace Automata.Screen; +namespace Nexus.Screen; static class SignalProcessing { diff --git a/src/Automata.Screen/TemplateMatchHandler.cs b/src/Nexus.Screen/TemplateMatchHandler.cs similarity index 98% rename from src/Automata.Screen/TemplateMatchHandler.cs rename to src/Nexus.Screen/TemplateMatchHandler.cs index d779cf1..61fd1a7 100644 --- a/src/Automata.Screen/TemplateMatchHandler.cs +++ b/src/Nexus.Screen/TemplateMatchHandler.cs @@ -1,9 +1,9 @@ -namespace Automata.Screen; +namespace Nexus.Screen; using System.Drawing; using OpenCvSharp; using OpenCvSharp.Extensions; -using Region = Automata.Core.Region; +using Region = Nexus.Core.Region; class TemplateMatchHandler { diff --git a/src/Nexus.Simulator/Bridge/SimInputController.cs b/src/Nexus.Simulator/Bridge/SimInputController.cs new file mode 100644 index 0000000..794c67e --- /dev/null +++ b/src/Nexus.Simulator/Bridge/SimInputController.cs @@ -0,0 +1,149 @@ +using System.Numerics; +using Nexus.Core; +using Nexus.Simulator.World; + +namespace Nexus.Simulator.Bridge; + +/// +/// Captures bot actions (key presses, mouse moves) and feeds them into SimWorld. +/// Implements IInputController so BotEngine systems can emit actions normally. +/// +public class SimInputController : IInputController +{ + private readonly SimWorld _world; + private readonly object _lock = new(); + + // WASD key states + private bool _wHeld, _aHeld, _sHeld, _dHeld; + + // Mouse position (screen coords captured from SmoothMoveTo/MouseMoveTo) + private Vector2 _mouseScreenPos = new(1280, 720); + + // Camera matrix for screen→world conversion + private Matrix4x4? _cameraMatrix; + + public bool IsInitialized => true; + + public SimInputController(SimWorld world) + { + _world = world; + } + + public void SetCameraMatrix(Matrix4x4 camera) + { + _cameraMatrix = camera; + } + + /// + /// Called each sim tick to push accumulated inputs into SimWorld. + /// + public void FlushToWorld() + { + lock (_lock) + { + // Convert WASD to direction vector (with 45° isometric rotation inversion) + var dx = 0f; + var dy = 0f; + if (_wHeld) { dx += 0.70710678f; dy += 0.70710678f; } + if (_sHeld) { dx -= 0.70710678f; dy -= 0.70710678f; } + if (_dHeld) { dx += 0.70710678f; dy -= 0.70710678f; } + if (_aHeld) { dx -= 0.70710678f; dy += 0.70710678f; } + + var dir = new Vector2(dx, dy); + if (dir.LengthSquared() > 0.001f) + dir = Vector2.Normalize(dir); + + _world.MoveDirection = dir; + _world.MouseWorldPos = ScreenToWorld(_mouseScreenPos); + } + } + + private Vector2 ScreenToWorld(Vector2 screen) + { + if (_cameraMatrix is not { } cam) return _world.Player.Position; + if (!Matrix4x4.Invert(cam, out var inv)) return _world.Player.Position; + + // NDC from screen + var ndcX = screen.X / 1280f - 1f; + var ndcY = 1f - screen.Y / 720f; + + var worldNear = Vector4.Transform(new Vector4(ndcX, ndcY, 0, 1), inv); + if (MathF.Abs(worldNear.W) < 0.0001f) return _world.Player.Position; + return new Vector2(worldNear.X / worldNear.W, worldNear.Y / worldNear.W); + } + + // IInputController implementation — captures actions, no actual Win32 calls + + public void KeyDown(ushort scanCode) + { + lock (_lock) + { + switch (scanCode) + { + case 0x11: _wHeld = true; break; // W + case 0x1E: _aHeld = true; break; // A + case 0x1F: _sHeld = true; break; // S + case 0x20: _dHeld = true; break; // D + } + } + } + + public void KeyUp(ushort scanCode) + { + lock (_lock) + { + switch (scanCode) + { + case 0x11: _wHeld = false; break; + case 0x1E: _aHeld = false; break; + case 0x1F: _sHeld = false; break; + case 0x20: _dHeld = false; break; + } + } + } + + public void KeyPress(ushort scanCode, int holdMs = 50) + { + // Queue as skill cast + var target = ScreenToWorld(_mouseScreenPos); + _world.QueueSkill(scanCode, target); + } + + public void MouseMoveTo(int x, int y) + { + lock (_lock) { _mouseScreenPos = new Vector2(x, y); } + } + + public void SmoothMoveTo(int x, int y) => MouseMoveTo(x, y); + public void MouseMoveBy(int dx, int dy) + { + lock (_lock) { _mouseScreenPos += new Vector2(dx, dy); } + } + + public void LeftClick(int x, int y) + { + MouseMoveTo(x, y); + var target = ScreenToWorld(new Vector2(x, y)); + // LMB = default attack / melee + _world.QueueSkill(0, target); + } + + public void RightClick(int x, int y) + { + MouseMoveTo(x, y); + var target = ScreenToWorld(new Vector2(x, y)); + _world.QueueSkill(1, target); + } + + public void MiddleClick(int x, int y) + { + MouseMoveTo(x, y); + var target = ScreenToWorld(new Vector2(x, y)); + _world.QueueSkill(2, target); + } + + public void LeftDown() { } + public void LeftUp() { } + public void RightDown() { } + public void RightUp() { } +} diff --git a/src/Nexus.Simulator/Bridge/SimPoller.cs b/src/Nexus.Simulator/Bridge/SimPoller.cs new file mode 100644 index 0000000..872c569 --- /dev/null +++ b/src/Nexus.Simulator/Bridge/SimPoller.cs @@ -0,0 +1,112 @@ +using System.Numerics; +using Nexus.Core; +using Nexus.Data; +using Nexus.Simulator.Config; +using Nexus.Simulator.World; + +namespace Nexus.Simulator.Bridge; + +/// +/// Replaces MemoryPoller. Ticks SimWorld at 60Hz and pushes state to GameDataCache. +/// Runs on a background thread, just like the real MemoryPoller. +/// +public sealed class SimPoller : IDisposable +{ + private readonly SimWorld _world; + private readonly SimInputController _input; + private readonly GameDataCache _cache; + private readonly SimConfig _config; + + private Thread? _thread; + private volatile bool _running; + + public event Action? StateUpdated; + + public SimPoller(SimWorld world, SimInputController input, GameDataCache cache, SimConfig config) + { + _world = world; + _input = input; + _cache = cache; + _config = config; + } + + public void Start() + { + if (_running) return; + _running = true; + _thread = new Thread(PollLoop) + { + Name = "Nexus.SimPoller", + IsBackground = true, + }; + _thread.Start(); + } + + public void Stop() + { + _running = false; + _thread?.Join(2000); + _thread = null; + } + + private void PollLoop() + { + const double targetMs = 1000.0 / 60.0; + var sw = System.Diagnostics.Stopwatch.StartNew(); + var lastMs = sw.Elapsed.TotalMilliseconds; + + while (_running) + { + var nowMs = sw.Elapsed.TotalMilliseconds; + var dt = (float)((nowMs - lastMs) / 1000.0); + lastMs = nowMs; + + // Clamp dt to avoid spiral of death + dt = Math.Min(dt, 0.1f); + + // Flush bot inputs into world + _input.FlushToWorld(); + + // Tick the simulation + _world.Tick(dt); + + // Build GameState + var state = SimStateBuilder.Build(_world, dt); + var cam = SimStateBuilder.BuildCameraMatrix(_world.Player.Position); + + // Update input controller's camera for screen→world conversion + _input.SetCameraMatrix(cam); + + // Push to cache + _cache.CameraMatrix = new CameraMatrixData(cam); + _cache.PlayerPosition = new PlayerPositionData( + _world.Player.Position.X, _world.Player.Position.Y, 0f); + _cache.PlayerVitals = new PlayerVitalsData( + _world.Player.Health, _world.Player.MaxHealth, + _world.Player.Mana, _world.Player.MaxMana, 0, 0); + _cache.IsLoading = false; + _cache.IsEscapeOpen = false; + _cache.Entities = state.Entities; + _cache.HostileMonsters = state.HostileMonsters; + _cache.NearbyLoot = []; + _cache.Terrain = _world.Terrain; + _cache.AreaHash = 1; + _cache.AreaLevel = 1; + _cache.CurrentAreaName = "SimulatedArena"; + _cache.CharacterName = "SimPlayer"; + _cache.LatestState = state; + _cache.HotTickTimestamp = Environment.TickCount64; + _cache.ColdTickTimestamp = Environment.TickCount64; + + StateUpdated?.Invoke(); + + // Sleep for remainder of frame + var elapsed = sw.Elapsed.TotalMilliseconds - nowMs; + var sleep = targetMs - elapsed; + if (sleep > 1) + Thread.Sleep((int)sleep); + } + } + + public void Dispose() => Stop(); +} diff --git a/src/Nexus.Simulator/Bridge/SimStateBuilder.cs b/src/Nexus.Simulator/Bridge/SimStateBuilder.cs new file mode 100644 index 0000000..e209499 --- /dev/null +++ b/src/Nexus.Simulator/Bridge/SimStateBuilder.cs @@ -0,0 +1,115 @@ +using System.Numerics; +using Nexus.Core; +using Nexus.Simulator.World; + +namespace Nexus.Simulator.Bridge; + +/// +/// Converts SimWorld state into GameState for the bot systems. +/// +public static class SimStateBuilder +{ + private static long _tickNumber; + + public static GameState Build(SimWorld world, float dt) + { + _tickNumber++; + var player = world.Player; + + var entities = new List(); + var hostiles = new List(); + + foreach (var enemy in world.Enemies) + { + var snap = new EntitySnapshot + { + Id = enemy.Id, + Path = "Metadata/Monsters/SimEnemy", + Category = EntityCategory.Monster, + ThreatLevel = enemy.GetThreatLevel(), + Rarity = enemy.Rarity, + Position = enemy.Position, + Z = 0f, + DistanceToPlayer = Vector2.Distance(enemy.Position, player.Position), + IsAlive = enemy.IsAlive, + LifeCurrent = enemy.Health, + LifeTotal = enemy.MaxHealth, + IsTargetable = enemy.IsAlive, + ActionId = enemy.IsAttacking ? (short)1 : (short)0, + IsAttacking = enemy.IsAttacking, + IsMoving = enemy.AiState == EnemyAiState.Chasing, + }; + entities.Add(snap); + if (enemy.IsAlive) + hostiles.Add(snap); + } + + var cameraMatrix = BuildCameraMatrix(player.Position); + + return new GameState + { + TickNumber = _tickNumber, + DeltaTime = dt, + TimestampMs = Environment.TickCount64, + AreaHash = 1, + AreaLevel = 1, + CurrentAreaName = "SimulatedArena", + IsLoading = false, + IsEscapeOpen = false, + CameraMatrix = cameraMatrix, + Terrain = world.Terrain, + Entities = entities, + HostileMonsters = hostiles, + NearbyLoot = [], + Player = new PlayerState + { + CharacterName = "SimPlayer", + HasPosition = true, + Position = player.Position, + Z = 0f, + LifeCurrent = player.Health, + LifeTotal = player.MaxHealth, + ManaCurrent = player.Mana, + ManaTotal = player.MaxMana, + Skills = BuildSkillStates(), + }, + }; + } + + /// + /// Creates a top-down orthographic camera matrix that WorldToScreen.Project() can use. + /// WorldToScreen expects: sx = (clipX + 1) * 1280, sy = (1 - clipY) * 720 + /// So we need: clipX = (worldX - camX) / halfViewW, clipY = (worldY - camY) / halfViewH + /// + public static Matrix4x4 BuildCameraMatrix(Vector2 playerPos) + { + // View dimensions in world units that map to 2560x1440 screen + // At default zoom, ~5 world units per pixel → 2560*5 = 12800 world units wide + const float viewWidth = 12800f; + const float viewHeight = 7200f; + + // Orthographic projection centered on player + // WorldToScreen does: clip = Transform(world4, matrix), then divides by W + // For ortho: we want (worldX - playerX) / halfW → clipX, (worldY - playerY) / halfH → clipY + var halfW = viewWidth / 2f; + var halfH = viewHeight / 2f; + + // Row-major matrix that transforms (worldX, worldY, 0, 1) → (clipX, clipY, clipZ, 1) + return new Matrix4x4( + 1f / halfW, 0, 0, 0, + 0, 1f / halfH, 0, 0, + 0, 0, 1, 0, + -playerPos.X / halfW, -playerPos.Y / halfH, 0, 1); + } + + private static List BuildSkillStates() + { + return + [ + new SkillState { SlotIndex = 0, Name = "MeleeStrike", SkillBarSlot = 0, CanBeUsed = true, ChargesMax = 1, ChargesCurrent = 1 }, + new SkillState { SlotIndex = 1, Name = "PowerStrike", SkillBarSlot = 1, CanBeUsed = true, ChargesMax = 1, ChargesCurrent = 1 }, + new SkillState { SlotIndex = 3, Name = "WhirlingSlash", SkillBarSlot = 3, CanBeUsed = true, ChargesMax = 1, ChargesCurrent = 1, CooldownTimeMs = 500 }, + new SkillState { SlotIndex = 4, Name = "SpearThrow", SkillBarSlot = 4, CanBeUsed = true, ChargesMax = 1, ChargesCurrent = 1, CooldownTimeMs = 300 }, + ]; + } +} diff --git a/src/Nexus.Simulator/Config/SimConfig.cs b/src/Nexus.Simulator/Config/SimConfig.cs new file mode 100644 index 0000000..7231c97 --- /dev/null +++ b/src/Nexus.Simulator/Config/SimConfig.cs @@ -0,0 +1,47 @@ +namespace Nexus.Simulator.Config; + +public class SimConfig +{ + // Terrain + public int TerrainWidth { get; set; } = 500; + public int TerrainHeight { get; set; } = 500; + public float WorldToGrid { get; set; } = 23f / 250f; + + // Player + public float PlayerMoveSpeed { get; set; } = 400f; + public int PlayerMaxHealth { get; set; } = 1000; + public int PlayerMaxMana { get; set; } = 500; + public float PlayerHealthRegen { get; set; } = 5f; + public float PlayerManaRegen { get; set; } = 10f; + + // Enemies + public int TargetEnemyCount { get; set; } = 25; + public float EnemyAggroRange { get; set; } = 600f; + public float EnemyAttackRange { get; set; } = 100f; + public float EnemyMoveSpeedFactor { get; set; } = 0.75f; + public int EnemyBaseHealth { get; set; } = 200; + public int EnemyAttackDamage { get; set; } = 30; + public float EnemyAttackCooldown { get; set; } = 1.5f; + public float EnemyDespawnTime { get; set; } = 2f; + public float EnemyRespawnTime { get; set; } = 5f; + public float EnemyWanderRadius { get; set; } = 200f; + + // Skills + public float MeleeRange { get; set; } = 150f; + public float MeleeConeAngle { get; set; } = 120f; + public float AoeRadius { get; set; } = 250f; + public float ProjectileSpeed { get; set; } = 1200f; + public float ProjectileRange { get; set; } = 800f; + public float ProjectileHitRadius { get; set; } = 80f; + public int SkillBaseDamage { get; set; } = 200; + + // Simulation + public float SpeedMultiplier { get; set; } = 1f; + public bool IsPaused { get; set; } + + // Rarity distribution (must sum to 1.0) + public float NormalChance { get; set; } = 0.70f; + public float MagicChance { get; set; } = 0.20f; + public float RareChance { get; set; } = 0.08f; + public float UniqueChance { get; set; } = 0.02f; +} diff --git a/src/Nexus.Simulator/Nexus.Simulator.csproj b/src/Nexus.Simulator/Nexus.Simulator.csproj new file mode 100644 index 0000000..9161be8 --- /dev/null +++ b/src/Nexus.Simulator/Nexus.Simulator.csproj @@ -0,0 +1,23 @@ + + + Exe + net8.0-windows10.0.19041.0 + enable + enable + true + + + + + + + + + + + + + + + + diff --git a/src/Nexus.Simulator/Program.cs b/src/Nexus.Simulator/Program.cs new file mode 100644 index 0000000..30330f0 --- /dev/null +++ b/src/Nexus.Simulator/Program.cs @@ -0,0 +1,264 @@ +using System.Numerics; +using ImGuiNET; +using Nexus.Core; +using Nexus.Data; +using Nexus.Pathfinding; +using Nexus.Simulator.Bridge; +using Nexus.Simulator.Config; +using Nexus.Simulator.Rendering; +using Nexus.Simulator.World; +using Nexus.Systems; +using Serilog; +using Veldrid; +using Veldrid.Sdl2; +using Veldrid.StartupUtilities; + +Log.Logger = new LoggerConfiguration() + .MinimumLevel.Information() + .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}") + .CreateLogger(); + +Log.Information("Nexus Simulator starting..."); + +// ── Configuration ── +var simConfig = new SimConfig(); +var botConfig = new BotConfig +{ + WorldToGrid = simConfig.WorldToGrid, + LogicTickRateHz = 60, +}; + +// ── Create simulation world ── +var world = new SimWorld(simConfig); +var cache = new GameDataCache(); +var input = new SimInputController(world); +var poller = new SimPoller(world, input, cache, simConfig); +var nav = new NavigationController(botConfig); + +// ── Create systems (same as BotEngine, minus AreaProgression) ── +var systems = new List +{ + new ThreatSystem { WorldToGrid = botConfig.WorldToGrid }, + new MovementSystem + { + SafeDistance = botConfig.SafeDistance, + RepulsionWeight = botConfig.RepulsionWeight, + WorldToGrid = botConfig.WorldToGrid, + }, + new NavigationSystem + { + WorldToGrid = botConfig.WorldToGrid, + WaypointReachedDistance = botConfig.WaypointReachedDistance, + }, + new CombatSystem(botConfig), + new ResourceSystem(botConfig), + new LootSystem(), +}; + +// Apply a default profile with configured skills +var profile = new CharacterProfile +{ + Name = "SimPlayer", + Skills = + [ + new() { SlotIndex = 0, Label = "LMB", InputType = SkillInputType.LeftClick, Priority = 0, RangeMax = 150f, RequiresTarget = true }, + new() { SlotIndex = 1, Label = "RMB", InputType = SkillInputType.RightClick, Priority = 1, RangeMax = 150f, RequiresTarget = true }, + new() { SlotIndex = 3, Label = "Q", InputType = SkillInputType.KeyPress, ScanCode = 0x10, Priority = 3, RangeMax = 600f, CooldownMs = 500, MinMonstersInRange = 2 }, + new() { SlotIndex = 4, Label = "E", InputType = SkillInputType.KeyPress, ScanCode = 0x12, Priority = 4, RangeMax = 800f, CooldownMs = 300 }, + ], + Combat = new CombatSettings + { + GlobalCooldownMs = 400, + AttackRange = 600f, + }, +}; + +// Apply profile to systems that need it +foreach (var sys in systems) +{ + if (sys is CombatSystem combat) combat.ApplyProfile(profile); + if (sys is ResourceSystem resource) resource.ApplyProfile(profile); +} + +// ── Start simulation poller ── +poller.Start(); + +// ── Start exploring ── +nav.Explore(); + +// ── Bot logic thread ── +var actionQueue = new ActionQueue(); +var botRunning = true; + +var botThread = new Thread(() => +{ + var sw = System.Diagnostics.Stopwatch.StartNew(); + var intervalMs = 1000.0 / botConfig.LogicTickRateHz; + + while (botRunning) + { + try + { + var state = cache.LatestState; + if (state is not null && !state.IsLoading && !state.IsEscapeOpen) + { + // Enrich + GameStateEnricher.Enrich(state); + + // Clear and run systems + actionQueue.Clear(); + nav.Update(state); + + foreach (var sys in systems) + { + if (sys.IsEnabled) + sys.Update(state, actionQueue); + } + + // Nav direction + if (nav.DesiredDirection.HasValue) + actionQueue.Submit(new MoveAction(SystemPriority.Navigation, nav.DesiredDirection.Value)); + + // Resolve and execute + var resolved = actionQueue.Resolve(); + ExecuteActions(resolved, state, input); + } + } + catch (Exception ex) + { + Log.Debug(ex, "Bot logic error"); + } + + var elapsed = sw.Elapsed.TotalMilliseconds; + var sleep = intervalMs - (elapsed % intervalMs); + if (sleep > 1) + Thread.Sleep((int)sleep); + } +}) +{ + Name = "Nexus.BotLogic", + IsBackground = true, +}; +botThread.Start(); + +// ── Veldrid + ImGui window ── +var windowInfo = new WindowCreateInfo +{ + X = 100, + Y = 100, + WindowWidth = 1600, + WindowHeight = 1000, + WindowTitle = "Nexus Simulator", +}; + +var window = VeldridStartup.CreateWindow(ref windowInfo); +var gd = VeldridStartup.CreateGraphicsDevice(window, new GraphicsDeviceOptions +{ + PreferStandardClipSpaceYDirection = true, + PreferDepthRangeZeroToOne = true, + SyncToVerticalBlank = true, +}, GraphicsBackend.Direct3D11); + +var imguiRenderer = new VeldridImGuiRenderer( + gd, gd.MainSwapchain.Framebuffer.OutputDescription, + window.Width, window.Height); + +var renderer = new SimRenderer(simConfig, world, nav, systems); +var cl = gd.ResourceFactory.CreateCommandList(); + +window.Resized += () => +{ + gd.MainSwapchain.Resize((uint)window.Width, (uint)window.Height); + imguiRenderer.WindowResized(window.Width, window.Height); +}; + +// ── Main render loop ── +var renderSw = System.Diagnostics.Stopwatch.StartNew(); +var lastRenderMs = 0.0; + +while (window.Exists) +{ + var nowMs = renderSw.Elapsed.TotalMilliseconds; + var deltaSeconds = (float)((nowMs - lastRenderMs) / 1000.0); + lastRenderMs = nowMs; + + var snapshot = window.PumpEvents(); + if (!window.Exists) break; + + imguiRenderer.Update(deltaSeconds, snapshot); + + // Render sim world + renderer.Render(cache.LatestState); + + cl.Begin(); + cl.SetFramebuffer(gd.MainSwapchain.Framebuffer); + cl.ClearColorTarget(0, new RgbaFloat(0.05f, 0.05f, 0.08f, 1f)); + imguiRenderer.Render(gd, cl); + cl.End(); + gd.SubmitCommands(cl); + gd.SwapBuffers(gd.MainSwapchain); +} + +// ── Cleanup ── +botRunning = false; +botThread.Join(2000); +poller.Dispose(); +cl.Dispose(); +imguiRenderer.Dispose(); +gd.Dispose(); +Log.Information("Nexus Simulator stopped."); + +// ── Helper: Execute bot actions via SimInputController ── +static void ExecuteActions(List resolved, GameState state, SimInputController input) +{ + foreach (var action in resolved) + { + switch (action) + { + case MoveAction move: + // MovementKeyTracker equivalent — convert direction to WASD key presses + // The SimInputController interprets these directly + const float cos45 = 0.70710678f; + const float sin45 = 0.70710678f; + var sx = move.Direction.X * cos45 - move.Direction.Y * sin45; + var sy = move.Direction.X * sin45 + move.Direction.Y * cos45; + + const float threshold = 0.3f; + if (sy > threshold) input.KeyDown(0x11); else input.KeyUp(0x11); // W + if (sy < -threshold) input.KeyDown(0x1F); else input.KeyUp(0x1F); // S + if (sx > threshold) input.KeyDown(0x20); else input.KeyUp(0x20); // D + if (sx < -threshold) input.KeyDown(0x1E); else input.KeyUp(0x1E); // A + break; + + case CastAction cast: + if (cast.TargetScreenPos.HasValue) + input.SmoothMoveTo((int)cast.TargetScreenPos.Value.X, (int)cast.TargetScreenPos.Value.Y); + input.KeyPress(cast.SkillScanCode); + break; + + case FlaskAction flask: + input.KeyPress(flask.FlaskScanCode); + break; + + case ClickAction click: + var cx = (int)click.ScreenPosition.X; + var cy = (int)click.ScreenPosition.Y; + switch (click.Type) + { + case ClickType.Left: input.LeftClick(cx, cy); break; + case ClickType.Right: input.RightClick(cx, cy); break; + case ClickType.Middle: input.MiddleClick(cx, cy); break; + } + break; + + case KeyAction key: + switch (key.Type) + { + case KeyActionType.Press: input.KeyPress(key.ScanCode); break; + case KeyActionType.Down: input.KeyDown(key.ScanCode); break; + case KeyActionType.Up: input.KeyUp(key.ScanCode); break; + } + break; + } + } +} diff --git a/src/Nexus.Simulator/Rendering/DebugPanel.cs b/src/Nexus.Simulator/Rendering/DebugPanel.cs new file mode 100644 index 0000000..cbb586b --- /dev/null +++ b/src/Nexus.Simulator/Rendering/DebugPanel.cs @@ -0,0 +1,131 @@ +using System.Numerics; +using ImGuiNET; +using Nexus.Core; +using Nexus.Pathfinding; +using Nexus.Simulator.Config; +using Nexus.Simulator.World; + +namespace Nexus.Simulator.Rendering; + +public class DebugPanel +{ + private readonly SimConfig _config; + private readonly SimWorld _world; + private readonly NavigationController _nav; + private readonly IReadOnlyList _systems; + + private int _spawnRarity; // 0=Normal, 1=Magic, 2=Rare, 3=Unique + + public DebugPanel(SimConfig config, SimWorld world, NavigationController nav, IReadOnlyList systems) + { + _config = config; + _world = world; + _nav = nav; + _systems = systems; + } + + public void Draw(GameState? state) + { + ImGui.Begin("Simulator Controls"); + + // Simulation controls + if (ImGui.CollapsingHeader("Simulation", ImGuiTreeNodeFlags.DefaultOpen)) + { + var paused = _config.IsPaused; + if (ImGui.Checkbox("Paused", ref paused)) + _config.IsPaused = paused; + ImGui.SameLine(); + if (ImGui.Button("Step")) + { + _config.IsPaused = false; + } + + var speed = _config.SpeedMultiplier; + if (ImGui.SliderFloat("Speed", ref speed, 0.1f, 4f, "%.1fx")) + _config.SpeedMultiplier = speed; + + if (ImGui.Button("Regenerate Terrain")) + _world.RegenerateTerrain(); + } + + // Player stats + if (ImGui.CollapsingHeader("Player", ImGuiTreeNodeFlags.DefaultOpen)) + { + var player = _world.Player; + ImGui.Text($"Position: ({player.Position.X:F0}, {player.Position.Y:F0})"); + + var hpPct = player.MaxHealth > 0 ? (float)player.Health / player.MaxHealth : 0; + ImGui.ProgressBar(hpPct, new Vector2(-1, 0), $"HP: {player.Health}/{player.MaxHealth}"); + + var manaPct = player.MaxMana > 0 ? (float)player.Mana / player.MaxMana : 0; + ImGui.ProgressBar(manaPct, new Vector2(-1, 0), $"MP: {player.Mana}/{player.MaxMana}"); + } + + // Enemy stats + if (ImGui.CollapsingHeader("Enemies", ImGuiTreeNodeFlags.DefaultOpen)) + { + var alive = _world.Enemies.Count(e => e.IsAlive); + var dead = _world.Enemies.Count(e => !e.IsAlive); + var chasing = _world.Enemies.Count(e => e.AiState == EnemyAiState.Chasing); + var attacking = _world.Enemies.Count(e => e.AiState == EnemyAiState.Attacking); + + ImGui.Text($"Total: {_world.Enemies.Count} Alive: {alive} Dead: {dead}"); + ImGui.Text($"Chasing: {chasing} Attacking: {attacking}"); + + ImGui.Separator(); + ImGui.Text("Spawn Enemy:"); + string[] rarities = ["Normal", "Magic", "Rare", "Unique"]; + ImGui.Combo("Rarity", ref _spawnRarity, rarities, rarities.Length); + if (ImGui.Button("Spawn at Player")) + { + var rarity = (MonsterRarity)_spawnRarity; + var offset = new Vector2(200, 0); + _world.SpawnEnemyAt(_world.Player.Position + offset, rarity); + } + } + + // Navigation + if (ImGui.CollapsingHeader("Navigation")) + { + ImGui.Text($"Mode: {_nav.Mode}"); + ImGui.Text($"Status: {_nav.Status}"); + ImGui.Text($"Direction: {(_nav.DesiredDirection.HasValue ? $"({_nav.DesiredDirection.Value.X:F2}, {_nav.DesiredDirection.Value.Y:F2})" : "none")}"); + + var path = _nav.CurrentPath; + ImGui.Text($"Path: {path?.Count ?? 0} waypoints"); + ImGui.Text($"Exploration complete: {_nav.IsExplorationComplete}"); + } + + // Systems + if (ImGui.CollapsingHeader("Systems")) + { + foreach (var sys in _systems) + { + var enabled = sys.IsEnabled; + if (ImGui.Checkbox(sys.Name, ref enabled)) + sys.IsEnabled = enabled; + } + } + + // Threat info + if (state is not null && ImGui.CollapsingHeader("Threat")) + { + ImGui.Text($"Danger: {state.Danger}"); + var threats = state.Threats; + ImGui.Text($"Close: {threats.CloseRange} Mid: {threats.MidRange} Far: {threats.FarRange}"); + ImGui.Text($"Closest: {threats.ClosestDistance:F0}"); + ImGui.Text($"Has Rare/Unique: {threats.HasRareOrUnique}"); + } + + // Action queue + if (state is not null && ImGui.CollapsingHeader("State")) + { + ImGui.Text($"Tick: {state.TickNumber}"); + ImGui.Text($"Entities: {state.Entities.Count}"); + ImGui.Text($"Hostile: {state.HostileMonsters.Count}"); + ImGui.Text($"Nearest: {state.NearestEnemies.Count}"); + } + + ImGui.End(); + } +} diff --git a/src/Nexus.Simulator/Rendering/EffectRenderer.cs b/src/Nexus.Simulator/Rendering/EffectRenderer.cs new file mode 100644 index 0000000..45a8cb6 --- /dev/null +++ b/src/Nexus.Simulator/Rendering/EffectRenderer.cs @@ -0,0 +1,92 @@ +using System.Numerics; +using ImGuiNET; +using Nexus.Simulator.World; + +namespace Nexus.Simulator.Rendering; + +public static class EffectRenderer +{ + public static void DrawEffects(ImDrawListPtr drawList, List effects, + Vector2 viewOffset, float zoom, Vector2 canvasOrigin, float worldToGrid) + { + foreach (var effect in effects) + { + var alpha = (byte)(255 * (1f - effect.Progress)); + var originScreen = canvasOrigin + viewOffset + effect.Origin * worldToGrid * zoom; + var targetScreen = canvasOrigin + viewOffset + effect.TargetPosition * worldToGrid * zoom; + + switch (effect.Type) + { + case SkillEffectType.Melee: + DrawMeleeCone(drawList, originScreen, targetScreen, + effect.Radius * worldToGrid * zoom, effect.ConeAngle, alpha); + break; + + case SkillEffectType.Aoe: + DrawAoeCircle(drawList, targetScreen, + effect.Radius * worldToGrid * zoom, alpha); + break; + + case SkillEffectType.Projectile: + DrawProjectileLine(drawList, originScreen, targetScreen, alpha); + break; + } + } + } + + public static void DrawProjectiles(ImDrawListPtr drawList, List projectiles, + Vector2 viewOffset, float zoom, Vector2 canvasOrigin, float worldToGrid) + { + foreach (var proj in projectiles) + { + var pos = canvasOrigin + viewOffset + proj.Position * worldToGrid * zoom; + var radius = proj.HitRadius * worldToGrid * zoom * 0.3f; + drawList.AddCircleFilled(pos, Math.Max(3f, radius), 0xFF00DDFF); + drawList.AddCircle(pos, Math.Max(4f, radius + 1), 0xFF00AAFF); + } + } + + private static void DrawMeleeCone(ImDrawListPtr drawList, Vector2 origin, Vector2 target, + float radius, float coneAngle, byte alpha) + { + var dir = target - origin; + if (dir.LengthSquared() < 1f) return; + dir = Vector2.Normalize(dir); + + var halfAngle = coneAngle * MathF.PI / 360f; + var segments = 12; + var color = (uint)(alpha << 24) | 0x00FF4444; + + // Draw cone as triangle fan + var prevPoint = origin + Rotate(dir, -halfAngle) * radius; + for (var i = 1; i <= segments; i++) + { + var t = (float)i / segments; + var angle = -halfAngle + t * halfAngle * 2; + var point = origin + Rotate(dir, angle) * radius; + drawList.AddTriangleFilled(origin, prevPoint, point, color); + prevPoint = point; + } + } + + private static void DrawAoeCircle(ImDrawListPtr drawList, Vector2 center, float radius, byte alpha) + { + var fillColor = (uint)(alpha / 2 << 24) | 0x004488FF; + var borderColor = (uint)(alpha << 24) | 0x006688FF; + drawList.AddCircleFilled(center, radius, fillColor); + drawList.AddCircle(center, radius, borderColor, 0, 2f); + } + + private static void DrawProjectileLine(ImDrawListPtr drawList, Vector2 from, Vector2 to, byte alpha) + { + var color = (uint)(alpha << 24) | 0x0000DDFF; + drawList.AddLine(from, to, color, 2f); + } + + private static Vector2 Rotate(Vector2 v, float radians) + { + var cos = MathF.Cos(radians); + var sin = MathF.Sin(radians); + return new Vector2(v.X * cos - v.Y * sin, v.X * sin + v.Y * cos); + } +} diff --git a/src/Nexus.Simulator/Rendering/EntityRenderer.cs b/src/Nexus.Simulator/Rendering/EntityRenderer.cs new file mode 100644 index 0000000..52aaac1 --- /dev/null +++ b/src/Nexus.Simulator/Rendering/EntityRenderer.cs @@ -0,0 +1,86 @@ +using System.Numerics; +using ImGuiNET; +using Nexus.Core; +using Nexus.Simulator.World; + +namespace Nexus.Simulator.Rendering; + +public static class EntityRenderer +{ + public static void DrawPlayer(ImDrawListPtr drawList, SimPlayer player, + Vector2 viewOffset, float zoom, Vector2 canvasOrigin, float worldToGrid) + { + var gridPos = player.Position * worldToGrid; + var screenPos = canvasOrigin + viewOffset + gridPos * zoom; + + var radius = 8f; + drawList.AddCircleFilled(screenPos, radius, 0xFF00FF00); // Green + drawList.AddCircle(screenPos, radius + 1, 0xFF00AA00); + + // Health bar above player + DrawHealthBar(drawList, screenPos - new Vector2(15, radius + 8), 30, 4, + player.Health, player.MaxHealth, 0xFF00DD00); + + // Mana bar + DrawHealthBar(drawList, screenPos - new Vector2(15, radius + 14), 30, 3, + player.Mana, player.MaxMana, 0xFFDD6600); + } + + public static void DrawEnemies(ImDrawListPtr drawList, List enemies, + Vector2 viewOffset, float zoom, Vector2 canvasOrigin, float worldToGrid, + Vector2 canvasMin, Vector2 canvasMax) + { + foreach (var enemy in enemies) + { + var gridPos = enemy.Position * worldToGrid; + var screenPos = canvasOrigin + viewOffset + gridPos * zoom; + + // Cull off-screen + if (screenPos.X < canvasMin.X - 20 || screenPos.X > canvasMax.X + 20 || + screenPos.Y < canvasMin.Y - 20 || screenPos.Y > canvasMax.Y + 20) + continue; + + var (color, radius) = enemy.Rarity switch + { + MonsterRarity.Unique => (0xFF00AAFF, 10f), // Orange + MonsterRarity.Rare => (0xFF00FFFF, 8f), // Yellow + MonsterRarity.Magic => (0xFFFF8800, 6f), // Blue + _ => (0xFFCCCCCC, 5f), // White + }; + + if (!enemy.IsAlive) + { + color = 0xFF444444; + radius *= 0.7f; + } + + drawList.AddCircleFilled(screenPos, radius, color); + + if (enemy.AiState == EnemyAiState.Chasing) + drawList.AddCircle(screenPos, radius + 2, 0xFF0000FF); // Red ring when chasing + else if (enemy.AiState == EnemyAiState.Attacking) + drawList.AddCircle(screenPos, radius + 3, 0xFF0000FF, 0, 3f); + + // Health bar + if (enemy.IsAlive && enemy.Health < enemy.MaxHealth) + { + DrawHealthBar(drawList, screenPos - new Vector2(12, radius + 6), 24, 3, + enemy.Health, enemy.MaxHealth, 0xFF0000FF); + } + } + } + + private static void DrawHealthBar(ImDrawListPtr drawList, Vector2 pos, float width, float height, + int current, int max, uint color) + { + if (max <= 0) return; + var pct = (float)current / max; + + // Background + drawList.AddRectFilled(pos, pos + new Vector2(width, height), 0xFF000000); + // Fill + drawList.AddRectFilled(pos, pos + new Vector2(width * pct, height), color); + // Border + drawList.AddRect(pos, pos + new Vector2(width, height), 0xFF666666); + } +} diff --git a/src/Nexus.Simulator/Rendering/PathRenderer.cs b/src/Nexus.Simulator/Rendering/PathRenderer.cs new file mode 100644 index 0000000..66335b7 --- /dev/null +++ b/src/Nexus.Simulator/Rendering/PathRenderer.cs @@ -0,0 +1,37 @@ +using System.Numerics; +using ImGuiNET; +using Nexus.Pathfinding; + +namespace Nexus.Simulator.Rendering; + +public static class PathRenderer +{ + public static void Draw(ImDrawListPtr drawList, NavigationController nav, + Vector2 viewOffset, float zoom, Vector2 canvasOrigin, float worldToGrid) + { + var path = nav.CurrentPath; + if (path is null || path.Count < 2) return; + + for (var i = 0; i < path.Count - 1; i++) + { + var a = canvasOrigin + viewOffset + path[i] * worldToGrid * zoom; + var b = canvasOrigin + viewOffset + path[i + 1] * worldToGrid * zoom; + drawList.AddLine(a, b, 0xFFFFFF00, 2f); // Cyan + } + + // Draw waypoint dots + foreach (var wp in path) + { + var pos = canvasOrigin + viewOffset + wp * worldToGrid * zoom; + drawList.AddCircleFilled(pos, 3f, 0xFFFFFF00); + } + } + + public static void DrawExploredOverlay(ImDrawListPtr drawList, + bool[]? exploredGrid, int exploredWidth, int exploredHeight, + Vector2 viewOffset, float zoom, Vector2 canvasOrigin, Vector2 canvasSize) + { + // Already handled in TerrainRenderer via brightness difference + // This method is a placeholder for additional explore visualization + } +} diff --git a/src/Nexus.Simulator/Rendering/SimRenderer.cs b/src/Nexus.Simulator/Rendering/SimRenderer.cs new file mode 100644 index 0000000..c8bae7c --- /dev/null +++ b/src/Nexus.Simulator/Rendering/SimRenderer.cs @@ -0,0 +1,134 @@ +using System.Numerics; +using ImGuiNET; +using Nexus.Core; +using Nexus.Pathfinding; +using Nexus.Simulator.Config; +using Nexus.Simulator.World; + +namespace Nexus.Simulator.Rendering; + +/// +/// Main renderer: draws the top-down game world viewport using ImGui draw lists. +/// +public class SimRenderer +{ + private readonly SimConfig _config; + private readonly SimWorld _world; + private readonly NavigationController _nav; + private readonly DebugPanel _debugPanel; + + // Camera + private Vector2 _viewOffset; + private float _zoom = 2f; // pixels per grid cell + + public SimRenderer(SimConfig config, SimWorld world, NavigationController nav, + IReadOnlyList systems) + { + _config = config; + _world = world; + _nav = nav; + _debugPanel = new DebugPanel(config, world, nav, systems); + + // Center view on player + CenterOnPlayer(); + } + + public void Render(GameState? state) + { + // Debug panel (side window) + _debugPanel.Draw(state); + + // Main viewport + ImGui.SetNextWindowPos(Vector2.Zero, ImGuiCond.FirstUseEver); + ImGui.SetNextWindowSize(new Vector2(1200, 900), ImGuiCond.FirstUseEver); + ImGui.Begin("Simulator", ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoScrollWithMouse); + + var canvasOrigin = ImGui.GetCursorScreenPos(); + var canvasSize = ImGui.GetContentRegionAvail(); + + // Handle input + HandleInput(canvasOrigin, canvasSize); + + // Center camera on player + CenterOnPlayer(canvasSize); + + var drawList = ImGui.GetWindowDrawList(); + + // Clip to canvas + drawList.PushClipRect(canvasOrigin, canvasOrigin + canvasSize); + + // 1. Terrain + TerrainRenderer.Draw(drawList, _world.Terrain, _viewOffset, _zoom, canvasOrigin, canvasSize, + _nav.ExploredGrid, _nav.ExploredWidth, _nav.ExploredHeight); + + // 2. Path + PathRenderer.Draw(drawList, _nav, _viewOffset, _zoom, canvasOrigin, _config.WorldToGrid); + + // 3. Effects + EffectRenderer.DrawEffects(drawList, _world.ActiveEffects, _viewOffset, _zoom, canvasOrigin, _config.WorldToGrid); + EffectRenderer.DrawProjectiles(drawList, _world.Projectiles, _viewOffset, _zoom, canvasOrigin, _config.WorldToGrid); + + // 4. Enemies + EntityRenderer.DrawEnemies(drawList, _world.Enemies, _viewOffset, _zoom, canvasOrigin, _config.WorldToGrid, + canvasOrigin, canvasOrigin + canvasSize); + + // 5. Player + EntityRenderer.DrawPlayer(drawList, _world.Player, _viewOffset, _zoom, canvasOrigin, _config.WorldToGrid); + + drawList.PopClipRect(); + + // Minimap (bottom-right corner) + var minimapSize = 150f; + var minimapOrigin = canvasOrigin + canvasSize - new Vector2(minimapSize + 10, minimapSize + 10); + var playerGridPos = _world.Player.Position * _config.WorldToGrid; + TerrainRenderer.DrawMinimap(drawList, _world.Terrain, playerGridPos, minimapOrigin, minimapSize); + + // HUD text + DrawHud(drawList, canvasOrigin, state); + + ImGui.End(); + } + + private void CenterOnPlayer(Vector2? canvasSize = null) + { + var cs = canvasSize ?? new Vector2(1200, 900); + var playerGrid = _world.Player.Position * _config.WorldToGrid; + _viewOffset = cs * 0.5f - playerGrid * _zoom; + } + + private void HandleInput(Vector2 canvasOrigin, Vector2 canvasSize) + { + if (!ImGui.IsWindowHovered()) return; + + var io = ImGui.GetIO(); + + // Scroll to zoom + if (io.MouseWheel != 0) + { + var mousePos = io.MousePos - canvasOrigin; + var worldBeforeZoom = (mousePos - _viewOffset) / _zoom; + + _zoom *= io.MouseWheel > 0 ? 1.15f : 1f / 1.15f; + _zoom = Math.Clamp(_zoom, 0.2f, 20f); + + _viewOffset = mousePos - worldBeforeZoom * _zoom; + } + } + + private void DrawHud(ImDrawListPtr drawList, Vector2 canvasOrigin, GameState? state) + { + var textPos = canvasOrigin + new Vector2(10, 10); + var color = 0xFFFFFFFF; + + drawList.AddText(textPos, color, $"Nav: {_nav.Mode} - {_nav.Status}"); + textPos.Y += 16; + + if (state is not null) + { + drawList.AddText(textPos, color, $"Danger: {state.Danger} Enemies: {state.HostileMonsters.Count}"); + textPos.Y += 16; + } + + drawList.AddText(textPos, color, $"Zoom: {_zoom:F1}x Tick: {_world.TickNumber}"); + } +} diff --git a/src/Nexus.Simulator/Rendering/TerrainRenderer.cs b/src/Nexus.Simulator/Rendering/TerrainRenderer.cs new file mode 100644 index 0000000..6722a74 --- /dev/null +++ b/src/Nexus.Simulator/Rendering/TerrainRenderer.cs @@ -0,0 +1,99 @@ +using System.Numerics; +using ImGuiNET; +using Nexus.Core; + +namespace Nexus.Simulator.Rendering; + +public static class TerrainRenderer +{ + /// + /// Draws the walkability grid as colored rectangles on the ImGui draw list. + /// Only draws cells visible in the current viewport for performance. + /// + public static void Draw(ImDrawListPtr drawList, WalkabilitySnapshot terrain, + Vector2 viewOffset, float zoom, Vector2 canvasOrigin, Vector2 canvasSize, + bool[]? exploredGrid = null, int exploredWidth = 0, int exploredHeight = 0) + { + var cellSize = zoom; + if (cellSize < 0.5f) return; // Too zoomed out to draw individual cells + + // Visible range in grid coords + var minGx = Math.Max(0, (int)(-viewOffset.X / cellSize)); + var minGy = Math.Max(0, (int)(-viewOffset.Y / cellSize)); + var maxGx = Math.Min(terrain.Width - 1, (int)((-viewOffset.X + canvasSize.X) / cellSize)); + var maxGy = Math.Min(terrain.Height - 1, (int)((-viewOffset.Y + canvasSize.Y) / cellSize)); + + // Skip pixels if too many cells + var step = 1; + if (cellSize < 2f) step = 4; + else if (cellSize < 4f) step = 2; + + for (var gy = minGy; gy <= maxGy; gy += step) + for (var gx = minGx; gx <= maxGx; gx += step) + { + var screenX = canvasOrigin.X + viewOffset.X + gx * cellSize; + var screenY = canvasOrigin.Y + viewOffset.Y + gy * cellSize; + + var w = terrain.IsWalkable(gx, gy); + uint color; + + if (!w) + { + color = 0xFF1A1A2E; // Dark wall + } + else + { + var explored = exploredGrid is not null + && gx < exploredWidth && gy < exploredHeight + && exploredGrid[gy * exploredWidth + gx]; + + color = explored ? 0xFF3D3D5C : 0xFF2A2A3F; // Brighter if explored + } + + var size = cellSize * step; + drawList.AddRectFilled( + new Vector2(screenX, screenY), + new Vector2(screenX + size, screenY + size), + color); + } + } + + /// + /// Draws a minimap in the corner. + /// + public static void DrawMinimap(ImDrawListPtr drawList, WalkabilitySnapshot terrain, + Vector2 playerGridPos, Vector2 minimapOrigin, float minimapSize) + { + var scaleX = minimapSize / terrain.Width; + var scaleY = minimapSize / terrain.Height; + var scale = Math.Min(scaleX, scaleY); + + // Background + drawList.AddRectFilled(minimapOrigin, + minimapOrigin + new Vector2(terrain.Width * scale, terrain.Height * scale), + 0xFF0A0A15); + + // Draw walkable cells (sampled) + var step = Math.Max(1, terrain.Width / 200); + for (var gy = 0; gy < terrain.Height; gy += step) + for (var gx = 0; gx < terrain.Width; gx += step) + { + if (!terrain.IsWalkable(gx, gy)) continue; + var px = minimapOrigin.X + gx * scale; + var py = minimapOrigin.Y + gy * scale; + drawList.AddRectFilled( + new Vector2(px, py), + new Vector2(px + scale * step, py + scale * step), + 0xFF2A2A3F); + } + + // Player dot + var playerPx = minimapOrigin + playerGridPos * scale; + drawList.AddCircleFilled(playerPx, 3f, 0xFF00FF00); + + // Border + drawList.AddRect(minimapOrigin, + minimapOrigin + new Vector2(terrain.Width * scale, terrain.Height * scale), + 0xFF666666); + } +} diff --git a/src/Nexus.Simulator/Rendering/VeldridImGuiRenderer.cs b/src/Nexus.Simulator/Rendering/VeldridImGuiRenderer.cs new file mode 100644 index 0000000..85eaf71 --- /dev/null +++ b/src/Nexus.Simulator/Rendering/VeldridImGuiRenderer.cs @@ -0,0 +1,482 @@ +using System.Numerics; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using ImGuiNET; +using Veldrid; + +namespace Nexus.Simulator.Rendering; + +/// +/// Minimal ImGui renderer for Veldrid 4.9.0 on D3D11. +/// Based on the canonical veldrid-imgui integration. +/// +public sealed class VeldridImGuiRenderer : IDisposable +{ + private readonly GraphicsDevice _gd; + + // GPU resources + private DeviceBuffer _vertexBuffer = null!; + private DeviceBuffer _indexBuffer = null!; + private DeviceBuffer _projMatrixBuffer = null!; + private Texture _fontTexture = null!; + private TextureView _fontTextureView = null!; + private ResourceSet _fontResourceSet = null!; + private ResourceLayout _layout = null!; + private ResourceLayout _textureLayout = null!; + private Pipeline _pipeline = null!; + private Shader[] _shaders = null!; + + private int _windowWidth; + private int _windowHeight; + private readonly IntPtr _fontAtlasId = (IntPtr)1; + + // Per-texture resource sets + private readonly Dictionary _resourceSets = new(); + + public VeldridImGuiRenderer(GraphicsDevice gd, OutputDescription outputDescription, int width, int height) + { + _gd = gd; + _windowWidth = width; + _windowHeight = height; + + var context = ImGui.CreateContext(); + ImGui.SetCurrentContext(context); + + var io = ImGui.GetIO(); + io.BackendFlags |= ImGuiBackendFlags.RendererHasVtxOffset; + io.ConfigFlags |= ImGuiConfigFlags.NavEnableKeyboard; + io.DisplaySize = new Vector2(width, height); + io.DisplayFramebufferScale = Vector2.One; + + CreateDeviceResources(gd, outputDescription); + SetupKeyMappings(); + } + + public void WindowResized(int width, int height) + { + _windowWidth = width; + _windowHeight = height; + ImGui.GetIO().DisplaySize = new Vector2(width, height); + } + + public void Update(float deltaSeconds, InputSnapshot snapshot) + { + var io = ImGui.GetIO(); + io.DisplaySize = new Vector2(_windowWidth, _windowHeight); + io.DeltaTime = deltaSeconds > 0 ? deltaSeconds : 1f / 60f; + + UpdateInput(snapshot); + + ImGui.NewFrame(); + } + + public void Render(GraphicsDevice gd, CommandList cl) + { + ImGui.Render(); + RenderImDrawData(ImGui.GetDrawData(), gd, cl); + } + + private void CreateDeviceResources(GraphicsDevice gd, OutputDescription outputDescription) + { + var factory = gd.ResourceFactory; + + _vertexBuffer = factory.CreateBuffer(new BufferDescription(10000, BufferUsage.VertexBuffer | BufferUsage.Dynamic)); + _indexBuffer = factory.CreateBuffer(new BufferDescription(2000, BufferUsage.IndexBuffer | BufferUsage.Dynamic)); + _projMatrixBuffer = factory.CreateBuffer(new BufferDescription(64, BufferUsage.UniformBuffer | BufferUsage.Dynamic)); + + // Create shaders using HLSL + _shaders = CreateShaders(gd); + + // Font texture + RecreateFontDeviceTexture(gd); + + // Resource layouts + _layout = factory.CreateResourceLayout(new ResourceLayoutDescription( + new ResourceLayoutElementDescription("ProjectionMatrixBuffer", ResourceKind.UniformBuffer, ShaderStages.Vertex), + new ResourceLayoutElementDescription("MainSampler", ResourceKind.Sampler, ShaderStages.Fragment))); + + _textureLayout = factory.CreateResourceLayout(new ResourceLayoutDescription( + new ResourceLayoutElementDescription("MainTexture", ResourceKind.TextureReadOnly, ShaderStages.Fragment))); + + // Pipeline + var vertexLayout = new VertexLayoutDescription( + new VertexElementDescription("in_position", VertexElementSemantic.TextureCoordinate, VertexElementFormat.Float2), + new VertexElementDescription("in_texCoord", VertexElementSemantic.TextureCoordinate, VertexElementFormat.Float2), + new VertexElementDescription("in_color", VertexElementSemantic.TextureCoordinate, VertexElementFormat.Byte4_Norm)); + + var pipelineDesc = new GraphicsPipelineDescription + { + BlendState = new BlendStateDescription + { + AttachmentStates = [ + new BlendAttachmentDescription + { + BlendEnabled = true, + SourceColorFactor = BlendFactor.SourceAlpha, + DestinationColorFactor = BlendFactor.InverseSourceAlpha, + ColorFunction = BlendFunction.Add, + SourceAlphaFactor = BlendFactor.One, + DestinationAlphaFactor = BlendFactor.InverseSourceAlpha, + AlphaFunction = BlendFunction.Add, + }, + ], + }, + DepthStencilState = new DepthStencilStateDescription(false, false, ComparisonKind.Always), + RasterizerState = new RasterizerStateDescription( + FaceCullMode.None, PolygonFillMode.Solid, FrontFace.Clockwise, + true, true), + PrimitiveTopology = PrimitiveTopology.TriangleList, + ResourceLayouts = [_layout, _textureLayout], + ShaderSet = new ShaderSetDescription([vertexLayout], _shaders), + Outputs = outputDescription, + }; + + _pipeline = factory.CreateGraphicsPipeline(ref pipelineDesc); + } + + private void RecreateFontDeviceTexture(GraphicsDevice gd) + { + var io = ImGui.GetIO(); + io.Fonts.GetTexDataAsRGBA32(out IntPtr pixels, out int width, out int height, out int bytesPerPixel); + + _fontTexture?.Dispose(); + _fontTextureView?.Dispose(); + + _fontTexture = gd.ResourceFactory.CreateTexture(TextureDescription.Texture2D( + (uint)width, (uint)height, 1, 1, + PixelFormat.R8_G8_B8_A8_UNorm, TextureUsage.Sampled)); + _fontTexture.Name = "ImGui.NET Font Texture"; + + gd.UpdateTexture(_fontTexture, pixels, (uint)(bytesPerPixel * width * height), 0, 0, 0, + (uint)width, (uint)height, 1, 0, 0); + + _fontTextureView = gd.ResourceFactory.CreateTextureView(_fontTexture); + + io.Fonts.SetTexID(_fontAtlasId); + io.Fonts.ClearTexData(); + + // Create resource set for font + if (_textureLayout is not null) + { + _fontResourceSet?.Dispose(); + _fontResourceSet = gd.ResourceFactory.CreateResourceSet(new ResourceSetDescription( + _textureLayout, _fontTextureView)); + _resourceSets[_fontAtlasId] = _fontResourceSet; + } + } + + private Shader[] CreateShaders(GraphicsDevice gd) + { + // For D3D11, use HLSL compiled at runtime + // For other backends, we'd need SPIRV + var backend = gd.BackendType; + + byte[] vertexShaderBytes; + byte[] fragmentShaderBytes; + + if (backend == GraphicsBackend.Direct3D11) + { + vertexShaderBytes = CompileHlsl(VertexShaderHlsl, "main", "vs_5_0"); + fragmentShaderBytes = CompileHlsl(FragmentShaderHlsl, "main", "ps_5_0"); + } + else + { + throw new NotSupportedException($"Backend {backend} not supported. Use Direct3D11."); + } + + var vertexShader = gd.ResourceFactory.CreateShader(new ShaderDescription( + ShaderStages.Vertex, vertexShaderBytes, "main")); + var fragmentShader = gd.ResourceFactory.CreateShader(new ShaderDescription( + ShaderStages.Fragment, fragmentShaderBytes, "main")); + + return [vertexShader, fragmentShader]; + } + + private void RenderImDrawData(ImDrawDataPtr drawData, GraphicsDevice gd, CommandList cl) + { + if (drawData.CmdListsCount == 0) return; + + // Resize vertex/index buffers if needed + var totalVtxSize = (uint)(drawData.TotalVtxCount * Unsafe.SizeOf()); + var totalIdxSize = (uint)(drawData.TotalIdxCount * sizeof(ushort)); + + if (totalVtxSize > _vertexBuffer.SizeInBytes) + { + _vertexBuffer.Dispose(); + _vertexBuffer = gd.ResourceFactory.CreateBuffer(new BufferDescription( + totalVtxSize * 2, BufferUsage.VertexBuffer | BufferUsage.Dynamic)); + } + + if (totalIdxSize > _indexBuffer.SizeInBytes) + { + _indexBuffer.Dispose(); + _indexBuffer = gd.ResourceFactory.CreateBuffer(new BufferDescription( + totalIdxSize * 2, BufferUsage.IndexBuffer | BufferUsage.Dynamic)); + } + + // Upload vertex/index data + uint vtxOffset = 0, idxOffset = 0; + for (var i = 0; i < drawData.CmdListsCount; i++) + { + var cmdList = drawData.CmdLists[i]; + cl.UpdateBuffer(_vertexBuffer, vtxOffset, + cmdList.VtxBuffer.Data, (uint)(cmdList.VtxBuffer.Size * Unsafe.SizeOf())); + cl.UpdateBuffer(_indexBuffer, idxOffset, + cmdList.IdxBuffer.Data, (uint)(cmdList.IdxBuffer.Size * sizeof(ushort))); + vtxOffset += (uint)(cmdList.VtxBuffer.Size * Unsafe.SizeOf()); + idxOffset += (uint)(cmdList.IdxBuffer.Size * sizeof(ushort)); + } + + // Update projection matrix + var io = ImGui.GetIO(); + var mvp = Matrix4x4.CreateOrthographicOffCenter( + drawData.DisplayPos.X, + drawData.DisplayPos.X + drawData.DisplaySize.X, + drawData.DisplayPos.Y + drawData.DisplaySize.Y, + drawData.DisplayPos.Y, + -1f, 1f); + cl.UpdateBuffer(_projMatrixBuffer, 0, ref mvp); + + cl.SetVertexBuffer(0, _vertexBuffer); + cl.SetIndexBuffer(_indexBuffer, IndexFormat.UInt16); + cl.SetPipeline(_pipeline); + + // Create main resource set + var mainResourceSet = gd.ResourceFactory.CreateResourceSet(new ResourceSetDescription( + _layout, _projMatrixBuffer, gd.PointSampler)); + cl.SetGraphicsResourceSet(0, mainResourceSet); + + // Draw + var clipOff = drawData.DisplayPos; + vtxOffset = 0; + idxOffset = 0; + for (var n = 0; n < drawData.CmdListsCount; n++) + { + var cmdList = drawData.CmdLists[n]; + for (var cmdI = 0; cmdI < cmdList.CmdBuffer.Size; cmdI++) + { + var pcmd = cmdList.CmdBuffer[cmdI]; + + if (pcmd.TextureId != IntPtr.Zero) + { + if (_resourceSets.TryGetValue(pcmd.TextureId, out var rs)) + cl.SetGraphicsResourceSet(1, rs); + } + + var clipRect = pcmd.ClipRect; + cl.SetScissorRect(0, + (uint)(clipRect.X - clipOff.X), + (uint)(clipRect.Y - clipOff.Y), + (uint)(clipRect.Z - clipRect.X), + (uint)(clipRect.W - clipRect.Y)); + + cl.DrawIndexed(pcmd.ElemCount, 1, + pcmd.IdxOffset + idxOffset, + (int)(pcmd.VtxOffset + vtxOffset), + 0); + } + vtxOffset += (uint)cmdList.VtxBuffer.Size; + idxOffset += (uint)cmdList.IdxBuffer.Size; + } + + mainResourceSet.Dispose(); + } + + private void UpdateInput(InputSnapshot snapshot) + { + var io = ImGui.GetIO(); + + io.MousePos = snapshot.MousePosition; + + io.MouseDown[0] = snapshot.IsMouseDown(MouseButton.Left); + io.MouseDown[1] = snapshot.IsMouseDown(MouseButton.Right); + io.MouseDown[2] = snapshot.IsMouseDown(MouseButton.Middle); + io.MouseWheel = snapshot.WheelDelta; + + foreach (var ke in snapshot.KeyEvents) + { + var imguiKey = ConvertKey(ke.Key); + if (imguiKey != ImGuiKey.None) + io.AddKeyEvent(imguiKey, ke.Down); + } + + foreach (var c in snapshot.KeyCharPresses) + io.AddInputCharacter(c); + } + + private static ImGuiKey ConvertKey(Key key) => key switch + { + Key.Tab => ImGuiKey.Tab, + Key.Left => ImGuiKey.LeftArrow, + Key.Right => ImGuiKey.RightArrow, + Key.Up => ImGuiKey.UpArrow, + Key.Down => ImGuiKey.DownArrow, + Key.Home => ImGuiKey.Home, + Key.End => ImGuiKey.End, + Key.Delete => ImGuiKey.Delete, + Key.BackSpace => ImGuiKey.Backspace, + Key.Enter => ImGuiKey.Enter, + Key.Escape => ImGuiKey.Escape, + Key.Space => ImGuiKey.Space, + Key.A => ImGuiKey.A, + Key.C => ImGuiKey.C, + Key.V => ImGuiKey.V, + Key.X => ImGuiKey.X, + Key.Y => ImGuiKey.Y, + Key.Z => ImGuiKey.Z, + _ => ImGuiKey.None, + }; + + private void SetupKeyMappings() + { + // ImGui.NET 1.91+ uses the key event API directly, no need for explicit mappings + } + + // ── HLSL Shader Sources ── + + private const string VertexShaderHlsl = @" +cbuffer ProjectionMatrixBuffer : register(b0) +{ + float4x4 ProjectionMatrix; +}; + +struct VS_INPUT +{ + float2 pos : TEXCOORD0; + float2 uv : TEXCOORD1; + float4 col : TEXCOORD2; +}; + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float4 col : COLOR0; + float2 uv : TEXCOORD0; +}; + +PS_INPUT main(VS_INPUT input) +{ + PS_INPUT output; + output.pos = mul(ProjectionMatrix, float4(input.pos.xy, 0.0, 1.0)); + output.col = input.col; + output.uv = input.uv; + return output; +} +"; + + private const string FragmentShaderHlsl = @" +Texture2D MainTexture : register(t0); +SamplerState MainSampler : register(s0); + +struct PS_INPUT +{ + float4 pos : SV_POSITION; + float4 col : COLOR0; + float2 uv : TEXCOORD0; +}; + +float4 main(PS_INPUT input) : SV_Target +{ + float4 texColor = MainTexture.Sample(MainSampler, input.uv); + return input.col * texColor; +} +"; + + // ── D3DCompiler P/Invoke ── + + [DllImport("d3dcompiler_47.dll", CallingConvention = CallingConvention.StdCall)] + private static extern int D3DCompile( + [MarshalAs(UnmanagedType.LPStr)] string pSrcData, + int srcDataSize, + [MarshalAs(UnmanagedType.LPStr)] string? pSourceName, + IntPtr pDefines, + IntPtr pInclude, + [MarshalAs(UnmanagedType.LPStr)] string pEntrypoint, + [MarshalAs(UnmanagedType.LPStr)] string pTarget, + uint flags1, + uint flags2, + out IntPtr ppCode, + out IntPtr ppErrorMsgs); + + [DllImport("d3dcompiler_47.dll", CallingConvention = CallingConvention.StdCall)] + private static extern IntPtr D3DGetBlobPart(IntPtr pSrcData, int srcDataSize, int part, uint flags, out IntPtr ppPart); + + // ID3DBlob vtable offsets + private static IntPtr BlobGetBufferPointer(IntPtr blob) + { + var vtable = Marshal.ReadIntPtr(blob); + var getBufferPtr = Marshal.ReadIntPtr(vtable, 3 * IntPtr.Size); // IUnknown (3 methods) + GetBufferPointer + var del = Marshal.GetDelegateForFunctionPointer(getBufferPtr); + return del(blob); + } + + private static int BlobGetBufferSize(IntPtr blob) + { + var vtable = Marshal.ReadIntPtr(blob); + var getBufferSize = Marshal.ReadIntPtr(vtable, 4 * IntPtr.Size); // IUnknown (3 methods) + GetBufferPointer + GetBufferSize + var del = Marshal.GetDelegateForFunctionPointer(getBufferSize); + return del(blob); + } + + private static void BlobRelease(IntPtr blob) + { + var vtable = Marshal.ReadIntPtr(blob); + var release = Marshal.ReadIntPtr(vtable, 2 * IntPtr.Size); // IUnknown::Release + var del = Marshal.GetDelegateForFunctionPointer(release); + del(blob); + } + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate IntPtr GetBufferPointerDelegate(IntPtr self); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate int GetBufferSizeDelegate(IntPtr self); + + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate int ReleaseDelegate(IntPtr self); + + private static byte[] CompileHlsl(string source, string entryPoint, string target) + { + var hr = D3DCompile(source, source.Length, null, IntPtr.Zero, IntPtr.Zero, + entryPoint, target, 0, 0, out var codeBlob, out var errorBlob); + + if (hr != 0 || codeBlob == IntPtr.Zero) + { + var error = "Unknown shader compilation error"; + if (errorBlob != IntPtr.Zero) + { + var errorPtr = BlobGetBufferPointer(errorBlob); + error = Marshal.PtrToStringAnsi(errorPtr) ?? error; + BlobRelease(errorBlob); + } + throw new InvalidOperationException($"HLSL compilation failed: {error}"); + } + + if (errorBlob != IntPtr.Zero) + BlobRelease(errorBlob); + + var bufferPtr = BlobGetBufferPointer(codeBlob); + var bufferSize = BlobGetBufferSize(codeBlob); + var result = new byte[bufferSize]; + Marshal.Copy(bufferPtr, result, 0, bufferSize); + BlobRelease(codeBlob); + return result; + } + + public void Dispose() + { + _vertexBuffer?.Dispose(); + _indexBuffer?.Dispose(); + _projMatrixBuffer?.Dispose(); + _fontTexture?.Dispose(); + _fontTextureView?.Dispose(); + _fontResourceSet?.Dispose(); + _pipeline?.Dispose(); + _layout?.Dispose(); + _textureLayout?.Dispose(); + foreach (var shader in _shaders) + shader?.Dispose(); + foreach (var rs in _resourceSets.Values) + rs?.Dispose(); + } +} diff --git a/src/Nexus.Simulator/World/SimEnemy.cs b/src/Nexus.Simulator/World/SimEnemy.cs new file mode 100644 index 0000000..95903b4 --- /dev/null +++ b/src/Nexus.Simulator/World/SimEnemy.cs @@ -0,0 +1,76 @@ +using System.Numerics; +using Nexus.Core; + +namespace Nexus.Simulator.World; + +public enum EnemyAiState +{ + Idle, + Chasing, + Attacking, + Dead, +} + +public class SimEnemy +{ + private static uint _nextId = 1000; + + public uint Id { get; } + public Vector2 Position { get; set; } + public int Health { get; set; } + public int MaxHealth { get; set; } + public MonsterRarity Rarity { get; set; } + public EnemyAiState AiState { get; set; } = EnemyAiState.Idle; + public float MoveSpeed { get; set; } + + // Timers + public float AttackCooldownRemaining { get; set; } + public float DespawnTimer { get; set; } + public float RespawnTimer { get; set; } + + // Wander + public Vector2 WanderTarget { get; set; } + public float WanderTimer { get; set; } + public Vector2 SpawnPosition { get; set; } + + public bool IsAlive => Health > 0; + public bool IsAttacking => AiState == EnemyAiState.Attacking; + + public SimEnemy(Vector2 position, MonsterRarity rarity, int baseHealth, float moveSpeed) + { + Id = Interlocked.Increment(ref _nextId); + Position = position; + SpawnPosition = position; + Rarity = rarity; + MoveSpeed = moveSpeed; + + var hpMultiplier = rarity switch + { + MonsterRarity.Magic => 1.5f, + MonsterRarity.Rare => 3f, + MonsterRarity.Unique => 5f, + _ => 1f, + }; + MaxHealth = (int)(baseHealth * hpMultiplier); + Health = MaxHealth; + } + + public void TakeDamage(int damage) + { + if (!IsAlive) return; + Health = Math.Max(0, Health - damage); + if (Health <= 0) + { + AiState = EnemyAiState.Dead; + DespawnTimer = 2f; + } + } + + public MonsterThreatLevel GetThreatLevel() => Rarity switch + { + MonsterRarity.Magic => MonsterThreatLevel.Magic, + MonsterRarity.Rare => MonsterThreatLevel.Rare, + MonsterRarity.Unique => MonsterThreatLevel.Unique, + _ => MonsterThreatLevel.Normal, + }; +} diff --git a/src/Nexus.Simulator/World/SimPlayer.cs b/src/Nexus.Simulator/World/SimPlayer.cs new file mode 100644 index 0000000..1ca20ab --- /dev/null +++ b/src/Nexus.Simulator/World/SimPlayer.cs @@ -0,0 +1,58 @@ +using System.Numerics; + +namespace Nexus.Simulator.World; + +public class SimPlayer +{ + public Vector2 Position { get; set; } + public int Health { get; set; } + public int MaxHealth { get; set; } + public int Mana { get; set; } + public int MaxMana { get; set; } + public float MoveSpeed { get; set; } + public float HealthRegen { get; set; } + public float ManaRegen { get; set; } + + // Accumulate fractional regen + private float _healthRegenAccum; + private float _manaRegenAccum; + + public SimPlayer(int maxHealth, int maxMana, float moveSpeed, float healthRegen, float manaRegen) + { + MaxHealth = maxHealth; + MaxMana = maxMana; + Health = maxHealth; + Mana = maxMana; + MoveSpeed = moveSpeed; + HealthRegen = healthRegen; + ManaRegen = manaRegen; + } + + public void Update(float dt) + { + // Regenerate + _healthRegenAccum += HealthRegen * dt; + _manaRegenAccum += ManaRegen * dt; + + if (_healthRegenAccum >= 1f) + { + var amount = (int)_healthRegenAccum; + Health = Math.Min(MaxHealth, Health + amount); + _healthRegenAccum -= amount; + } + + if (_manaRegenAccum >= 1f) + { + var amount = (int)_manaRegenAccum; + Mana = Math.Min(MaxMana, Mana + amount); + _manaRegenAccum -= amount; + } + } + + public void TakeDamage(int damage) + { + Health = Math.Max(0, Health - damage); + } + + public bool IsAlive => Health > 0; +} diff --git a/src/Nexus.Simulator/World/SimProjectile.cs b/src/Nexus.Simulator/World/SimProjectile.cs new file mode 100644 index 0000000..b4199b0 --- /dev/null +++ b/src/Nexus.Simulator/World/SimProjectile.cs @@ -0,0 +1,34 @@ +using System.Numerics; + +namespace Nexus.Simulator.World; + +public class SimProjectile +{ + public Vector2 Position { get; set; } + public Vector2 Direction { get; set; } + public float Speed { get; set; } + public float MaxRange { get; set; } + public float HitRadius { get; set; } + public int Damage { get; set; } + public float DistanceTraveled { get; set; } + public bool IsExpired { get; set; } + + public SimProjectile(Vector2 origin, Vector2 direction, float speed, float maxRange, float hitRadius, int damage) + { + Position = origin; + Direction = Vector2.Normalize(direction); + Speed = speed; + MaxRange = maxRange; + HitRadius = hitRadius; + Damage = damage; + } + + public void Update(float dt) + { + var step = Speed * dt; + Position += Direction * step; + DistanceTraveled += step; + if (DistanceTraveled >= MaxRange) + IsExpired = true; + } +} diff --git a/src/Nexus.Simulator/World/SimSkillEffect.cs b/src/Nexus.Simulator/World/SimSkillEffect.cs new file mode 100644 index 0000000..073a51f --- /dev/null +++ b/src/Nexus.Simulator/World/SimSkillEffect.cs @@ -0,0 +1,26 @@ +using System.Numerics; + +namespace Nexus.Simulator.World; + +public enum SkillEffectType +{ + Melee, + Aoe, + Projectile, +} + +public class SimSkillEffect +{ + public SkillEffectType Type { get; set; } + public Vector2 Origin { get; set; } + public Vector2 TargetPosition { get; set; } + public float Radius { get; set; } + public float ConeAngle { get; set; } + public int Damage { get; set; } + public float Duration { get; set; } = 0.3f; + public float Elapsed { get; set; } + public bool Applied { get; set; } + + public bool IsExpired => Elapsed >= Duration; + public float Progress => Duration > 0 ? Elapsed / Duration : 1f; +} diff --git a/src/Nexus.Simulator/World/SimWorld.cs b/src/Nexus.Simulator/World/SimWorld.cs new file mode 100644 index 0000000..a35796d --- /dev/null +++ b/src/Nexus.Simulator/World/SimWorld.cs @@ -0,0 +1,432 @@ +using System.Numerics; +using Nexus.Core; +using Nexus.Simulator.Config; + +namespace Nexus.Simulator.World; + +public class SimWorld +{ + private readonly SimConfig _config; + private readonly Random _rng = new(); + + public SimPlayer Player { get; } + public List Enemies { get; } = []; + public List Projectiles { get; } = []; + public List ActiveEffects { get; } = []; + public WalkabilitySnapshot Terrain { get; private set; } + public long TickNumber { get; private set; } + + // Pending respawns + private readonly List<(float timer, MonsterRarity rarity)> _respawnQueue = []; + + // Queued actions from SimInputController + public Vector2 MoveDirection { get; set; } + public Vector2 MouseWorldPos { get; set; } + private readonly Queue<(ushort scanCode, Vector2 targetWorldPos)> _skillQueue = new(); + + public SimWorld(SimConfig config) + { + _config = config; + Terrain = TerrainGenerator.Generate(config.TerrainWidth, config.TerrainHeight); + + // Spawn player at center + var gridToWorld = 1f / config.WorldToGrid; + var (sx, sy) = TerrainGenerator.FindSpawnPosition(Terrain); + Player = new SimPlayer( + config.PlayerMaxHealth, config.PlayerMaxMana, + config.PlayerMoveSpeed, config.PlayerHealthRegen, config.PlayerManaRegen) + { + Position = new Vector2(sx * gridToWorld, sy * gridToWorld), + }; + + // Spawn initial enemies + SpawnEnemies(config.TargetEnemyCount); + } + + public void RegenerateTerrain() + { + Terrain = TerrainGenerator.Generate(_config.TerrainWidth, _config.TerrainHeight); + var gridToWorld = 1f / _config.WorldToGrid; + var (sx, sy) = TerrainGenerator.FindSpawnPosition(Terrain); + Player.Position = new Vector2(sx * gridToWorld, sy * gridToWorld); + Player.Health = Player.MaxHealth; + Player.Mana = Player.MaxMana; + Enemies.Clear(); + Projectiles.Clear(); + ActiveEffects.Clear(); + _respawnQueue.Clear(); + SpawnEnemies(_config.TargetEnemyCount); + } + + public void QueueSkill(ushort scanCode, Vector2 targetWorldPos) + { + _skillQueue.Enqueue((scanCode, targetWorldPos)); + } + + public void Tick(float dt) + { + if (_config.IsPaused) return; + + dt *= _config.SpeedMultiplier; + TickNumber++; + + // 1. Move player + MovePlayer(dt); + + // 2. Process queued skills + ProcessSkills(); + + // 3. Update projectiles + UpdateProjectiles(dt); + + // 4. Update skill effects + UpdateEffects(dt); + + // 5. Update enemy AI + UpdateEnemies(dt); + + // 6. Process respawn queue + UpdateRespawns(dt); + + // 7. Player regen + Player.Update(dt); + } + + private void MovePlayer(float dt) + { + if (MoveDirection.LengthSquared() < 0.001f) return; + + var dir = Vector2.Normalize(MoveDirection); + var newPos = Player.Position + dir * Player.MoveSpeed * dt; + + // Terrain collision + var gx = (int)(newPos.X * _config.WorldToGrid); + var gy = (int)(newPos.Y * _config.WorldToGrid); + if (Terrain.IsWalkable(gx, gy)) + Player.Position = newPos; + else + { + // Try sliding along X + var slideX = new Vector2(Player.Position.X + dir.X * Player.MoveSpeed * dt, Player.Position.Y); + var sgx = (int)(slideX.X * _config.WorldToGrid); + var sgy = (int)(slideX.Y * _config.WorldToGrid); + if (Terrain.IsWalkable(sgx, sgy)) + { + Player.Position = slideX; + return; + } + + // Try sliding along Y + var slideY = new Vector2(Player.Position.X, Player.Position.Y + dir.Y * Player.MoveSpeed * dt); + sgx = (int)(slideY.X * _config.WorldToGrid); + sgy = (int)(slideY.Y * _config.WorldToGrid); + if (Terrain.IsWalkable(sgx, sgy)) + Player.Position = slideY; + } + } + + private void ProcessSkills() + { + while (_skillQueue.TryDequeue(out var skill)) + { + // Determine skill type based on scan code slot + // Slots 0-1 (LMB/RMB) = melee, 3 (Q) = AOE, 4 (E) = projectile, else = melee + var type = GetSkillType(skill.scanCode); + var targetPos = skill.targetWorldPos; + + switch (type) + { + case SkillEffectType.Melee: + ProcessMeleeSkill(targetPos); + break; + case SkillEffectType.Aoe: + ProcessAoeSkill(targetPos); + break; + case SkillEffectType.Projectile: + ProcessProjectileSkill(targetPos); + break; + } + } + } + + private SkillEffectType GetSkillType(ushort scanCode) + { + return scanCode switch + { + 0x10 => SkillEffectType.Aoe, // Q + 0x12 => SkillEffectType.Projectile, // E + 0x13 => SkillEffectType.Aoe, // R + 0x14 => SkillEffectType.Projectile, // T + _ => SkillEffectType.Melee, + }; + } + + private void ProcessMeleeSkill(Vector2 targetPos) + { + var dir = targetPos - Player.Position; + if (dir.LengthSquared() > 0) + dir = Vector2.Normalize(dir); + else + dir = Vector2.UnitX; + + var effect = new SimSkillEffect + { + Type = SkillEffectType.Melee, + Origin = Player.Position, + TargetPosition = targetPos, + Radius = _config.MeleeRange, + ConeAngle = _config.MeleeConeAngle, + Damage = _config.SkillBaseDamage, + }; + ActiveEffects.Add(effect); + + // Apply melee damage immediately + var halfAngle = _config.MeleeConeAngle * MathF.PI / 360f; + foreach (var enemy in Enemies) + { + if (!enemy.IsAlive) continue; + var toEnemy = enemy.Position - Player.Position; + var dist = toEnemy.Length(); + if (dist > _config.MeleeRange) continue; + + if (dist > 0) + { + var angle = MathF.Acos(Vector2.Dot(Vector2.Normalize(toEnemy), dir)); + if (angle > halfAngle) continue; + } + + enemy.TakeDamage(_config.SkillBaseDamage); + } + } + + private void ProcessAoeSkill(Vector2 targetPos) + { + var effect = new SimSkillEffect + { + Type = SkillEffectType.Aoe, + Origin = Player.Position, + TargetPosition = targetPos, + Radius = _config.AoeRadius, + Damage = _config.SkillBaseDamage, + }; + ActiveEffects.Add(effect); + + // Apply AOE damage + foreach (var enemy in Enemies) + { + if (!enemy.IsAlive) continue; + if (Vector2.Distance(enemy.Position, targetPos) <= _config.AoeRadius) + enemy.TakeDamage(_config.SkillBaseDamage); + } + } + + private void ProcessProjectileSkill(Vector2 targetPos) + { + var dir = targetPos - Player.Position; + if (dir.LengthSquared() < 1f) dir = Vector2.UnitX; + + var projectile = new SimProjectile( + Player.Position, + dir, + _config.ProjectileSpeed, + _config.ProjectileRange, + _config.ProjectileHitRadius, + _config.SkillBaseDamage); + + Projectiles.Add(projectile); + + ActiveEffects.Add(new SimSkillEffect + { + Type = SkillEffectType.Projectile, + Origin = Player.Position, + TargetPosition = targetPos, + Radius = _config.ProjectileHitRadius, + Damage = _config.SkillBaseDamage, + Duration = _config.ProjectileRange / _config.ProjectileSpeed, + }); + } + + private void UpdateProjectiles(float dt) + { + for (var i = Projectiles.Count - 1; i >= 0; i--) + { + var proj = Projectiles[i]; + proj.Update(dt); + + // Check terrain collision + var gx = (int)(proj.Position.X * _config.WorldToGrid); + var gy = (int)(proj.Position.Y * _config.WorldToGrid); + if (!Terrain.IsWalkable(gx, gy)) + { + proj.IsExpired = true; + } + + // Check enemy hits + if (!proj.IsExpired) + { + foreach (var enemy in Enemies) + { + if (!enemy.IsAlive) continue; + if (Vector2.Distance(enemy.Position, proj.Position) <= proj.HitRadius) + { + enemy.TakeDamage(proj.Damage); + proj.IsExpired = true; + break; + } + } + } + + if (proj.IsExpired) + Projectiles.RemoveAt(i); + } + } + + private void UpdateEffects(float dt) + { + for (var i = ActiveEffects.Count - 1; i >= 0; i--) + { + ActiveEffects[i].Elapsed += dt; + if (ActiveEffects[i].IsExpired) + ActiveEffects.RemoveAt(i); + } + } + + private void UpdateEnemies(float dt) + { + for (var i = Enemies.Count - 1; i >= 0; i--) + { + var enemy = Enemies[i]; + + if (enemy.AiState == EnemyAiState.Dead) + { + enemy.DespawnTimer -= dt; + if (enemy.DespawnTimer <= 0) + { + // Queue respawn + _respawnQueue.Add((_config.EnemyRespawnTime, enemy.Rarity)); + Enemies.RemoveAt(i); + } + continue; + } + + // Attack cooldown + if (enemy.AttackCooldownRemaining > 0) + enemy.AttackCooldownRemaining -= dt; + + var dist = Vector2.Distance(enemy.Position, Player.Position); + + if (dist <= _config.EnemyAttackRange && Player.IsAlive) + { + // In attack range + enemy.AiState = EnemyAiState.Attacking; + if (enemy.AttackCooldownRemaining <= 0) + { + Player.TakeDamage(_config.EnemyAttackDamage); + enemy.AttackCooldownRemaining = _config.EnemyAttackCooldown; + } + } + else if (dist <= _config.EnemyAggroRange && Player.IsAlive) + { + // Chase player + enemy.AiState = EnemyAiState.Chasing; + var dir = Vector2.Normalize(Player.Position - enemy.Position); + var newPos = enemy.Position + dir * enemy.MoveSpeed * dt; + + var gx = (int)(newPos.X * _config.WorldToGrid); + var gy = (int)(newPos.Y * _config.WorldToGrid); + if (Terrain.IsWalkable(gx, gy)) + enemy.Position = newPos; + } + else + { + // Idle: random wander + enemy.AiState = EnemyAiState.Idle; + enemy.WanderTimer -= dt; + if (enemy.WanderTimer <= 0) + { + // Pick new wander target + var angle = _rng.NextSingle() * MathF.Tau; + var dist2 = _rng.NextSingle() * _config.EnemyWanderRadius; + enemy.WanderTarget = enemy.SpawnPosition + new Vector2(MathF.Cos(angle), MathF.Sin(angle)) * dist2; + enemy.WanderTimer = 2f + _rng.NextSingle() * 3f; + } + + if (Vector2.Distance(enemy.Position, enemy.WanderTarget) > 10f) + { + var dir = Vector2.Normalize(enemy.WanderTarget - enemy.Position); + var newPos = enemy.Position + dir * enemy.MoveSpeed * 0.3f * dt; + var gx = (int)(newPos.X * _config.WorldToGrid); + var gy = (int)(newPos.Y * _config.WorldToGrid); + if (Terrain.IsWalkable(gx, gy)) + enemy.Position = newPos; + } + } + } + } + + private void UpdateRespawns(float dt) + { + for (var i = _respawnQueue.Count - 1; i >= 0; i--) + { + var (timer, rarity) = _respawnQueue[i]; + timer -= dt; + if (timer <= 0) + { + SpawnEnemy(rarity); + _respawnQueue.RemoveAt(i); + } + else + { + _respawnQueue[i] = (timer, rarity); + } + } + + // Maintain population + var aliveCount = Enemies.Count(e => e.IsAlive) + _respawnQueue.Count; + while (aliveCount < _config.TargetEnemyCount) + { + SpawnEnemy(RollRarity()); + aliveCount++; + } + } + + public void SpawnEnemyAt(Vector2 worldPos, MonsterRarity rarity) + { + var enemy = new SimEnemy(worldPos, rarity, _config.EnemyBaseHealth, + _config.PlayerMoveSpeed * _config.EnemyMoveSpeedFactor) + { + WanderTarget = worldPos, + WanderTimer = _rng.NextSingle() * 3f, + }; + Enemies.Add(enemy); + } + + private void SpawnEnemies(int count) + { + for (var i = 0; i < count; i++) + SpawnEnemy(RollRarity()); + } + + private void SpawnEnemy(MonsterRarity rarity) + { + var gridToWorld = 1f / _config.WorldToGrid; + var pos = TerrainGenerator.FindRandomWalkable(Terrain, _rng); + if (pos is null) return; + + var worldPos = new Vector2(pos.Value.x * gridToWorld, pos.Value.y * gridToWorld); + + // Don't spawn too close to player + if (Vector2.Distance(worldPos, Player.Position) < 300f) return; + + SpawnEnemyAt(worldPos, rarity); + } + + private MonsterRarity RollRarity() + { + var roll = _rng.NextSingle(); + if (roll < _config.UniqueChance) return MonsterRarity.Unique; + if (roll < _config.UniqueChance + _config.RareChance) return MonsterRarity.Rare; + if (roll < _config.UniqueChance + _config.RareChance + _config.MagicChance) return MonsterRarity.Magic; + return MonsterRarity.White; + } +} diff --git a/src/Nexus.Simulator/World/TerrainGenerator.cs b/src/Nexus.Simulator/World/TerrainGenerator.cs new file mode 100644 index 0000000..548f19c --- /dev/null +++ b/src/Nexus.Simulator/World/TerrainGenerator.cs @@ -0,0 +1,175 @@ +using Nexus.Core; + +namespace Nexus.Simulator.World; + +public static class TerrainGenerator +{ + private record Room(int X, int Y, int Width, int Height) + { + public int CenterX => X + Width / 2; + public int CenterY => Y + Height / 2; + } + + public static WalkabilitySnapshot Generate(int width, int height, int? seed = null) + { + var rng = seed.HasValue ? new Random(seed.Value) : new Random(); + var data = new byte[width * height]; // 0 = wall by default + + var rooms = new List(); + var attempts = 0; + var targetRooms = 15 + rng.Next(10); + + while (rooms.Count < targetRooms && attempts < 500) + { + attempts++; + var rw = rng.Next(20, 60); + var rh = rng.Next(20, 60); + var rx = rng.Next(2, width - rw - 2); + var ry = rng.Next(2, height - rh - 2); + + var candidate = new Room(rx, ry, rw, rh); + + // Check overlap with existing rooms (with margin) + var overlaps = false; + foreach (var existing in rooms) + { + if (candidate.X - 3 < existing.X + existing.Width && + candidate.X + candidate.Width + 3 > existing.X && + candidate.Y - 3 < existing.Y + existing.Height && + candidate.Y + candidate.Height + 3 > existing.Y) + { + overlaps = true; + break; + } + } + + if (!overlaps) + rooms.Add(candidate); + } + + // Carve rooms + foreach (var room in rooms) + { + for (var y = room.Y; y < room.Y + room.Height; y++) + for (var x = room.X; x < room.X + room.Width; x++) + data[y * width + x] = 1; + } + + // Connect rooms with corridors + for (var i = 1; i < rooms.Count; i++) + { + var a = rooms[i - 1]; + var b = rooms[i]; + CarveCorridorL(data, width, a.CenterX, a.CenterY, b.CenterX, b.CenterY, rng); + } + + // Also connect last to first for a loop + if (rooms.Count > 2) + { + var first = rooms[0]; + var last = rooms[^1]; + CarveCorridorL(data, width, first.CenterX, first.CenterY, last.CenterX, last.CenterY, rng); + } + + // Add some random extra connections + var extraConnections = rng.Next(3, 7); + for (var i = 0; i < extraConnections; i++) + { + var a = rooms[rng.Next(rooms.Count)]; + var b = rooms[rng.Next(rooms.Count)]; + if (a != b) + CarveCorridorL(data, width, a.CenterX, a.CenterY, b.CenterX, b.CenterY, rng); + } + + return new WalkabilitySnapshot + { + Width = width, + Height = height, + Data = data, + }; + } + + /// + /// Finds a walkable position near the center of the terrain. + /// + public static (int x, int y) FindSpawnPosition(WalkabilitySnapshot terrain) + { + var cx = terrain.Width / 2; + var cy = terrain.Height / 2; + + // Spiral outward + for (var r = 0; r < Math.Max(terrain.Width, terrain.Height); r++) + { + for (var dx = -r; dx <= r; dx++) + for (var dy = -r; dy <= r; dy++) + { + if (Math.Abs(dx) != r && Math.Abs(dy) != r) continue; + var x = cx + dx; + var y = cy + dy; + if (terrain.IsWalkable(x, y)) + return (x, y); + } + } + + return (cx, cy); + } + + /// + /// Finds a random walkable position. + /// + public static (int x, int y)? FindRandomWalkable(WalkabilitySnapshot terrain, Random rng, int maxAttempts = 200) + { + for (var i = 0; i < maxAttempts; i++) + { + var x = rng.Next(terrain.Width); + var y = rng.Next(terrain.Height); + if (terrain.IsWalkable(x, y)) + return (x, y); + } + return null; + } + + private static void CarveCorridorL(byte[] data, int width, int x1, int y1, int x2, int y2, Random rng) + { + var corridorWidth = 2 + rng.Next(2); + + // L-shaped: horizontal then vertical (or vice versa) + if (rng.Next(2) == 0) + { + CarveHorizontal(data, width, x1, x2, y1, corridorWidth); + CarveVertical(data, width, y1, y2, x2, corridorWidth); + } + else + { + CarveVertical(data, width, y1, y2, x1, corridorWidth); + CarveHorizontal(data, width, x1, x2, y2, corridorWidth); + } + } + + private static void CarveHorizontal(byte[] data, int width, int x1, int x2, int y, int thickness) + { + var xMin = Math.Min(x1, x2); + var xMax = Math.Max(x1, x2); + for (var x = xMin; x <= xMax; x++) + for (var dy = 0; dy < thickness; dy++) + { + var ry = y + dy; + if (ry >= 0 && ry < data.Length / width && x >= 0 && x < width) + data[ry * width + x] = 1; + } + } + + private static void CarveVertical(byte[] data, int width, int y1, int y2, int x, int thickness) + { + var height = data.Length / width; + var yMin = Math.Min(y1, y2); + var yMax = Math.Max(y1, y2); + for (var y = yMin; y <= yMax; y++) + for (var dx = 0; dx < thickness; dx++) + { + var rx = x + dx; + if (y >= 0 && y < height && rx >= 0 && rx < width) + data[y * width + rx] = 1; + } + } +} diff --git a/src/Roboto.Systems/CombatSystem.cs b/src/Nexus.Systems/CombatSystem.cs similarity index 99% rename from src/Roboto.Systems/CombatSystem.cs rename to src/Nexus.Systems/CombatSystem.cs index d7423ef..0309724 100644 --- a/src/Roboto.Systems/CombatSystem.cs +++ b/src/Nexus.Systems/CombatSystem.cs @@ -1,8 +1,8 @@ using System.Numerics; -using Roboto.Core; +using Nexus.Core; using Serilog; -namespace Roboto.Systems; +namespace Nexus.Systems; public class CombatSystem : ISystem { diff --git a/src/Roboto.Systems/LootSystem.cs b/src/Nexus.Systems/LootSystem.cs similarity index 86% rename from src/Roboto.Systems/LootSystem.cs rename to src/Nexus.Systems/LootSystem.cs index f9c366b..0d34b87 100644 --- a/src/Roboto.Systems/LootSystem.cs +++ b/src/Nexus.Systems/LootSystem.cs @@ -1,6 +1,6 @@ -using Roboto.Core; +using Nexus.Core; -namespace Roboto.Systems; +namespace Nexus.Systems; public class LootSystem : ISystem { diff --git a/src/Roboto.Systems/MovementSystem.cs b/src/Nexus.Systems/MovementSystem.cs similarity index 97% rename from src/Roboto.Systems/MovementSystem.cs rename to src/Nexus.Systems/MovementSystem.cs index f19243d..bd46248 100644 --- a/src/Roboto.Systems/MovementSystem.cs +++ b/src/Nexus.Systems/MovementSystem.cs @@ -1,7 +1,7 @@ using System.Numerics; -using Roboto.Core; +using Nexus.Core; -namespace Roboto.Systems; +namespace Nexus.Systems; /// /// Force-based avoidance: applies inverse-square repulsion from hostile monsters diff --git a/src/Roboto.Systems/NavigationSystem.cs b/src/Nexus.Systems/NavigationSystem.cs similarity index 85% rename from src/Roboto.Systems/NavigationSystem.cs rename to src/Nexus.Systems/NavigationSystem.cs index 31cc4fd..f611070 100644 --- a/src/Roboto.Systems/NavigationSystem.cs +++ b/src/Nexus.Systems/NavigationSystem.cs @@ -1,10 +1,10 @@ using System.Numerics; -using Roboto.Core; +using Nexus.Core; -namespace Roboto.Systems; +namespace Nexus.Systems; /// -/// Simplified navigation system. Pathfinding has moved to Roboto.Navigation.PathFinder. +/// Simplified navigation system. Pathfinding has moved to Nexus.Pathfinding.PathFinder. /// This system just submits a MoveAction if an external direction is set. /// public class NavigationSystem : ISystem diff --git a/src/Roboto.Systems/Roboto.Systems.csproj b/src/Nexus.Systems/Nexus.Systems.csproj similarity index 83% rename from src/Roboto.Systems/Roboto.Systems.csproj rename to src/Nexus.Systems/Nexus.Systems.csproj index bcebb88..60b2b65 100644 --- a/src/Roboto.Systems/Roboto.Systems.csproj +++ b/src/Nexus.Systems/Nexus.Systems.csproj @@ -8,6 +8,6 @@ - + diff --git a/src/Roboto.Systems/ResourceSystem.cs b/src/Nexus.Systems/ResourceSystem.cs similarity index 97% rename from src/Roboto.Systems/ResourceSystem.cs rename to src/Nexus.Systems/ResourceSystem.cs index 44fadda..3205681 100644 --- a/src/Roboto.Systems/ResourceSystem.cs +++ b/src/Nexus.Systems/ResourceSystem.cs @@ -1,6 +1,6 @@ -using Roboto.Core; +using Nexus.Core; -namespace Roboto.Systems; +namespace Nexus.Systems; public class ResourceSystem : ISystem { diff --git a/src/Roboto.Systems/ThreatSystem.cs b/src/Nexus.Systems/ThreatSystem.cs similarity index 98% rename from src/Roboto.Systems/ThreatSystem.cs rename to src/Nexus.Systems/ThreatSystem.cs index 6dcc52a..bd44615 100644 --- a/src/Roboto.Systems/ThreatSystem.cs +++ b/src/Nexus.Systems/ThreatSystem.cs @@ -1,8 +1,8 @@ using System.Numerics; -using Roboto.Core; +using Nexus.Core; using Serilog; -namespace Roboto.Systems; +namespace Nexus.Systems; /// /// Emergency threat response. Runs first (priority 50). diff --git a/src/Automata.Trade/ITradeMonitor.cs b/src/Nexus.Trade/ITradeMonitor.cs similarity index 93% rename from src/Automata.Trade/ITradeMonitor.cs rename to src/Nexus.Trade/ITradeMonitor.cs index ef45711..4c34cc6 100644 --- a/src/Automata.Trade/ITradeMonitor.cs +++ b/src/Nexus.Trade/ITradeMonitor.cs @@ -1,6 +1,6 @@ -using Automata.Core; +using Nexus.Core; -namespace Automata.Trade; +namespace Nexus.Trade; public interface ITradeMonitor : IAsyncDisposable { diff --git a/src/Automata.Trade/Automata.Trade.csproj b/src/Nexus.Trade/Nexus.Trade.csproj similarity index 77% rename from src/Automata.Trade/Automata.Trade.csproj rename to src/Nexus.Trade/Nexus.Trade.csproj index 0d0f761..3266cd4 100644 --- a/src/Automata.Trade/Automata.Trade.csproj +++ b/src/Nexus.Trade/Nexus.Trade.csproj @@ -5,6 +5,6 @@ enable - + diff --git a/src/Automata.Trade/Selectors.cs b/src/Nexus.Trade/Selectors.cs similarity index 97% rename from src/Automata.Trade/Selectors.cs rename to src/Nexus.Trade/Selectors.cs index eb0345a..c724ccd 100644 --- a/src/Automata.Trade/Selectors.cs +++ b/src/Nexus.Trade/Selectors.cs @@ -1,4 +1,4 @@ -namespace Automata.Trade; +namespace Nexus.Trade; public static class Selectors { diff --git a/src/Automata.Trade/TradeDaemonBridge.cs b/src/Nexus.Trade/TradeDaemonBridge.cs similarity index 99% rename from src/Automata.Trade/TradeDaemonBridge.cs rename to src/Nexus.Trade/TradeDaemonBridge.cs index df7c768..c51c163 100644 --- a/src/Automata.Trade/TradeDaemonBridge.cs +++ b/src/Nexus.Trade/TradeDaemonBridge.cs @@ -2,10 +2,10 @@ using System.Collections.Concurrent; using System.Diagnostics; using System.Text.Json; using System.Text.Json.Serialization; -using Automata.Core; +using Nexus.Core; using Serilog; -namespace Automata.Trade; +namespace Nexus.Trade; public class TradeDaemonBridge : ITradeMonitor { diff --git a/src/Automata.Ui/App.axaml b/src/Nexus.Ui/App.axaml similarity index 92% rename from src/Automata.Ui/App.axaml rename to src/Nexus.Ui/App.axaml index a77fa7a..cc27e59 100644 --- a/src/Automata.Ui/App.axaml +++ b/src/Nexus.Ui/App.axaml @@ -1,7 +1,7 @@ diff --git a/src/Automata.Ui/App.axaml.cs b/src/Nexus.Ui/App.axaml.cs similarity index 89% rename from src/Automata.Ui/App.axaml.cs rename to src/Nexus.Ui/App.axaml.cs index 92a293f..822483d 100644 --- a/src/Automata.Ui/App.axaml.cs +++ b/src/Nexus.Ui/App.axaml.cs @@ -2,20 +2,20 @@ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; using Microsoft.Extensions.DependencyInjection; -using Automata.Bot; -using Automata.Core; -using Automata.Game; -using Automata.GameLog; -using Automata.Inventory; -using Automata.Items; -using Automata.Screen; -using Automata.Screen.Ocr; -using Automata.Trade; -using Automata.Ui.Overlay; -using Automata.Ui.ViewModels; -using Automata.Ui.Views; +using Nexus.Bot; +using Nexus.Core; +using Nexus.Game; +using Nexus.GameLog; +using Nexus.Inventory; +using Nexus.Items; +using Nexus.Screen; +using Nexus.Screen.Ocr; +using Nexus.Trade; +using Nexus.Ui.Overlay; +using Nexus.Ui.ViewModels; +using Nexus.Ui.Views; -namespace Automata.Ui; +namespace Nexus.Ui; public partial class App : Application { @@ -70,7 +70,7 @@ public partial class App : Application services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); var provider = services.BuildServiceProvider(); @@ -97,7 +97,7 @@ public partial class App : Application mainVm.AtlasVm = provider.GetRequiredService(); mainVm.CraftingVm = provider.GetRequiredService(); mainVm.MemoryVm = provider.GetRequiredService(); - mainVm.RobotoVm = provider.GetRequiredService(); + mainVm.NexusVm = provider.GetRequiredService(); mainVm.BrowserVm = provider.GetRequiredService(); var window = new MainWindow { DataContext = mainVm }; @@ -112,7 +112,7 @@ public partial class App : Application { overlay.Shutdown(); mainVm.Shutdown(); - mainVm.RobotoVm?.Shutdown(); + mainVm.NexusVm?.Shutdown(); await bot.DisposeAsync(); }; } diff --git a/src/Automata.Ui/Converters/ValueConverters.cs b/src/Nexus.Ui/Converters/ValueConverters.cs similarity index 98% rename from src/Automata.Ui/Converters/ValueConverters.cs rename to src/Nexus.Ui/Converters/ValueConverters.cs index 7550d71..fc43ef3 100644 --- a/src/Automata.Ui/Converters/ValueConverters.cs +++ b/src/Nexus.Ui/Converters/ValueConverters.cs @@ -2,10 +2,10 @@ using System.Globalization; using Avalonia; using Avalonia.Data.Converters; using Avalonia.Media; -using Automata.Core; -using Automata.Ui.ViewModels; +using Nexus.Core; +using Nexus.Ui.ViewModels; -namespace Automata.Ui.Converters; +namespace Nexus.Ui.Converters; public class LogLevelToBrushConverter : IValueConverter { diff --git a/src/Automata.Ui/Automata.Ui.csproj b/src/Nexus.Ui/Nexus.Ui.csproj similarity index 76% rename from src/Automata.Ui/Automata.Ui.csproj rename to src/Nexus.Ui/Nexus.Ui.csproj index ce866f4..f79c27c 100644 --- a/src/Automata.Ui/Automata.Ui.csproj +++ b/src/Nexus.Ui/Nexus.Ui.csproj @@ -16,16 +16,16 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/src/Automata.Ui/Overlay/D2dNativeMethods.cs b/src/Nexus.Ui/Overlay/D2dNativeMethods.cs similarity index 99% rename from src/Automata.Ui/Overlay/D2dNativeMethods.cs rename to src/Nexus.Ui/Overlay/D2dNativeMethods.cs index f33e9f7..f37496b 100644 --- a/src/Automata.Ui/Overlay/D2dNativeMethods.cs +++ b/src/Nexus.Ui/Overlay/D2dNativeMethods.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Automata.Ui.Overlay; +namespace Nexus.Ui.Overlay; /// Win32 P/Invoke for the D2D overlay window, DWM transparency, and frame timing. internal static partial class D2dNativeMethods diff --git a/src/Automata.Ui/Overlay/D2dOverlay.cs b/src/Nexus.Ui/Overlay/D2dOverlay.cs similarity index 98% rename from src/Automata.Ui/Overlay/D2dOverlay.cs rename to src/Nexus.Ui/Overlay/D2dOverlay.cs index 5cc155b..1bcd18e 100644 --- a/src/Automata.Ui/Overlay/D2dOverlay.cs +++ b/src/Nexus.Ui/Overlay/D2dOverlay.cs @@ -1,13 +1,13 @@ using System.Diagnostics; using System.Runtime; using System.Runtime.InteropServices; -using Automata.Bot; -using Automata.Ui.Overlay.Layers; -using Roboto.Memory; +using Nexus.Bot; +using Nexus.Ui.Overlay.Layers; +using Nexus.Memory; using Vortice.Mathematics; -using static Automata.Ui.Overlay.D2dNativeMethods; +using static Nexus.Ui.Overlay.D2dNativeMethods; -namespace Automata.Ui.Overlay; +namespace Nexus.Ui.Overlay; /// /// Fullscreen transparent overlay rendered with Direct2D on a dedicated thread. diff --git a/src/Automata.Ui/Overlay/D2dRenderContext.cs b/src/Nexus.Ui/Overlay/D2dRenderContext.cs similarity index 99% rename from src/Automata.Ui/Overlay/D2dRenderContext.cs rename to src/Nexus.Ui/Overlay/D2dRenderContext.cs index c81fa3c..d0cd9df 100644 --- a/src/Automata.Ui/Overlay/D2dRenderContext.cs +++ b/src/Nexus.Ui/Overlay/D2dRenderContext.cs @@ -6,7 +6,7 @@ using DWriteFactory = Vortice.DirectWrite.IDWriteFactory; using D2dFactoryType = Vortice.Direct2D1.FactoryType; using DwFactoryType = Vortice.DirectWrite.FactoryType; -namespace Automata.Ui.Overlay; +namespace Nexus.Ui.Overlay; public sealed class D2dRenderContext : IDisposable { diff --git a/src/Automata.Ui/Overlay/IOverlayLayer.cs b/src/Nexus.Ui/Overlay/IOverlayLayer.cs similarity index 91% rename from src/Automata.Ui/Overlay/IOverlayLayer.cs rename to src/Nexus.Ui/Overlay/IOverlayLayer.cs index b220771..bd210ac 100644 --- a/src/Automata.Ui/Overlay/IOverlayLayer.cs +++ b/src/Nexus.Ui/Overlay/IOverlayLayer.cs @@ -1,7 +1,7 @@ -using Automata.Navigation; -using Automata.Screen; +using Nexus.Navigation; +using Nexus.Screen; -namespace Automata.Ui.Overlay; +namespace Nexus.Ui.Overlay; public record OverlayState( IReadOnlyList Enemies, diff --git a/src/Automata.Ui/Overlay/Layers/D2dDebugTextLayer.cs b/src/Nexus.Ui/Overlay/Layers/D2dDebugTextLayer.cs similarity index 99% rename from src/Automata.Ui/Overlay/Layers/D2dDebugTextLayer.cs rename to src/Nexus.Ui/Overlay/Layers/D2dDebugTextLayer.cs index f5d6c7f..e9f3008 100644 --- a/src/Automata.Ui/Overlay/Layers/D2dDebugTextLayer.cs +++ b/src/Nexus.Ui/Overlay/Layers/D2dDebugTextLayer.cs @@ -3,7 +3,7 @@ using Vortice.Direct2D1; using Vortice.DirectWrite; using Vortice.Mathematics; -namespace Automata.Ui.Overlay.Layers; +namespace Nexus.Ui.Overlay.Layers; internal sealed class D2dDebugTextLayer : ID2dOverlayLayer, IDisposable { diff --git a/src/Automata.Ui/Overlay/Layers/D2dEnemyBoxLayer.cs b/src/Nexus.Ui/Overlay/Layers/D2dEnemyBoxLayer.cs similarity index 99% rename from src/Automata.Ui/Overlay/Layers/D2dEnemyBoxLayer.cs rename to src/Nexus.Ui/Overlay/Layers/D2dEnemyBoxLayer.cs index 13c0eb1..2a29ace 100644 --- a/src/Automata.Ui/Overlay/Layers/D2dEnemyBoxLayer.cs +++ b/src/Nexus.Ui/Overlay/Layers/D2dEnemyBoxLayer.cs @@ -3,7 +3,7 @@ using Vortice.Direct2D1; using Vortice.DirectWrite; using Vortice.Mathematics; -namespace Automata.Ui.Overlay.Layers; +namespace Nexus.Ui.Overlay.Layers; internal sealed class D2dEnemyBoxLayer : ID2dOverlayLayer, IDisposable { diff --git a/src/Automata.Ui/Overlay/Layers/D2dEntityLabelLayer.cs b/src/Nexus.Ui/Overlay/Layers/D2dEntityLabelLayer.cs similarity index 94% rename from src/Automata.Ui/Overlay/Layers/D2dEntityLabelLayer.cs rename to src/Nexus.Ui/Overlay/Layers/D2dEntityLabelLayer.cs index b5fcf77..19c40d4 100644 --- a/src/Automata.Ui/Overlay/Layers/D2dEntityLabelLayer.cs +++ b/src/Nexus.Ui/Overlay/Layers/D2dEntityLabelLayer.cs @@ -1,10 +1,10 @@ using System.Drawing; using System.Numerics; -using Automata.Ui.ViewModels; -using Roboto.Data; +using Nexus.Ui.ViewModels; +using Nexus.Data; using Vortice.DirectWrite; -namespace Automata.Ui.Overlay.Layers; +namespace Nexus.Ui.Overlay.Layers; internal sealed class D2dEntityLabelLayer : ID2dOverlayLayer, IDisposable { @@ -23,10 +23,10 @@ internal sealed class D2dEntityLabelLayer : ID2dOverlayLayer, IDisposable public void Draw(D2dRenderContext ctx, OverlayState state) { - var data = RobotoViewModel.OverlayData; + var data = NexusViewModel.OverlayData; if (data is null || data.Entries.Length == 0) return; - var cache = RobotoViewModel.SharedCache; + var cache = NexusViewModel.SharedCache; if (cache is null) return; // Read camera and player position from centralized cache (updated at 60Hz) diff --git a/src/Automata.Ui/Overlay/Layers/D2dHudInfoLayer.cs b/src/Nexus.Ui/Overlay/Layers/D2dHudInfoLayer.cs similarity index 99% rename from src/Automata.Ui/Overlay/Layers/D2dHudInfoLayer.cs rename to src/Nexus.Ui/Overlay/Layers/D2dHudInfoLayer.cs index 6381856..9dfa043 100644 --- a/src/Automata.Ui/Overlay/Layers/D2dHudInfoLayer.cs +++ b/src/Nexus.Ui/Overlay/Layers/D2dHudInfoLayer.cs @@ -3,7 +3,7 @@ using Vortice.Direct2D1; using Vortice.DirectWrite; using Vortice.Mathematics; -namespace Automata.Ui.Overlay.Layers; +namespace Nexus.Ui.Overlay.Layers; internal sealed class D2dHudInfoLayer : ID2dOverlayLayer, IDisposable { diff --git a/src/Automata.Ui/Overlay/Layers/D2dLootLabelLayer.cs b/src/Nexus.Ui/Overlay/Layers/D2dLootLabelLayer.cs similarity index 98% rename from src/Automata.Ui/Overlay/Layers/D2dLootLabelLayer.cs rename to src/Nexus.Ui/Overlay/Layers/D2dLootLabelLayer.cs index 3ebfdcd..d716eb2 100644 --- a/src/Automata.Ui/Overlay/Layers/D2dLootLabelLayer.cs +++ b/src/Nexus.Ui/Overlay/Layers/D2dLootLabelLayer.cs @@ -3,7 +3,7 @@ using Vortice.Direct2D1; using Vortice.DirectWrite; using Vortice.Mathematics; -namespace Automata.Ui.Overlay.Layers; +namespace Nexus.Ui.Overlay.Layers; internal sealed class D2dLootLabelLayer : ID2dOverlayLayer, IDisposable { diff --git a/src/Automata.Ui/Program.cs b/src/Nexus.Ui/Program.cs similarity index 94% rename from src/Automata.Ui/Program.cs rename to src/Nexus.Ui/Program.cs index 171915b..1afa025 100644 --- a/src/Automata.Ui/Program.cs +++ b/src/Nexus.Ui/Program.cs @@ -1,8 +1,8 @@ using System.Runtime.InteropServices; using Avalonia; -using Automata.Core; +using Nexus.Core; -namespace Automata.Ui; +namespace Nexus.Ui; class Program { diff --git a/src/Automata.Ui/ViewModels/AtlasViewModel.cs b/src/Nexus.Ui/ViewModels/AtlasViewModel.cs similarity index 98% rename from src/Automata.Ui/ViewModels/AtlasViewModel.cs rename to src/Nexus.Ui/ViewModels/AtlasViewModel.cs index f2acc8b..b257fc4 100644 --- a/src/Automata.Ui/ViewModels/AtlasViewModel.cs +++ b/src/Nexus.Ui/ViewModels/AtlasViewModel.cs @@ -3,11 +3,11 @@ using Avalonia.Media.Imaging; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Automata.Bot; -using Automata.Navigation; +using Nexus.Bot; +using Nexus.Navigation; using Serilog; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class AtlasViewModel : ObservableObject, IDisposable { diff --git a/src/Automata.Ui/ViewModels/CraftingViewModel.cs b/src/Nexus.Ui/ViewModels/CraftingViewModel.cs similarity index 99% rename from src/Automata.Ui/ViewModels/CraftingViewModel.cs rename to src/Nexus.Ui/ViewModels/CraftingViewModel.cs index e44b1d6..846b16a 100644 --- a/src/Automata.Ui/ViewModels/CraftingViewModel.cs +++ b/src/Nexus.Ui/ViewModels/CraftingViewModel.cs @@ -3,12 +3,12 @@ using System.IO; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Automata.Bot; -using Automata.Core; -using Automata.Items; +using Nexus.Bot; +using Nexus.Core; +using Nexus.Items; using Serilog; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class CraftStepViewModel : ObservableObject { diff --git a/src/Automata.Ui/ViewModels/DebugViewModel.cs b/src/Nexus.Ui/ViewModels/DebugViewModel.cs similarity index 99% rename from src/Automata.Ui/ViewModels/DebugViewModel.cs rename to src/Nexus.Ui/ViewModels/DebugViewModel.cs index 43dfce5..6760970 100644 --- a/src/Automata.Ui/ViewModels/DebugViewModel.cs +++ b/src/Nexus.Ui/ViewModels/DebugViewModel.cs @@ -1,12 +1,12 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Automata.Bot; -using Automata.Core; -using Automata.Game; -using Automata.Screen; +using Nexus.Bot; +using Nexus.Core; +using Nexus.Game; +using Nexus.Screen; using Serilog; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class DebugViewModel : ObservableObject { diff --git a/src/Automata.Ui/ViewModels/MainWindowViewModel.cs b/src/Nexus.Ui/ViewModels/MainWindowViewModel.cs similarity index 98% rename from src/Automata.Ui/ViewModels/MainWindowViewModel.cs rename to src/Nexus.Ui/ViewModels/MainWindowViewModel.cs index f75d7f5..017179f 100644 --- a/src/Automata.Ui/ViewModels/MainWindowViewModel.cs +++ b/src/Nexus.Ui/ViewModels/MainWindowViewModel.cs @@ -4,12 +4,12 @@ using System.Runtime.InteropServices; using Avalonia.Media.Imaging; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Automata.Bot; -using Automata.Core; -using Automata.Navigation; +using Nexus.Bot; +using Nexus.Core; +using Nexus.Navigation; using Serilog; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public class LogEntry { @@ -183,7 +183,7 @@ public partial class MainWindowViewModel : ObservableObject public AtlasViewModel? AtlasVm { get; set; } public CraftingViewModel? CraftingVm { get; set; } public MemoryViewModel? MemoryVm { get; set; } - public RobotoViewModel? RobotoVm { get; set; } + public NexusViewModel? NexusVm { get; set; } public ObjectBrowserViewModel? BrowserVm { get; set; } partial void OnBotModeChanged(BotMode value) diff --git a/src/Automata.Ui/ViewModels/MappingViewModel.cs b/src/Nexus.Ui/ViewModels/MappingViewModel.cs similarity index 97% rename from src/Automata.Ui/ViewModels/MappingViewModel.cs rename to src/Nexus.Ui/ViewModels/MappingViewModel.cs index 0514963..5ab9f3d 100644 --- a/src/Automata.Ui/ViewModels/MappingViewModel.cs +++ b/src/Nexus.Ui/ViewModels/MappingViewModel.cs @@ -2,11 +2,11 @@ using System.Collections.ObjectModel; using Timer = System.Timers.Timer; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; -using Automata.Bot; -using Automata.Core; -using Automata.Screen; +using Nexus.Bot; +using Nexus.Core; +using Nexus.Screen; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class MappingViewModel : ObservableObject, IDisposable { diff --git a/src/Automata.Ui/ViewModels/MemoryViewModel.cs b/src/Nexus.Ui/ViewModels/MemoryViewModel.cs similarity index 99% rename from src/Automata.Ui/ViewModels/MemoryViewModel.cs rename to src/Nexus.Ui/ViewModels/MemoryViewModel.cs index 86093a3..d16b4b1 100644 --- a/src/Automata.Ui/ViewModels/MemoryViewModel.cs +++ b/src/Nexus.Ui/ViewModels/MemoryViewModel.cs @@ -6,10 +6,10 @@ using Avalonia.Platform; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Roboto.Memory; -using Roboto.Memory.Objects; +using Nexus.Memory; +using Nexus.Memory.Objects; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class MemoryNodeViewModel : ObservableObject { @@ -646,7 +646,7 @@ public partial class MemoryViewModel : ObservableObject { var withPos = snap.Entities.Count(e => e.HasPosition); var withComps = snap.Entities.Count(e => e.Components is not null); - var monsters = snap.Entities.Count(e => e.Type == Roboto.Memory.EntityType.Monster); + var monsters = snap.Entities.Count(e => e.Type == Nexus.Memory.EntityType.Monster); var knownComps = _reader?.Registry["components"].Count ?? 0; _entitySummary!.Set($"{snap.Entities.Count} total, {withComps} with comps, {knownComps} known, {monsters} monsters"); @@ -723,7 +723,7 @@ public partial class MemoryViewModel : ObservableObject /// from live memory and recurses. For collapsed nodes with children, ensures /// a placeholder exists so the expand arrow is visible. /// - private static void SyncUiNodeLazy(MemoryNodeViewModel vm, Roboto.Memory.Objects.UIElements uiElements) + private static void SyncUiNodeLazy(MemoryNodeViewModel vm, Nexus.Memory.Objects.UIElements uiElements) { var uiEl = vm.UiElement; if (uiEl is null || uiEl.Address == 0) return; diff --git a/src/Automata.Ui/ViewModels/ModPoolViewModel.cs b/src/Nexus.Ui/ViewModels/ModPoolViewModel.cs similarity index 93% rename from src/Automata.Ui/ViewModels/ModPoolViewModel.cs rename to src/Nexus.Ui/ViewModels/ModPoolViewModel.cs index 9233ef1..e815105 100644 --- a/src/Automata.Ui/ViewModels/ModPoolViewModel.cs +++ b/src/Nexus.Ui/ViewModels/ModPoolViewModel.cs @@ -1,7 +1,7 @@ using CommunityToolkit.Mvvm.ComponentModel; -using Automata.Core; +using Nexus.Core; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class AvailableModViewModel : ObservableObject { diff --git a/src/Automata.Ui/ViewModels/RobotoViewModel.cs b/src/Nexus.Ui/ViewModels/NexusViewModel.cs similarity index 98% rename from src/Automata.Ui/ViewModels/RobotoViewModel.cs rename to src/Nexus.Ui/ViewModels/NexusViewModel.cs index 6bd17a1..711db01 100644 --- a/src/Automata.Ui/ViewModels/RobotoViewModel.cs +++ b/src/Nexus.Ui/ViewModels/NexusViewModel.cs @@ -3,17 +3,17 @@ using System.Numerics; using System.Runtime.InteropServices; using Avalonia; using Avalonia.Media.Imaging; -using Roboto.Memory; +using Nexus.Memory; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Automata.GameLog; -using Roboto.Core; -using Roboto.Data; -using Roboto.Engine; -using Roboto.Input; -using Roboto.Navigation; +using Nexus.GameLog; +using Nexus.Core; +using Nexus.Data; +using Nexus.Engine; +using Nexus.Input; +using Nexus.Pathfinding; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; /// /// Thread-safe snapshot read by the overlay layer each frame. @@ -79,7 +79,7 @@ public partial class EntityListItem : ObservableObject } } -public partial class RobotoViewModel : ObservableObject, IDisposable +public partial class NexusViewModel : ObservableObject, IDisposable { [LibraryImport("user32.dll")] private static partial short GetAsyncKeyState(int vKey); @@ -170,7 +170,7 @@ public partial class RobotoViewModel : ObservableObject, IDisposable /// public static volatile GameDataCache? SharedCache; - public RobotoViewModel(IClientLogWatcher logWatcher) + public NexusViewModel(IClientLogWatcher logWatcher) { var config = new BotConfig(); var reader = new GameMemoryReader(); diff --git a/src/Automata.Ui/ViewModels/ObjectBrowserViewModel.cs b/src/Nexus.Ui/ViewModels/ObjectBrowserViewModel.cs similarity index 99% rename from src/Automata.Ui/ViewModels/ObjectBrowserViewModel.cs rename to src/Nexus.Ui/ViewModels/ObjectBrowserViewModel.cs index 778ebc2..5ccce1f 100644 --- a/src/Automata.Ui/ViewModels/ObjectBrowserViewModel.cs +++ b/src/Nexus.Ui/ViewModels/ObjectBrowserViewModel.cs @@ -2,9 +2,9 @@ using System.Collections.ObjectModel; using System.Text; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Roboto.Memory; +using Nexus.Memory; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class FieldRowViewModel : ObservableObject { @@ -409,7 +409,7 @@ public partial class ObjectBrowserViewModel : ObservableObject /// /// Builds a map of offset → label name for the given object type, based on known GameOffsets. /// - private static Dictionary BuildOffsetLabels(GameOffsets o, string objectType) + private static Dictionary BuildOffsetLabels(Nexus.Memory.GameOffsets o, string objectType) { // Normalize: strip namespace prefixes (e.g. "GameStates@InGameState" → "InGameState") var type = objectType; diff --git a/src/Automata.Ui/ViewModels/ParsedModViewModel.cs b/src/Nexus.Ui/ViewModels/ParsedModViewModel.cs similarity index 97% rename from src/Automata.Ui/ViewModels/ParsedModViewModel.cs rename to src/Nexus.Ui/ViewModels/ParsedModViewModel.cs index 18ae28f..9458f0c 100644 --- a/src/Automata.Ui/ViewModels/ParsedModViewModel.cs +++ b/src/Nexus.Ui/ViewModels/ParsedModViewModel.cs @@ -1,7 +1,7 @@ using CommunityToolkit.Mvvm.ComponentModel; using Sidekick.Data.Items; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class ParsedModViewModel : ObservableObject { diff --git a/src/Automata.Ui/ViewModels/SettingsViewModel.cs b/src/Nexus.Ui/ViewModels/SettingsViewModel.cs similarity index 99% rename from src/Automata.Ui/ViewModels/SettingsViewModel.cs rename to src/Nexus.Ui/ViewModels/SettingsViewModel.cs index e7d15f5..8080cf6 100644 --- a/src/Automata.Ui/ViewModels/SettingsViewModel.cs +++ b/src/Nexus.Ui/ViewModels/SettingsViewModel.cs @@ -4,12 +4,12 @@ using Avalonia.Media.Imaging; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Automata.Bot; -using Automata.Core; -using Automata.Inventory; +using Nexus.Bot; +using Nexus.Core; +using Nexus.Inventory; using Serilog; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class SettingsViewModel : ObservableObject { diff --git a/src/Automata.Ui/ViewModels/SkillProfileViewModel.cs b/src/Nexus.Ui/ViewModels/SkillProfileViewModel.cs similarity index 98% rename from src/Automata.Ui/ViewModels/SkillProfileViewModel.cs rename to src/Nexus.Ui/ViewModels/SkillProfileViewModel.cs index 6f685f6..5303369 100644 --- a/src/Automata.Ui/ViewModels/SkillProfileViewModel.cs +++ b/src/Nexus.Ui/ViewModels/SkillProfileViewModel.cs @@ -1,9 +1,9 @@ using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -using Roboto.Core; +using Nexus.Core; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class SkillProfileViewModel : ObservableObject { diff --git a/src/Automata.Ui/ViewModels/StashTabViewModel.cs b/src/Nexus.Ui/ViewModels/StashTabViewModel.cs similarity index 95% rename from src/Automata.Ui/ViewModels/StashTabViewModel.cs rename to src/Nexus.Ui/ViewModels/StashTabViewModel.cs index 0685056..c9b7d1d 100644 --- a/src/Automata.Ui/ViewModels/StashTabViewModel.cs +++ b/src/Nexus.Ui/ViewModels/StashTabViewModel.cs @@ -1,8 +1,8 @@ using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; -using Automata.Core; +using Nexus.Core; -namespace Automata.Ui.ViewModels; +namespace Nexus.Ui.ViewModels; public partial class StashTabViewModel : ObservableObject { diff --git a/src/Automata.Ui/Views/MainWindow.axaml b/src/Nexus.Ui/Views/MainWindow.axaml similarity index 99% rename from src/Automata.Ui/Views/MainWindow.axaml rename to src/Nexus.Ui/Views/MainWindow.axaml index b47aa9e..e9a5163 100644 --- a/src/Automata.Ui/Views/MainWindow.axaml +++ b/src/Nexus.Ui/Views/MainWindow.axaml @@ -1,9 +1,9 @@ @@ -845,9 +845,9 @@ - - - + + + - - + + - + true/pm diff --git a/src/Roboto.Core/Roboto.Core.csproj b/src/Roboto.Core/Roboto.Core.csproj deleted file mode 100644 index b104a1a..0000000 --- a/src/Roboto.Core/Roboto.Core.csproj +++ /dev/null @@ -1,7 +0,0 @@ - - - net8.0-windows10.0.19041.0 - enable - enable - -