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
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
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(notAddItemEvent)QuestCompletedEvent(notCompleteQuestEvent)LevelChangedEvent(notChangeLevelEvent)ReputationChangedEvent(notChangeReputationEvent)
Command Naming
Commands use imperative verb + noun:
GiveItemCommandAcceptQuestCommandModifyReputationCommandAwardExperienceCommand
ID Conventions
Entry IDs are lowercase with underscores:
iron_sword,quest_the_missing_merchantEntry 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] privatewith public getter properties for all serialized dataPascalCase for public members, camelCase for private members
Prefix private fields with underscore:
_instance,_handlersOne public class per file
Use
#if UNITY_EDITORfor editor-only code in runtime assembliesUse null-conditional operator (
?.) for optional plugin access
Last updated
Was this helpful?
