Table of Contents

Struct ScopedModifierContainer

Namespace
Core.Modifiers
Assembly
Core.dll

ENGINE: Container for modifiers with scope inheritance Pattern used by: EU4 (province ← country ← global), CK3 (character ← dynasty ← culture)

Scope Hierarchy:

  • Province modifiers (local only)
  • Country modifiers (inherited by all provinces)
  • Global modifiers (inherited by everyone)

Design:

  • ActiveModifierList for local modifiers
  • Reference to parent scope (optional)
  • Cached ModifierSet (dirty flag optimization)
  • Rebuild only when modifiers change

Performance: O(n) rebuild where n = local + inherited modifiers Cached lookups: O(1) after rebuild

public struct ScopedModifierContainer

Properties

HasLocalModifiers

Check if this container has any local modifiers

public bool HasLocalModifiers { get; }

Property Value

bool

LocalModifierCount

Get count of local modifiers

public int LocalModifierCount { get; }

Property Value

int

Methods

Add(ModifierSource)

Add a modifier to this scope

public bool Add(ModifierSource source)

Parameters

source ModifierSource

Returns

bool

ApplyModifier(ushort, FixedPoint64, ScopedModifierContainer?)

Apply modifier to a base value (rebuilds if dirty)

public FixedPoint64 ApplyModifier(ushort modifierTypeId, FixedPoint64 baseValue, ScopedModifierContainer? parentScope = null)

Parameters

modifierTypeId ushort
baseValue FixedPoint64
parentScope ScopedModifierContainer?

Returns

FixedPoint64

Clear()

Clear all local modifiers

public void Clear()

CountLocalModifiersBySource(SourceType, uint)

Count local modifiers from a specific source

public int CountLocalModifiersBySource(ModifierSource.SourceType sourceType, uint sourceId)

Parameters

sourceType ModifierSource.SourceType
sourceId uint

Returns

int

Create(int, Allocator)

Create a new scoped modifier container

public static ScopedModifierContainer Create(int capacity = 64, Allocator allocator = Allocator.Persistent)

Parameters

capacity int
allocator Allocator

Returns

ScopedModifierContainer

Dispose()

Dispose native collections

public void Dispose()

ExpireModifiers(int)

Expire temporary modifiers

public int ExpireModifiers(int currentTick)

Parameters

currentTick int

Returns

int

ForEachLocalModifier(Action<ModifierSource>)

Iterate over local modifiers (for debugging/tooltips)

public void ForEachLocalModifier(Action<ModifierSource> action)

Parameters

action Action<ModifierSource>

ForEachLocalModifierBySource(SourceType, uint, Action<ModifierSource>)

Iterate over local modifiers from a specific source

public void ForEachLocalModifierBySource(ModifierSource.SourceType sourceType, uint sourceId, Action<ModifierSource> action)

Parameters

sourceType ModifierSource.SourceType
sourceId uint
action Action<ModifierSource>

ForEachLocalModifierByType(ushort, Action<ModifierSource>)

Iterate over local modifiers of a specific modifier type

public void ForEachLocalModifierByType(ushort modifierTypeId, Action<ModifierSource> action)

Parameters

modifierTypeId ushort
action Action<ModifierSource>

GetModifierSet(ScopedModifierContainer?)

Get the final modifier set (rebuilds if dirty)

public ModifierSet GetModifierSet(ScopedModifierContainer? parentScope = null)

Parameters

parentScope ScopedModifierContainer?

Returns

ModifierSet

MarkDirty()

Mark this container as dirty (forces rebuild on next access) Use this when parent scope changes

public void MarkDirty()

RebuildIfDirty(ScopedModifierContainer?)

Rebuild modifier set from local + inherited modifiers

public void RebuildIfDirty(ScopedModifierContainer? parentScope = null)

Parameters

parentScope ScopedModifierContainer?

RemoveBySource(SourceType, uint)

Remove modifiers from a specific source

public int RemoveBySource(ModifierSource.SourceType sourceType, uint sourceId)

Parameters

sourceType ModifierSource.SourceType
sourceId uint

Returns

int

RemoveBySourceAndType(SourceType, uint, ushort)

Remove modifiers of a specific type from a specific source

public int RemoveBySourceAndType(ModifierSource.SourceType sourceType, uint sourceId, ushort modifierTypeId)

Parameters

sourceType ModifierSource.SourceType
sourceId uint
modifierTypeId ushort

Returns

int