- Removed unused gRPC and protobuf dependencies from `vcpkg.json`.
- Updated CI configuration to enable vcpkg installation for SDL2 and yaml-cpp.
- Added support for MSVC in CI workflows and improved caching strategies for vcpkg packages.
- Enhanced logging in build steps to provide better feedback on dependency status and build progress.
- Changed `x_camera_` and `y_camera_` in `OverworldExit` from `uint8_t` to `uint16_t` for consistency and to accommodate larger values.
- Updated the `DrawExitEditorPopup` function to use `InputHexWord` for camera positions, reflecting the new data type.
- Added `ImGui::PushID` and `ImGui::PopID` calls in various popup functions to resolve duplicate ID warnings, enhancing the stability of the UI.
Benefits:
- Ensures proper handling of camera coordinates in the overworld editor.
- Improves UI robustness by addressing ID conflicts in popups.
- Replaced the legacy ContextMenuItem structure with a new CanvasMenuItem across various files, enhancing consistency in context menu management.
- Introduced CanvasMenuBuilder for fluent menu construction, allowing for easier addition of items and submenus.
- Updated Canvas and related components to utilize the new menu system, improving organization and maintainability of context menus.
Benefits:
- Streamlines context menu item management, making it more intuitive and flexible.
- Enhances code readability and reduces duplication, facilitating future enhancements.
- Introduced a new `PopupRegistry` class to manage persistent popups, improving the organization and lifecycle handling of popups within the canvas.
- Added `canvas_menu.cc` and `canvas_menu.h` to define menu item and section structures, along with rendering functions for a more declarative menu system.
- Updated `canvas.cc` to utilize the new popup registry, ensuring backward compatibility with legacy popup handling during the migration phase.
Benefits:
- Streamlines popup management, enhancing usability and maintainability of the canvas UI.
- Facilitates the addition of complex menu structures and interactions, improving overall user experience.
- Introduced new files `canvas_interaction.cc` and `canvas_interaction.h` to encapsulate event-driven logic for tile painting, rectangle selection, and entity interactions.
- Refactored `CanvasInteractionHandler` to utilize the new event-based functions, improving code organization and maintainability.
- Added `canvas_events.h` to define event payload structures for various canvas interactions, enhancing clarity and usability.
Benefits:
- Streamlines interaction handling by separating concerns and reducing stateful dependencies.
- Improves testability and readability of the canvas interaction logic, facilitating future enhancements.
- Added new files `canvas_geometry.cc`, `canvas_geometry.h`, `canvas_rendering.cc`, and `canvas_rendering.h` to encapsulate canvas geometry calculations and rendering logic.
- Refactored `Canvas::DrawBackground` and related methods to utilize the new geometry and rendering helpers, improving code organization and readability.
- Introduced `CanvasState` to consolidate canvas state management, gradually replacing scattered state members.
Benefits:
- Enhances maintainability and clarity of canvas-related code.
- Streamlines rendering operations and geometry calculations, improving overall performance and usability.
- Added inclusion of `overworld_item.h` in both `overworld_map.h` and `overworld.cc` to facilitate item management within the overworld.
- Enhanced the `SaveItems` function to reset bomb door lookup tables and update item pointers, ensuring proper handling of overworld items.
- Improved data writing logic for overworld items, including adjustments for pointer reuse and metadata updates.
Benefits:
- Streamlines item management in the overworld, enhancing functionality and maintainability.
- Ensures compatibility with expanded ROM structures, improving overall game experience.
- Introduced new `entity_operations.cc` and `entity_operations.h` files to handle the insertion of entrances, exits, sprites, and items in the overworld editor.
- Updated `map_properties.cc` to include a context menu for entity insertion, allowing users to add various entities directly from the canvas.
- Enhanced `overworld_editor.cc` to manage entity insertion callbacks and streamline the editing process.
Benefits:
- Improves the functionality of the overworld editor by enabling direct manipulation of entities.
- Provides a more intuitive user experience with context-sensitive menus for entity operations.
- Adjusted gRPC versioning in `grpc.cmake` to use platform-specific versions: v1.75.1 for macOS/Linux and v1.67.1 for Windows MSVC.
- Added detailed logging to indicate the selected gRPC version and its compatibility rationale.
Benefits:
- Enhances compatibility with modern compilers and platforms, improving overall build reliability.
- Added detailed logging for vcpkg toolchain detection and gRPC target verification in `grpc_windows.cmake`.
- Updated gRPC version to v1.67.1 for improved MSVC compatibility and stability.
- Enhanced target checks for `protoc` and `grpc_cpp_plugin`, providing fallbacks and clearer error messages.
- Streamlined the export of gRPC and protobuf targets to ensure proper linking in Windows builds.
Benefits:
- Improves build diagnostics and error handling for gRPC integration on Windows.
- Ensures compatibility with modern compilers and enhances overall build reliability.
- Added `grpc` and `protobuf` as dependencies in `vcpkg.json` for Windows platform support.
- Updated CI workflows to ensure build and configuration failures are reported with detailed logs for better diagnostics.
- Enhanced the logging mechanism to capture and upload build logs on failure across all platforms.
Benefits:
- Improves the visibility of build issues, facilitating quicker troubleshooting.
- Ensures necessary dependencies are included for Windows builds, enhancing overall functionality.
- Updated the vcpkg baseline and commit ID across configuration files to the latest version for improved compatibility.
- Added SDL2 as a dependency in `vcpkg.json` for Windows platform support.
- Adjusted CI and release workflows to reflect the new vcpkg commit ID, ensuring consistency in the build process.
Benefits:
- Ensures the project utilizes the latest features and fixes from vcpkg, enhancing overall stability and reliability.
- Streamlines the integration of SDL2, improving support for Windows builds.
- Eliminated the custom vcpkg overlay for SDL2, which was previously used to address installation issues on Windows.
- Updated `vcpkg.json` to remove SDL2 dependency and related configurations from CI and release workflows.
- Deleted associated documentation and files for the SDL2 overlay to streamline the project structure.
Benefits:
- Simplifies the vcpkg configuration by removing unnecessary overlays, improving maintainability.
- Reduces complexity in the CI and release processes, enhancing overall build reliability.
- Introduced custom vcpkg port overlays to address SDL2 installation issues on Windows by skipping pkgconfig fixup.
- Updated CI and release workflows to include the new `VCPKG_OVERLAY_PORTS` configuration for enhanced build reliability.
- Added documentation for the overlays, detailing their purpose and usage.
Benefits:
- Prevents build failures related to SDL2 on Windows, improving the overall stability of the build process.
- Streamlines the integration of patched ports without forking the vcpkg repository, enhancing maintainability.
- Modified CMake presets to include static triplet for vcpkg in Windows configurations, enhancing build consistency.
- Updated vcpkg baseline and commit ID across configuration files to ensure compatibility with the latest package versions.
- Enhanced CI workflows to utilize the new vcpkg toolchain file, improving the setup process for Windows builds.
Benefits:
- Ensures the project leverages the latest features and fixes from vcpkg, enhancing overall stability.
- Streamlines the Windows build process by consolidating vcpkg configurations, reducing potential discrepancies during builds.
- Removed the `core_library.cmake` file and integrated its components into `app.cmake` to streamline the application structure.
- Updated the CMake configuration to reflect the new organization, ensuring proper inclusion of core components such as ROM management and application controller.
- Enhanced build messages to clarify the status of the application core library configuration.
Benefits:
- Simplifies the CMake structure by consolidating related components, improving maintainability and clarity.
- Promotes a clearer separation of concerns within the application architecture.
- Moved the gRPC test harness proto and services to `yaze_test_support` to avoid circular dependencies and improve modularity.
- Updated the core library CMake configuration to reflect the new structure, ensuring proper inclusion of ROM service and canvas automation.
- Enhanced the build messages to clarify the status of gRPC services and test harness integration.
Benefits:
- Streamlines the build process by clearly separating core and test functionalities.
- Improves maintainability and clarity in the CMake configuration for gRPC services.
- Modified the cache key in the CI workflow to include `src/**/*.cmake`, ensuring that changes in CMake files are properly accounted for in the caching mechanism.
- This adjustment enhances the efficiency of the CI process by improving cache hit rates and reducing unnecessary rebuilds.
Benefits:
- Optimizes the CI workflow by ensuring that all relevant CMake configurations are considered, leading to faster build times and more reliable dependency management.
- Enhanced the clang-tidy configuration to better align with Google C++ style and specific needs for ROM hacking workflows.
- Added and adjusted checks for performance, readability, modernize, bug-prone, and miscellaneous categories to accommodate ROM-specific coding practices.
- Updated naming conventions and function size limits to reflect the requirements of ROM development.
- Included additional options for Abseil and Google style checks to ensure compatibility with the project's coding standards.
Benefits:
- Improves static analysis and code quality by tailoring clang-tidy settings to the unique requirements of the project.
- Facilitates better adherence to coding standards while allowing for the flexibility needed in ROM hacking scenarios.
- Moved core components such as `Controller` and `Window` from `src/app/core/` to `src/app/` and `src/app/platform/`, respectively, to improve modularity and clarity.
- Updated include paths across the codebase to reflect the new locations of these components.
- Introduced a new foundational core library in `src/core/` for project management and ROM patching logic, enhancing the separation of concerns.
- Adjusted CMake configurations to ensure proper compilation of the new core library and updated dependencies in various modules.
Benefits:
- Streamlines the application structure, making it easier to navigate and maintain.
- Enhances code organization by clearly delineating core functionalities from application-specific logic.
- Improves overall architecture by promoting a clearer separation of concerns between different components.
- Updated the release workflow in `release.yml` to streamline the CI process by consolidating build steps for Windows, macOS, and Linux.
- Removed redundant validation and preparation steps, improving efficiency and clarity in the workflow.
- Enhanced the packaging process for macOS to create a universal binary and added support for Linux artifact generation.
- Improved dependency installation steps across platforms, ensuring a more consistent build environment.
Benefits:
- Reduces complexity in the CI configuration, making it easier to maintain and understand.
- Increases reliability of the build process, minimizing potential issues during execution.
- Facilitates smoother artifact creation and release management across different operating systems.
- Updated the vcpkg baseline in `vcpkg-configuration.json` and `vcpkg.json` to the latest commit `8eb57355a4ffb410a2e94c07b4dca2dffbee8e50`, ensuring compatibility with the latest package versions.
- Modified CI workflows in `ci.yml` and `release.yml` to reflect the new vcpkg commit ID, improving consistency across build configurations.
Benefits:
- Ensures the project is using the most recent vcpkg features and fixes, enhancing overall stability and performance.
- Maintains alignment between the vcpkg configuration and CI workflows, reducing potential discrepancies during builds.
- Added a new `session_types` module to encapsulate session-related structures and logic, including `EditorSet` and `RomSession`.
- Refactored `EditorManager` to utilize `SessionCoordinator` for session management, enhancing modularity and clarity.
- Updated various methods to replace direct references to current ROM and editor sets with calls to `SessionCoordinator`, improving session handling.
- Removed redundant session management logic from `EditorManager`, delegating responsibilities to `SessionCoordinator`.
Benefits:
- Streamlines session management, making it easier to handle multiple sessions and their associated editors.
- Enhances code maintainability by centralizing session-related logic and reducing coupling within the `EditorManager`.
- Improves overall architecture by promoting a clearer separation of concerns between session management and editor functionality.
- Consolidated and simplified the Windows CI workflows by removing redundant steps related to vcpkg setup and MSVC environment initialization.
- Enhanced the toolchain resolution process to ensure the vcpkg root and toolchain file are correctly identified and set in the environment.
- Updated the installation of Windows build tools to utilize Chocolatey for a more efficient setup.
- Improved logging and error handling for better visibility during the CI process.
Benefits:
- Reduces complexity in the CI configuration, making it easier to maintain and understand.
- Increases reliability of the build environment setup, minimizing potential issues during the CI execution.
- Updated the release workflow to support multiple download URLs for packages, improving reliability in fetching dependencies.
- Implemented a fallback mechanism to attempt downloads from alternative sources if the primary URL fails, enhancing robustness.
- Added logic to check for the presence of `pkg-config.exe` in multiple candidate directories, ensuring better integration with system binaries.
Benefits:
- Increases the likelihood of successful downloads, reducing build failures due to unavailable resources.
- Streamlines the CI process by ensuring necessary tools are available, improving overall build environment setup.
- Added a step to the Windows release workflow to include pkg-config in the PATH if it exists, improving build environment setup.
- Introduced the VCPKG_FORCE_SYSTEM_BINARIES environment variable to ensure system binaries are prioritized during builds.
Benefits:
- Streamlines the CI process by ensuring necessary tools are available, reducing potential build issues related to missing dependencies.
- Enhances compatibility with system-installed libraries, facilitating smoother integration and build performance.
- Relocated AsarWrapper implementation and header files from `src/app/core/` to `src/core/` to enhance modularity and organization.
- Updated all relevant include paths across the codebase to reflect the new location of AsarWrapper.
- Adjusted CMake configurations to ensure proper compilation of the core library.
Benefits:
- Improves project structure by separating core functionalities from application-specific code.
- Facilitates easier maintenance and understanding of the codebase by clarifying the organization of core components.
- Replaced "⚠️ ISSUE" with "Warning: ISSUE" for consistency across dependency architecture documentation.
- Removed checkmarks from completed items in various documents to maintain uniformity in status representation.
- Enhanced clarity by ensuring all sections follow a consistent formatting style.
Benefits:
- Improves readability and consistency in documentation, making it easier for contributors to understand the project's status and issues.
- Aligns with the overall documentation style, fostering a more professional appearance across all documents.
- Eliminated the inclusion of EditorCardManager from multiple editor header files, streamlining dependencies and reducing coupling.
- Updated comments in PaletteEditor to reflect the transition to EditorCardRegistry for card management.
Benefits:
- Enhances modularity by decoupling editor components from the centralized card manager.
- Improves maintainability and clarity in the codebase by aligning with the new card management approach.
- Revised the editor status section to reflect the current state of various editors, including stability notes and testing requirements.
- Clarified the welcome screen visibility logic in the documentation, emphasizing its behavior when no ROM is loaded and the conditions for manual control.
- Enhanced the overall structure and clarity of the development guide to better inform contributors about the project's status and UI management practices.
Benefits:
- Provides a clearer understanding of the current capabilities and testing needs of the editors.
- Improves documentation accuracy regarding UI behavior, aiding developers in troubleshooting and feature implementation.
- Introduced a new document detailing YAZE's dependency architecture, identifying optimization opportunities, and proposing a roadmap for reducing build times and improving maintainability.
- Included a complete dependency graph, key findings, and a detailed refactoring plan to enhance modularity and reduce circular dependencies.
- Document serves as a reference for future development and architectural decisions, aiming for 40-60% faster incremental builds.
Benefits:
- Provides a clear understanding of the current state and future direction for YAZE's architecture.
- Facilitates better decision-making for developers regarding library organization and build optimization strategies.
- Added LayoutManager to manage ImGui DockBuilder layouts for various editor types, providing professional default layouts similar to VSCode.
- Integrated layout initialization and persistence features, allowing users to save and load custom layouts.
- Updated EditorManager to initialize LayoutManager and set default layouts upon editor activation.
Benefits:
- Improves user experience by offering tailored layouts for different editing tasks.
- Enhances maintainability by centralizing layout management and initialization logic within the new LayoutManager class.
- Adjusted the indentation for logging statements in the release.yml workflow to ensure proper execution and readability.
- This change maintains consistency in the workflow configuration and enhances clarity in the script.
Benefits:
- Improves the clarity of the workflow script, reducing potential errors during CI execution.
- Enhanced the logic for displaying the welcome screen by clarifying conditions for visibility and adding error logging for null references.
- Improved state management and debugging information to provide better insights into the welcome screen's behavior during runtime.
Benefits:
- Increases clarity and maintainability of the welcome screen logic, ensuring a more intuitive user experience.
- Enhances debugging capabilities with detailed logging of state changes and conditions affecting the welcome screen display.
- Adjusted the indentation for the CMAKE_TOOLCHAIN_FILE assignment in release.yml to ensure proper execution of the script.
- This change enhances readability and maintains consistency in the workflow configuration.
Benefits:
- Improves clarity in the workflow script, reducing potential errors during CI execution.
- Updated EditorManager to streamline UI component rendering, ensuring that UI elements like the Command Palette and Global Search are properly displayed.
- Refactored MenuOrchestrator to introduce a new Debug menu, consolidating debugging tools and enhancing accessibility for users.
- Improved PopupManager to include new popups for feature flags and data integrity checks, providing better feedback and control over debugging processes.
Benefits:
- Enhances user experience by organizing UI elements and debugging tools more effectively.
- Improves maintainability by centralizing UI management and debugging functionalities within dedicated components.
- Updated multiple editor components to check visibility flags before rendering cards, ensuring that only visible cards are displayed.
- Refactored card rendering logic in GraphicsEditor, ScreenEditor, MessageEditor, MusicEditor, SpriteEditor, and Emulator to enhance user experience and performance.
- Improved maintainability by centralizing visibility checks and ensuring consistent behavior across different editor types.
Benefits:
- Streamlines the rendering process, leading to a more efficient UI experience.
- Enhances code clarity and maintainability by standardizing visibility handling across editors.
- Updated the download logic in both ci.yml and release.yml to include error handling for Invoke-WebRequest.
- Added a fallback to curl.exe for downloading packages if the initial request fails, improving reliability in package retrieval.
Benefits:
- Increases robustness of the CI and release workflows by ensuring successful downloads even in case of network issues.
- Enhances maintainability by centralizing download logic and error handling in the workflow scripts.
- Updated the sidebar UI in EditorCardRegistry to improve visibility and theming consistency using ThemeManager.
- Refactored SettingsEditor to register multiple settings cards, enhancing modularity and organization of settings.
- Improved the layout and interaction of category tabs, ensuring a more intuitive user experience.
Benefits:
- Streamlines the settings management process, leading to a more organized and efficient user interface.
- Enhances maintainability by clearly defining card registration and visibility logic within the editor framework.
- Updated EditorManager and various editor components to utilize EditorCardRegistry for card registration and visibility management, enhancing dependency injection and modularity.
- Refactored card registration logic across multiple editors, ensuring a consistent approach to managing editor cards.
- Improved UI coordination by delegating visibility checks and card management to the new registry, streamlining the user experience.
Benefits:
- Simplifies card management, leading to a more organized and efficient user experience.
- Enhances maintainability by clearly defining roles for card handling and editor operations, aligning with the overall architecture improvements.
- Updated EditorManager to initialize PopupManager in the constructor, ensuring safe access to popups during menu operations.
- Refactored MenuOrchestrator to utilize PopupID constants for popup management, improving clarity and maintainability.
- Enhanced PopupManager to register popups with structured definitions, allowing for better organization and future expansion.
Benefits:
- Streamlines the initialization process, preventing potential crashes due to uninitialized components.
- Improves the organization of popup management, leading to a more intuitive user experience and easier maintenance.
- Removed the save as menu and new project menu from EditorManager, delegating their functionality to PopupManager for better separation of concerns.
- Introduced a command palette in UICoordinator, enhancing user experience with fuzzy search capabilities for commands.
- Updated UI components to improve clarity and maintainability, ensuring a more efficient workflow for users.
Benefits:
- Enhances the organization of UI elements, leading to a more intuitive user experience.
- Improves code maintainability by consolidating UI management responsibilities within dedicated components.
- Updated EditorManager to include ShortcutManager in the UICoordinator initialization, improving UI responsiveness.
- Refactored menu handling in MenuOrchestrator to delegate more responsibilities to UICoordinator, streamlining the UI flow.
- Removed unused menu items and comments, clarifying the code structure and enhancing maintainability.
Benefits:
- Improves the organization of UI components, leading to a more efficient user experience.
- Enhances clarity in the codebase by reducing clutter and focusing on essential functionalities.
- Removed the installation step for Ninja, simplifying the setup process.
- Added a prefetch step for MSYS runtime to ensure necessary packages are available.
- Updated CMake configuration to use a more structured argument array, improving readability and maintainability.
- Enhanced build output handling to check multiple directories for the built artifacts, ensuring better feedback on the build process.
Benefits:
- Streamlines the CI and release workflows for Windows, leading to a more efficient build process.
- Improves clarity and maintainability of the configuration scripts.