Scylla Framework
  • API Reference
Search Results for

    Show / Hide Table of Contents
    • Scylla.Input
      • AutoResolveChange
      • AutoResolveResult
      • BindingConflict
      • BindingStorageSettings
      • BindingStorageType
      • BridgeSettings
      • BufferedInput
      • ConfigActionEntry
      • ConfigActionGroup
      • ConfigBindingEntry
      • ConfigConflict
      • ConfigGroupExclusion
      • ConfigLayout
      • ConfigLayout.Builder
      • ConfigLayoutColumnDefinition
      • ConfigLayoutConflictScope
      • ConfigLayoutDefinition
      • ConfigLayoutExclusionDefinition
      • ConfigLayoutGroupDefinition
      • ConfigLayoutGroupMode
      • ConfigLayoutMemberReference
      • ConfigLayoutValidationMessage
      • ConfigLayoutValidationSeverity
      • ConfigSchemeGroup
      • ContextConflictScope
      • ContextValidationMessage
      • ContextValidationSeverity
      • ControlScheme
      • ControlSchemeChangedEvent
      • ControlSchemeManager
      • ControlSchemeType
      • GamepadButton
      • GamepadType
      • IBindingStorage
      • IControlSchemeManager
      • IInputActionManager
      • IInputBindingManager
      • IInputBridgeManager
      • IInputBufferManager
      • IInputConflictScope
      • IInputContextManager
      • IInputControlAliasResolver
      • IInputHintsManager
      • IInputListener
      • IInputRebindabilityProvider
      • IScyllaInputBridge
      • IdentityControlAliasResolver
      • InputActionCanceledEvent
      • InputActionManager
      • InputActionMapNode
      • InputActionMetadata
      • InputActionNode
      • InputActionPerformedEvent
      • InputActionStartedEvent
      • InputActionsDocument
      • InputActionsDocumentIO
      • InputActionsJSONKeys
      • InputAnnotation
      • InputAssetInfo
      • InputBindingGroups
      • InputBindingManager
      • InputBindingMetadata
      • InputBindingNode
      • InputBindingsLoadedEvent
      • InputBindingsSavedEvent
      • InputBridgeManager
      • InputBridgeQueryMode
      • InputBufferConsumedEvent
      • InputBufferManager
      • InputBufferedEvent
      • InputCodegenSettings
      • InputCompositeUtil
      • InputConflictEngine
      • InputConflictPair
      • InputConflictPolicy
      • InputConflictReason
      • InputConflictRecord
      • InputConflictRecordBuilder
      • InputConflictResolution
      • InputConflictSet
      • InputContext
      • InputContextChangedEvent
      • InputContextDefinition
      • InputContextExclusivity
      • InputContextManager
      • InputContextPoppedEvent
      • InputContextPushedEvent
      • InputControlAliasEntry
      • InputControlAliasResolver
      • InputControlAliasScope
      • InputControlPathUtil
      • InputControlSchemeNode
      • InputDeviceChangedEvent
      • InputDeviceConnectedEvent
      • InputDeviceDisconnectedEvent
      • InputDeviceType
      • InputDeviceUtil
      • InputDisabledEvent
      • InputEnabledEvent
      • InputEventType
      • InputHint
      • InputHintChangedEvent
      • InputHintsManager
      • InputIconSet
      • InputIconSet.IconMapping
      • InputIconSetChangedEvent
      • InputInteractionKind
      • InputInteractionResolver
      • InputInteractionSignature
      • InputJSONMember
      • InputJSONNode
      • InputJSONNodeReader
      • InputJSONNodeType
      • InputJSONNodeWriter
      • InputLoggingSettings
      • InputMapMetadata
      • InputMetadataRebindabilityProvider
      • InputMetadataReconciler
      • InputMetadataRecordKind
      • InputModifierMetadataUtil
      • InputOrphanRecord
      • InputRebindCancelledEvent
      • InputRebindCompletedEvent
      • InputRebindManager
      • InputRebindOperation
      • InputRebindStartedEvent
      • InputRebindUtils
      • InputRebindability
      • InputReconcileAction
      • InputReconcileOptions
      • InputReconcileReport
      • InputReconcileReport.Entry
      • InputSchemeDeviceNode
      • InputSchemeMetadata
      • JSONFileBindingStorage
      • ManagedRebindCancelledEvent
      • ManagedRebindCompletedEvent
      • ManagedRebindDataRefreshedEvent
      • ManagedRebindStartedEvent
      • PlayerPrefsBindingStorage
      • RebindMode
      • RebindSettings
      • ScyllaInput
      • ScyllaInput.Meta
      • ScyllaInputAction
      • ScyllaInputActionMap
      • ScyllaInputActionsMetadata
      • ScyllaInputActionsMetadataMigrator
      • ScyllaInputBinding
      • ScyllaInputConfiguration
      • ScyllaInputContextConfiguration
      • ScyllaKey
      • ScyllaKeyConverter
      • ScyllaModifier
      • UnityInputSystemBridge
    • Scylla.Input.Editor
      • DeviceStatusWidget
      • IconMappingDrawer
      • InputIconSetEditor
      • ScyllaInputActionsMetadataEditor
      • ScyllaInputConfigurationEditor
      • ScyllaInputContextConfigurationEditor
      • ScyllaInputDependencyProvider
      • ScyllaInputEditor
      • ScyllaInputGameProfile
      • ScyllaInputGameProfiles
      • ScyllaInputMenuItems
      • ScyllaInputWizard

    Struct InputConflictPolicy

    Which of the conflict rules apply, and how paths are compared.

    Inherited Members
    ValueType.Equals(object)
    ValueType.GetHashCode()
    ValueType.ToString()
    object.Equals(object, object)
    object.GetType()
    object.ReferenceEquals(object, object)
    Namespace: Scylla.Input
    Assembly: ScyllaInput.dll
    Syntax
    public readonly struct InputConflictPolicy
    Remarks

    Two callers in the framework ask overlapping but different questions. A rebinding table asks which bindings could fire together given the game's declared layout, and applies every rule. A live path lookup asks only which actions currently sit on a control, matches case-insensitively, and excludes the querying action outright rather than just its own row.

    Expressing that as a policy keeps one engine. The alternative was either changing one caller's long-standing semantics or keeping a second copy of the rules, and a second copy is exactly what this engine exists to eliminate.

    Constructors

    InputConflictPolicy(StringComparison, bool, bool, bool, bool, bool, bool, bool)

    Initializes a policy. Prefer RebindTable or LiveBindingLookup; a third combination should be a named preset here rather than an inline construction at the call site.

    Declaration
    public InputConflictPolicy(StringComparison pathComparison, bool requireRegisteredScheme, bool scopeByDeviceClass, bool scopeByModifierDepth, bool scopeByModifierComposite, bool excludeWholeQueryAction, bool scopeByInteraction = false, bool scopeByScheme = false)
    Parameters
    Type Name Description
    StringComparison pathComparison

    How control paths are compared.

    bool requireRegisteredScheme

    Whether undeclared columns are invisible.

    bool scopeByDeviceClass

    Whether device class exempts a pair.

    bool scopeByModifierDepth

    Whether modifier depth exempts a pair.

    bool scopeByModifierComposite

    Whether differing modifiers exempt a pair.

    bool excludeWholeQueryAction

    Whether the whole querying action is excluded.

    bool scopeByInteraction

    Whether provably disjoint interactions are exempt.

    bool scopeByScheme

    Whether bindings sharing no control scheme are exempt.

    Fields

    ExcludeWholeQueryAction

    Whether every binding of the querying action is excluded, rather than only the queried binding and its same-named siblings.

    Declaration
    public readonly bool ExcludeWholeQueryAction
    Field Value
    Type Description
    bool

    PathComparison

    How control paths are compared for equality.

    Declaration
    public readonly StringComparison PathComparison
    Field Value
    Type Description
    StringComparison

    RequireRegisteredScheme

    Whether a binding outside the declared columns is invisible.

    Declaration
    public readonly bool RequireRegisteredScheme
    Field Value
    Type Description
    bool

    ScopeByDeviceClass

    Whether bindings on different device classes are exempt.

    Declaration
    public readonly bool ScopeByDeviceClass
    Field Value
    Type Description
    bool

    ScopeByInteraction

    Whether bindings whose interactions cannot both perform from one gesture are exempt.

    Declaration
    public readonly bool ScopeByInteraction
    Field Value
    Type Description
    bool
    Remarks

    On under both presets, which is only honest because every record producer fills InteractionSignature with real data. It is not in the set of fields the live lookup leaves neutral; see the remarks on InputConflictRecordBuilder.BuildLiveLookupCandidate for why that distinction is the whole reason this rule can be on there.

    ScopeByModifierComposite

    Whether modifier composite parts under different modifiers are exempt.

    Declaration
    public readonly bool ScopeByModifierComposite
    Field Value
    Type Description
    bool

    ScopeByModifierDepth

    Whether bindings at different modifier depths are exempt.

    Declaration
    public readonly bool ScopeByModifierDepth
    Field Value
    Type Description
    bool

    ScopeByScheme

    Whether bindings that name no control scheme in common are exempt.

    Declaration
    public readonly bool ScopeByScheme
    Field Value
    Type Description
    bool
    Remarks

    Off in both presets, and deliberately unlike ScopeByInteraction: this one is not a property of the question being asked but of the asset being asked about. Whether two schemes are mutually exclusive depends on whether anything applies a binding mask at run time, which differs per project and per asset, so a preset cannot honestly answer it. Callers derive a policy with WithSchemeExclusivity(bool) from whatever they know.

    A binding naming no scheme at all is never exempt under this rule. It is live under every mask, which is Unity's own behaviour: the resolver matches a binding against the mask with EmptyGroupMatchesAny.

    Properties

    LiveBindingLookup

    The live path lookup's rules: path equality and scope only, compared case-insensitively, with every binding of the querying action excluded.

    Declaration
    public static InputConflictPolicy LiveBindingLookup { get; }
    Property Value
    Type Description
    InputConflictPolicy

    RebindTable

    The rebinding table's rules: every documented rule, ordinal path comparison, and only the queried binding's own semantic slot excluded.

    Declaration
    public static InputConflictPolicy RebindTable { get; }
    Property Value
    Type Description
    InputConflictPolicy

    SupportsPathBucketing

    Gets whether a path-bucket index can stand in for a full scan under this policy.

    Declaration
    public bool SupportsPathBucketing { get; }
    Property Value
    Type Description
    bool
    Remarks

    The bucket index groups records by an ordinal case-insensitive key. That is a superset of what either ordinal comparison would match, so it is safe for both: extra candidates get rejected by the path test exactly as they would have been in a full scan.

    A culture-sensitive or linguistic comparison can consider two strings equal that differ under the index's key, which would make the bucket a strict subset and lose real conflicts. Rather than assume no such policy will ever exist, the engine falls back to the linear scan, so an unsupported comparison costs speed rather than correctness.

    Methods

    WithSchemeExclusivity(bool)

    Returns this policy with ScopeByScheme set as given.

    Declaration
    public InputConflictPolicy WithSchemeExclusivity(bool scopeByScheme)
    Parameters
    Type Name Description
    bool scopeByScheme

    Whether bindings sharing no control scheme are exempt.

    Returns
    Type Description
    InputConflictPolicy

    A copy differing only in that flag.

    Remarks

    The one rule a caller is expected to vary, because it is answered per asset rather than per question. Starting from a preset and deriving keeps the presets the single statement of what each caller's other rules are, so a rule added to a preset later reaches every derived policy without anyone remembering to copy it.

    In this article
    Back to top Scylla Framework - Input Module API Documentation