├── .gitattributes ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .images ├── add-variable-instancer.gif ├── assign-variable-instancer.gif ├── balloon-animated.gif ├── balloon-event-inspector.png ├── balloon-inspector.png ├── balloon-play-inspector.gif ├── balloon-pops.gif ├── balloon-variable.png ├── choose-variable-type.png ├── clamped-float-inspector.png ├── clamped-int-implicit-conversion.gif ├── create-scriptable-event.png ├── create-variable.png ├── drop-event-on-timeline.gif ├── enable-stack-trace-button.png ├── enemies-in-set.png ├── enemies-inspector-edit-mode.png ├── ext-event-named-argument.png ├── listeners-list.png ├── named-argument-example.png ├── pop-balloon-event.gif ├── reference-inspector.png ├── right-context-menu.png ├── scriptable-event-inspector.png ├── scriptable-event-listener-add.png ├── scriptable-event-listener-choose-type.png ├── scriptable-event-listener-variable-history.png ├── scriptable-event-listener-variable.png ├── scriptable-signal-relayer.png ├── stack-trace-inspector.png ├── stack-trace-project-settings.png ├── timeline-context-menu.png ├── variable-enable-initial-value.png └── variable-with-history-previous-field.gif ├── .releaserc.json ├── CHANGELOG.md ├── CHANGELOG.md.meta ├── Editor.meta ├── Editor ├── AssemblyInfo.cs ├── AssemblyInfo.cs.meta ├── ClampedDrawers.meta ├── ClampedDrawers │ ├── ClampedFloatDrawer.cs │ ├── ClampedFloatDrawer.cs.meta │ ├── ClampedIntDrawer.cs │ ├── ClampedIntDrawer.cs.meta │ ├── ClampedStructDrawer.cs │ └── ClampedStructDrawer.cs.meta ├── EasyButtons.meta ├── EasyButtons │ ├── Button.cs │ ├── Button.cs.meta │ ├── ButtonWithParams.cs │ ├── ButtonWithParams.cs.meta │ ├── ButtonWithoutParams.cs │ ├── ButtonWithoutParams.cs.meta │ ├── LICENSE.txt │ ├── LICENSE.txt.meta │ ├── NonSerializedError.cs │ ├── NonSerializedError.cs.meta │ ├── README.txt │ ├── README.txt.meta │ ├── Utils.meta │ └── Utils │ │ ├── DrawUtility.cs │ │ ├── DrawUtility.cs.meta │ │ ├── ScriptableObjectCache.cs │ │ ├── ScriptableObjectCache.cs.meta │ │ ├── StringExtensions.cs │ │ └── StringExtensions.cs.meta ├── GeneratedComponentsDebugDrawer.cs ├── GeneratedComponentsDebugDrawer.cs.meta ├── GenericScriptableArchitecture.Editor.asmdef ├── GenericScriptableArchitecture.Editor.asmdef.meta ├── InlineEditorCache.cs ├── InlineEditorCache.cs.meta ├── InspectorGUIHelper.cs ├── InspectorGUIHelper.cs.meta ├── MultiValueDrawer.cs ├── MultiValueDrawer.cs.meta ├── ReferenceDrawer.cs ├── ReferenceDrawer.cs.meta ├── Resources.meta ├── Resources │ ├── LICENSE │ ├── LICENSE.meta │ ├── generic-scriptable-architecture-constant.png │ ├── generic-scriptable-architecture-constant.png.meta │ ├── generic-scriptable-architecture-event-instancer.png │ ├── generic-scriptable-architecture-event-instancer.png.meta │ ├── generic-scriptable-architecture-event.png │ ├── generic-scriptable-architecture-event.png.meta │ ├── generic-scriptable-architecture-listener.png │ ├── generic-scriptable-architecture-listener.png.meta │ ├── generic-scriptable-architecture-runtime-set.png │ ├── generic-scriptable-architecture-runtime-set.png.meta │ ├── generic-scriptable-architecture-variable-history.png │ ├── generic-scriptable-architecture-variable-history.png.meta │ ├── generic-scriptable-architecture-variable-instancer-history.png │ ├── generic-scriptable-architecture-variable-instancer-history.png.meta │ ├── generic-scriptable-architecture-variable-instancer.png │ ├── generic-scriptable-architecture-variable-instancer.png.meta │ ├── generic-scriptable-architecture-variable.png │ └── generic-scriptable-architecture-variable.png.meta ├── RuntimeSetEditor.cs ├── RuntimeSetEditor.cs.meta ├── ScriptableArchitectureDrawers.cs ├── ScriptableArchitectureDrawers.cs.meta ├── ScriptableEventListenerEditor.cs ├── ScriptableEventListenerEditor.cs.meta ├── ScriptableEvents.meta ├── ScriptableEvents │ ├── EventInstancerEditor.cs │ ├── EventInstancerEditor.cs.meta │ ├── FoldoutList.cs │ ├── FoldoutList.cs.meta │ ├── ScriptableEventEditor.cs │ ├── ScriptableEventEditor.cs.meta │ ├── ScriptableEventHelperDrawer.cs │ └── ScriptableEventHelperDrawer.cs.meta ├── StackTrace.meta ├── StackTrace │ ├── SettingsDrawer.cs │ ├── SettingsDrawer.cs.meta │ ├── StackTraceDrawer.cs │ ├── StackTraceDrawer.cs.meta │ ├── StackTraceSettings.cs │ └── StackTraceSettings.cs.meta ├── SymbolManager.cs ├── SymbolManager.cs.meta ├── VariableInstancerEditor.cs ├── VariableInstancerEditor.cs.meta ├── Variables.meta ├── Variables │ ├── ConstantEditor.cs │ ├── ConstantEditor.cs.meta │ ├── PlayModeUpdateHelper.cs │ ├── PlayModeUpdateHelper.cs.meta │ ├── PropertyChangeObserver.cs │ ├── PropertyChangeObserver.cs.meta │ ├── VariableEditor.cs │ ├── VariableEditor.cs.meta │ ├── VariableHelperDrawer.cs │ ├── VariableHelperDrawer.cs.meta │ ├── VariableWithHistoryHelperDrawer.cs │ └── VariableWithHistoryHelperDrawer.cs.meta ├── WildcardScriptableEventListenerEditor.cs └── WildcardScriptableEventListenerEditor.cs.meta ├── LICENSE ├── LICENSE.meta ├── README.md ├── README.md.meta ├── Runtime.meta ├── Runtime ├── ApplicationUtil.cs ├── ApplicationUtil.cs.meta ├── AssemblyInfo.cs ├── AssemblyInfo.cs.meta ├── Config.cs ├── Config.cs.meta ├── CustomStructures.meta ├── CustomStructures │ ├── ClampedFloat.cs │ ├── ClampedFloat.cs.meta │ ├── ClampedInt.cs │ └── ClampedInt.cs.meta ├── EventHelpers.meta ├── EventHelpers │ ├── EventHelper.cs │ ├── EventHelper.cs.meta │ ├── EventHelperWithDefaultValue`1.cs │ ├── EventHelperWithDefaultValue`1.cs.meta │ ├── EventHelperWithHistory`1.cs │ ├── EventHelperWithHistory`1.cs.meta │ ├── EventHelper`1.cs │ ├── EventHelper`1.cs.meta │ ├── EventHelper`2.cs │ ├── EventHelper`2.cs.meta │ ├── EventHelper`3.cs │ ├── EventHelper`3.cs.meta │ ├── IEventHelper.cs │ ├── IEventHelper.cs.meta │ ├── IEventHelperWithDefaultValue`1.cs │ ├── IEventHelperWithDefaultValue`1.cs.meta │ ├── IEventHelper`1.cs │ ├── IEventHelper`1.cs.meta │ ├── IEventHelper`2.cs │ ├── IEventHelper`2.cs.meta │ ├── IEventHelper`3.cs │ └── IEventHelper`3.cs.meta ├── EventHolders.meta ├── EventHolders │ ├── EventHolder.cs │ ├── EventHolder.cs.meta │ ├── EventHolder`1.cs │ ├── EventHolder`1.cs.meta │ ├── EventHolder`2.cs │ ├── EventHolder`2.cs.meta │ ├── EventHolder`3.cs │ ├── EventHolder`3.cs.meta │ ├── EventType.cs │ └── EventType.cs.meta ├── EventListeners.meta ├── EventListeners │ ├── IEventListener.cs │ ├── IEventListener.cs.meta │ ├── IListener.cs │ ├── IListener.cs.meta │ ├── IMultipleEventsListener.cs │ └── IMultipleEventsListener.cs.meta ├── GenericScriptableArchitecture.asmdef ├── GenericScriptableArchitecture.asmdef.meta ├── IEvent.cs ├── IEvent.cs.meta ├── References.meta ├── References │ ├── Reference`1.cs │ └── Reference`1.cs.meta ├── RuntimeSets.meta ├── RuntimeSets │ ├── BaseRuntimeSet.cs │ ├── BaseRuntimeSet.cs.meta │ ├── RuntimeSet`1.cs │ └── RuntimeSet`1.cs.meta ├── ScriptableEventListeners.meta ├── ScriptableEventListeners │ ├── BaseScriptableEventListener.cs │ ├── BaseScriptableEventListener.cs.meta │ ├── ScriptableEventListener.cs │ ├── ScriptableEventListener.cs.meta │ ├── ScriptableEventListener`1.cs │ ├── ScriptableEventListener`1.cs.meta │ ├── ScriptableEventListener`2.cs │ ├── ScriptableEventListener`2.cs.meta │ ├── ScriptableEventListener`3.cs │ ├── ScriptableEventListener`3.cs.meta │ ├── VoidScriptableEventListener.cs │ └── VoidScriptableEventListener.cs.meta ├── ScriptableEvents.meta ├── ScriptableEvents │ ├── BaseEventInstancer.cs │ ├── BaseEventInstancer.cs.meta │ ├── BaseScriptableEvent.cs │ ├── BaseScriptableEvent.cs.meta │ ├── EventInstancer.cs │ ├── EventInstancer.cs.meta │ ├── EventInstancer`1.cs │ ├── EventInstancer`1.cs.meta │ ├── EventInstancer`2.cs │ ├── EventInstancer`2.cs.meta │ ├── EventInstancer`3.cs │ ├── EventInstancer`3.cs.meta │ ├── EventReference.cs │ ├── EventReference.cs.meta │ ├── IScriptableEvent.cs │ ├── IScriptableEvent.cs.meta │ ├── ScriptableEvent.cs │ ├── ScriptableEvent.cs.meta │ ├── ScriptableEventHelper.cs │ ├── ScriptableEventHelper.cs.meta │ ├── ScriptableEvent`1.cs │ ├── ScriptableEvent`1.cs.meta │ ├── ScriptableEvent`2.cs │ ├── ScriptableEvent`2.cs.meta │ ├── ScriptableEvent`3.cs │ └── ScriptableEvent`3.cs.meta ├── StackTrace.meta ├── StackTrace │ ├── StackCollection.cs │ ├── StackCollection.cs.meta │ ├── StackTraceEntry.cs │ ├── StackTraceEntry.cs.meta │ ├── StackTraceProvider.cs │ └── StackTraceProvider.cs.meta ├── UniRx.meta ├── UniRx │ ├── ExceptionExtensions.cs │ ├── ExceptionExtensions.cs.meta │ ├── IObserverLinkedList.cs │ ├── IObserverLinkedList.cs.meta │ ├── IReactivePropertyWithHistory.cs │ ├── IReactivePropertyWithHistory.cs.meta │ ├── ObservableHelper.cs │ ├── ObservableHelper.cs.meta │ ├── ObserverHelper.cs │ ├── ObserverHelper.cs.meta │ ├── ObserverNode.cs │ ├── ObserverNode.cs.meta │ ├── ObserverUtil.cs │ ├── ObserverUtil.cs.meta │ ├── Stubs.cs │ ├── Stubs.cs.meta │ ├── UnityEqualityComparer.cs │ └── UnityEqualityComparer.cs.meta ├── Values.meta └── Values │ ├── BaseEvent.cs │ ├── BaseEvent.cs.meta │ ├── BaseValue.cs │ ├── BaseValue.cs.meta │ ├── Constant`1.cs │ ├── Constant`1.cs.meta │ ├── SerializationHelper.cs │ ├── SerializationHelper.cs.meta │ ├── Variables.meta │ └── Variables │ ├── BaseVariable.cs │ ├── BaseVariable.cs.meta │ ├── BaseVariableInstancer.cs │ ├── BaseVariableInstancer.cs.meta │ ├── IVariable.cs │ ├── IVariable.cs.meta │ ├── IVariableWithHistory.cs │ ├── IVariableWithHistory.cs.meta │ ├── VariableHelper.cs │ ├── VariableHelper.cs.meta │ ├── VariableInstancerWithHistory.cs │ ├── VariableInstancerWithHistory.cs.meta │ ├── VariableInstancer`1.cs │ ├── VariableInstancer`1.cs.meta │ ├── VariableWithHistory`1.cs │ ├── VariableWithHistory`1.cs.meta │ ├── Variable`1.cs │ └── Variable`1.cs.meta ├── Tests.meta ├── Tests ├── Editor.meta └── Editor │ ├── GenericScriptableArchitecture.EditorTests.asmdef │ ├── GenericScriptableArchitecture.EditorTests.asmdef.meta │ ├── ReferenceEquality.cs │ ├── ReferenceEquality.cs.meta │ ├── ReferenceValueEquality.cs │ ├── ReferenceValueEquality.cs.meta │ ├── VariableEquality.cs │ └── VariableEquality.cs.meta ├── Timeline.meta ├── Timeline ├── .TimelineInternals │ ├── .idea │ │ └── .idea.TimelineInternals │ │ │ └── .idea │ │ │ ├── .gitignore │ │ │ ├── .name │ │ │ ├── encodings.xml │ │ │ ├── indexLayout.xml │ │ │ ├── projectSettingsUpdater.xml │ │ │ └── vcs.xml │ ├── TimelineInternals.sln │ └── TimelineInternals │ │ ├── AssemblyInfo.cs │ │ ├── Properties │ │ └── AssemblyInfo.cs │ │ ├── TimeFieldAttribute.cs │ │ └── TimelineInternals.csproj ├── Editor.meta ├── Editor │ ├── EmitterGenerator.cs │ ├── EmitterGenerator.cs.meta │ ├── GenericScriptableArchitecture.Timeline.Editor.asmdef │ ├── GenericScriptableArchitecture.Timeline.Editor.asmdef.meta │ ├── OneEventCreator.cs │ ├── OneEventCreator.cs.meta │ ├── ScriptableEventCreator.cs │ ├── ScriptableEventCreator.cs.meta │ ├── ThreeEventsCreator.cs │ ├── ThreeEventsCreator.cs.meta │ ├── TwoEventsCreator.cs │ ├── TwoEventsCreator.cs.meta │ ├── VoidEventCreator.cs │ └── VoidEventCreator.cs.meta ├── Runtime.meta ├── Runtime │ ├── GenericScriptableArchitecture.Timeline.asmdef │ ├── GenericScriptableArchitecture.Timeline.asmdef.meta │ ├── ScriptableEventEmitters.meta │ └── ScriptableEventEmitters │ │ ├── BaseScriptableEventEmitter.cs │ │ ├── BaseScriptableEventEmitter.cs.meta │ │ ├── ScriptableEventEmitter.cs │ │ ├── ScriptableEventEmitter.cs.meta │ │ ├── ScriptableEventEmitter`1.cs │ │ ├── ScriptableEventEmitter`1.cs.meta │ │ ├── ScriptableEventEmitter`2.cs │ │ ├── ScriptableEventEmitter`2.cs.meta │ │ ├── ScriptableEventEmitter`3.cs │ │ ├── ScriptableEventEmitter`3.cs.meta │ │ ├── ScriptableSignalRelayer.cs │ │ └── ScriptableSignalRelayer.cs.meta ├── TimelineInternals.dll └── TimelineInternals.dll.meta ├── package.json └── package.json.meta /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: 5 | - main 6 | jobs: 7 | release: 8 | name: release 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | with: 13 | fetch-depth: 0 14 | - name: Release 15 | uses: cycjimmy/semantic-release-action@v2 16 | with: 17 | extra_plugins: | 18 | @semantic-release/changelog 19 | @semantic-release/git 20 | branch: main 21 | env: 22 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Derived From: 2 | # http://kleber-swf.com/the-definitive-gitignore-for-unity-projects/ 3 | 4 | # ======= # 5 | # Private # 6 | # ======= # 7 | _private/ 8 | Release/ 9 | /Help/ 10 | *.shfbproj_* 11 | 12 | /Assets/Zenject/Extras 13 | 14 | # =============== # 15 | # Unity generated # 16 | # =============== # 17 | Temp/ 18 | Obj/ 19 | UnityGenerated/ 20 | Library/ 21 | 22 | # ============ # 23 | # OS generated # 24 | # ============ # 25 | .DS_Store 26 | .DS_Store? 27 | ._* 28 | .Spotlight-V100 29 | .Trashes 30 | Icon? 31 | ehthumbs.db 32 | Thumbs.db 33 | 34 | # Common IntelliJ Platform excludes 35 | 36 | # Jetbrain Rider Cache 37 | # User specific 38 | **/.idea/**/workspace.xml 39 | **/.idea/**/tasks.xml 40 | **/.idea/shelf/* 41 | **/.idea/dictionaries 42 | **/.idea/httpRequests/ 43 | 44 | # Sensitive or high-churn files 45 | **/.idea/**/dataSources/ 46 | **/.idea/**/dataSources.ids 47 | **/.idea/**/dataSources.xml 48 | **/.idea/**/dataSources.local.xml 49 | **/.idea/**/sqlDataSources.xml 50 | **/.idea/**/dynamic.xml 51 | 52 | # Rider 53 | # Rider auto-generates .iml files, and contentModel.xml 54 | **/.idea/**/*.iml 55 | **/.idea/**/contentModel.xml 56 | **/.idea/**/modules.xml 57 | 58 | *.suo 59 | *.user 60 | .vs/ 61 | [Bb]in/ 62 | [Oo]bj/ 63 | _UpgradeReport_Files/ 64 | [Pp]ackages/ 65 | 66 | Thumbs.db 67 | Desktop.ini 68 | .DS_Store 69 | 70 | # The file being generated in root directory instead of obj/debug https://github.com/dotnet/roslyn/issues/48430 71 | *.GeneratedMSBuildEditorConfig.editorconfig 72 | 73 | *.csproj.DotSettings -------------------------------------------------------------------------------- /.images/add-variable-instancer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/add-variable-instancer.gif -------------------------------------------------------------------------------- /.images/assign-variable-instancer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/assign-variable-instancer.gif -------------------------------------------------------------------------------- /.images/balloon-animated.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/balloon-animated.gif -------------------------------------------------------------------------------- /.images/balloon-event-inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/balloon-event-inspector.png -------------------------------------------------------------------------------- /.images/balloon-inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/balloon-inspector.png -------------------------------------------------------------------------------- /.images/balloon-play-inspector.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/balloon-play-inspector.gif -------------------------------------------------------------------------------- /.images/balloon-pops.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/balloon-pops.gif -------------------------------------------------------------------------------- /.images/balloon-variable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/balloon-variable.png -------------------------------------------------------------------------------- /.images/choose-variable-type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/choose-variable-type.png -------------------------------------------------------------------------------- /.images/clamped-float-inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/clamped-float-inspector.png -------------------------------------------------------------------------------- /.images/clamped-int-implicit-conversion.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/clamped-int-implicit-conversion.gif -------------------------------------------------------------------------------- /.images/create-scriptable-event.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/create-scriptable-event.png -------------------------------------------------------------------------------- /.images/create-variable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/create-variable.png -------------------------------------------------------------------------------- /.images/drop-event-on-timeline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/drop-event-on-timeline.gif -------------------------------------------------------------------------------- /.images/enable-stack-trace-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/enable-stack-trace-button.png -------------------------------------------------------------------------------- /.images/enemies-in-set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/enemies-in-set.png -------------------------------------------------------------------------------- /.images/enemies-inspector-edit-mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/enemies-inspector-edit-mode.png -------------------------------------------------------------------------------- /.images/ext-event-named-argument.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/ext-event-named-argument.png -------------------------------------------------------------------------------- /.images/listeners-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/listeners-list.png -------------------------------------------------------------------------------- /.images/named-argument-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/named-argument-example.png -------------------------------------------------------------------------------- /.images/pop-balloon-event.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/pop-balloon-event.gif -------------------------------------------------------------------------------- /.images/reference-inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/reference-inspector.png -------------------------------------------------------------------------------- /.images/right-context-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/right-context-menu.png -------------------------------------------------------------------------------- /.images/scriptable-event-inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/scriptable-event-inspector.png -------------------------------------------------------------------------------- /.images/scriptable-event-listener-add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/scriptable-event-listener-add.png -------------------------------------------------------------------------------- /.images/scriptable-event-listener-choose-type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/scriptable-event-listener-choose-type.png -------------------------------------------------------------------------------- /.images/scriptable-event-listener-variable-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/scriptable-event-listener-variable-history.png -------------------------------------------------------------------------------- /.images/scriptable-event-listener-variable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/scriptable-event-listener-variable.png -------------------------------------------------------------------------------- /.images/scriptable-signal-relayer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/scriptable-signal-relayer.png -------------------------------------------------------------------------------- /.images/stack-trace-inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/stack-trace-inspector.png -------------------------------------------------------------------------------- /.images/stack-trace-project-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/stack-trace-project-settings.png -------------------------------------------------------------------------------- /.images/timeline-context-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/timeline-context-menu.png -------------------------------------------------------------------------------- /.images/variable-enable-initial-value.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/variable-enable-initial-value.png -------------------------------------------------------------------------------- /.images/variable-with-history-previous-field.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/.images/variable-with-history-previous-field.gif -------------------------------------------------------------------------------- /.releaserc.json: -------------------------------------------------------------------------------- 1 | { 2 | "tagFormat": "${version}", 3 | "plugins": [ 4 | ["@semantic-release/commit-analyzer", { "preset": "angular" }], 5 | "@semantic-release/release-notes-generator", 6 | ["@semantic-release/changelog", { "preset": "angular" }], 7 | ["@semantic-release/npm", { "npmPublish": false }], 8 | ["@semantic-release/git", { 9 | "assets": ["package.json", "CHANGELOG.md"], 10 | "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" 11 | }], 12 | "@semantic-release/github" 13 | ] 14 | } -------------------------------------------------------------------------------- /CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9f9454b0ecf37d547b9123fee3b8f8b1 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2ee8f368481a46359807e57d9a5deae1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("GenericScriptableArchitecture.Editor")] -------------------------------------------------------------------------------- /Editor/AssemblyInfo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e78da5b563c447aa946aefdf67d1d9d 3 | timeCreated: 1613824805 -------------------------------------------------------------------------------- /Editor/ClampedDrawers.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 080800ba28fd4892ad69d1bea7ef3b95 3 | timeCreated: 1627123181 -------------------------------------------------------------------------------- /Editor/ClampedDrawers/ClampedFloatDrawer.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Editor 2 | { 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | [CustomPropertyDrawer(typeof(ClampedFloat))] 7 | internal class ClampedFloatDrawer : ClampedStructDrawer 8 | { 9 | private const float InspectorMinFloat = 0.00001f; 10 | 11 | protected override void DrawSlider(Rect valueRect) 12 | { 13 | EditorGUI.Slider(valueRect, ValueProperty, MinProperty.floatValue, MaxProperty.floatValue, GUIContent.none); 14 | } 15 | 16 | protected override void LimitMinValueIfNeeded() 17 | { 18 | float maxAllowedValue = MaxProperty.floatValue - InspectorMinFloat; 19 | 20 | if (MinProperty.floatValue > maxAllowedValue) 21 | MinProperty.floatValue = maxAllowedValue; 22 | } 23 | 24 | protected override void LimitMaxValueIfNeeded() 25 | { 26 | float minAllowedValue = MinProperty.floatValue + InspectorMinFloat; 27 | 28 | if (MaxProperty.floatValue < minAllowedValue) 29 | MaxProperty.floatValue = minAllowedValue; 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /Editor/ClampedDrawers/ClampedFloatDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 74b58a4d24ff4be8b3cb9a010102672b 3 | timeCreated: 1619546929 -------------------------------------------------------------------------------- /Editor/ClampedDrawers/ClampedIntDrawer.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Editor 2 | { 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | [CustomPropertyDrawer(typeof(ClampedInt))] 7 | internal class ClampedIntDrawer : ClampedStructDrawer 8 | { 9 | protected override void DrawSlider(Rect valueRect) 10 | { 11 | EditorGUI.IntSlider(valueRect, ValueProperty, MinProperty.intValue, MaxProperty.intValue, GUIContent.none); 12 | } 13 | 14 | protected override void LimitMinValueIfNeeded() 15 | { 16 | int maxAllowedValue = MaxProperty.intValue - 1; 17 | 18 | if (MinProperty.intValue > maxAllowedValue) 19 | MinProperty.intValue = maxAllowedValue; 20 | } 21 | 22 | protected override void LimitMaxValueIfNeeded() 23 | { 24 | int minAllowedValue = MinProperty.intValue + 1; 25 | 26 | if (MaxProperty.intValue < minAllowedValue) 27 | MaxProperty.intValue = minAllowedValue; 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /Editor/ClampedDrawers/ClampedIntDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8c29d7b65105473f9d84d2c4939119ed 3 | timeCreated: 1619365454 -------------------------------------------------------------------------------- /Editor/ClampedDrawers/ClampedStructDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b6e9d85798764e3c8afaaa88e6f493f5 3 | timeCreated: 1619546758 -------------------------------------------------------------------------------- /Editor/EasyButtons.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2eb59dfc265bac64590ff150f231551b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/EasyButtons/Button.cs: -------------------------------------------------------------------------------- 1 | namespace EasyButtons.Editor 2 | { 3 | using System; 4 | using System.Reflection; 5 | using JetBrains.Annotations; 6 | using UnityEditor; 7 | using Utils; 8 | using System.Collections.Generic; 9 | using System.Linq; 10 | using UnityEngine.Assertions; 11 | 12 | /// 13 | /// A class that holds information about a button and can draw it in the inspector. 14 | /// 15 | public abstract class Button 16 | { 17 | /// Display name of the button. 18 | [PublicAPI] public readonly string DisplayName; 19 | 20 | /// MethodInfo object the button is attached to. 21 | [PublicAPI] public readonly MethodInfo Method; 22 | 23 | protected Button(MethodInfo method) 24 | { 25 | DisplayName = ObjectNames.NicifyVariableName(method.Name); 26 | Method = method; 27 | } 28 | 29 | public void Draw(IEnumerable targets) 30 | { 31 | using (new EditorGUI.DisabledScope(!EditorApplication.isPlaying)) 32 | { 33 | DrawInternal(targets); 34 | } 35 | } 36 | 37 | public static Button Create(MethodInfo method, Func[] getCustomArgNames) 38 | { 39 | var parameters = method.GetParameters(); 40 | 41 | if (parameters.Length == 0) 42 | return new ButtonWithoutParams(method); 43 | 44 | if (getCustomArgNames != null) 45 | Assert.AreEqual(parameters.Length, getCustomArgNames.Length); 46 | 47 | var paramDatas = new (ParameterInfo, Func)[parameters.Length]; 48 | 49 | for (int i = 0; i < paramDatas.Length; i++) 50 | { 51 | paramDatas[i] = (parameters[i], getCustomArgNames?[i]); 52 | } 53 | 54 | return new ButtonWithParams(method, paramDatas); 55 | } 56 | 57 | protected abstract void DrawInternal(IEnumerable targets); 58 | } 59 | } -------------------------------------------------------------------------------- /Editor/EasyButtons/Button.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b157d0a5cf7eaae419dcafc9843b2ce6 3 | timeCreated: 1607259837 -------------------------------------------------------------------------------- /Editor/EasyButtons/ButtonWithParams.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b1bcc7a81b2f50b4282d170f382dc054 3 | timeCreated: 1607331593 -------------------------------------------------------------------------------- /Editor/EasyButtons/ButtonWithoutParams.cs: -------------------------------------------------------------------------------- 1 | namespace EasyButtons.Editor 2 | { 3 | using System.Reflection; 4 | using UnityEngine; 5 | using System.Collections.Generic; 6 | 7 | internal class ButtonWithoutParams : Button 8 | { 9 | public ButtonWithoutParams(MethodInfo method) : base(method) { } 10 | 11 | protected override void DrawInternal(IEnumerable targets) 12 | { 13 | if ( ! GUILayout.Button(DisplayName)) 14 | return; 15 | 16 | foreach (object obj in targets) 17 | { 18 | Method.Invoke(obj, null); 19 | } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /Editor/EasyButtons/ButtonWithoutParams.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4d5f818a75442b4dbc56cfadd325e6e 3 | timeCreated: 1607331600 -------------------------------------------------------------------------------- /Editor/EasyButtons/LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Mads Bang Hoffensetz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Editor/EasyButtons/LICENSE.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4ffefe5e6c99674a98d6a73ad632940 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Editor/EasyButtons/NonSerializedError.cs: -------------------------------------------------------------------------------- 1 | namespace EasyButtons.Editor 2 | { 3 | using System; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | [Serializable] 8 | internal class NonSerializedError { } 9 | 10 | [CustomPropertyDrawer(typeof(NonSerializedError))] 11 | internal class NonSerializedErrorDrawer : PropertyDrawer 12 | { 13 | public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label) 14 | { 15 | Rect rectWithoutLabel = EditorGUI.PrefixLabel(rect, label); 16 | 17 | EditorGUI.HelpBox(rectWithoutLabel, "Unable to draw a non-serialized type.", MessageType.Error); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /Editor/EasyButtons/NonSerializedError.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f4f622dc37dd29c438f539b9eb2ac023 3 | timeCreated: 1607338452 -------------------------------------------------------------------------------- /Editor/EasyButtons/README.txt: -------------------------------------------------------------------------------- 1 | This is a stripped-down and slightly modified version of the EasyButtons package from madsbangh https://github.com/madsbangh/EasyButtons/ -------------------------------------------------------------------------------- /Editor/EasyButtons/README.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b7915371cb7534745a485cebf5129fa2 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Editor/EasyButtons/Utils.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4c4eba062006ea741a2c1f7dd2decfd8 3 | timeCreated: 1607333184 -------------------------------------------------------------------------------- /Editor/EasyButtons/Utils/DrawUtility.cs: -------------------------------------------------------------------------------- 1 | namespace EasyButtons.Editor.Utils 2 | { 3 | using System; 4 | using SolidUtilities.Editor; 5 | using UnityEditor; 6 | using UnityEngine; 7 | 8 | /// 9 | /// A set of methods that simplify drawing of button controls. 10 | /// 11 | internal static class DrawUtility 12 | { 13 | public static bool DrawInFoldout(Rect foldoutRect, bool expanded, string header, Action drawStuff) 14 | { 15 | expanded = EditorGUI.BeginFoldoutHeaderGroup(foldoutRect, expanded, header); 16 | 17 | if (expanded) 18 | { 19 | EditorGUI.indentLevel++; 20 | drawStuff(); 21 | EditorGUI.indentLevel--; 22 | } 23 | 24 | EditorGUILayout.EndFoldoutHeaderGroup(); 25 | 26 | return expanded; 27 | } 28 | 29 | public static (Rect foldoutRect, Rect buttonRect) GetFoldoutAndButtonRects(string header) 30 | { 31 | const float buttonWidth = 60f; 32 | 33 | Rect foldoutWithoutButton = GUILayoutUtility.GetRect(GUIContentHelper.Temp(header), EditorStyles.foldoutHeader); 34 | 35 | var foldoutRect = new Rect( 36 | foldoutWithoutButton.x, 37 | foldoutWithoutButton.y, 38 | foldoutWithoutButton.width - buttonWidth, 39 | foldoutWithoutButton.height); 40 | 41 | var buttonRect = new Rect( 42 | foldoutWithoutButton.xMax - buttonWidth, 43 | foldoutWithoutButton.y, 44 | buttonWidth, 45 | foldoutWithoutButton.height); 46 | 47 | return (foldoutRect, buttonRect); 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /Editor/EasyButtons/Utils/DrawUtility.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 18567b0458591664eab308cc86b5fe3e 3 | timeCreated: 1607330049 -------------------------------------------------------------------------------- /Editor/EasyButtons/Utils/ScriptableObjectCache.cs: -------------------------------------------------------------------------------- 1 | namespace EasyButtons.Editor.Utils 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Configuration.Assemblies; 6 | using System.Globalization; 7 | using System.Reflection; 8 | using System.Reflection.Emit; 9 | using SolidUtilities; 10 | using UnityEngine; 11 | using UnityEngine.Assertions; 12 | 13 | internal static class ScriptableObjectCache 14 | { 15 | private const string AssemblyName = "EasyButtons.DynamicAssembly"; 16 | 17 | private static readonly AssemblyBuilder _assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly( 18 | new AssemblyName(AssemblyName) 19 | { 20 | CultureInfo = CultureInfo.InvariantCulture, 21 | Flags = AssemblyNameFlags.None, 22 | ProcessorArchitecture = ProcessorArchitecture.MSIL, 23 | VersionCompatibility = AssemblyVersionCompatibility.SameDomain 24 | }, AssemblyBuilderAccess.Run); 25 | 26 | private static readonly ModuleBuilder _moduleBuilder = _assemblyBuilder.DefineDynamicModule(AssemblyName, true); 27 | 28 | private static readonly Dictionary _classDict = new Dictionary(); 29 | 30 | public static Type GetClass(string fieldName, Type fieldType) 31 | { 32 | string className = GetClassName(fieldName, fieldType); 33 | 34 | if (_classDict.TryGetValue(className, out Type classType)) 35 | return classType; 36 | 37 | if ( ! fieldType.IsUnitySerializable()) 38 | { 39 | fieldType = typeof(NonSerializedError); 40 | } 41 | 42 | classType = CreateClass(className, fieldName, fieldType); 43 | _classDict[className] = classType; 44 | return classType; 45 | } 46 | 47 | private static Type CreateClass(string className, string fieldName, Type fieldType) 48 | { 49 | TypeBuilder typeBuilder = _moduleBuilder.DefineType( 50 | $"{AssemblyName}.{className}", 51 | TypeAttributes.NotPublic, 52 | typeof(ScriptableObject)); 53 | 54 | typeBuilder.DefineField(fieldName, fieldType, FieldAttributes.Public); 55 | Type type = typeBuilder.CreateType(); 56 | return type; 57 | } 58 | 59 | private static string GetClassName(string fieldName, Type fieldType) 60 | { 61 | string fullTypeName = fieldType.FullName; 62 | 63 | Assert.IsNotNull(fullTypeName); 64 | 65 | string classSafeTypeName = fullTypeName 66 | .Replace('.', '_') 67 | .Replace('`', '_'); 68 | 69 | return $"{classSafeTypeName}_{fieldName}".CapitalizeFirstChar(); 70 | } 71 | } 72 | } -------------------------------------------------------------------------------- /Editor/EasyButtons/Utils/ScriptableObjectCache.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a8e2456d89fa19b47b18e572c649fa60 3 | timeCreated: 1607173249 -------------------------------------------------------------------------------- /Editor/EasyButtons/Utils/StringExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace EasyButtons.Editor.Utils 2 | { 3 | using System; 4 | 5 | internal static class StringExtensions 6 | { 7 | public static string CapitalizeFirstChar(this string input) 8 | { 9 | if (input == null) 10 | throw new ArgumentNullException(nameof(input)); 11 | 12 | char firstChar = input[0]; 13 | 14 | if (char.IsUpper(firstChar)) 15 | return input; 16 | 17 | var chars = input.ToCharArray(); 18 | chars[0] = char.ToUpper(firstChar); 19 | return new string(chars); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /Editor/EasyButtons/Utils/StringExtensions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0626b96b35f9a8d4f93c9170cf1453c9 3 | timeCreated: 1607174721 -------------------------------------------------------------------------------- /Editor/GeneratedComponentsDebugDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a2f7302a49484b2b8d962e0242252889 3 | timeCreated: 1657039885 -------------------------------------------------------------------------------- /Editor/GenericScriptableArchitecture.Editor.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GenericScriptableArchitecture.Editor", 3 | "rootNamespace": "GenericScriptableArchitecture.Editor", 4 | "references": [ 5 | "GenericScriptableArchitecture", 6 | "GenericUnityObjects.Editor", 7 | "GenericUnityObjects", 8 | "SolidUtilities", 9 | "Unity.Settings.Editor", 10 | "TypeReferences", 11 | "ExtEvents", 12 | "ExtEvents.Editor", 13 | "SolidUtilities.Editor", 14 | "MissingScriptType.Editor" 15 | ], 16 | "includePlatforms": [ 17 | "Editor" 18 | ], 19 | "excludePlatforms": [], 20 | "allowUnsafeCode": false, 21 | "overrideReferences": true, 22 | "precompiledReferences": [ 23 | "GenericUnityEditorInternals.dll", 24 | "UnityEngineInternals.dll", 25 | "UnityEditorInternals.dll", 26 | "Sirenix.OdinInspector.Editor.dll" 27 | ], 28 | "autoReferenced": true, 29 | "defineConstraints": [], 30 | "versionDefines": [ 31 | { 32 | "name": "com.unity.timeline", 33 | "expression": "", 34 | "define": "USE_TIMELINE" 35 | }, 36 | { 37 | "name": "com.solidalloy.missing-script-type", 38 | "expression": "", 39 | "define": "MISSING_SCRIPT_TYPE" 40 | } 41 | ], 42 | "noEngineReferences": false 43 | } -------------------------------------------------------------------------------- /Editor/GenericScriptableArchitecture.Editor.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 89293aba0a5728146a9a7ab462b5f44c 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Editor/InlineEditorCache.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 926efad1ed114cf6a08706e458e6e311 3 | timeCreated: 1657048108 -------------------------------------------------------------------------------- /Editor/InspectorGUIHelper.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Editor 2 | { 3 | using System; 4 | using UnityEditor; 5 | 6 | #if MISSING_SCRIPT_TYPE 7 | using MissingScriptType.Editor; 8 | #endif 9 | 10 | internal class InspectorGUIHelper 11 | { 12 | private readonly SerializedObject _serializedObject; 13 | 14 | #if MISSING_SCRIPT_TYPE 15 | private readonly MissingScriptTypeUtility _missingScriptTypeUtility; 16 | #endif 17 | 18 | public InspectorGUIHelper(SerializedObject serializedObject) 19 | { 20 | #if MISSING_SCRIPT_TYPE 21 | _missingScriptTypeUtility = new MissingScriptTypeUtility(serializedObject); 22 | #endif 23 | _serializedObject = serializedObject; 24 | } 25 | 26 | public Wrapper Wrap() 27 | { 28 | bool hasMissingScript = _serializedObject.targetObject == null; 29 | 30 | if (hasMissingScript) 31 | { 32 | #if MISSING_SCRIPT_TYPE 33 | _missingScriptTypeUtility.Draw(); 34 | #else 35 | using (new EditorGUI.DisabledScope(true)) 36 | { 37 | var scriptProperty = _serializedObject.FindProperty("m_Script"); 38 | 39 | if (scriptProperty != null) 40 | EditorGUILayout.PropertyField(scriptProperty); 41 | } 42 | #endif 43 | } 44 | else 45 | { 46 | _serializedObject.UpdateIfRequiredOrScript(); 47 | } 48 | 49 | return new Wrapper(_serializedObject, hasMissingScript); 50 | } 51 | 52 | public readonly struct Wrapper : IDisposable 53 | { 54 | private readonly SerializedObject _serializedObject; 55 | public readonly bool HasMissingScript; 56 | 57 | public Wrapper(SerializedObject serializedObject, bool hasMissingScript) 58 | { 59 | _serializedObject = serializedObject; 60 | HasMissingScript = hasMissingScript; 61 | } 62 | 63 | public void Dispose() 64 | { 65 | if ( ! HasMissingScript) 66 | _serializedObject.ApplyModifiedProperties(); 67 | } 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /Editor/InspectorGUIHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e27fb44599b84e37be60c767ef4eff42 3 | timeCreated: 1614524781 -------------------------------------------------------------------------------- /Editor/MultiValueDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 459f3ec2b67d46bb866b8cacaa5d84a9 3 | timeCreated: 1657523196 -------------------------------------------------------------------------------- /Editor/ReferenceDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0c86e73286814298bed6310d20c9bf40 3 | timeCreated: 1605007502 -------------------------------------------------------------------------------- /Editor/Resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c2f06774c5957e94d805a039d92aefa4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Resources/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Adam Ramberg 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /Editor/Resources/LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 709ad8e92efe6314d9faa57be326f85b 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-constant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Editor/Resources/generic-scriptable-architecture-constant.png -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-constant.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6fa72176d55ff0244be36244a3d7055b 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: -1 36 | aniso: 1 37 | mipBias: -100 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: -1 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 0 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 2 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | - serializedVersion: 3 79 | buildTarget: Standalone 80 | maxTextureSize: 2048 81 | resizeAlgorithm: 0 82 | textureFormat: -1 83 | textureCompression: 1 84 | compressionQuality: 50 85 | crunchedCompression: 0 86 | allowsAlphaSplitting: 0 87 | overridden: 0 88 | androidETC2FallbackOverride: 0 89 | forceMaximumCompressionQuality_BC6H_BC7: 0 90 | spriteSheet: 91 | serializedVersion: 2 92 | sprites: [] 93 | outline: [] 94 | physicsShape: [] 95 | bones: [] 96 | spriteID: 97 | internalID: 0 98 | vertices: [] 99 | indices: 100 | edges: [] 101 | weights: [] 102 | secondaryTextures: [] 103 | spritePackingTag: 104 | pSDRemoveMatte: 0 105 | pSDShowRemoveMatteOption: 0 106 | userData: 107 | assetBundleName: 108 | assetBundleVariant: 109 | -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-event-instancer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Editor/Resources/generic-scriptable-architecture-event-instancer.png -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-event-instancer.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e05ce97c50f7fbb4eba048c299633fd2 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 1 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 0 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 0 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | platformSettings: 67 | - serializedVersion: 3 68 | buildTarget: DefaultTexturePlatform 69 | maxTextureSize: 2048 70 | resizeAlgorithm: 0 71 | textureFormat: -1 72 | textureCompression: 1 73 | compressionQuality: 50 74 | crunchedCompression: 0 75 | allowsAlphaSplitting: 0 76 | overridden: 0 77 | androidETC2FallbackOverride: 0 78 | forceMaximumCompressionQuality_BC6H_BC7: 0 79 | spriteSheet: 80 | serializedVersion: 2 81 | sprites: [] 82 | outline: [] 83 | physicsShape: [] 84 | bones: [] 85 | spriteID: 86 | internalID: 0 87 | vertices: [] 88 | indices: 89 | edges: [] 90 | weights: [] 91 | secondaryTextures: [] 92 | nameFileIdTable: {} 93 | spritePackingTag: 94 | pSDRemoveMatte: 0 95 | pSDShowRemoveMatteOption: 0 96 | userData: 97 | assetBundleName: 98 | assetBundleVariant: 99 | -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-event.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Editor/Resources/generic-scriptable-architecture-event.png -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-event.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 17ca5715f53a56e46be444205e757da6 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: -1 36 | aniso: 1 37 | mipBias: -100 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: 1 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 1 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 2 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | - serializedVersion: 3 79 | buildTarget: Standalone 80 | maxTextureSize: 2048 81 | resizeAlgorithm: 0 82 | textureFormat: -1 83 | textureCompression: 1 84 | compressionQuality: 50 85 | crunchedCompression: 0 86 | allowsAlphaSplitting: 0 87 | overridden: 0 88 | androidETC2FallbackOverride: 0 89 | forceMaximumCompressionQuality_BC6H_BC7: 0 90 | spriteSheet: 91 | serializedVersion: 2 92 | sprites: [] 93 | outline: [] 94 | physicsShape: [] 95 | bones: [] 96 | spriteID: 5e97eb03825dee720800000000000000 97 | internalID: 0 98 | vertices: [] 99 | indices: 100 | edges: [] 101 | weights: [] 102 | secondaryTextures: [] 103 | spritePackingTag: 104 | pSDRemoveMatte: 0 105 | pSDShowRemoveMatteOption: 0 106 | userData: 107 | assetBundleName: 108 | assetBundleVariant: 109 | -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-listener.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Editor/Resources/generic-scriptable-architecture-listener.png -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-listener.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 607d165f4fdd45243bda65410fa501d3 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: -1 36 | aniso: 1 37 | mipBias: -100 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: 1 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 1 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 2 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | - serializedVersion: 3 79 | buildTarget: Standalone 80 | maxTextureSize: 2048 81 | resizeAlgorithm: 0 82 | textureFormat: -1 83 | textureCompression: 1 84 | compressionQuality: 50 85 | crunchedCompression: 0 86 | allowsAlphaSplitting: 0 87 | overridden: 0 88 | androidETC2FallbackOverride: 0 89 | forceMaximumCompressionQuality_BC6H_BC7: 0 90 | spriteSheet: 91 | serializedVersion: 2 92 | sprites: [] 93 | outline: [] 94 | physicsShape: [] 95 | bones: [] 96 | spriteID: 5e97eb03825dee720800000000000000 97 | internalID: 0 98 | vertices: [] 99 | indices: 100 | edges: [] 101 | weights: [] 102 | secondaryTextures: [] 103 | spritePackingTag: 104 | pSDRemoveMatte: 0 105 | pSDShowRemoveMatteOption: 0 106 | userData: 107 | assetBundleName: 108 | assetBundleVariant: 109 | -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-runtime-set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Editor/Resources/generic-scriptable-architecture-runtime-set.png -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-runtime-set.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9b574b5146024ed4d98d59583da0a165 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: -1 36 | aniso: 1 37 | mipBias: -100 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: -1 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 0 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 2 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | - serializedVersion: 3 79 | buildTarget: Standalone 80 | maxTextureSize: 2048 81 | resizeAlgorithm: 0 82 | textureFormat: -1 83 | textureCompression: 1 84 | compressionQuality: 50 85 | crunchedCompression: 0 86 | allowsAlphaSplitting: 0 87 | overridden: 0 88 | androidETC2FallbackOverride: 0 89 | forceMaximumCompressionQuality_BC6H_BC7: 0 90 | spriteSheet: 91 | serializedVersion: 2 92 | sprites: [] 93 | outline: [] 94 | physicsShape: [] 95 | bones: [] 96 | spriteID: 97 | internalID: 0 98 | vertices: [] 99 | indices: 100 | edges: [] 101 | weights: [] 102 | secondaryTextures: [] 103 | spritePackingTag: 104 | pSDRemoveMatte: 0 105 | pSDShowRemoveMatteOption: 0 106 | userData: 107 | assetBundleName: 108 | assetBundleVariant: 109 | -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-variable-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Editor/Resources/generic-scriptable-architecture-variable-history.png -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-variable-history.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f0d68c78b92153841b8d97a075b84cfd 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: -1 36 | aniso: 1 37 | mipBias: -100 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: -1 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 0 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 2 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | - serializedVersion: 3 79 | buildTarget: Standalone 80 | maxTextureSize: 2048 81 | resizeAlgorithm: 0 82 | textureFormat: -1 83 | textureCompression: 1 84 | compressionQuality: 50 85 | crunchedCompression: 0 86 | allowsAlphaSplitting: 0 87 | overridden: 0 88 | androidETC2FallbackOverride: 0 89 | forceMaximumCompressionQuality_BC6H_BC7: 0 90 | spriteSheet: 91 | serializedVersion: 2 92 | sprites: [] 93 | outline: [] 94 | physicsShape: [] 95 | bones: [] 96 | spriteID: 97 | internalID: 0 98 | vertices: [] 99 | indices: 100 | edges: [] 101 | weights: [] 102 | secondaryTextures: [] 103 | spritePackingTag: 104 | pSDRemoveMatte: 0 105 | pSDShowRemoveMatteOption: 0 106 | userData: 107 | assetBundleName: 108 | assetBundleVariant: 109 | -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-variable-instancer-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Editor/Resources/generic-scriptable-architecture-variable-instancer-history.png -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-variable-instancer-history.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a594c8d085ce5db409b6c63e974a034f 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 1 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 0 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 0 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | platformSettings: 67 | - serializedVersion: 3 68 | buildTarget: DefaultTexturePlatform 69 | maxTextureSize: 2048 70 | resizeAlgorithm: 0 71 | textureFormat: -1 72 | textureCompression: 1 73 | compressionQuality: 50 74 | crunchedCompression: 0 75 | allowsAlphaSplitting: 0 76 | overridden: 0 77 | androidETC2FallbackOverride: 0 78 | forceMaximumCompressionQuality_BC6H_BC7: 0 79 | spriteSheet: 80 | serializedVersion: 2 81 | sprites: [] 82 | outline: [] 83 | physicsShape: [] 84 | bones: [] 85 | spriteID: 86 | internalID: 0 87 | vertices: [] 88 | indices: 89 | edges: [] 90 | weights: [] 91 | secondaryTextures: [] 92 | nameFileIdTable: {} 93 | spritePackingTag: 94 | pSDRemoveMatte: 0 95 | pSDShowRemoveMatteOption: 0 96 | userData: 97 | assetBundleName: 98 | assetBundleVariant: 99 | -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-variable-instancer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Editor/Resources/generic-scriptable-architecture-variable-instancer.png -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-variable-instancer.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f4c0c16c6e6b2ee49b4f53eba444bedc 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 0 40 | wrapV: 0 41 | wrapW: 0 42 | nPOTScale: 1 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 0 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 0 55 | spriteTessellationDetail: -1 56 | textureType: 0 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | platformSettings: 67 | - serializedVersion: 3 68 | buildTarget: DefaultTexturePlatform 69 | maxTextureSize: 2048 70 | resizeAlgorithm: 0 71 | textureFormat: -1 72 | textureCompression: 1 73 | compressionQuality: 50 74 | crunchedCompression: 0 75 | allowsAlphaSplitting: 0 76 | overridden: 0 77 | androidETC2FallbackOverride: 0 78 | forceMaximumCompressionQuality_BC6H_BC7: 0 79 | spriteSheet: 80 | serializedVersion: 2 81 | sprites: [] 82 | outline: [] 83 | physicsShape: [] 84 | bones: [] 85 | spriteID: 86 | internalID: 0 87 | vertices: [] 88 | indices: 89 | edges: [] 90 | weights: [] 91 | secondaryTextures: [] 92 | nameFileIdTable: {} 93 | spritePackingTag: 94 | pSDRemoveMatte: 0 95 | pSDShowRemoveMatteOption: 0 96 | userData: 97 | assetBundleName: 98 | assetBundleVariant: 99 | -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-variable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Editor/Resources/generic-scriptable-architecture-variable.png -------------------------------------------------------------------------------- /Editor/Resources/generic-scriptable-architecture-variable.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 848db987547512c48b8517675d7c0c5c 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: -1 36 | aniso: 1 37 | mipBias: -100 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: 1 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 1 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 2 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | - serializedVersion: 3 79 | buildTarget: Standalone 80 | maxTextureSize: 2048 81 | resizeAlgorithm: 0 82 | textureFormat: -1 83 | textureCompression: 1 84 | compressionQuality: 50 85 | crunchedCompression: 0 86 | allowsAlphaSplitting: 0 87 | overridden: 0 88 | androidETC2FallbackOverride: 0 89 | forceMaximumCompressionQuality_BC6H_BC7: 0 90 | spriteSheet: 91 | serializedVersion: 2 92 | sprites: [] 93 | outline: [] 94 | physicsShape: [] 95 | bones: [] 96 | spriteID: 5e97eb03825dee720800000000000000 97 | internalID: 0 98 | vertices: [] 99 | indices: 100 | edges: [] 101 | weights: [] 102 | secondaryTextures: [] 103 | spritePackingTag: 104 | pSDRemoveMatte: 0 105 | pSDShowRemoveMatteOption: 0 106 | userData: 107 | assetBundleName: 108 | assetBundleVariant: 109 | -------------------------------------------------------------------------------- /Editor/RuntimeSetEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bcbeaae09c7b464a994e52f2959c3d32 3 | timeCreated: 1614523619 -------------------------------------------------------------------------------- /Editor/ScriptableArchitectureDrawers.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c9e08878adb6455b87f2c06583412ff1 3 | timeCreated: 1629537870 -------------------------------------------------------------------------------- /Editor/ScriptableEventListenerEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b69b6a09ea554a02867cff91ae5b22eb 3 | timeCreated: 1626720918 -------------------------------------------------------------------------------- /Editor/ScriptableEvents.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4f76d494e2d0470da89569d26db4869f 3 | timeCreated: 1614523589 -------------------------------------------------------------------------------- /Editor/ScriptableEvents/EventInstancerEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e6bb7312be0640c694596d94ae9cf0a2 3 | timeCreated: 1657449885 -------------------------------------------------------------------------------- /Editor/ScriptableEvents/FoldoutList.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ebeb44e82c78464388f43e83566beea8 3 | timeCreated: 1614160888 -------------------------------------------------------------------------------- /Editor/ScriptableEvents/ScriptableEventEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 27433490b1254732ba34e776094ccb3a 3 | timeCreated: 1612123025 -------------------------------------------------------------------------------- /Editor/ScriptableEvents/ScriptableEventHelperDrawer.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Editor 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using EasyButtons.Editor; 6 | using SolidUtilities.Editor; 7 | using UnityEditor; 8 | using Object = UnityEngine.Object; 9 | 10 | internal class ScriptableEventHelperDrawer 11 | { 12 | private readonly Button _methodDrawer; 13 | private readonly FoldoutList _listenersList; 14 | private readonly StackTraceDrawer _stackTrace; 15 | private readonly ScriptableEventHelper _helper; 16 | 17 | public ScriptableEventHelperDrawer(SerializedProperty helperProperty, ScriptableEventHelper helper, Action repaint, Func[] getArgNames) 18 | { 19 | _helper = helper; 20 | 21 | var responseTargetsExpanded = helperProperty.FindPropertyRelative(nameof(ScriptableEventHelper.ListenersExpanded)); 22 | _listenersList = new FoldoutList(helper.Listeners, responseTargetsExpanded, "Listeners"); 23 | 24 | _stackTrace = new StackTraceDrawer(helper.StackTrace.Entries, helperProperty.FindPropertyRelative(nameof(ScriptableEventHelper.StackTrace)), repaint); 25 | 26 | var invokeMethod = helper.GetType().GetMethod("Invoke"); 27 | _methodDrawer = Button.Create(invokeMethod, getArgNames); 28 | } 29 | 30 | public void Update() => _listenersList.Update(_helper.Listeners); 31 | 32 | public void DrawMethod(IEnumerable targets) 33 | { 34 | _methodDrawer.Draw(targets); 35 | } 36 | 37 | public void DrawStackTrace() 38 | { 39 | _stackTrace.Draw(); 40 | } 41 | 42 | public void DrawListeners() 43 | { 44 | if (ApplicationUtil.InEditMode) 45 | return; 46 | 47 | EditorGUILayout.Space(EditorGUIUtility.singleLineHeight); 48 | _listenersList.DoLayoutList(); 49 | } 50 | 51 | public static int GetGenericArgumentsCountOfType(UnityEngine.Object target) 52 | { 53 | Type targetType = target.GetType().BaseType; 54 | 55 | // ReSharper disable once PossibleNullReferenceException 56 | if (!targetType.IsGenericType) 57 | return 0; 58 | 59 | return targetType.GetGenericArguments().Length; 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /Editor/ScriptableEvents/ScriptableEventHelperDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a769551148ce49d89e714a30546e251a 3 | timeCreated: 1657386021 -------------------------------------------------------------------------------- /Editor/StackTrace.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5b2b635c35cb488c99e720c91c786d05 3 | timeCreated: 1627123157 -------------------------------------------------------------------------------- /Editor/StackTrace/SettingsDrawer.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Editor 2 | { 3 | using System.Collections.Generic; 4 | using SolidUtilities.Editor; 5 | using UnityEditor; 6 | using UnityEngine; 7 | 8 | public static class SettingsDrawer 9 | { 10 | private const string EnabledInProjectLabel = "Enable stack traces in all assets"; 11 | 12 | private static readonly GUIContent _enabledInProjectContent = new GUIContent(EnabledInProjectLabel, 13 | "This has higher priority than the disabled stack trace option on individual assets."); 14 | 15 | [SettingsProvider] 16 | public static SettingsProvider CreateSettingsProvider() 17 | { 18 | return new SettingsProvider("Project/Packages/Generic ScriptableObject Architecture", SettingsScope.Project) 19 | { 20 | guiHandler = OnGUI, 21 | keywords = GetKeywords() 22 | }; 23 | } 24 | 25 | private static void OnGUI(string searchContext) 26 | { 27 | if (StackTraceSettings.EnabledInProject) 28 | { 29 | EditorGUILayoutHelper.DrawInfoMessage( 30 | "Stack traces may affect performance of the game in editor. If possible, enable it on individual assets when they require debugging."); 31 | } 32 | 33 | using (EditorGUIUtilityHelper.LabelWidthBlock(220f)) 34 | { 35 | StackTraceSettings.EnabledInProject = EditorGUILayout.Toggle(_enabledInProjectContent, StackTraceSettings.EnabledInProject); 36 | } 37 | } 38 | 39 | private static HashSet GetKeywords() 40 | { 41 | var keywords = new HashSet(); 42 | keywords.AddWords(EnabledInProjectLabel); 43 | return keywords; 44 | } 45 | 46 | private static readonly char[] _separators = { ' ' }; 47 | 48 | private static void AddWords(this HashSet set, string phrase) 49 | { 50 | foreach (string word in phrase.Split(_separators)) 51 | { 52 | set.Add(word); 53 | } 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /Editor/StackTrace/SettingsDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bebde430d5e3405380c8d509c2298de6 3 | timeCreated: 1627124003 -------------------------------------------------------------------------------- /Editor/StackTrace/StackTraceDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0127ebd9c0bd4751aee88afc11941877 3 | timeCreated: 1624561149 -------------------------------------------------------------------------------- /Editor/StackTrace/StackTraceSettings.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Editor 2 | { 3 | using UnityEditor.SettingsManagement; 4 | 5 | internal static class StackTraceSettings 6 | { 7 | private const string PackageName = "com.solidalloy.generic-scriptable-architecture"; 8 | 9 | private static Settings _instance; 10 | 11 | private static UserSetting _enabledInProject; 12 | 13 | public static bool EnabledInProject 14 | { 15 | get 16 | { 17 | InitializeIfNeeded(); 18 | return _enabledInProject.value; 19 | } 20 | 21 | set => _enabledInProject.value = value; 22 | } 23 | 24 | private static void InitializeIfNeeded() 25 | { 26 | if (_instance != null) 27 | return; 28 | 29 | _instance = new Settings(PackageName); 30 | 31 | _enabledInProject = new UserSetting(_instance, nameof(_enabledInProject), false); 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /Editor/StackTrace/StackTraceSettings.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80e6a07cbc5947bfbc88cf1bf6952c77 3 | timeCreated: 1627123255 -------------------------------------------------------------------------------- /Editor/SymbolManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4a49721ddc44490bb7b9a421537140d3 3 | timeCreated: 1633629966 -------------------------------------------------------------------------------- /Editor/VariableInstancerEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f591c32bdeca412ab63646581ccf27fd 3 | timeCreated: 1657048278 -------------------------------------------------------------------------------- /Editor/Variables.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cea525549c524fb6a694b92e9e82d3d5 3 | timeCreated: 1614523567 -------------------------------------------------------------------------------- /Editor/Variables/ConstantEditor.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Editor 2 | { 3 | using GenericUnityObjects.Editor; 4 | using UnityEditor; 5 | 6 | [CustomEditor(typeof(BaseValue), true)] 7 | internal class ConstantEditor : Editor, IInlineDrawer 8 | { 9 | private SerializedProperty _description; 10 | private SerializedProperty _initialValue; 11 | private SerializedProperty _currentValue; 12 | private bool _initialValueEnabled; 13 | private InspectorGUIHelper _inspectorGUIHelper; 14 | 15 | private void OnEnable() 16 | { 17 | try { _inspectorGUIHelper = new InspectorGUIHelper(serializedObject); } 18 | catch { return; } 19 | 20 | if (target == null) 21 | return; 22 | 23 | _description = serializedObject.FindProperty(nameof(BaseValue._description)); 24 | _initialValue = serializedObject.FindProperty(nameof(Constant._initialValue)); 25 | _currentValue = serializedObject.FindProperty(nameof(Constant._value)); 26 | } 27 | 28 | protected override void OnHeaderGUI() 29 | { 30 | GenericHeaderUtility.OnHeaderGUI(this); 31 | } 32 | 33 | public override void OnInspectorGUI() 34 | { 35 | if (_inspectorGUIHelper == null) 36 | { 37 | base.OnInspectorGUI(); 38 | return; 39 | } 40 | 41 | using var guiWrapper = _inspectorGUIHelper.Wrap(); 42 | 43 | if (guiWrapper.HasMissingScript) 44 | return; 45 | 46 | EditorGUILayout.PropertyField(_description); 47 | 48 | _initialValueEnabled = GenericVariableEditor.DrawInitialValue(_initialValue, _initialValueEnabled); 49 | 50 | if (EditorApplication.isPlayingOrWillChangePlaymode) 51 | EditorGUILayout.PropertyField(_currentValue, VariableHelperDrawer.CurrentValueLabel); 52 | } 53 | 54 | public bool HasContent => true; 55 | 56 | public void OnInlineGUI() 57 | { 58 | if (_inspectorGUIHelper == null) 59 | { 60 | base.OnInspectorGUI(); 61 | return; 62 | } 63 | 64 | using var guiWrapper = _inspectorGUIHelper.Wrap(); 65 | 66 | if (guiWrapper.HasMissingScript) 67 | return; 68 | 69 | if (ApplicationUtil.InEditMode) 70 | { 71 | _initialValueEnabled = GenericVariableEditor.DrawInitialValue(_initialValue, _initialValueEnabled); 72 | } 73 | else 74 | { 75 | EditorGUILayout.PropertyField(_currentValue, VariableHelperDrawer.CurrentValueLabel); 76 | } 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /Editor/Variables/ConstantEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 66e712bbad5141b09fdfd0b59dcee396 3 | timeCreated: 1619201195 -------------------------------------------------------------------------------- /Editor/Variables/PlayModeUpdateHelper.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Editor 2 | { 3 | using System; 4 | using UnityEditor; 5 | 6 | public class PlayModeUpdateHelper : IDisposable 7 | { 8 | private const int UpdateFrameCount = 20; 9 | private int _frameCounter; 10 | private readonly Action _onUpdate; 11 | private readonly Editor _editor; 12 | 13 | public PlayModeUpdateHelper(Editor editor, Action onUpdate) 14 | { 15 | _editor = editor; 16 | _onUpdate = onUpdate; 17 | EditorApplication.update += OnUpdate; 18 | } 19 | 20 | private void OnUpdate() 21 | { 22 | if (!EditorApplication.isPlayingOrWillChangePlaymode || _editor.targets.Length == 0 || _editor.target == null || _frameCounter++ < UpdateFrameCount) 23 | return; 24 | 25 | _frameCounter = 0; 26 | _onUpdate(); 27 | } 28 | 29 | public void Dispose() 30 | { 31 | EditorApplication.update -= OnUpdate; 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /Editor/Variables/PlayModeUpdateHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3dca09811a90434f93126fd45da0a06b 3 | timeCreated: 1629638728 -------------------------------------------------------------------------------- /Editor/Variables/PropertyChangeObserver.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Editor 2 | { 3 | using System; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | public class PropertyChangeObserver 8 | { 9 | private readonly SerializedProperty _serializedProperty; 10 | private bool _changeCheckPassedPreviously; 11 | private int _previousHotControl; 12 | private int _previousKeyboardControl; 13 | 14 | public PropertyChangeObserver(SerializedProperty serializedProperty) 15 | { 16 | _serializedProperty = serializedProperty; 17 | } 18 | 19 | public bool DrawProperty(Action drawProperty, Action onChange = null) 20 | { 21 | var currentEvent = Event.current; 22 | 23 | if (IsEnterPressed(currentEvent)) 24 | ExitGUI(currentEvent); 25 | 26 | bool previousExpandValue = _serializedProperty.isExpanded; 27 | 28 | using var changeCheck = new EditorGUI.ChangeCheckScope(); 29 | 30 | drawProperty(_serializedProperty); 31 | 32 | // Must be called after drawProperty and before changeCheck.changed 33 | bool changeAppliedToProperty = IsChangeAppliedToProperty(); 34 | 35 | // Do not count toggling foldout as a change. 36 | if (changeCheck.changed && previousExpandValue == _serializedProperty.isExpanded) 37 | { 38 | if ( ! _changeCheckPassedPreviously) 39 | { 40 | onChange?.Invoke(); 41 | } 42 | 43 | _changeCheckPassedPreviously = true; 44 | } 45 | 46 | return changeAppliedToProperty; 47 | } 48 | 49 | private bool IsChangeAppliedToProperty() 50 | { 51 | bool focusChanged = GUIUtility.hotControl != _previousHotControl || GUIUtility.keyboardControl != _previousKeyboardControl; 52 | _previousHotControl = GUIUtility.hotControl; 53 | _previousKeyboardControl = GUIUtility.keyboardControl; 54 | 55 | if (focusChanged && _changeCheckPassedPreviously) 56 | { 57 | _changeCheckPassedPreviously = false; 58 | return true; 59 | } 60 | 61 | return false; 62 | } 63 | 64 | private static bool IsEnterPressed(Event currentEvent) 65 | { 66 | return currentEvent.type == EventType.KeyDown && (currentEvent.keyCode == KeyCode.Return || currentEvent.keyCode == KeyCode.KeypadEnter); 67 | } 68 | 69 | private static void ExitGUI(Event currentEvent) 70 | { 71 | GUIUtility.keyboardControl = 0; 72 | currentEvent.Use(); 73 | } 74 | } 75 | } -------------------------------------------------------------------------------- /Editor/Variables/PropertyChangeObserver.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7cbe52397fd741448b208f0437010011 3 | timeCreated: 1657231289 -------------------------------------------------------------------------------- /Editor/Variables/VariableEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4d7bf859f2bb4904af4f60f29df4690b 3 | timeCreated: 1657231994 -------------------------------------------------------------------------------- /Editor/Variables/VariableHelperDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 45182c37953f403fab22a70b6e13ed5a 3 | timeCreated: 1657233684 -------------------------------------------------------------------------------- /Editor/Variables/VariableWithHistoryHelperDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6f9569a8b00b421fb07910b44a8ca68f 3 | timeCreated: 1657269748 -------------------------------------------------------------------------------- /Editor/WildcardScriptableEventListenerEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 62a0080d674d4ec8b8d2829f82878769 3 | timeCreated: 1638390777 -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License modified with Commons Clause Restriction 2 | 3 | Copyright (c) 2021 SolidAlloy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | Commons Clause Restriction 24 | 25 | The Software is provided to you by the Licensor under the License, as defined below, subject to 26 | the following condition. 27 | Without limiting other conditions in the License, the grant of rights under the License will not 28 | include, and the License does not grant to you, the right to Sell the Software. 29 | For purposes of the foregoing, “Sell” means practicing any or all of the rights granted to you 30 | under the License to provide to third parties, for a fee or other consideration (including without 31 | limitation fees for hosting or consulting/ support services related to the Software), a product or 32 | service whose value derives, entirely or substantially, from the functionality of the Software. 33 | Any license notice or attribution required by the License must also include this Commons Cause 34 | License Condition notice. 35 | 36 | For purposes of the clause above, the “Licensor” is SolidAlloy, the “License” is the MIT License and the Software is the GenericScriptableArchitecture software provided with this 37 | notice. -------------------------------------------------------------------------------- /LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6f49e5caaad06c14a987e54392a04567 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4e202adcedd6883469673496bc347a38 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 91f05ccda3734838bffc949243a17834 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/ApplicationUtil.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using UnityEditor; 4 | 5 | internal static class ApplicationUtil 6 | { 7 | public static bool InPlayMode 8 | { 9 | get 10 | { 11 | #if UNITY_EDITOR 12 | return EditorApplication.isPlayingOrWillChangePlaymode; 13 | #else 14 | return true; 15 | #endif 16 | } 17 | } 18 | 19 | public static bool InEditMode => ! InPlayMode; 20 | } 21 | } -------------------------------------------------------------------------------- /Runtime/ApplicationUtil.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5a860165f27941f09504928e95b9342e 3 | timeCreated: 1613834126 -------------------------------------------------------------------------------- /Runtime/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("GenericScriptableArchitecture.Editor")] -------------------------------------------------------------------------------- /Runtime/AssemblyInfo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e8c33698996e47bb8249819c348bcfc8 3 | timeCreated: 1607155562 -------------------------------------------------------------------------------- /Runtime/Config.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | internal static class Config 4 | { 5 | public const string PackageName = "Scriptable Architecture/"; 6 | public const string Events = "Events/"; 7 | } 8 | } -------------------------------------------------------------------------------- /Runtime/Config.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 56c6ba03929346cba181bf757e97e16a 3 | timeCreated: 1619192847 -------------------------------------------------------------------------------- /Runtime/CustomStructures.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6a81b55b765748c38b8c3f930bd770d9 3 | timeCreated: 1619545800 -------------------------------------------------------------------------------- /Runtime/CustomStructures/ClampedFloat.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using System.Globalization; 5 | using UnityEngine; 6 | 7 | [Serializable] 8 | public struct ClampedFloat : IEquatable, IEquatable 9 | { 10 | [SerializeField] private float _min; 11 | [SerializeField] private float _max; 12 | [SerializeField] private float _value; 13 | 14 | public float Min => _min; 15 | 16 | public float Max => _max; 17 | 18 | public float Value 19 | { 20 | get => _value; 21 | set => _value = Mathf.Clamp(value, _min, _max); 22 | } 23 | 24 | public ClampedFloat(float value, float min, float max) 25 | { 26 | if (min > max) 27 | throw new ArgumentOutOfRangeException(nameof(max), $"Min argument must be less or equal the max argument ({max}), passed {min} instead."); 28 | 29 | _min = min; 30 | _max = max; 31 | _value = Mathf.Clamp(value, _min, _max); 32 | } 33 | 34 | public static implicit operator float(ClampedFloat clampedFloat) => clampedFloat.Value; 35 | 36 | public bool Equals(ClampedFloat other) => _value == other._value; 37 | 38 | public bool Equals(float other) => _value == other; 39 | 40 | public override bool Equals(object obj) 41 | { 42 | return obj is ClampedFloat other && Equals(other); 43 | } 44 | 45 | public override int GetHashCode() => _value.GetHashCode(); 46 | 47 | public override string ToString() => _value.ToString(CultureInfo.InvariantCulture); 48 | 49 | public static bool operator ==(ClampedFloat lhs, ClampedFloat rhs) => lhs.Equals(rhs); 50 | 51 | public static bool operator !=(ClampedFloat lhs, ClampedFloat rhs) => ! (lhs == rhs); 52 | } 53 | } -------------------------------------------------------------------------------- /Runtime/CustomStructures/ClampedFloat.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 04885e3f0e27495bbeea61dcf98e71aa 3 | timeCreated: 1619545833 -------------------------------------------------------------------------------- /Runtime/CustomStructures/ClampedInt.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using UnityEngine; 5 | 6 | [Serializable] 7 | public struct ClampedInt : IEquatable, IEquatable 8 | { 9 | [SerializeField] private int _min; 10 | 11 | [SerializeField] private int _max; 12 | 13 | [SerializeField] private int _value; 14 | 15 | public int Min => _min; 16 | 17 | public int Max => _max; 18 | 19 | public int Value 20 | { 21 | get => _value; 22 | set => _value = Mathf.Clamp(value, _min, _max); 23 | } 24 | 25 | public ClampedInt(int value, int min, int max) 26 | { 27 | if (min > max) 28 | throw new ArgumentOutOfRangeException(nameof(max), $"Min argument must be less or equal the max argument ({max}), passed {min} instead."); 29 | 30 | _min = min; 31 | _max = max; 32 | _value = Mathf.Clamp(value, _min, _max); 33 | } 34 | 35 | public static implicit operator int(ClampedInt clampedInt) => clampedInt.Value; 36 | 37 | public bool Equals(ClampedInt other) => _value == other._value; 38 | 39 | public bool Equals(int other) => _value == other; 40 | 41 | public override bool Equals(object obj) 42 | { 43 | return obj is ClampedInt other && Equals(other); 44 | } 45 | 46 | public override int GetHashCode() => _value; 47 | 48 | public override string ToString() => _value.ToString(); 49 | 50 | public static bool operator ==(ClampedInt lhs, ClampedInt rhs) => lhs.Equals(rhs); 51 | 52 | public static bool operator !=(ClampedInt lhs, ClampedInt rhs) => ! (lhs == rhs); 53 | } 54 | } -------------------------------------------------------------------------------- /Runtime/CustomStructures/ClampedInt.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7950995bada44027b281bcb7266cec52 3 | timeCreated: 1619363329 -------------------------------------------------------------------------------- /Runtime/EventHelpers.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f31a8520867e4e4db443f17455352d08 3 | timeCreated: 1629047831 -------------------------------------------------------------------------------- /Runtime/EventHelpers/EventHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2ad9198eeee54e5a8789f78c0d339fd7 3 | timeCreated: 1629020616 -------------------------------------------------------------------------------- /Runtime/EventHelpers/EventHelperWithDefaultValue`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e019671a1f164a05a788f280976126fc 3 | timeCreated: 1629023483 -------------------------------------------------------------------------------- /Runtime/EventHelpers/EventHelperWithHistory`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1e4881343b6e42b49ab32650e1492918 3 | timeCreated: 1629049267 -------------------------------------------------------------------------------- /Runtime/EventHelpers/EventHelper`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c2e9a42aac3e41b596d0f1df0a0d8431 3 | timeCreated: 1629021606 -------------------------------------------------------------------------------- /Runtime/EventHelpers/EventHelper`2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3b72cd71537343029d3d646b9a543c05 3 | timeCreated: 1629047682 -------------------------------------------------------------------------------- /Runtime/EventHelpers/EventHelper`3.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 72f836deadd7462dabbf7dfab1f84feb 3 | timeCreated: 1629048419 -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelper.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | 5 | #if UNIRX 6 | using UniRx; 7 | #endif 8 | 9 | public interface IEventHelper : IEvent 10 | #if UNIRX 11 | , IObservable 12 | #endif 13 | { 14 | public void AddListener(IListener listener); 15 | 16 | public void RemoveListener(IListener listener); 17 | 18 | void AddListener(Action listener); 19 | 20 | void RemoveListener(Action listener); 21 | } 22 | } -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 091a72a746cd4e7ca9e24cc4e0a18f1a 3 | timeCreated: 1629024589 -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelperWithDefaultValue`1.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | } -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelperWithDefaultValue`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cc36dd8d53c9430783ee9a2b85a318e8 3 | timeCreated: 1629024989 -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelper`1.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | 5 | public interface IEventHelper : IEvent 6 | #if UNIRX 7 | , IObservable 8 | #endif 9 | { 10 | void AddListener(IListener listener); 11 | 12 | void RemoveListener(IListener listener); 13 | 14 | void AddListener(Action listener); 15 | 16 | void RemoveListener(Action listener); 17 | } 18 | } -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelper`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: efdf527eca7b4330af5bf97e6ce38fb6 3 | timeCreated: 1629025004 -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelper`2.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | 5 | public interface IEventHelper : IEvent 6 | #if UNIRX 7 | , IObservable<(T1, T2)> 8 | #endif 9 | { 10 | void AddListener(IListener listener); 11 | 12 | void RemoveListener(IListener listener); 13 | 14 | void AddListener(Action listener); 15 | 16 | void RemoveListener(Action listener); 17 | } 18 | } -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelper`2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 24d159f804574411b802a87abbbfe444 3 | timeCreated: 1629047622 -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelper`3.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | 5 | public interface IEventHelper : IEvent 6 | #if UNIRX 7 | , IObservable<(T1, T2, T3)> 8 | #endif 9 | { 10 | void AddListener(IListener listener); 11 | 12 | void RemoveListener(IListener listener); 13 | 14 | void AddListener(Action listener); 15 | 16 | void RemoveListener(Action listener); 17 | } 18 | } -------------------------------------------------------------------------------- /Runtime/EventHelpers/IEventHelper`3.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c89e98c866d246ceb7fd82b49b22ef58 3 | timeCreated: 1629047636 -------------------------------------------------------------------------------- /Runtime/EventHolders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 70f60f8af89549cda025e947c710b06d 3 | timeCreated: 1619362191 -------------------------------------------------------------------------------- /Runtime/EventHolders/EventHolder.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using UnityEngine; 5 | 6 | [Serializable] 7 | internal class EventHolder 8 | { 9 | [SerializeField] public ScriptableEvent _event; 10 | [SerializeField] public EventInstancer _eventInstancer; 11 | [SerializeField] public EventType _type = EventType.ScriptableEvent; 12 | 13 | public void AddListener(VoidScriptableEventListener listener) 14 | { 15 | switch (_type) 16 | { 17 | case EventType.ScriptableEvent: 18 | _event?.AddListener(listener); 19 | break; 20 | 21 | case EventType.EventInstancer: 22 | _eventInstancer?.AddListener(listener); 23 | break; 24 | 25 | default: 26 | throw new ArgumentOutOfRangeException(nameof(listener), "Unknown enum value when adding listener to the event holder."); 27 | } 28 | } 29 | 30 | public void RemoveListener(VoidScriptableEventListener listener) 31 | { 32 | switch (_type) 33 | { 34 | case EventType.ScriptableEvent: 35 | _event?.RemoveListener(listener); 36 | break; 37 | 38 | case EventType.EventInstancer: 39 | _eventInstancer?.RemoveListener(listener); 40 | break; 41 | 42 | default: 43 | throw new ArgumentOutOfRangeException(nameof(listener), "Unknown enum value when adding listener to the event holder."); 44 | } 45 | } 46 | 47 | public enum EventType 48 | { 49 | ScriptableEvent, 50 | Variable, 51 | VariableInstancer, 52 | EventInstancer // appending this type to the end of enum so that the serialization does not mess up when people upgrade the package. 53 | } 54 | } 55 | 56 | internal static class EventTypesExtensions 57 | { 58 | public static bool HasDefaultValue(this EventHolder.EventType eventType) 59 | { 60 | switch (eventType) 61 | { 62 | case EventHolder.EventType.Variable: 63 | case EventHolder.EventType.VariableInstancer: 64 | return true; 65 | default: 66 | return false; 67 | } 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /Runtime/EventHolders/EventHolder.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e24378f5d78b4539931f2347a5b3d8d1 3 | timeCreated: 1657559506 -------------------------------------------------------------------------------- /Runtime/EventHolders/EventHolder`1.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using System.IO; 5 | using UnityEngine; 6 | 7 | [Serializable] 8 | internal class EventHolder 9 | { 10 | [SerializeField] internal ScriptableEvent _event; 11 | [SerializeField] internal Variable _variable; 12 | [SerializeField] internal VariableInstancer _variableInstancer; 13 | [SerializeField] internal EventInstancer _eventInstancer; 14 | [SerializeField] internal EventHolder.EventType _type = EventHolder.EventType.ScriptableEvent; 15 | [SerializeField] internal bool _notifyCurrentValue; 16 | 17 | public void AddListener(ScriptableEventListener listener) 18 | { 19 | switch (_type) 20 | { 21 | case EventHolder.EventType.ScriptableEvent: 22 | _event?.AddListener(listener); 23 | break; 24 | 25 | case EventHolder.EventType.Variable: 26 | _variable?.AddListener(listener, _notifyCurrentValue); 27 | break; 28 | 29 | case EventHolder.EventType.VariableInstancer: 30 | _variableInstancer?.AddListener(listener, _notifyCurrentValue); 31 | break; 32 | 33 | case EventHolder.EventType.EventInstancer: 34 | _eventInstancer?.AddListener(listener); 35 | break; 36 | 37 | default: 38 | throw new ArgumentOutOfRangeException(nameof(listener), "Unknown enum value when adding listener to the event holder."); 39 | } 40 | } 41 | 42 | public void RemoveListener(ScriptableEventListener listener) 43 | { 44 | switch (_type) 45 | { 46 | case EventHolder.EventType.ScriptableEvent: 47 | _event?.RemoveListener(listener); 48 | break; 49 | 50 | case EventHolder.EventType.Variable: 51 | _variable?.RemoveListener(listener); 52 | break; 53 | 54 | case EventHolder.EventType.VariableInstancer: 55 | _variableInstancer?.RemoveListener(listener); 56 | break; 57 | 58 | case EventHolder.EventType.EventInstancer: 59 | _variableInstancer?.RemoveListener(listener); 60 | break; 61 | 62 | default: 63 | throw new ArgumentOutOfRangeException(nameof(listener), "Unknown enum value when adding listener to the event holder."); 64 | } 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /Runtime/EventHolders/EventHolder`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7d3da760ee6f427ab309689e09efa05f 3 | timeCreated: 1619290305 -------------------------------------------------------------------------------- /Runtime/EventHolders/EventHolder`2.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using UnityEngine; 5 | 6 | [Serializable] 7 | internal class EventHolder 8 | { 9 | [SerializeField] private ScriptableEvent _event; 10 | [SerializeField] private VariableWithHistory _variable; 11 | [SerializeField] private VariableInstancerWithHistory _variableInstancer; 12 | [SerializeField] private EventInstancer _eventInstancer; 13 | 14 | [SerializeField] private EventHolder.EventType _type = EventHolder.EventType.ScriptableEvent; 15 | [SerializeField] private bool _notifyCurrentValue; 16 | 17 | public void AddListener(ScriptableEventListener listener) 18 | { 19 | switch (_type) 20 | { 21 | case EventHolder.EventType.ScriptableEvent: 22 | _event?.AddListener(listener); 23 | break; 24 | 25 | case EventHolder.EventType.Variable: 26 | _variable?.AddListener(listener as ScriptableEventListener, _notifyCurrentValue); 27 | break; 28 | 29 | case EventHolder.EventType.VariableInstancer: 30 | _variableInstancer?.AddListener(listener as ScriptableEventListener, _notifyCurrentValue); 31 | break; 32 | 33 | case EventHolder.EventType.EventInstancer: 34 | _eventInstancer?.AddListener(listener); 35 | break; 36 | 37 | default: 38 | throw new ArgumentOutOfRangeException(nameof(listener), "Unknown enum value when adding listener to the event holder."); 39 | } 40 | } 41 | 42 | public void RemoveListener(ScriptableEventListener listener) 43 | { 44 | switch (_type) 45 | { 46 | case EventHolder.EventType.ScriptableEvent: 47 | _event?.RemoveListener(listener); 48 | break; 49 | 50 | case EventHolder.EventType.Variable: 51 | _variable?.RemoveListener(listener as ScriptableEventListener); 52 | break; 53 | 54 | case EventHolder.EventType.VariableInstancer: 55 | _variableInstancer?.RemoveListener(listener as ScriptableEventListener); 56 | break; 57 | 58 | case EventHolder.EventType.EventInstancer: 59 | _eventInstancer?.RemoveListener(listener); 60 | break; 61 | 62 | default: 63 | throw new ArgumentOutOfRangeException(nameof(listener), "Unknown enum value when adding listener to the event holder."); 64 | } 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /Runtime/EventHolders/EventHolder`2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c5ba04fd18894aecad137275f6583aec 3 | timeCreated: 1619290481 -------------------------------------------------------------------------------- /Runtime/EventHolders/EventHolder`3.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using UnityEngine; 5 | 6 | [Serializable] 7 | internal class EventHolder 8 | { 9 | [SerializeField] private ScriptableEvent _event; 10 | [SerializeField] private EventInstancer _eventInstancer; 11 | 12 | [SerializeField] private EventHolder.EventType _type = EventHolder.EventType.ScriptableEvent; 13 | 14 | public void AddListener(ScriptableEventListener listener) 15 | { 16 | switch (_type) 17 | { 18 | case EventHolder.EventType.ScriptableEvent: 19 | _event?.AddListener(listener); 20 | break; 21 | 22 | case EventHolder.EventType.EventInstancer: 23 | _eventInstancer?.AddListener(listener); 24 | break; 25 | 26 | default: 27 | throw new ArgumentOutOfRangeException(nameof(listener), "Unknown enum value when adding listener to the event holder."); 28 | } 29 | } 30 | 31 | public void RemoveListener(ScriptableEventListener listener) 32 | { 33 | switch (_type) 34 | { 35 | case EventHolder.EventType.ScriptableEvent: 36 | _event?.RemoveListener(listener); 37 | break; 38 | 39 | case EventHolder.EventType.EventInstancer: 40 | _eventInstancer?.RemoveListener(listener); 41 | break; 42 | 43 | default: 44 | throw new ArgumentOutOfRangeException(nameof(listener), "Unknown enum value when adding listener to the event holder."); 45 | } 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /Runtime/EventHolders/EventHolder`3.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c1e036542fea49348344e7bd09560217 3 | timeCreated: 1657559664 -------------------------------------------------------------------------------- /Runtime/EventHolders/EventType.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | 4 | } -------------------------------------------------------------------------------- /Runtime/EventHolders/EventType.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5b07d1f61ab149cfa31835cdfc76bcb9 3 | timeCreated: 1619290486 -------------------------------------------------------------------------------- /Runtime/EventListeners.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 65672665fc484c6d9b81d8a51311e683 3 | timeCreated: 1629316865 -------------------------------------------------------------------------------- /Runtime/EventListeners/IEventListener.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | public interface IEventListener : IListener 4 | { 5 | public void OnEventInvoked(); 6 | } 7 | 8 | public interface IEventListener : IListener 9 | { 10 | public void OnEventInvoked(T argument); 11 | } 12 | 13 | public interface IEventListener : IListener 14 | { 15 | public void OnEventInvoked(T1 arg0, T2 arg1); 16 | } 17 | 18 | public interface IEventListener : IListener 19 | { 20 | public void OnEventInvoked(T1 arg0, T2 arg1, T3 arg2); 21 | } 22 | } -------------------------------------------------------------------------------- /Runtime/EventListeners/IEventListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 02277dfea2ae43db859e2c5e331f855a 3 | timeCreated: 1627157217 -------------------------------------------------------------------------------- /Runtime/EventListeners/IListener.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | public interface IListener { } 4 | 5 | public interface IListener { } 6 | 7 | public interface IListener { } 8 | 9 | public interface IListener { } 10 | } -------------------------------------------------------------------------------- /Runtime/EventListeners/IListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: df66607fac60422ea4360ceb8efb62b3 3 | timeCreated: 1629317413 -------------------------------------------------------------------------------- /Runtime/EventListeners/IMultipleEventsListener.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | public interface IMultipleEventsListener : IListener 4 | { 5 | public void OnEventInvoked(IEvent invokedEvent); 6 | } 7 | 8 | public interface IMultipleEventsListener : IListener 9 | { 10 | public void OnEventInvoked(IEvent invokedEvent, T argument); 11 | } 12 | 13 | public interface IMultipleEventsListener : IListener 14 | { 15 | public void OnEventInvoked(IEvent invokedEvent, T1 arg0, T2 arg1); 16 | } 17 | 18 | public interface IMultipleEventsListener : IListener 19 | { 20 | public void OnEventInvoked(IEvent invokedEvent, T1 arg0, T2 arg1, T3 arg2); 21 | } 22 | } -------------------------------------------------------------------------------- /Runtime/EventListeners/IMultipleEventsListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e9f7f7b7a8c64b439fd2f0970ae77cdd 3 | timeCreated: 1627157204 -------------------------------------------------------------------------------- /Runtime/GenericScriptableArchitecture.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GenericScriptableArchitecture", 3 | "rootNamespace": "GenericScriptableArchitecture", 4 | "references": [ 5 | "GenericUnityObjects", 6 | "SolidUtilities", 7 | "SolidUtilities.Editor", 8 | "Unity.Timeline", 9 | "UniRx", 10 | "ExtEvents", 11 | "ExtEvents.OdinSerializer" 12 | ], 13 | "includePlatforms": [], 14 | "excludePlatforms": [], 15 | "allowUnsafeCode": false, 16 | "overrideReferences": false, 17 | "precompiledReferences": [], 18 | "autoReferenced": true, 19 | "defineConstraints": [], 20 | "versionDefines": [ 21 | { 22 | "name": "com.unity.timeline", 23 | "expression": "", 24 | "define": "USE_TIMELINE" 25 | }, 26 | { 27 | "name": "com.neuecc.unirx", 28 | "expression": "", 29 | "define": "UNIRX" 30 | } 31 | ], 32 | "noEngineReferences": false 33 | } -------------------------------------------------------------------------------- /Runtime/GenericScriptableArchitecture.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4cf0b59bfc01ab3409b5f5c1d2888de4 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime/IEvent.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | public interface IBaseEvent { } 4 | 5 | public interface IEvent : IBaseEvent { } 6 | 7 | public interface IEvent : IBaseEvent { } 8 | 9 | public interface IEvent : IBaseEvent { } 10 | 11 | public interface IEvent : IBaseEvent { } 12 | } -------------------------------------------------------------------------------- /Runtime/IEvent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 02274eb6ce72457dad08005e9dfc1b06 3 | timeCreated: 1627414983 -------------------------------------------------------------------------------- /Runtime/References.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc742deb1c1c42fa82f5d2d49f4a9b0b 3 | timeCreated: 1613055469 -------------------------------------------------------------------------------- /Runtime/References/Reference`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b7842a2b12dc4941816a65b37a688296 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/RuntimeSets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b09d3ec6259f4f7083330a498a80d907 3 | timeCreated: 1614106655 -------------------------------------------------------------------------------- /Runtime/RuntimeSets/BaseRuntimeSet.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System.Collections.Generic; 4 | using GenericUnityObjects; 5 | using JetBrains.Annotations; 6 | using SolidUtilities; 7 | using UnityEngine; 8 | 9 | public abstract class BaseRuntimeSet : GenericScriptableObject 10 | { 11 | [SerializeField, ResizableTextArea, UsedImplicitly] private string _description; 12 | 13 | internal abstract List List { get; } 14 | 15 | [SerializeField] internal bool AddExpanded; 16 | internal abstract List AddListeners { get; } 17 | 18 | [SerializeField] internal bool CountChangeExpanded; 19 | internal abstract List CountChangeListeners { get; } 20 | 21 | [SerializeField] internal bool MoveExpanded; 22 | internal abstract List MoveListeners { get; } 23 | 24 | [SerializeField] internal bool RemoveExpanded; 25 | internal abstract List RemoveListeners { get; } 26 | 27 | [SerializeField] internal bool ReplaceExpanded; 28 | internal abstract List ReplaceListeners { get; } 29 | 30 | [SerializeField] internal bool ResetExpanded; 31 | internal abstract List ResetListeners { get; } 32 | } 33 | } -------------------------------------------------------------------------------- /Runtime/RuntimeSets/BaseRuntimeSet.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bbd1eec0f7d841d69b9cf6d7c55f9013 3 | timeCreated: 1614523680 -------------------------------------------------------------------------------- /Runtime/RuntimeSets/RuntimeSet`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c310ebaa7e1d4da39f89d2340c56c267 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 9b574b5146024ed4d98d59583da0a165, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 872231fd76dc4b0d90308aa7208b04cd 3 | timeCreated: 1607155770 -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/BaseScriptableEventListener.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using UnityEngine; 4 | using Debug = UnityEngine.Debug; 5 | 6 | #if UNITY_EDITOR 7 | using UnityEditor; 8 | #endif 9 | 10 | public abstract class BaseScriptableEventListener : MonoBehaviour 11 | { 12 | [SerializeField] internal StackTraceProvider _stackTrace; 13 | 14 | protected bool CanBeInvoked() 15 | { 16 | #if UNITY_EDITOR 17 | if ( ! EditorApplication.isPlaying) 18 | { 19 | Debug.LogError($"Tried to listen with the {name} listener in edit mode. This is not allowed."); 20 | return false; 21 | } 22 | #endif 23 | return true; 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/BaseScriptableEventListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 575f1ac614014e08a39cf6ef37ce98e0 3 | timeCreated: 1614107189 -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/ScriptableEventListener.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using UnityEngine; 4 | 5 | [ExecuteAlways] // Needed so that if the component is disabled in edit mode, it also disables the hidden component. 6 | public class ScriptableEventListener : MonoBehaviour 7 | { 8 | [SerializeField] internal BaseScriptableEventListener _component; 9 | 10 | private void OnEnable() 11 | { 12 | if (_component != null) 13 | _component.enabled = true; 14 | } 15 | 16 | private void OnDisable() 17 | { 18 | if (_component != null) 19 | _component.enabled = false; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/ScriptableEventListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e5554e6c479a4dafbd86e3ece00169a9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 607d165f4fdd45243bda65410fa501d3, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/ScriptableEventListener`1.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using ExtEvents; 5 | using UnityEngine; 6 | using UnityEngine.Serialization; 7 | 8 | [Serializable] 9 | [AddComponentMenu("")] 10 | public class ScriptableEventListener : BaseScriptableEventListener, IListener 11 | { 12 | [SerializeField, FormerlySerializedAs("_event")] private EventHolder _eventHolder = new EventHolder(); 13 | [SerializeField] private ExtEvent _response; 14 | 15 | private void OnEnable() => _eventHolder?.AddListener(this); 16 | 17 | private void OnDisable() => _eventHolder?.RemoveListener(this); 18 | 19 | public void OnEventInvoked(T arg0) 20 | { 21 | if ( ! CanBeInvoked()) 22 | return; 23 | 24 | _stackTrace.AddStackTrace(arg0); 25 | _response.Invoke(arg0); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/ScriptableEventListener`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3fbbe1937fc54db082643a440c4e256d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 607d165f4fdd45243bda65410fa501d3, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/ScriptableEventListener`2.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using ExtEvents; 5 | using UnityEngine; 6 | using UnityEngine.Serialization; 7 | 8 | [Serializable] 9 | [AddComponentMenu("")] 10 | public class ScriptableEventListener : BaseScriptableEventListener, IListener 11 | { 12 | [SerializeField, FormerlySerializedAs("_event")] private EventHolder _eventHolder = new EventHolder(); 13 | [SerializeField] private ExtEvent _response; 14 | 15 | private void OnEnable() => _eventHolder?.AddListener(this); 16 | 17 | private void OnDisable() => _eventHolder?.RemoveListener(this); 18 | 19 | public void OnEventInvoked(T1 arg0, T2 arg1) 20 | { 21 | if ( ! CanBeInvoked()) 22 | return; 23 | 24 | _stackTrace.AddStackTrace(arg0, arg1); 25 | _response.Invoke(arg0, arg1); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/ScriptableEventListener`2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 01712a74e85f4524987025e603667a65 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 607d165f4fdd45243bda65410fa501d3, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/ScriptableEventListener`3.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using ExtEvents; 5 | using UnityEngine; 6 | using Object = UnityEngine.Object; 7 | 8 | [Serializable] 9 | [AddComponentMenu("")] 10 | public class ScriptableEventListener : BaseScriptableEventListener, IListener 11 | { 12 | [SerializeField] private ScriptableEvent _event; 13 | [SerializeField] private EventHolder _eventHolder; 14 | [SerializeField] private ExtEvent _response; 15 | 16 | private void OnEnable() 17 | { 18 | if (_event != null) // backwards compatibility 19 | { 20 | _event.AddListener(this); 21 | return; 22 | } 23 | 24 | _eventHolder?.AddListener(this); 25 | } 26 | 27 | private void OnDisable() 28 | { 29 | if (_event != null) // backwards compatibility 30 | { 31 | _event.RemoveListener(this); 32 | return; 33 | } 34 | 35 | _eventHolder?.RemoveListener(this); 36 | } 37 | 38 | public void OnEventInvoked(T1 arg0, T2 arg1, T3 arg2) 39 | { 40 | if ( ! CanBeInvoked()) 41 | return; 42 | 43 | _stackTrace.AddStackTrace(arg0, arg1, arg2); 44 | _response.Invoke(arg0, arg1, arg2); 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/ScriptableEventListener`3.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 15714bedfd4c4b3e974d94fc48ba6236 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 607d165f4fdd45243bda65410fa501d3, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/VoidScriptableEventListener.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using ExtEvents; 5 | using UnityEngine; 6 | 7 | [Serializable] 8 | [AddComponentMenu("")] 9 | public class VoidScriptableEventListener : BaseScriptableEventListener, IListener 10 | { 11 | [SerializeField] internal ScriptableEvent _event; 12 | [SerializeField] internal EventHolder _eventHolder; 13 | [SerializeField] internal ExtEvent _response; 14 | 15 | private void OnEnable() 16 | { 17 | if (_event != null) // backwards compatibility 18 | { 19 | _event.AddListener(this); 20 | return; 21 | } 22 | 23 | _eventHolder?.AddListener(this); 24 | } 25 | 26 | private void OnDisable() 27 | { 28 | if (_event != null) // backwards compatibility 29 | { 30 | _event.RemoveListener(this); 31 | return; 32 | } 33 | 34 | _eventHolder?.RemoveListener(this); 35 | } 36 | 37 | public void OnEventInvoked() 38 | { 39 | if ( ! CanBeInvoked()) 40 | return; 41 | 42 | _stackTrace.AddStackTrace(); 43 | _response.Invoke(); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEventListeners/VoidScriptableEventListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b178bdd9bde14366a896b14319f56a92 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 607d165f4fdd45243bda65410fa501d3, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEvents.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ac6946ab139c4ee792bc9279de533cf2 3 | timeCreated: 1607155758 -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/BaseEventInstancer.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using UnityEngine; 4 | 5 | // Such an execution order allows the instance to be awaken before all the default classes including those predefined in execution order by Unity (like EventSystem with -1000 order). 6 | // It's ok that instancers are awaken even before EventSystem because they don't depend on any of those classes. 7 | [DefaultExecutionOrder(-2000)] 8 | public abstract class BaseEventInstancer : MonoBehaviour 9 | { 10 | internal abstract ScriptableEventHelper ScriptableEventHelper { get; } 11 | 12 | internal abstract BaseScriptableEvent Base { get; } 13 | } 14 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/BaseEventInstancer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e06f862f6da4c9fb4f03a8744237622 3 | timeCreated: 1657383791 -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/BaseScriptableEvent.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using JetBrains.Annotations; 4 | using SolidUtilities; 5 | using UnityEngine; 6 | 7 | public abstract class BaseScriptableEvent : BaseEvent 8 | { 9 | [SerializeField, ResizableTextArea, UsedImplicitly] private string _description; 10 | [SerializeField] internal string[] _argNames; 11 | 12 | internal abstract ScriptableEventHelper ScriptableEventHelper { get; } 13 | } 14 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/BaseScriptableEvent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5cec046a09cb43c9a58a671578473c8a 3 | timeCreated: 1612198189 -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/EventInstancer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6694a34dbdf64e33aa3ca30fba61a580 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: e05ce97c50f7fbb4eba048c299633fd2, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/EventInstancer`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4828f693a8364b6592c6a8a233b64a43 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: e05ce97c50f7fbb4eba048c299633fd2, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/EventInstancer`2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1cc521d598e1480fa27fd97f18ab0326 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: e05ce97c50f7fbb4eba048c299633fd2, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/EventInstancer`3.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2154a59d4ae9411b8e3c08c2741b5212 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: e05ce97c50f7fbb4eba048c299633fd2, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/EventReference.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 276543accc1f44fd88865e5af6178158 3 | timeCreated: 1657451494 -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/IScriptableEvent.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | 5 | #if UNIRX 6 | using UniRx; 7 | #endif 8 | 9 | public interface IScriptableEvent : IEvent 10 | #if UNIRX 11 | , IObservable 12 | #endif 13 | { 14 | void Invoke(); 15 | void AddListener(Action listener); 16 | void RemoveListener(Action listener); 17 | void AddListener(IListener listener); 18 | void RemoveListener(IListener listener); 19 | } 20 | 21 | public interface IScriptableEvent : IEvent 22 | #if UNIRX 23 | , IObservable 24 | #endif 25 | { 26 | void Invoke(T arg0); 27 | void AddListener(Action listener); 28 | void RemoveListener(Action listener); 29 | void AddListener(IListener listener); 30 | void RemoveListener(IListener listener); 31 | } 32 | 33 | public interface IScriptableEvent : IEvent 34 | #if UNIRX 35 | , IObservable<(T1, T2)> 36 | #endif 37 | { 38 | void Invoke(T1 arg0, T2 arg1); 39 | void AddListener(Action listener); 40 | void RemoveListener(Action listener); 41 | void AddListener(IListener listener); 42 | void RemoveListener(IListener listener); 43 | } 44 | 45 | public interface IScriptableEvent : IEvent 46 | #if UNIRX 47 | , IObservable<(T1, T2, T3)> 48 | #endif 49 | { 50 | void Invoke(T1 arg0, T2 arg1, T3 arg2); 51 | void AddListener(Action listener); 52 | void RemoveListener(Action listener); 53 | void AddListener(IListener listener); 54 | void RemoveListener(IListener listener); 55 | } 56 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/IScriptableEvent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5f0d1ec4edea4b759b54ca3836338a25 3 | timeCreated: 1657383752 -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/ScriptableEvent.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using SolidUtilities; 6 | using UnityEngine; 7 | #if UNIRX 8 | using UniRx; 9 | #endif 10 | 11 | [Serializable] 12 | [CreateAssetMenu(menuName = Config.PackageName + Config.Events + "ScriptableEvent")] 13 | public class ScriptableEvent : BaseScriptableEvent, IScriptableEvent 14 | { 15 | [SerializeField] internal ScriptableEventHelperVoid _scriptableEventHelper; 16 | 17 | internal override ScriptableEventHelper ScriptableEventHelper => _scriptableEventHelper; 18 | 19 | private void OnEnable() => _scriptableEventHelper?.Initialize(this, name, "event"); 20 | 21 | private void OnDisable() => _scriptableEventHelper?.Event.Dispose(); 22 | 23 | public void Invoke() => _scriptableEventHelper.Invoke(); 24 | 25 | #region Adding Removing Listeners 26 | 27 | public void AddListener(IListener listener) => _scriptableEventHelper.Event.AddListener(listener); 28 | 29 | public void RemoveListener(IListener listener) => _scriptableEventHelper.Event.RemoveListener(listener); 30 | 31 | public void AddListener(Action listener) => _scriptableEventHelper.Event.AddListener(listener); 32 | 33 | public void RemoveListener(Action listener) => _scriptableEventHelper.Event.RemoveListener(listener); 34 | 35 | #endregion 36 | 37 | #if UNIRX 38 | public IDisposable Subscribe(IObserver observer) => _scriptableEventHelper.Event.Subscribe(observer); 39 | #endif 40 | 41 | #region Operator Overloads 42 | 43 | public static ScriptableEvent operator +(ScriptableEvent scriptableEvent, Action listener) 44 | { 45 | if (scriptableEvent == null) 46 | return null; 47 | 48 | scriptableEvent.AddListener(listener); 49 | return scriptableEvent; 50 | } 51 | 52 | public static ScriptableEvent operator -(ScriptableEvent scriptableEvent, Action listener) 53 | { 54 | if (scriptableEvent == null) 55 | return null; 56 | 57 | scriptableEvent.RemoveListener(listener); 58 | return scriptableEvent; 59 | } 60 | 61 | public static ScriptableEvent operator +(ScriptableEvent scriptableEvent, IListener listener) 62 | { 63 | if (scriptableEvent == null) 64 | return null; 65 | 66 | scriptableEvent.AddListener(listener); 67 | return scriptableEvent; 68 | } 69 | 70 | public static ScriptableEvent operator -(ScriptableEvent scriptableEvent, IListener listener) 71 | { 72 | if (scriptableEvent == null) 73 | return null; 74 | 75 | scriptableEvent.RemoveListener(listener); 76 | return scriptableEvent; 77 | } 78 | 79 | #endregion 80 | } 81 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/ScriptableEvent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 34e2076c00ed43f989504b7ba1dbd404 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 17ca5715f53a56e46be444205e757da6, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/ScriptableEventHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eb52be77a26c4593b19e8e7996766d4f 3 | timeCreated: 1657383538 -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/ScriptableEvent`1.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using GenericUnityObjects; 5 | using UnityEngine; 6 | 7 | [Serializable] 8 | [CreateGenericAssetMenu(MenuName = Config.PackageName + Config.Events + "ScriptableEvent")] 9 | public class ScriptableEvent : BaseScriptableEvent, IScriptableEvent 10 | { 11 | [SerializeField] private ScriptableEventHelper _scriptableEventHelper; 12 | 13 | internal override ScriptableEventHelper ScriptableEventHelper => _scriptableEventHelper; 14 | 15 | // _scriptableEventHelper will be null the first time a scriptable object of this type is created. 16 | private void OnEnable() => _scriptableEventHelper?.Initialize(this, name, "event"); 17 | 18 | private void OnDisable() => _scriptableEventHelper?.Event?.Dispose(); 19 | 20 | public void Invoke(T arg0) => _scriptableEventHelper.Invoke(arg0); 21 | 22 | #region Adding Removing Listeners 23 | 24 | public void AddListener(Action listener) => _scriptableEventHelper.Event.AddListener(listener); 25 | 26 | public void RemoveListener(Action listener) => _scriptableEventHelper.Event.RemoveListener(listener); 27 | 28 | public void AddListener(IListener listener) => _scriptableEventHelper.Event.AddListener(listener); 29 | 30 | public void RemoveListener(IListener listener) => _scriptableEventHelper.Event.RemoveListener(listener); 31 | 32 | #if UNIRX 33 | public IDisposable Subscribe(IObserver observer) => _scriptableEventHelper.Event.Subscribe(observer); 34 | #endif 35 | 36 | #endregion 37 | 38 | #region Operator Overloads 39 | 40 | public static ScriptableEvent operator +(ScriptableEvent scriptableEvent, Action listener) 41 | { 42 | if (scriptableEvent == null) 43 | return null; 44 | 45 | scriptableEvent.AddListener(listener); 46 | return scriptableEvent; 47 | } 48 | 49 | public static ScriptableEvent operator -(ScriptableEvent scriptableEvent, Action listener) 50 | { 51 | if (scriptableEvent == null) 52 | return null; 53 | 54 | scriptableEvent.RemoveListener(listener); 55 | return scriptableEvent; 56 | } 57 | 58 | public static ScriptableEvent operator +(ScriptableEvent scriptableEvent, IListener listener) 59 | { 60 | if (scriptableEvent == null) 61 | return null; 62 | 63 | scriptableEvent.AddListener(listener); 64 | return scriptableEvent; 65 | } 66 | 67 | public static ScriptableEvent operator -(ScriptableEvent scriptableEvent, IListener listener) 68 | { 69 | if (scriptableEvent == null) 70 | return null; 71 | 72 | scriptableEvent.RemoveListener(listener); 73 | return scriptableEvent; 74 | } 75 | 76 | #endregion 77 | } 78 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/ScriptableEvent`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a7bc4098e6b34b50b334b6c504e7f4f5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 17ca5715f53a56e46be444205e757da6, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/ScriptableEvent`2.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using GenericUnityObjects; 5 | using UnityEngine; 6 | 7 | [Serializable] 8 | [CreateGenericAssetMenu(MenuName = Config.PackageName + Config.Events + "ScriptableEvent")] 9 | public class ScriptableEvent : BaseScriptableEvent, IScriptableEvent 10 | { 11 | [SerializeField] private ScriptableEventHelper _scriptableEventHelper; 12 | 13 | internal override ScriptableEventHelper ScriptableEventHelper => _scriptableEventHelper; 14 | 15 | private void OnEnable() => _scriptableEventHelper?.Initialize(this, name, "event"); 16 | 17 | private void OnDisable() => _scriptableEventHelper?.Event?.Dispose(); 18 | 19 | public void Invoke(T1 arg0, T2 arg1) => _scriptableEventHelper.Invoke(arg0, arg1); 20 | 21 | #region Adding Removing Listeners 22 | 23 | public void AddListener(IListener listener) => _scriptableEventHelper.Event.AddListener(listener); 24 | 25 | public void RemoveListener(IListener listener) => _scriptableEventHelper.Event.RemoveListener(listener); 26 | 27 | public void AddListener(Action listener) => _scriptableEventHelper.Event.AddListener(listener); 28 | 29 | public void RemoveListener(Action listener) => _scriptableEventHelper.Event.RemoveListener(listener); 30 | 31 | #if UNIRX 32 | public IDisposable Subscribe(IObserver<(T1, T2)> observer) => _scriptableEventHelper.Event.Subscribe(observer); 33 | #endif 34 | 35 | #endregion 36 | 37 | #region Operator Overloads 38 | 39 | public static ScriptableEvent operator +(ScriptableEvent scriptableEvent, Action listener) 40 | { 41 | if (scriptableEvent == null) 42 | return null; 43 | 44 | scriptableEvent.AddListener(listener); 45 | return scriptableEvent; 46 | } 47 | 48 | public static ScriptableEvent operator -(ScriptableEvent scriptableEvent, Action listener) 49 | { 50 | if (scriptableEvent == null) 51 | return null; 52 | 53 | scriptableEvent.RemoveListener(listener); 54 | return scriptableEvent; 55 | } 56 | 57 | public static ScriptableEvent operator +(ScriptableEvent scriptableEvent, IListener listener) 58 | { 59 | if (scriptableEvent == null) 60 | return null; 61 | 62 | scriptableEvent.AddListener(listener); 63 | return scriptableEvent; 64 | } 65 | 66 | public static ScriptableEvent operator -(ScriptableEvent scriptableEvent, IListener listener) 67 | { 68 | if (scriptableEvent == null) 69 | return null; 70 | 71 | scriptableEvent.RemoveListener(listener); 72 | return scriptableEvent; 73 | } 74 | 75 | #endregion 76 | } 77 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/ScriptableEvent`2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6686166ec8d545cd81c7b3a35c553c8e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 17ca5715f53a56e46be444205e757da6, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/ScriptableEvent`3.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using GenericUnityObjects; 5 | using UnityEngine; 6 | 7 | [Serializable] 8 | [CreateGenericAssetMenu(MenuName = Config.PackageName + Config.Events + "ScriptableEvent")] 9 | public class ScriptableEvent : BaseScriptableEvent, IScriptableEvent 10 | { 11 | [SerializeField] private ScriptableEventHelper _scriptableEventHelper; 12 | 13 | internal override ScriptableEventHelper ScriptableEventHelper => _scriptableEventHelper; 14 | 15 | private void OnEnable() => _scriptableEventHelper?.Initialize(this, name, "event"); 16 | 17 | private void OnDisable() => _scriptableEventHelper?.Event?.Dispose(); 18 | 19 | public void Invoke(T1 arg0, T2 arg1, T3 arg2) => _scriptableEventHelper.Invoke(arg0, arg1, arg2); 20 | 21 | #region Adding Removing Listeners 22 | 23 | public void AddListener(IListener listener) => _scriptableEventHelper.Event.AddListener(listener); 24 | 25 | public void RemoveListener(IListener listener) => _scriptableEventHelper.Event.RemoveListener(listener); 26 | 27 | public void AddListener(Action listener) => _scriptableEventHelper.Event.AddListener(listener); 28 | 29 | public void RemoveListener(Action listener) => _scriptableEventHelper.Event.RemoveListener(listener); 30 | 31 | #if UNIRX 32 | public IDisposable Subscribe(IObserver<(T1, T2, T3)> observer) => _scriptableEventHelper.Event.Subscribe(observer); 33 | #endif 34 | 35 | #endregion 36 | 37 | #region Operator Overloads 38 | 39 | public static ScriptableEvent operator +(ScriptableEvent scriptableEvent, Action listener) 40 | { 41 | if (scriptableEvent == null) 42 | return null; 43 | 44 | scriptableEvent.AddListener(listener); 45 | return scriptableEvent; 46 | } 47 | 48 | public static ScriptableEvent operator -(ScriptableEvent scriptableEvent, Action listener) 49 | { 50 | if (scriptableEvent == null) 51 | return null; 52 | 53 | scriptableEvent.RemoveListener(listener); 54 | return scriptableEvent; 55 | } 56 | 57 | public static ScriptableEvent operator +(ScriptableEvent scriptableEvent, IListener listener) 58 | { 59 | if (scriptableEvent == null) 60 | return null; 61 | 62 | scriptableEvent.AddListener(listener); 63 | return scriptableEvent; 64 | } 65 | 66 | public static ScriptableEvent operator -(ScriptableEvent scriptableEvent, IListener listener) 67 | { 68 | if (scriptableEvent == null) 69 | return null; 70 | 71 | scriptableEvent.RemoveListener(listener); 72 | return scriptableEvent; 73 | } 74 | 75 | #endregion 76 | } 77 | } -------------------------------------------------------------------------------- /Runtime/ScriptableEvents/ScriptableEvent`3.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc6999967d504ffabf620e99c917c55f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 17ca5715f53a56e46be444205e757da6, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/StackTrace.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3a38a5ce81c9443cbb2dce602d510dc8 3 | timeCreated: 1627839742 -------------------------------------------------------------------------------- /Runtime/StackTrace/StackCollection.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System.Collections.Generic; 4 | 5 | /// 6 | /// Stack that implements the interface so that Clear() can be used on it. 7 | /// 8 | /// 9 | internal class StackCollection : Stack, ICollection 10 | { 11 | public void Add(T item) => Push(item); 12 | 13 | public bool Remove(T item) 14 | { 15 | if (item == null || ! item.Equals(Peek())) 16 | { 17 | return false; 18 | } 19 | 20 | Pop(); 21 | return true; 22 | } 23 | 24 | public bool IsReadOnly => false; 25 | } 26 | } -------------------------------------------------------------------------------- /Runtime/StackTrace/StackCollection.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c3edfdaab7f94361ad471297ec6f5fab 3 | timeCreated: 1624727567 -------------------------------------------------------------------------------- /Runtime/StackTrace/StackTraceEntry.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9d3ebd144c7948579776cd1e10e7f655 3 | timeCreated: 1624192933 -------------------------------------------------------------------------------- /Runtime/StackTrace/StackTraceProvider.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using System.Diagnostics; 5 | using UnityEngine; 6 | 7 | [Serializable] 8 | internal class StackTraceProvider 9 | { 10 | [SerializeField] public bool Enabled; 11 | 12 | public readonly StackCollection Entries = new StackCollection(); 13 | 14 | [Conditional("UNITY_EDITOR")] 15 | public void AddStackTrace(params object[] args) 16 | { 17 | if (Enabled) 18 | Entries.Push(new StackTraceEntry(args)); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Runtime/StackTrace/StackTraceProvider.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6fdd01726b3247d985a71799954d3bad 3 | timeCreated: 1657285349 -------------------------------------------------------------------------------- /Runtime/UniRx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f8bb4fe82fc84279b469e882689e9672 3 | timeCreated: 1627499722 -------------------------------------------------------------------------------- /Runtime/UniRx/ExceptionExtensions.cs: -------------------------------------------------------------------------------- 1 | #if UNIRX 2 | namespace GenericScriptableArchitecture 3 | { 4 | using System; 5 | 6 | internal static class ExceptionExtensions 7 | { 8 | public static void Throw(this Exception exception) 9 | { 10 | #if NET_4_6 || NET_STANDARD_2_0 11 | System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(exception).Throw(); 12 | #endif 13 | throw exception; 14 | } 15 | } 16 | } 17 | #endif -------------------------------------------------------------------------------- /Runtime/UniRx/ExceptionExtensions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ab4872c3721a42128cd26455ed804571 3 | timeCreated: 1627671624 -------------------------------------------------------------------------------- /Runtime/UniRx/IObserverLinkedList.cs: -------------------------------------------------------------------------------- 1 | #if UNIRX 2 | namespace GenericScriptableArchitecture 3 | { 4 | internal interface IObserverLinkedList 5 | { 6 | void UnsubscribeNode(ObserverNode node); 7 | } 8 | } 9 | #endif -------------------------------------------------------------------------------- /Runtime/UniRx/IObserverLinkedList.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 10ad9aa8b6fb4261a8cf9563a0116790 3 | timeCreated: 1627497375 -------------------------------------------------------------------------------- /Runtime/UniRx/IReactivePropertyWithHistory.cs: -------------------------------------------------------------------------------- 1 | #if UNIRX 2 | namespace GenericScriptableArchitecture 3 | { 4 | using System; 5 | 6 | public interface IReactivePropertyWithHistory : IReadOnlyReactivePropertyWithHistory 7 | { 8 | new T Value { get; set; } 9 | } 10 | 11 | public interface IReadOnlyReactivePropertyWithHistory : IObservableWithHistory 12 | { 13 | T Value { get; } 14 | 15 | T PreviousValue { get; } 16 | 17 | bool HasValue { get; } 18 | } 19 | 20 | public interface IObservableWithHistory : IObservable<(T Previous, T Current)> 21 | { 22 | IDisposable Subscribe(Action onNext); 23 | 24 | IDisposable Subscribe(Action onNext, Action onError); 25 | 26 | IDisposable Subscribe(Action onNext, Action onCompleted); 27 | 28 | IDisposable Subscribe(Action onNext, Action onError, Action onCompleted); 29 | } 30 | } 31 | #endif -------------------------------------------------------------------------------- /Runtime/UniRx/IReactivePropertyWithHistory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 24848e803218453a9bc671241d55128a 3 | timeCreated: 1627672953 -------------------------------------------------------------------------------- /Runtime/UniRx/ObservableHelper.cs: -------------------------------------------------------------------------------- 1 | #if UNIRX 2 | namespace GenericScriptableArchitecture 3 | { 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using UniRx; 8 | 9 | public class ObservableHelper : IDisposable, IObserverLinkedList 10 | { 11 | private bool _disposed; 12 | private ObserverNode _root; 13 | private ObserverNode _last; 14 | 15 | private readonly List> _observers = new List>(); 16 | 17 | public IEnumerable Targets => _observers.Select(node => node.GetTarget()); 18 | 19 | public IDisposable Subscribe(IObserver observer) 20 | { 21 | if (_disposed) 22 | { 23 | observer.OnCompleted(); 24 | return Disposable.Empty; 25 | } 26 | 27 | // subscribe node, node as subscription. 28 | var next = new ObserverNode(this, observer); 29 | 30 | _observers.Add(next); 31 | 32 | if (_root == null) 33 | { 34 | _root = _last = next; 35 | } 36 | else 37 | { 38 | _last.Next = next; 39 | next.Previous = _last; 40 | _last = next; 41 | } 42 | 43 | return next; 44 | } 45 | 46 | void IObserverLinkedList.UnsubscribeNode(ObserverNode node) 47 | { 48 | _observers.Remove(node); 49 | 50 | if (node == _root) 51 | _root = node.Next; 52 | 53 | if (node == _last) 54 | _last = node.Previous; 55 | 56 | if (node.Previous != null) 57 | node.Previous.Next = node.Next; 58 | 59 | if (node.Next != null) 60 | node.Next.Previous = node.Previous; 61 | } 62 | 63 | public void Dispose() 64 | { 65 | if (_disposed) 66 | return; 67 | 68 | _disposed = true; 69 | 70 | var node = _root; 71 | _root = _last = null; 72 | 73 | while (node != null) 74 | { 75 | node.OnCompleted(); 76 | node = node.Next; 77 | } 78 | } 79 | 80 | public void RaiseOnNext(T value) 81 | { 82 | if (_disposed) 83 | return; 84 | 85 | var node = _root; 86 | while (node != null) 87 | { 88 | node.OnNext(value); 89 | node = node.Next; 90 | } 91 | } 92 | } 93 | } 94 | #endif -------------------------------------------------------------------------------- /Runtime/UniRx/ObservableHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7aa165ba2736414c8f2c2e55baf84270 3 | timeCreated: 1627674135 -------------------------------------------------------------------------------- /Runtime/UniRx/ObserverHelper.cs: -------------------------------------------------------------------------------- 1 | #if UNIRX 2 | namespace GenericScriptableArchitecture 3 | { 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Reflection; 7 | using UniRx; 8 | 9 | public static class ObserverHelper 10 | { 11 | private static readonly Type _subscribeType; 12 | 13 | private static Dictionary _onNextFields = new Dictionary(); 14 | 15 | static ObserverHelper() 16 | { 17 | _subscribeType = typeof(Observer).GetNestedType("Subscribe`1", BindingFlags.NonPublic); 18 | } 19 | 20 | public static object GetTarget(IObserver observer) 21 | { 22 | if (observer is ObserverUtil.SubscribeWithHistory subscribeWithHistory) 23 | return subscribeWithHistory.Target; 24 | 25 | var observerType = observer.GetType(); 26 | 27 | if (observerType.GetGenericTypeDefinition() != _subscribeType) 28 | return null; 29 | 30 | if (!_onNextFields.TryGetValue(observerType, out var onNextField)) 31 | { 32 | onNextField = observerType.GetField("onNext", BindingFlags.NonPublic | BindingFlags.Instance); 33 | _onNextFields.Add(observerType, onNextField); 34 | } 35 | 36 | var action = (Action) onNextField.GetValue(observer); 37 | return action?.Target; 38 | } 39 | } 40 | } 41 | #endif -------------------------------------------------------------------------------- /Runtime/UniRx/ObserverHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 12a403249ba24f4086cf60de265185f2 3 | timeCreated: 1629628614 -------------------------------------------------------------------------------- /Runtime/UniRx/ObserverNode.cs: -------------------------------------------------------------------------------- 1 | #if UNIRX 2 | namespace GenericScriptableArchitecture 3 | { 4 | using System; 5 | using System.Threading; 6 | using UniRx; 7 | 8 | internal sealed class ObserverNode : IObserver, IDisposable 9 | { 10 | private readonly IObserver _observer; 11 | private object _observerTarget; 12 | private bool _checkedTargetOnce; 13 | 14 | private IObserverLinkedList _list; 15 | 16 | public ObserverNode Previous { get; internal set; } 17 | 18 | public ObserverNode Next { get; internal set; } 19 | 20 | public ObserverNode(IObserverLinkedList list, IObserver observer) 21 | { 22 | _list = list; 23 | _observer = observer; 24 | } 25 | 26 | public object GetTarget() 27 | { 28 | if (_checkedTargetOnce) 29 | return _observerTarget; 30 | 31 | _checkedTargetOnce = true; 32 | _observerTarget = ObserverHelper.GetTarget(_observer); 33 | return _observerTarget; 34 | } 35 | 36 | public void OnNext(T value) 37 | { 38 | _observer.OnNext(value); 39 | } 40 | 41 | public void OnError(Exception error) 42 | { 43 | _observer.OnError(error); 44 | } 45 | 46 | public void OnCompleted() 47 | { 48 | _observer.OnCompleted(); 49 | } 50 | 51 | public void Dispose() 52 | { 53 | var sourceList = Interlocked.Exchange(ref _list, null); 54 | if (sourceList == null) 55 | { 56 | return; 57 | } 58 | 59 | sourceList.UnsubscribeNode(this); 60 | } 61 | } 62 | } 63 | #endif -------------------------------------------------------------------------------- /Runtime/UniRx/ObserverNode.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0cc4670e08b54e43b0649687bf3a6f1c 3 | timeCreated: 1627497381 -------------------------------------------------------------------------------- /Runtime/UniRx/ObserverUtil.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 64b50f14676787c469db80e2b0237dd2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/UniRx/Stubs.cs: -------------------------------------------------------------------------------- 1 | #if UNIRX 2 | namespace GenericScriptableArchitecture 3 | { 4 | using System; 5 | 6 | internal static class Stubs 7 | { 8 | public static readonly Action Nop = () => { }; 9 | public static readonly Action Throw = ex => ex.Throw(); 10 | } 11 | 12 | internal static class Stubs 13 | { 14 | public static readonly Action Ignore = (x, y) => { }; 15 | } 16 | } 17 | #endif -------------------------------------------------------------------------------- /Runtime/UniRx/Stubs.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fe9b4b26998540fcaeb5e9a1dda0f80f 3 | timeCreated: 1627671611 -------------------------------------------------------------------------------- /Runtime/UniRx/UnityEqualityComparer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c465e6c3792647209509509d56b4d4b4 3 | timeCreated: 1627498635 -------------------------------------------------------------------------------- /Runtime/Values.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f0dec8159c804a8bbda96199ea08c17f 3 | timeCreated: 1619196219 -------------------------------------------------------------------------------- /Runtime/Values/BaseEvent.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using GenericUnityObjects; 4 | using UnityEditor; 5 | using UnityEngine; 6 | 7 | public abstract class BaseEvent : GenericScriptableObject 8 | { 9 | internal static bool CanBeInvoked(string objectName, string typeName) 10 | { 11 | #if UNITY_EDITOR 12 | if ( ! EditorApplication.isPlaying) 13 | { 14 | Debug.LogError($"Tried to change the {objectName} {typeName} in edit mode. This is not allowed."); 15 | return false; 16 | } 17 | #endif 18 | return true; 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Runtime/Values/BaseEvent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9d6727c34bba411db4d7f918d7ecd4c6 3 | timeCreated: 1638391548 -------------------------------------------------------------------------------- /Runtime/Values/BaseValue.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using JetBrains.Annotations; 4 | using SolidUtilities; 5 | using UnityEngine; 6 | 7 | #if UNITY_EDITOR 8 | using UnityEditor; 9 | #endif 10 | 11 | public abstract class BaseValue : BaseEvent 12 | { 13 | #if UNITY_EDITOR 14 | [SerializeField, ResizableTextArea, UsedImplicitly] internal string _description; 15 | 16 | private bool _subscribedToPlayMode; 17 | #endif 18 | 19 | protected virtual void OnEnable() 20 | { 21 | #if UNITY_EDITOR 22 | // If domain reload is disabled, OnEnable will not be called on Play Mode start, so we need to plug into 23 | // the 'play mode state changed' event. 24 | if (EditorSettings.enterPlayModeOptionsEnabled 25 | && EditorSettings.enterPlayModeOptions.HasFlag(EnterPlayModeOptions.DisableDomainReload)) 26 | { 27 | _subscribedToPlayMode = true; 28 | EditorApplication.playModeStateChanged += InitializeValues; 29 | } 30 | #endif 31 | 32 | // DeepCopy() is not very performant, so execute it only in Play Mode. 33 | if (ApplicationUtil.InPlayMode) 34 | InitializeValues(); 35 | } 36 | 37 | protected virtual void OnDisable() 38 | { 39 | #if UNITY_EDITOR 40 | if ( ! _subscribedToPlayMode) 41 | return; 42 | 43 | _subscribedToPlayMode = false; 44 | EditorApplication.playModeStateChanged -= InitializeValues; 45 | #endif 46 | } 47 | 48 | #if UNITY_EDITOR 49 | private void InitializeValues(PlayModeStateChange stateChange) 50 | { 51 | if (stateChange == PlayModeStateChange.ExitingEditMode) 52 | InitializeValues(); 53 | } 54 | #endif 55 | 56 | protected abstract void InitializeValues(); 57 | 58 | protected static T SerializedCopyInEditor(T originalValue) 59 | { 60 | #if UNITY_EDITOR 61 | return SerializationHelper.CreateCopy(originalValue); 62 | #else 63 | return value; 64 | #endif 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /Runtime/Values/BaseValue.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 95d51984fa1046308864089d3793c8cb 3 | timeCreated: 1619193640 -------------------------------------------------------------------------------- /Runtime/Values/Constant`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 05de5ab8a09d41c7adc4000e0b8c9222 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 6fa72176d55ff0244be36244a3d7055b, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Values/SerializationHelper.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using ExtEvents.OdinSerializer; 4 | 5 | public static class SerializationHelper 6 | { 7 | public static T CreateCopy(T value) 8 | { 9 | CustomSerialization.SerializeValueToBinary(value, out var bytes, out var referencedUnityObjects); 10 | return CustomSerialization.DeserializeValue(bytes, referencedUnityObjects); 11 | } 12 | 13 | public static object CreateCopyWeak(object value) 14 | { 15 | CustomSerialization.SerializeValueToBinaryWeak(value, out var bytes, out var referencedUnityObjects); 16 | return CustomSerialization.DeserializeValue(value.GetType(), bytes, referencedUnityObjects); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /Runtime/Values/SerializationHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 43c99a3823944871bfff2cdcf75ec7e1 3 | timeCreated: 1656444541 -------------------------------------------------------------------------------- /Runtime/Values/Variables.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e6a8cf0927994418ac819b8881931324 3 | timeCreated: 1612642775 -------------------------------------------------------------------------------- /Runtime/Values/Variables/BaseVariable.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | #if UNITY_EDITOR 4 | #endif 5 | 6 | public abstract class BaseVariable : BaseValue 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /Runtime/Values/Variables/BaseVariable.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1589f319fe584c38aae8d65b3d78d501 3 | timeCreated: 1612789551 -------------------------------------------------------------------------------- /Runtime/Values/Variables/BaseVariableInstancer.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using UnityEngine; 4 | 5 | public abstract class BaseVariableInstancer : MonoBehaviour 6 | { 7 | internal abstract BaseVariable BaseVariableReference { get; set; } 8 | 9 | internal abstract bool Initialized { get; } 10 | } 11 | } -------------------------------------------------------------------------------- /Runtime/Values/Variables/BaseVariableInstancer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 404e834952f74ad098251f53ff6073d4 3 | timeCreated: 1657046195 -------------------------------------------------------------------------------- /Runtime/Values/Variables/IVariable.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | 5 | #if UNIRX 6 | using UniRx; 7 | #endif 8 | 9 | public interface IVariable 10 | { 11 | internal VariableHelper VariableHelper { get; } 12 | } 13 | 14 | public interface IVariable : IVariable, IEquatable, IEvent, IEquatable> 15 | #if UNIRX 16 | , IReactiveProperty 17 | #endif 18 | { 19 | T InitialValue { get; } 20 | 21 | #if UNIRX 22 | new // This property is also declared in IReactiveProperty 23 | #endif 24 | T Value { get; set; } 25 | 26 | void SetValueAndForceNotify(T value); 27 | 28 | void AddListener(IListener listener, bool notifyCurrentValue = false); 29 | 30 | void RemoveListener(IListener listener); 31 | 32 | void AddListener(Action listener, bool notifyCurrentValue = false); 33 | 34 | void RemoveListener(Action listener); 35 | } 36 | } -------------------------------------------------------------------------------- /Runtime/Values/Variables/IVariable.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 26ee2b1d45484e51accb70c0db684bda 3 | timeCreated: 1656963426 -------------------------------------------------------------------------------- /Runtime/Values/Variables/IVariableWithHistory.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | 5 | public interface IVariableWithHistory : IVariable 6 | { 7 | internal VariableHelperWithHistory VariableHelperWithHistory { get; } 8 | } 9 | 10 | public interface IVariableWithHistory : IVariableWithHistory, IEvent 11 | #if UNIRX 12 | , IReactivePropertyWithHistory 13 | #endif 14 | { 15 | bool HasPreviousValue { get; } 16 | 17 | void AddListener(IListener listener, bool notifyCurrentValue = false); 18 | 19 | void RemoveListener(IListener listener); 20 | 21 | void AddListener(Action listener, bool notifyCurrentValue = false); 22 | 23 | void RemoveListener(Action listener); 24 | } 25 | } -------------------------------------------------------------------------------- /Runtime/Values/Variables/IVariableWithHistory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e0e447e0b66d4671a8ac5605a905e44b 3 | timeCreated: 1657222521 -------------------------------------------------------------------------------- /Runtime/Values/Variables/VariableHelper.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using UnityEngine; 6 | 7 | [Serializable] 8 | internal abstract class VariableHelper 9 | { 10 | [SerializeField] public StackTraceProvider StackTrace; 11 | 12 | public abstract EventHelperWithDefaultValue EventHelper { get; } 13 | 14 | public abstract void InvokeValueChangedEvents(); 15 | } 16 | 17 | [Serializable] 18 | internal class VariableHelper : VariableHelper 19 | { 20 | public static readonly IEqualityComparer DefaultEqualityComparer = UnityEqualityComparer.GetDefault(); 21 | 22 | [SerializeField] public T Value; 23 | [SerializeField] public bool ListenersExpanded; 24 | 25 | public EventHelperWithDefaultValue Event; 26 | 27 | public override EventHelperWithDefaultValue EventHelper => Event; 28 | 29 | private string _objectName; 30 | private string _typeName; 31 | 32 | public void Initialize(IVariable parentEvent, string objectName, string typeName) 33 | { 34 | _objectName = objectName; 35 | _typeName = typeName; 36 | Event = new EventHelperWithDefaultValue(parentEvent, () => Value); 37 | } 38 | 39 | public void SetValue(T value) 40 | { 41 | Value = value; 42 | StackTrace.AddStackTrace(Value); 43 | InvokeValueChangedEvents(); 44 | } 45 | 46 | public override void InvokeValueChangedEvents() 47 | { 48 | if ( !BaseEvent.CanBeInvoked(_objectName, _typeName)) 49 | return; 50 | 51 | Event.NotifyListeners(Value); 52 | } 53 | } 54 | 55 | } -------------------------------------------------------------------------------- /Runtime/Values/Variables/VariableHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ceaaca4ec86d44e4a9ba218c85a6fba4 3 | timeCreated: 1657450448 -------------------------------------------------------------------------------- /Runtime/Values/Variables/VariableInstancerWithHistory.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f6aa29a3beee410ba2a6d1fb3b955103 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: a594c8d085ce5db409b6c63e974a034f, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Values/Variables/VariableInstancer`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8396bf53571f40e3b5cb08ec7a6388c2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: f4c0c16c6e6b2ee49b4f53eba444bedc, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Values/Variables/VariableWithHistory`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dd7b35f1939e4c4f8bde9e3f3017e68d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: f0d68c78b92153841b8d97a075b84cfd, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Values/Variables/Variable`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 35f1f711725d47ef9c32084694a183c9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 848db987547512c48b8517675d7c0c5c, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e116b37c7c4fe9140b5fcf3802d990c8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Tests/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a835ca6d0e4a8d04e88d95ceea73fa9b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Tests/Editor/GenericScriptableArchitecture.EditorTests.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GenericScriptableArchitecture.EditorTests", 3 | "rootNamespace": "GenericScriptableArchitecture.EditorTests", 4 | "references": [ 5 | "GenericUnityObjects", 6 | "GenericScriptableArchitecture" 7 | ], 8 | "includePlatforms": [ 9 | "Editor" 10 | ], 11 | "excludePlatforms": [], 12 | "allowUnsafeCode": false, 13 | "overrideReferences": true, 14 | "precompiledReferences": [ 15 | "nunit.framework.dll" 16 | ], 17 | "autoReferenced": false, 18 | "defineConstraints": [ 19 | "UNITY_INCLUDE_TESTS" 20 | ], 21 | "versionDefines": [], 22 | "noEngineReferences": false 23 | } -------------------------------------------------------------------------------- /Tests/Editor/GenericScriptableArchitecture.EditorTests.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8f2f36ca1d29f7a49b56597e7aed7b5c 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Tests/Editor/ReferenceEquality.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1086971adc6a4f63b6336a9bf2d5148e 3 | timeCreated: 1613034557 -------------------------------------------------------------------------------- /Tests/Editor/ReferenceValueEquality.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.EditorTests 2 | { 3 | using GenericUnityObjects; 4 | using NUnit.Framework; 5 | 6 | public class ReferenceValueEquality 7 | { 8 | [Test] 9 | public void Variable_and_reference_with_same_constant_value_are_equal() 10 | { 11 | var variable = GenericScriptableObject.CreateInstance>(); 12 | variable.Value = 1; 13 | 14 | var reference = new Reference(1); 15 | 16 | Assert.That(variable, Is.EqualTo(reference)); 17 | } 18 | 19 | [Test] 20 | public void Variable_and_reference_with_different_constant_value_are_not_equal() 21 | { 22 | var variable = GenericScriptableObject.CreateInstance>(); 23 | variable.Value = 1; 24 | 25 | var reference = new Reference(2); 26 | 27 | Assert.That(variable, Is.Not.EqualTo(reference)); 28 | } 29 | 30 | [Test] 31 | public void Variable_and_reference_with_same_variable_value_are_equal() 32 | { 33 | var firstVariable = GenericScriptableObject.CreateInstance>(); 34 | firstVariable.Value = 1; 35 | 36 | var secondVariable = GenericScriptableObject.CreateInstance>(); 37 | secondVariable.Value = 1; 38 | var reference = new Reference(secondVariable); 39 | 40 | Assert.That(firstVariable, Is.EqualTo(reference)); 41 | } 42 | 43 | [Test] 44 | public void Variable_and_reference_with_different_variable_value_are_not_equal() 45 | { 46 | var firstVariable = GenericScriptableObject.CreateInstance>(); 47 | firstVariable.Value = 1; 48 | 49 | var secondVariable = GenericScriptableObject.CreateInstance>(); 50 | secondVariable.Value = 2; 51 | var reference = new Reference(secondVariable); 52 | 53 | Assert.That(firstVariable, Is.Not.EqualTo(reference)); 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /Tests/Editor/ReferenceValueEquality.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 821bc841e7e84113bd6534b8f985df4b 3 | timeCreated: 1613035928 -------------------------------------------------------------------------------- /Tests/Editor/VariableEquality.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.EditorTests 2 | { 3 | using System.Collections.Generic; 4 | using GenericUnityObjects; 5 | using NUnit.Framework; 6 | 7 | public class VariableEquality 8 | { 9 | [Test] 10 | public void Variables_with_same_values_are_equal() 11 | { 12 | var firstVariable = GenericScriptableObject.CreateInstance>(); 13 | firstVariable.Value = 1; 14 | 15 | var secondVariable = GenericScriptableObject.CreateInstance>(); 16 | secondVariable.Value = 1; 17 | 18 | Assert.That(firstVariable, Is.EqualTo(secondVariable)); 19 | } 20 | 21 | [Test] 22 | public void Variables_with_different_values_are_not_equal() 23 | { 24 | var firstVariable = GenericScriptableObject.CreateInstance>(); 25 | firstVariable.Value = 1; 26 | 27 | var secondVariable = GenericScriptableObject.CreateInstance>(); 28 | secondVariable.Value = 2; 29 | 30 | Assert.That(firstVariable, Is.Not.EqualTo(secondVariable)); 31 | } 32 | 33 | [Test] 34 | public void Variable_with_same_value_is_not_added_to_set() 35 | { 36 | var firstVariable = GenericScriptableObject.CreateInstance>(); 37 | firstVariable.Value = 1; 38 | 39 | var secondVariable = GenericScriptableObject.CreateInstance>(); 40 | secondVariable.Value = 1; 41 | 42 | var set = new HashSet> { firstVariable, secondVariable }; 43 | 44 | Assert.That(set.Count, Is.EqualTo(1)); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Tests/Editor/VariableEquality.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e88a9aff8aad9444ca57293d590e9437 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Timeline.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aebf21abc4a34b54f91124596c09dbc5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/.idea/.idea.TimelineInternals/.idea/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Timeline/.TimelineInternals/.idea/.idea.TimelineInternals/.idea/.gitignore -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/.idea/.idea.TimelineInternals/.idea/.name: -------------------------------------------------------------------------------- 1 | TimelineInternals -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/.idea/.idea.TimelineInternals/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/.idea/.idea.TimelineInternals/.idea/indexLayout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/.idea/.idea.TimelineInternals/.idea/projectSettingsUpdater.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/.idea/.idea.TimelineInternals/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/TimelineInternals.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TimelineInternals", "TimelineInternals\TimelineInternals.csproj", "{893F832E-BD26-4D05-9139-4CAD99B8E5BB}" 4 | EndProject 5 | Global 6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 7 | Debug|Any CPU = Debug|Any CPU 8 | Release|Any CPU = Release|Any CPU 9 | EndGlobalSection 10 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 11 | {893F832E-BD26-4D05-9139-4CAD99B8E5BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 12 | {893F832E-BD26-4D05-9139-4CAD99B8E5BB}.Debug|Any CPU.Build.0 = Debug|Any CPU 13 | {893F832E-BD26-4D05-9139-4CAD99B8E5BB}.Release|Any CPU.ActiveCfg = Release|Any CPU 14 | {893F832E-BD26-4D05-9139-4CAD99B8E5BB}.Release|Any CPU.Build.0 = Release|Any CPU 15 | EndGlobalSection 16 | EndGlobal 17 | -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/TimelineInternals/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("GenericScriptableArchitecture.Timeline")] -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/TimelineInternals/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("TimelineInternals")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("")] 11 | [assembly: AssemblyProduct("TimelineInternals")] 12 | [assembly: AssemblyCopyright("Copyright © 2021")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("893F832E-BD26-4D05-9139-4CAD99B8E5BB")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] -------------------------------------------------------------------------------- /Timeline/.TimelineInternals/TimelineInternals/TimeFieldAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline.Internals 2 | { 3 | internal class TimeFieldAttribute : UnityEngine.Timeline.TimeFieldAttribute { } 4 | } -------------------------------------------------------------------------------- /Timeline/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f870d7fd608d5a14e8720ddd01083848 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Timeline/Editor/EmitterGenerator.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline.Editor 2 | { 3 | using System; 4 | using GenericUnityObjects; 5 | using GenericUnityObjects.Editor.Util; 6 | using UnityEditor; 7 | using UnityEngine; 8 | 9 | [InitializeOnLoad] 10 | public static class EmitterGenerator 11 | { 12 | private static readonly Type _event1 = typeof(ScriptableEvent<>); 13 | private static readonly Type _event2 = typeof(ScriptableEvent<,>); 14 | private static readonly Type _event3 = typeof(ScriptableEvent<,,>); 15 | 16 | private static readonly Type _emitter1 = typeof(ScriptableEventEmitter<>); 17 | private static readonly Type _emitter2 = typeof(ScriptableEventEmitter<,>); 18 | private static readonly Type _emitter3 = typeof(ScriptableEventEmitter<,,>); 19 | 20 | static EmitterGenerator() 21 | { 22 | ConcreteClassCreator.ConcreteClassAdded += (typeWithoutArgs, genericArgs) => 23 | { 24 | var emitterType = GetMatchingEmitterType(typeWithoutArgs); 25 | 26 | if (emitterType != null) 27 | ConcreteClassCreator.CreateConcreteClass(emitterType, genericArgs); 28 | }; 29 | } 30 | 31 | private static Type GetMatchingEmitterType(Type typeWithoutArgs) 32 | { 33 | if (typeWithoutArgs == _event1) 34 | return _emitter1; 35 | 36 | if (typeWithoutArgs == _event2) 37 | return _emitter2; 38 | 39 | if (typeWithoutArgs == _event3) 40 | return _emitter3; 41 | 42 | return null; 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /Timeline/Editor/EmitterGenerator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 26190e79919e4ab6805f6b4312beafb1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Timeline/Editor/GenericScriptableArchitecture.Timeline.Editor.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GenericScriptableArchitecture.Timeline.Editor", 3 | "rootNamespace": "GenericScriptableArchitecture.Timeline.Editor", 4 | "references": [ 5 | "Unity.Timeline.Editor", 6 | "GenericScriptableArchitecture.Timeline", 7 | "Unity.Timeline", 8 | "GenericScriptableArchitecture", 9 | "GenericUnityObjects", 10 | "GenericUnityObjects.Editor", 11 | "TypeReferences" 12 | ], 13 | "includePlatforms": [ 14 | "Editor" 15 | ], 16 | "excludePlatforms": [], 17 | "allowUnsafeCode": false, 18 | "overrideReferences": true, 19 | "precompiledReferences": [ 20 | "GenericUnityEditorInternals.dll" 21 | ], 22 | "autoReferenced": true, 23 | "defineConstraints": [ 24 | "USE_TIMELINE" 25 | ], 26 | "versionDefines": [ 27 | { 28 | "name": "com.unity.timeline", 29 | "expression": "", 30 | "define": "USE_TIMELINE" 31 | }, 32 | { 33 | "name": "com.unity.timeline", 34 | "expression": "1.5", 35 | "define": "TIMELINE_1_5_OR_NEWER" 36 | } 37 | ], 38 | "noEngineReferences": false 39 | } -------------------------------------------------------------------------------- /Timeline/Editor/GenericScriptableArchitecture.Timeline.Editor.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8b6b8440825d6cd43bd740caf5fe3c72 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Timeline/Editor/OneEventCreator.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline.Editor 2 | { 3 | using UnityEditor.Timeline.Actions; 4 | 5 | [MenuEntry("Scriptable Events/Add Event Emitter", 13003)] 6 | public class OneEventCreator : ScriptableEventCreator 7 | { 8 | public override bool Execute(ActionContext context) => CreateGenericEmitter(typeof(ScriptableEvent<>), typeof(ScriptableEventEmitter<>), context, false); 9 | } 10 | 11 | [MenuEntry("Scriptable Events/Add Emitter From Event", 13004)] 12 | public class OneEventFromCreator : ScriptableEventCreator 13 | { 14 | public override bool Execute(ActionContext context) => CreateGenericEmitter(typeof(ScriptableEvent<>), typeof(ScriptableEventEmitter<>), context, true); 15 | } 16 | } -------------------------------------------------------------------------------- /Timeline/Editor/OneEventCreator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 265e04657d754f84b9a94de919d5f8c4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Timeline/Editor/ScriptableEventCreator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 485dddc04e254c8e93bd0e317640b7d6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Timeline/Editor/ThreeEventsCreator.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline.Editor 2 | { 3 | using UnityEditor.Timeline.Actions; 4 | 5 | [MenuEntry("Scriptable Events/Add Event Emitter", 13007)] 6 | public class ThreeEventsCreator : ScriptableEventCreator 7 | { 8 | public override bool Execute(ActionContext context) => CreateGenericEmitter(typeof(ScriptableEvent<,,>), typeof(ScriptableEventEmitter<,,>), context, false); 9 | } 10 | 11 | [MenuEntry("Scriptable Events/Add Emitter From Event", 13008)] 12 | public class ThreeEventsFromCreator : ScriptableEventCreator 13 | { 14 | public override bool Execute(ActionContext context) => CreateGenericEmitter(typeof(ScriptableEvent<,,>), typeof(ScriptableEventEmitter<,,>), context, true); 15 | } 16 | } -------------------------------------------------------------------------------- /Timeline/Editor/ThreeEventsCreator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e9380ff073704aaea09aa32baa251175 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Timeline/Editor/TwoEventsCreator.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline.Editor 2 | { 3 | using UnityEditor.Timeline.Actions; 4 | 5 | [MenuEntry("Scriptable Events/Add Event Emitter", 13005)] 6 | public class TwoEventsCreator : ScriptableEventCreator 7 | { 8 | public override bool Execute(ActionContext context) => CreateGenericEmitter(typeof(ScriptableEvent<,>), typeof(ScriptableEventEmitter<,>), context, false); 9 | } 10 | 11 | [MenuEntry("Scriptable Events/Add Emitter From Event", 13006)] 12 | public class TwoEventsFromCreator : ScriptableEventCreator 13 | { 14 | public override bool Execute(ActionContext context) => CreateGenericEmitter(typeof(ScriptableEvent<,>), typeof(ScriptableEventEmitter<,>), context, true); 15 | } 16 | } -------------------------------------------------------------------------------- /Timeline/Editor/TwoEventsCreator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 949aee3ade3a49f78d9ba7d45a5cacd5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Timeline/Editor/VoidEventCreator.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline.Editor 2 | { 3 | using GenericUnityObjects.UnityEditorInternals; 4 | using UnityEditor.Timeline.Actions; 5 | 6 | [MenuEntry("Scriptable Events/Add Event Emitter", 13001)] 7 | public class VoidEventCreator : ScriptableEventCreator 8 | { 9 | public override bool Execute(ActionContext context) 10 | { 11 | if (context.invocationTime == null) 12 | return false; 13 | 14 | AddMarkers(context, typeof(ScriptableEventEmitter), null); 15 | return true; 16 | } 17 | } 18 | 19 | [MenuEntry("Scriptable Events/Add Emitter From Event", 13002)] 20 | public class VoidEventFromCreator : ScriptableEventCreator 21 | { 22 | public override bool Execute(ActionContext context) 23 | { 24 | ObjectSelectorHelper.ShowGenericSelector(null, null, typeof(ScriptableEvent), true, "Scriptable Event", 25 | obj => 26 | { 27 | if (obj != null) 28 | AddMarkers(context, typeof(ScriptableEventEmitter), obj); 29 | }); 30 | 31 | return true; 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /Timeline/Editor/VoidEventCreator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0ac140a647284774b4c621b6d5ca7857 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Timeline/Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: df8e4a06ef97a27408729b9e5982b7bb 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Timeline/Runtime/GenericScriptableArchitecture.Timeline.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GenericScriptableArchitecture.Timeline", 3 | "rootNamespace": "GenericScriptableArchitecture.Timeline", 4 | "references": [ 5 | "GenericScriptableArchitecture", 6 | "Unity.Timeline", 7 | "GenericUnityObjects" 8 | ], 9 | "includePlatforms": [], 10 | "excludePlatforms": [], 11 | "allowUnsafeCode": false, 12 | "overrideReferences": true, 13 | "precompiledReferences": [ 14 | "TimelineInternals.dll" 15 | ], 16 | "autoReferenced": true, 17 | "defineConstraints": [ 18 | "USE_TIMELINE" 19 | ], 20 | "versionDefines": [ 21 | { 22 | "name": "com.unity.timeline", 23 | "expression": "", 24 | "define": "USE_TIMELINE" 25 | } 26 | ], 27 | "noEngineReferences": false 28 | } -------------------------------------------------------------------------------- /Timeline/Runtime/GenericScriptableArchitecture.Timeline.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e5112f3f59fe2046a07e37f1f26484c 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d0e20cd72dcd417aa5f396a6a4c81285 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/BaseScriptableEventEmitter.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline 2 | { 3 | using System; 4 | using GenericUnityObjects; 5 | using UnityEngine; 6 | using UnityEngine.Playables; 7 | using UnityEngine.Timeline; 8 | 9 | #if GSA_TIMELINE 10 | using Internals; 11 | #endif 12 | 13 | /// 14 | /// Marker that invokes an attached event when triggered. A game object that has PlayableDirector component must 15 | /// also have a component for events to be triggered. 16 | /// 17 | [Serializable] 18 | public abstract class BaseScriptableEventEmitter : GenericScriptableObject, IMarker, INotificationOptionProvider, INotification 19 | { 20 | [SerializeField] private bool _retroactive; 21 | [SerializeField] private bool _emitOnce; 22 | 23 | protected abstract BaseScriptableEvent BaseEvent { get; } 24 | 25 | public abstract void InvokeEvent(); 26 | 27 | PropertyName INotification.id => BaseEvent == null ? new PropertyName(string.Empty) : new PropertyName(BaseEvent.name); 28 | 29 | NotificationFlags INotificationOptionProvider.flags => 30 | (_retroactive ? NotificationFlags.Retroactive : default) 31 | | (_emitOnce ? NotificationFlags.TriggerOnce : default); 32 | 33 | #region Marker Code 34 | 35 | [SerializeField, Tooltip("Time for the marker"), 36 | #if GSA_TIMELINE 37 | TimeField 38 | #endif 39 | ] private double m_Time; 40 | 41 | /// 42 | public TrackAsset parent { get; private set; } 43 | 44 | /// 45 | /// 46 | /// The marker time cannot be negative. 47 | /// 48 | public double time 49 | { 50 | get => m_Time; 51 | set => m_Time = Math.Max(value, 0); 52 | } 53 | 54 | /// 55 | void IMarker.Initialize(TrackAsset parentTrack) 56 | { 57 | // We only really want to update the parent when the object is first deserialized 58 | // If not a cloned track would "steal" the source's markers 59 | if (parent == null) 60 | { 61 | parent = parentTrack; 62 | } 63 | } 64 | 65 | #endregion 66 | } 67 | } -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/BaseScriptableEventEmitter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 162faadb181047148b6daffbb1c05551 3 | timeCreated: 1617207937 -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableEventEmitter.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline 2 | { 3 | using UnityEngine; 4 | using UnityEngine.Timeline; 5 | 6 | /// 7 | [ExcludeFromPreset, HideInMenu] 8 | public class ScriptableEventEmitter : BaseScriptableEventEmitter 9 | { 10 | [SerializeField] private ScriptableEvent _event; 11 | 12 | protected override BaseScriptableEvent BaseEvent => _event; 13 | 14 | public override void InvokeEvent() 15 | { 16 | if (_event == null) 17 | { 18 | Debug.LogWarning("Marker does not have an assigned event, so it will not trigger anything."); 19 | return; 20 | } 21 | 22 | _event.Invoke(); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableEventEmitter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f225d0335b39481087ae6caf8027b68a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableEventEmitter`1.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline 2 | { 3 | using System; 4 | using GenericUnityObjects; 5 | using UnityEngine; 6 | using UnityEngine.Timeline; 7 | 8 | /// 9 | [Serializable, ApplyToChildren(typeof(HideInMenuAttribute))] 10 | public class ScriptableEventEmitter : BaseScriptableEventEmitter 11 | { 12 | [SerializeField] private ScriptableEvent _event; 13 | [SerializeField] private T _arg0; 14 | 15 | protected override BaseScriptableEvent BaseEvent => _event; 16 | 17 | public override void InvokeEvent() 18 | { 19 | if (_event == null) 20 | { 21 | Debug.LogWarning("Marker does not have an assigned event, so it will not trigger anything."); 22 | return; 23 | } 24 | 25 | _event.Invoke(_arg0); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableEventEmitter`1.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 935ecf86bcab4cb3b1dc812da9f3c2b8 3 | timeCreated: 1617207511 -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableEventEmitter`2.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline 2 | { 3 | using System; 4 | using GenericUnityObjects; 5 | using UnityEngine; 6 | using UnityEngine.Timeline; 7 | 8 | /// 9 | [Serializable, ApplyToChildren(typeof(HideInMenuAttribute))] 10 | public class ScriptableEventEmitter : BaseScriptableEventEmitter 11 | { 12 | [SerializeField] private ScriptableEvent _event; 13 | [SerializeField] private T1 _arg0; 14 | [SerializeField] private T2 _arg1; 15 | 16 | protected override BaseScriptableEvent BaseEvent => _event; 17 | 18 | public override void InvokeEvent() 19 | { 20 | if (_event == null) 21 | { 22 | Debug.LogWarning("Marker does not have an assigned event, so it will not trigger anything."); 23 | return; 24 | } 25 | 26 | _event.Invoke(_arg0, _arg1); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableEventEmitter`2.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 59640b2462bc4023a0d64a9cfc5d2e62 3 | timeCreated: 1617208090 -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableEventEmitter`3.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline 2 | { 3 | using System; 4 | using GenericUnityObjects; 5 | using UnityEngine; 6 | using UnityEngine.Timeline; 7 | 8 | /// 9 | [Serializable, ApplyToChildren(typeof(HideInMenuAttribute))] 10 | public class ScriptableEventEmitter : BaseScriptableEventEmitter 11 | { 12 | [SerializeField] private ScriptableEvent _event; 13 | [SerializeField] private T1 _arg0; 14 | [SerializeField] private T2 _arg1; 15 | [SerializeField] private T3 _arg2; 16 | 17 | protected override BaseScriptableEvent BaseEvent => _event; 18 | 19 | public override void InvokeEvent() 20 | { 21 | if (_event == null) 22 | { 23 | Debug.LogWarning("Marker does not have an assigned event, so it will not trigger anything."); 24 | return; 25 | } 26 | 27 | _event.Invoke(_arg0, _arg1, _arg2); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableEventEmitter`3.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d56b5b320bb047d385036ac707243b33 3 | timeCreated: 1617208100 -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableSignalRelayer.cs: -------------------------------------------------------------------------------- 1 | namespace GenericScriptableArchitecture.Timeline 2 | { 3 | using UnityEngine; 4 | using UnityEngine.Playables; 5 | 6 | /// 7 | /// A component that listens for signals from Timeline and invokes appropriate ScriptableEvents. 8 | /// 9 | /// 10 | public class ScriptableSignalRelayer : MonoBehaviour, INotificationReceiver 11 | { 12 | public void OnNotify(Playable _, INotification notification, object __) 13 | { 14 | if (notification is BaseScriptableEventEmitter eventEmitter) 15 | eventEmitter.InvokeEvent(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Timeline/Runtime/ScriptableEventEmitters/ScriptableSignalRelayer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ab65dae6ba6a4232bf90147e10d4cc87 3 | timeCreated: 1617204699 -------------------------------------------------------------------------------- /Timeline/TimelineInternals.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SolidAlloy/GenericScriptableArchitecture/0149ffeac47b8170da8026735988c8c629f30af3/Timeline/TimelineInternals.dll -------------------------------------------------------------------------------- /Timeline/TimelineInternals.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: de1845147dca10d4cbee0f970c0746a8 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: 9 | - GSA_TIMELINE 10 | isPreloaded: 0 11 | isOverridable: 1 12 | isExplicitlyReferenced: 1 13 | validateReferences: 0 14 | platformData: 15 | - first: 16 | : Any 17 | second: 18 | enabled: 0 19 | settings: 20 | Exclude Android: 0 21 | Exclude Editor: 0 22 | Exclude Linux64: 0 23 | Exclude OSXUniversal: 0 24 | Exclude Win: 0 25 | Exclude Win64: 0 26 | - first: 27 | Android: Android 28 | second: 29 | enabled: 1 30 | settings: 31 | CPU: ARMv7 32 | - first: 33 | Any: 34 | second: 35 | enabled: 1 36 | settings: {} 37 | - first: 38 | Editor: Editor 39 | second: 40 | enabled: 1 41 | settings: 42 | CPU: AnyCPU 43 | DefaultValueInitialized: true 44 | OS: AnyOS 45 | - first: 46 | Standalone: Linux64 47 | second: 48 | enabled: 1 49 | settings: 50 | CPU: None 51 | - first: 52 | Standalone: OSXUniversal 53 | second: 54 | enabled: 1 55 | settings: 56 | CPU: None 57 | - first: 58 | Standalone: Win 59 | second: 60 | enabled: 1 61 | settings: 62 | CPU: x86 63 | - first: 64 | Standalone: Win64 65 | second: 66 | enabled: 1 67 | settings: 68 | CPU: x86_64 69 | - first: 70 | Windows Store Apps: WindowsStoreApps 71 | second: 72 | enabled: 0 73 | settings: 74 | CPU: AnyCPU 75 | userData: 76 | assetBundleName: 77 | assetBundleVariant: 78 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.solidalloy.generic-scriptable-architecture", 3 | "version": "1.4.1", 4 | "displayName": "Generic ScriptableObject Architecture", 5 | "description": "ScriptableObject architecture with small, easy-to-expand codebase, and simple UI.", 6 | "dependencies": { 7 | "com.solidalloy.util": "1.40.0", 8 | "com.solidalloy.generic-unity-objects": "2.17.1", 9 | "com.solidalloy.type-references": "2.16.0", 10 | "com.unity.settings-manager": "1.0.3", 11 | "com.solidalloy.extevents": "1.7.0" 12 | }, 13 | "keywords": [ 14 | "scriptable", 15 | "event", 16 | "ScriptableObject", 17 | "architecture", 18 | "tool", 19 | "UnityEvent", 20 | "generic" 21 | ], 22 | "author": { 23 | "name": "SolidAlloy", 24 | "url": "https://github.com/SolidAlloy/" 25 | }, 26 | "type": "tool", 27 | "unity": "2020.2" 28 | } 29 | -------------------------------------------------------------------------------- /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 63fa7cec53ef23a4f8c48f80c8a67ebc 3 | PackageManifestImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------