Skip to content

Split engine to subsystems #4304

@DarkWeird

Description

@DarkWeird

Extraction subsystems should:

  1. simplify codebase via extracting common components
  2. make some components optional/replaceable. e.g:
    Optional: Telemetry and Discord not needs for server build
    Replaceable: AudioLwjgl and AudioNull subsystems.
  3. provide native library support for modules. e.g:
    Kallisti -> Jnlua
    CoreRendering -> GraphicsLwjgl

Extraction subsystems shouldn't:

  1. Replace Modules
  2. Downloads from server or internet
  3. Loads dynamically

Draft extraction scheme:

Disclaimer: some listed subsystem is just library - haven't EngineSubsystem implementation. but i cannot place it at libs directory, because libs directory used for external libraries (external repo)

Subscribables is timed subsystem. while AutoConfigs will not extracted and configs not migrated to autoconfigs

Required Features:

  1. feat: Reviving of "UI for editing arbitrary types and AutoConfigs" #4244 - for autoconfig. it ideally config system for subsystem ecosystem. needs 7 and 2.
  2. Module -> Subsystem dependency.
    Partial current solution for 'Library' subsystems - engine provides them as gradle's api dependency (formal it is engine dependency)

Extractions

  1. DiscordRPC subsystem feature(subsystems): extract DiscordRPCSubSystem #4233
  2. TypeHandlerLibrary feat(subsystems): extract TypeHandlerLibrary. #4255
  3. ✅ Add generic Serializer for TypeHandlerLibrary feat(TypeHandlerLibrary): Add generic Serializer for TypeHandlerLibrary. #4324
  4. extract EntitySystem. ( requires ✅ feature(subsystem-prepare): extract Network and R&R code from EventSystemImpl #4565 for pure events and ✅ feat(TypeHandlerLibrary): Add generic Serializer for TypeHandlerLibrary. #4324 for serialize components)
  5. protobuf serialize over GenericSerilaizer(3)
  6. network subsystem - needs 4
  7. GsonSerializer feat(subsystems): Extract GsonSerializer #4270 - needs 2.( follow-ups - migrate engine's code from pure Gson to GsonSerializer) Outdated with feat(TypeHandlerLibrary): Add generic Serializer for TypeHandlerLibrary. #4324
  8. extractTypeWidgetLibrary -- but first needs to merge feat: Reviving of "UI for editing arbitrary types and AutoConfigs" #4244
  9. extract AutoConfigs - needs 7.
  10. extract Audio(Null|API|Lwjgl) subsystems. required .
  11. extract Graphics - required AutoConfigs as subsystem and migrated Rendering configs to AutoConfig.
  12. extract Record&Replace - highly integrated in engine. needs refactor WorldStorage to make it extendable.
  13. ???
  14. PROFIT!

Metadata

Metadata

Assignees

Labels

Topic: ArchitectureRequests, Issues and Changes related to software architecture, programming patterns, etc.Type: ImprovementRequest for or addition/enhancement of a feature

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions