Naming Conventions

This page documents the naming conventions used throughout Spark. Follow these when creating custom plugins to keep everything consistent.

File and Class Naming

Type
Pattern
Example

Plugin Interface

I{Name}Plugin

IFactionPlugin

Plugin Implementation

{Name}Plugin

FactionPlugin

Database Entry

{Name}Entry

FactionEntry

Nested Data

{Name}Data

FactionReputationData

Extension Data

{Feature}{Target}ExtensionData

CombatStatsItemExtensionData

Scene Entity

{Name}Entity

FactionTrackerEntity

Event

{PastTense}Event

ReputationChangedEvent

Command

{Verb}{Noun}Command

ModifyReputationCommand

Command Handler

{Command}Handler

ModifyReputationCommandHandler

Plugin Settings

{Plugin}PluginSettings

FactionPluginSettings

Trigger Type

{Action}TriggerType

GiveReputationTriggerType

Requirement Type

{Condition}RequirementType

FactionReputationRequirementType

Save Data

{Plugin}SaveData

FactionSaveData

Save Registration

{Plugin}SaveDataRegistration

FactionSaveDataRegistration

UI Component

{Purpose}UI

FactionPanelUI

Formatter Type

{Event}FormatterType

ReputationChangedFormatterType

Assembly Definition Naming

Type
Pattern
Example

Runtime Assembly

Spark.{PluginName}

Spark.Factions

Editor Assembly

Spark.{PluginName}.Editor

Spark.Factions.Editor

Extension Assembly

Spark.{Plugin}.{Target}Extension

Spark.Factions.QuestExtension

Extension Editor Assembly

Spark.{Plugin}.{Target}Extension.Editor

Spark.Factions.QuestExtension.Editor

Folder Structure

Event Naming

Events use past tense to describe what happened:

  • ItemAddedEvent (not AddItemEvent)

  • QuestCompletedEvent (not CompleteQuestEvent)

  • LevelChangedEvent (not ChangeLevelEvent)

  • ReputationChangedEvent (not ChangeReputationEvent)

Command Naming

Commands use imperative verb + noun:

  • GiveItemCommand

  • AcceptQuestCommand

  • ModifyReputationCommand

  • AwardExperienceCommand

ID Conventions

  • Entry IDs are lowercase with underscores: iron_sword, quest_the_missing_merchant

  • Entry IDs are auto-generated and immutable after creation

  • Plugin registration keys are lowercase: "factions", "combat", "items"

  • Panel IDs are lowercase with underscores: "inventory_panel", "quest_log_panel"

Code Style

  • [SerializeField] private with public getter properties for all serialized data

  • PascalCase for public members, camelCase for private members

  • Prefix private fields with underscore: _instance, _handlers

  • One public class per file

  • Use #if UNITY_EDITOR for editor-only code in runtime assemblies

  • Use null-conditional operator (?.) for optional plugin access

Last updated

Was this helpful?