# amritrathore/gameframeworks architecture

> Architecture diagram of the GitHub repository amritrathore/gameframeworks, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/amritrathore/gameframeworks
- Repository: https://github.com/amritrathore/gameframeworks

## Overview

gameframeworks is a Unity-oriented collection of runtime packages for popups, saving, slot/inventory management, state machines, and tabs; the README does not describe a single end-to-end product workflow. Each package has its own entry point and domain flow: popup requests display UI, save requests persist registered state, slot operations update and present slots, and tab input changes selection and view state. The graph preserves these independent capabilities. Several relationships are dashed where the source index names dependencies but the implementation excerpt does not establish the call.

Main entry points: [`Packages/com.core.slotsystem/Runtime/Unity/SlotViewFactory.cs`](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Unity/SlotViewFactory.cs) (View factory), [`Packages/com.core.savesystem/Runtime/Core/SaveManager.cs`](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Core/SaveManager.cs) (Save manager), [`Packages/com.core.tabsystem/Runtime/Core/TabBinding.cs`](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Core/TabBinding.cs) (Tab binding), [`Packages/com.core.slotsystem/Runtime/Manager/SlotManager.cs`](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Manager/SlotManager.cs) (Slot manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_popup["Popup UI"]
  node_popup_controller["Popup controller<br/>[PopupController.cs]"]
  node_popup_views["Popup views<br/>[Popup.cs]"]
  node_popup_contract["Popup contract<br/>[IPopup.cs]"]
end

subgraph group_save["Save System"]
  node_save_manager["Save manager<br/>[SaveManager.cs]"]
  node_save_registry["Save registry<br/>[SaveRegistry.cs]"]
  node_saveable["Saveable state<br/>[ISaveable.cs]"]
  node_save_providers["Save providers<br/>[Providers]"]
  node_save_serializers["Serialization<br/>[Serialization]"]
  node_storage_contract["Storage backend<br/>[IStorageBackend.cs]"]
  node_file_storage[("File storage<br/>[FileStorage.cs]")]
end

subgraph group_slots["Slot System"]
  node_slot_manager["Slot manager<br/>[SlotManager.cs]"]
  node_slot_collection["Slot collection<br/>[SlotCollection.cs]"]
  node_slot["Slot state<br/>[Slot.cs]"]
  node_unlock_strategies["Unlock strategies<br/>[Unlock]"]
  node_slot_save_data["Slot save data<br/>[SlotSaveData.cs]"]
  node_slot_save_fields["Slot data<br/>[SlotData.cs]"]
  node_slot_behaviour["Slot behaviour"]
  node_slot_factory["View factory<br/>[SlotViewFactory.cs]"]
  node_slot_view["Slot view<br/>[SlotView.cs]"]
end

subgraph group_tabs["Tab System"]
  node_tab_behaviour["Tab behaviour"]
  node_tab_controller["Tab controller<br/>[TabController.cs]"]
  node_tab_binding["Tab binding<br/>[TabBinding.cs]"]
  node_tab_button["Tab input<br/>[TabButton.cs]"]
  node_tab_view["Tab view<br/>[TabView.cs]"]
  node_tab_policy["Selection policy"]
end

subgraph group_states["State Machine"]
  node_state_machine["State machine<br/>[StateMachine.cs]"]
  node_state_base["State base<br/>[State.cs]"]
  node_state_contract["State contract<br/>[IState.cs]"]
end

node_user(("Unity caller"))
node_save_caller(("Save caller"))
node_slot_user(("Game caller"))
node_tab_user(("UI caller"))
node_state_consumer(("State-machine user"))

node_user -->|"requests popup"| node_popup_controller
node_popup_controller -->|"shows and hides"| node_popup_views
node_popup_controller -->|"dispatches through"| node_popup_contract
node_save_caller -.->|"requests save"| node_save_manager
node_save_manager -->|"looks up"| node_save_registry
node_save_manager -->|"loads and saves"| node_save_providers
node_save_manager -->|"captures and restores"| node_saveable
node_save_providers -.->|"uses serializer"| node_save_serializers
node_save_providers -.->|"uses backend"| node_storage_contract
node_file_storage -->|"implements"| node_storage_contract
node_slot_user -.->|"changes slots"| node_slot_manager
node_slot_manager -->|"reads and updates"| node_slot_collection
node_slot_manager -->|"captures and restores"| node_slot_save_data
node_slot_save_data -->|"stores entries"| node_slot_save_fields
node_slot_save_data -->|"reads slots"| node_slot_collection
node_slot_collection -.->|"contains slots"| node_slot
node_slot -->|"checks and unlocks"| node_unlock_strategies
node_slot_behaviour -.->|"exposes manager"| node_slot_manager
node_slot_factory -->|"reads system"| node_slot_behaviour
node_slot_factory -->|"reads slots"| node_slot_collection
node_slot_factory -->|"binds slot"| node_slot
node_slot_factory -->|"creates views"| node_slot_view
node_tab_user -->|"selects tab"| node_tab_behaviour
node_tab_behaviour -->|"creates and selects"| node_tab_controller
node_tab_behaviour -->|"binds entries"| node_tab_binding
node_tab_binding -->|"requests selection"| node_tab_controller
node_tab_binding -->|"subscribes input"| node_tab_button
node_tab_binding -->|"refreshes selection"| node_tab_view
node_tab_controller -->|"checks policy"| node_tab_policy
node_state_consumer -.->|"uses machine"| node_state_machine
node_state_machine -.->|"uses states"| node_state_contract
node_state_base -->|"implements"| node_state_contract

click node_popup_controller "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.popupsystem/Runtime/PopupController.cs"
click node_popup_views "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.popupsystem/Runtime/Popup.cs"
click node_popup_contract "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.popupsystem/Runtime/IPopup.cs"
click node_save_manager "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Core/SaveManager.cs"
click node_save_registry "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Core/SaveRegistry.cs"
click node_saveable "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Interfaces/ISaveable.cs"
click node_save_providers "https://github.com/amritrathore/gameframeworks/tree/main/Packages/com.core.savesystem/Runtime/Providers"
click node_save_serializers "https://github.com/amritrathore/gameframeworks/tree/main/Packages/com.core.savesystem/Runtime/Serialization"
click node_storage_contract "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Interfaces/IStorageBackend.cs"
click node_file_storage "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Storage/FileStorage.cs"
click node_slot_manager "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Manager/SlotManager.cs"
click node_slot_collection "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Core/SlotCollection.cs"
click node_slot "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Core/Slot.cs"
click node_unlock_strategies "https://github.com/amritrathore/gameframeworks/tree/main/Packages/com.core.slotsystem/Runtime/Unlock"
click node_slot_save_data "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Data/SlotSaveData.cs"
click node_slot_save_fields "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Data/SlotData.cs"
click node_slot_behaviour "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Unity/SlotSystemBehaviour.cs"
click node_slot_factory "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Unity/SlotViewFactory.cs"
click node_slot_view "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Unity/SlotView.cs"
click node_tab_behaviour "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Unity/TabSystemBehaviour.cs"
click node_tab_controller "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Core/TabController.cs"
click node_tab_binding "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Core/TabBinding.cs"
click node_tab_button "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Unity/TabButton.cs"
click node_tab_view "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Unity/TabView.cs"
click node_tab_policy "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Core/ITabSelectionPolicy.cs"
click node_state_machine "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.statemachinesystem/Runtime/StateMachine.cs"
click node_state_base "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.statemachinesystem/Runtime/State.cs"
click node_state_contract "https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.statemachinesystem/Runtime/IState.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_popup_controller,node_popup_views,node_popup_contract,node_tab_user,node_state_consumer toneBlue
class node_save_manager,node_save_registry,node_saveable,node_save_providers,node_save_serializers,node_storage_contract,node_file_storage toneAmber
class node_slot_manager,node_slot_collection,node_slot,node_unlock_strategies,node_slot_save_data,node_slot_save_fields,node_slot_behaviour,node_slot_factory,node_slot_view toneMint
class node_tab_behaviour,node_tab_controller,node_tab_binding,node_tab_button,node_tab_view,node_tab_policy toneRose
class node_state_machine,node_state_base,node_state_contract,node_user,node_save_caller,node_slot_user toneIndigo
```

## Components

### Popup UI

- [Popup controller](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.popupsystem/Runtime/PopupController.cs): `Packages/com.core.popupsystem/Runtime/PopupController.cs`
- [Popup views](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.popupsystem/Runtime/Popup.cs): `Packages/com.core.popupsystem/Runtime/Popup.cs`
- [Popup contract](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.popupsystem/Runtime/IPopup.cs): `Packages/com.core.popupsystem/Runtime/IPopup.cs`

### Save System

- [Save manager](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Core/SaveManager.cs): `Packages/com.core.savesystem/Runtime/Core/SaveManager.cs`
- [Save registry](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Core/SaveRegistry.cs): `Packages/com.core.savesystem/Runtime/Core/SaveRegistry.cs`
- [Saveable state](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Interfaces/ISaveable.cs): `Packages/com.core.savesystem/Runtime/Interfaces/ISaveable.cs`
- [Save providers](https://github.com/amritrathore/gameframeworks/tree/main/Packages/com.core.savesystem/Runtime/Providers): `Packages/com.core.savesystem/Runtime/Providers`
- [Serialization](https://github.com/amritrathore/gameframeworks/tree/main/Packages/com.core.savesystem/Runtime/Serialization): `Packages/com.core.savesystem/Runtime/Serialization`
- [Storage backend](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Interfaces/IStorageBackend.cs): `Packages/com.core.savesystem/Runtime/Interfaces/IStorageBackend.cs`
- [File storage](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.savesystem/Runtime/Storage/FileStorage.cs): `Packages/com.core.savesystem/Runtime/Storage/FileStorage.cs`

### Slot System

- [Slot manager](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Manager/SlotManager.cs): `Packages/com.core.slotsystem/Runtime/Manager/SlotManager.cs`
- [Slot collection](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Core/SlotCollection.cs): `Packages/com.core.slotsystem/Runtime/Core/SlotCollection.cs`
- [Slot state](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Core/Slot.cs): `Packages/com.core.slotsystem/Runtime/Core/Slot.cs`
- [Unlock strategies](https://github.com/amritrathore/gameframeworks/tree/main/Packages/com.core.slotsystem/Runtime/Unlock): `Packages/com.core.slotsystem/Runtime/Unlock`
- [Slot save data](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Data/SlotSaveData.cs): `Packages/com.core.slotsystem/Runtime/Data/SlotSaveData.cs`
- [Slot data](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Data/SlotData.cs): `Packages/com.core.slotsystem/Runtime/Data/SlotData.cs`
- [Slot behaviour](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Unity/SlotSystemBehaviour.cs): `Packages/com.core.slotsystem/Runtime/Unity/SlotSystemBehaviour.cs`
- [View factory](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Unity/SlotViewFactory.cs): `Packages/com.core.slotsystem/Runtime/Unity/SlotViewFactory.cs`
- [Slot view](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.slotsystem/Runtime/Unity/SlotView.cs): `Packages/com.core.slotsystem/Runtime/Unity/SlotView.cs`

### Tab System

- [Tab behaviour](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Unity/TabSystemBehaviour.cs): `Packages/com.core.tabsystem/Runtime/Unity/TabSystemBehaviour.cs`
- [Tab controller](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Core/TabController.cs): `Packages/com.core.tabsystem/Runtime/Core/TabController.cs`
- [Tab binding](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Core/TabBinding.cs): `Packages/com.core.tabsystem/Runtime/Core/TabBinding.cs`
- [Tab input](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Unity/TabButton.cs): `Packages/com.core.tabsystem/Runtime/Unity/TabButton.cs`
- [Tab view](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Unity/TabView.cs): `Packages/com.core.tabsystem/Runtime/Unity/TabView.cs`
- [Selection policy](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.tabsystem/Runtime/Core/ITabSelectionPolicy.cs): `Packages/com.core.tabsystem/Runtime/Core/ITabSelectionPolicy.cs`

### State Machine

- [State machine](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.statemachinesystem/Runtime/StateMachine.cs): `Packages/com.core.statemachinesystem/Runtime/StateMachine.cs`
- [State base](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.statemachinesystem/Runtime/State.cs): `Packages/com.core.statemachinesystem/Runtime/State.cs`
- [State contract](https://github.com/amritrathore/gameframeworks/blob/main/Packages/com.core.statemachinesystem/Runtime/IState.cs): `Packages/com.core.statemachinesystem/Runtime/IState.cs`

### Other components

- **Unity caller**
- **Save caller**
- **Game caller**
- **UI caller**
- **State-machine user**

## Connections

- Unity caller → Popup controller: requests popup (evidence: `Packages/com.core.popupsystem/Runtime/PopupController.cs`)
- Popup controller → Popup views: shows and hides (evidence: `Packages/com.core.popupsystem/Runtime/PopupController.cs`)
- Popup controller → Popup contract: dispatches through (evidence: `Packages/com.core.popupsystem/Runtime/PopupController.cs`)
- Save caller → Save manager: requests save
- Save manager → Save registry: looks up (evidence: `Packages/com.core.savesystem/Runtime/Core/SaveManager.cs`)
- Save manager → Save providers: loads and saves (evidence: `Packages/com.core.savesystem/Runtime/Core/SaveManager.cs`)
- Save manager → Saveable state: captures and restores (evidence: `Packages/com.core.savesystem/Runtime/Core/SaveManager.cs`)
- Save providers → Serialization: uses serializer
- Save providers → Storage backend: uses backend (evidence: `Packages/com.core.savesystem/Runtime/Providers/BinarySaveProvider.cs`)
- File storage → Storage backend: implements (evidence: `Packages/com.core.savesystem/Runtime/Storage/FileStorage.cs`)
- Game caller → Slot manager: changes slots
- Slot manager → Slot collection: reads and updates (evidence: `Packages/com.core.slotsystem/Runtime/Manager/SlotManager.cs`)
- Slot manager → Slot save data: captures and restores (evidence: `Packages/com.core.slotsystem/Runtime/Manager/SlotManager.cs`)
- Slot save data → Slot data: stores entries (evidence: `Packages/com.core.slotsystem/Runtime/Data/SlotSaveData.cs`)
- Slot save data → Slot collection: reads slots (evidence: `Packages/com.core.slotsystem/Runtime/Data/SlotSaveData.cs`)
- Slot collection → Slot state: contains slots
- Slot state → Unlock strategies: checks and unlocks (evidence: `Packages/com.core.slotsystem/Runtime/Core/Slot.cs`)
- Slot behaviour → Slot manager: exposes manager
- View factory → Slot behaviour: reads system (evidence: `Packages/com.core.slotsystem/Runtime/Unity/SlotViewFactory.cs`)
- View factory → Slot collection: reads slots (evidence: `Packages/com.core.slotsystem/Runtime/Unity/SlotViewFactory.cs`)
- View factory → Slot state: binds slot (evidence: `Packages/com.core.slotsystem/Runtime/Unity/SlotViewFactory.cs`)
- View factory → Slot view: creates views (evidence: `Packages/com.core.slotsystem/Runtime/Unity/SlotViewFactory.cs`)
- UI caller → Tab behaviour: selects tab (evidence: `Packages/com.core.tabsystem/Runtime/Unity/TabSystemBehaviour.cs`)
- Tab behaviour → Tab controller: creates and selects (evidence: `Packages/com.core.tabsystem/Runtime/Unity/TabSystemBehaviour.cs`)
- Tab behaviour → Tab binding: binds entries (evidence: `Packages/com.core.tabsystem/Runtime/Unity/TabSystemBehaviour.cs`)
- Tab binding → Tab controller: requests selection (evidence: `Packages/com.core.tabsystem/Runtime/Core/TabBinding.cs`)
- Tab binding → Tab input: subscribes input (evidence: `Packages/com.core.tabsystem/Runtime/Core/TabBinding.cs`)
- Tab binding → Tab view: refreshes selection (evidence: `Packages/com.core.tabsystem/Runtime/Core/TabBinding.cs`)
- Tab controller → Selection policy: checks policy (evidence: `Packages/com.core.tabsystem/Runtime/Core/TabController.cs`)
- State-machine user → State machine: uses machine
- State machine → State contract: uses states (evidence: `Packages/com.core.statemachinesystem/Runtime/StateMachine.cs`)
- State base → State contract: implements (evidence: `Packages/com.core.statemachinesystem/Runtime/State.cs`)
