# Glossary

Key terms used throughout the Spark documentation.

**Assembly Definition (asmdef)**: A Unity file that defines a compile unit. Spark uses assembly definitions to isolate plugins so they compile independently.

**Command**: A data object representing a request to perform an action (give item, deal damage, accept quest). Commands are executed through the network provider and processed by command handlers.

**Command Handler**: A class that processes a specific command type. Contains validation logic, state changes, and event publishing.

**Database Entry**: A ScriptableObject that stores game configuration data (items, quests, abilities, etc.). All entries inherit from `SparkDatabaseEntry`.

**Entity**: A GameObject in the scene with a `SparkEntity` component. Entities have unique IDs and are tracked by `SparkEntityRegistry`.

**Entity ID**: A unique string identifier for a SparkEntity. Can be Local (auto-generated), Static (designer-assigned), or Networked (server-assigned).

**Event**: A notification that something happened in the game. Events are published through `SparkEventBus` and received by subscribed handlers.

**Event Bus**: The `SparkEventBus` static class that manages event publishing and subscription.

**Extension**: A mechanism for one plugin to add data fields to another plugin's database entries without modifying the original entry class.

**Extension Data**: A ScriptableObject (`SparkDatabaseExtensionData`) that holds extra fields for a database entry, linked by target ID.

**Interactable**: Any object implementing `IInteractable` that the player can target and interact with.

**Nested Data**: A serializable class (`SparkDatabaseEntryNestedData`) used for complex sub-objects within database entries.

**Network Provider**: An implementation of `INetworkProvider` that routes commands. `LocalNetworkProvider` handles single-player; custom providers handle multiplayer.

**Playable**: A pre-configured action (animation, sound, transform change, etc.) that plays during gameplay, defined as a database entry.

**Plugin**: A self-contained system that adds a feature set to Spark. Plugins register with the service locator and communicate through events and commands.

**Plugin Manifest**: A ScriptableObject that defines a plugin's metadata and its tabs in the Spark Editor.

**Plugin Settings**: A ScriptableObject (`PluginSettingsBase`) that stores global configuration for a plugin.

**Requirement**: A condition that must be met before an action can occur. Requirements are checked at runtime.

**Rule**: A combination of conditions (checks) and actions (effects). When all checks pass, all effects execute.

**Service Locator**: The `Spark` static class that manages plugin registration and retrieval.

**Spark Editor**: The custom Unity editor window for managing all Spark database entries and plugin settings.

**SparkDatabaseRegistry**: Static registry that caches all database entries for O(1) lookups by ID or type.

**SparkEntity**: MonoBehaviour component that provides entity identification and cached component access.

**SparkEntityRegistry**: Static registry that tracks all active SparkEntity instances for O(1) lookups.

**SparkEventBus**: Static event bus with priority-based publish/subscribe for inter-plugin communication.

**SparkExtensionRegistry**: Static registry that caches all extension data for O(1) lookups by type and target ID.

**Trigger**: An action that executes when a condition is met. Triggers are configurable through the Spark Editor.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sparkframework.dev/documentation/developer-guide/reference/glossary.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
