├── .gitignore ├── Assets ├── Scenes.meta ├── Scenes │ ├── SampleScene.unity │ └── SampleScene.unity.meta ├── Scripts.meta └── Scripts │ ├── EventBusSystem.meta │ ├── EventBusSystem │ ├── EventBus.cs │ ├── EventBus.cs.meta │ ├── EventBusHelper.cs │ ├── EventBusHelper.cs.meta │ ├── IGlobalSubscriber.cs │ ├── IGlobalSubscriber.cs.meta │ ├── SubscribersList.cs │ └── SubscribersList.cs.meta │ ├── Example.meta │ └── Example │ ├── IQuickSaveLoadHandler.cs │ ├── IQuickSaveLoadHandler.cs.meta │ ├── InputSystem.cs │ ├── InputSystem.cs.meta │ ├── SaveLoadSystem.cs │ └── SaveLoadSystem.cs.meta ├── LICENSE ├── Packages └── manifest.json └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 4 | # 5 | /[Ll]ibrary/ 6 | /[Tt]emp/ 7 | /[Oo]bj/ 8 | /[Bb]uild/ 9 | /[Bb]uilds/ 10 | /[Ll]ogs/ 11 | /[Mm]emoryCaptures/ 12 | 13 | # Asset meta data should only be ignored when the corresponding asset is also ignored 14 | !/[Aa]ssets/**/*.meta 15 | 16 | # Uncomment this line if you wish to ignore the asset store tools plugin 17 | # /[Aa]ssets/AssetStoreTools* 18 | 19 | # Autogenerated Jetbrains Rider plugin 20 | [Aa]ssets/Plugins/Editor/JetBrains* 21 | 22 | # Visual Studio cache directory 23 | .vs/ 24 | 25 | # Gradle cache directory 26 | .gradle/ 27 | 28 | # Autogenerated VS/MD/Consulo solution and project files 29 | ExportedObj/ 30 | .consulo/ 31 | *.csproj 32 | *.unityproj 33 | *.sln 34 | *.suo 35 | *.tmp 36 | *.user 37 | *.userprefs 38 | *.pidb 39 | *.booproj 40 | *.svd 41 | *.pdb 42 | *.mdb 43 | *.opendb 44 | *.VC.db 45 | 46 | # Unity3D generated meta files 47 | *.pidb.meta 48 | *.pdb.meta 49 | *.mdb.meta 50 | 51 | # Unity3D generated file on crash reports 52 | sysinfo.txt 53 | 54 | # Builds 55 | *.apk 56 | *.unitypackage 57 | 58 | # Crashlytics generated file 59 | crashlytics-build.properties 60 | 61 | /.idea/.idea.EventBus/ 62 | /ProjectSettings/ 63 | -------------------------------------------------------------------------------- /Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 78339b25202e64423b35f94a2e1933ae 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 3 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 0 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 0 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_UseShadowmask: 1 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &421501049 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInstance: {fileID: 0} 129 | m_PrefabAsset: {fileID: 0} 130 | serializedVersion: 6 131 | m_Component: 132 | - component: {fileID: 421501052} 133 | - component: {fileID: 421501051} 134 | - component: {fileID: 421501050} 135 | m_Layer: 0 136 | m_Name: GameObject 137 | m_TagString: Untagged 138 | m_Icon: {fileID: 0} 139 | m_NavMeshLayer: 0 140 | m_StaticEditorFlags: 0 141 | m_IsActive: 1 142 | --- !u!114 &421501050 143 | MonoBehaviour: 144 | m_ObjectHideFlags: 0 145 | m_CorrespondingSourceObject: {fileID: 0} 146 | m_PrefabInstance: {fileID: 0} 147 | m_PrefabAsset: {fileID: 0} 148 | m_GameObject: {fileID: 421501049} 149 | m_Enabled: 1 150 | m_EditorHideFlags: 0 151 | m_Script: {fileID: 11500000, guid: b07a791659b8c4749848811c86e164ce, type: 3} 152 | m_Name: 153 | m_EditorClassIdentifier: 154 | --- !u!114 &421501051 155 | MonoBehaviour: 156 | m_ObjectHideFlags: 0 157 | m_CorrespondingSourceObject: {fileID: 0} 158 | m_PrefabInstance: {fileID: 0} 159 | m_PrefabAsset: {fileID: 0} 160 | m_GameObject: {fileID: 421501049} 161 | m_Enabled: 1 162 | m_EditorHideFlags: 0 163 | m_Script: {fileID: 11500000, guid: bfb581d25a67c48d2a2ea99455f1b13b, type: 3} 164 | m_Name: 165 | m_EditorClassIdentifier: 166 | --- !u!4 &421501052 167 | Transform: 168 | m_ObjectHideFlags: 0 169 | m_CorrespondingSourceObject: {fileID: 0} 170 | m_PrefabInstance: {fileID: 0} 171 | m_PrefabAsset: {fileID: 0} 172 | m_GameObject: {fileID: 421501049} 173 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 174 | m_LocalPosition: {x: 0, y: 0, z: 0} 175 | m_LocalScale: {x: 1, y: 1, z: 1} 176 | m_Children: [] 177 | m_Father: {fileID: 0} 178 | m_RootOrder: 1 179 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 180 | --- !u!1 &519420028 181 | GameObject: 182 | m_ObjectHideFlags: 0 183 | m_CorrespondingSourceObject: {fileID: 0} 184 | m_PrefabInstance: {fileID: 0} 185 | m_PrefabAsset: {fileID: 0} 186 | serializedVersion: 6 187 | m_Component: 188 | - component: {fileID: 519420032} 189 | - component: {fileID: 519420031} 190 | - component: {fileID: 519420029} 191 | m_Layer: 0 192 | m_Name: Main Camera 193 | m_TagString: MainCamera 194 | m_Icon: {fileID: 0} 195 | m_NavMeshLayer: 0 196 | m_StaticEditorFlags: 0 197 | m_IsActive: 1 198 | --- !u!81 &519420029 199 | AudioListener: 200 | m_ObjectHideFlags: 0 201 | m_CorrespondingSourceObject: {fileID: 0} 202 | m_PrefabInstance: {fileID: 0} 203 | m_PrefabAsset: {fileID: 0} 204 | m_GameObject: {fileID: 519420028} 205 | m_Enabled: 1 206 | --- !u!20 &519420031 207 | Camera: 208 | m_ObjectHideFlags: 0 209 | m_CorrespondingSourceObject: {fileID: 0} 210 | m_PrefabInstance: {fileID: 0} 211 | m_PrefabAsset: {fileID: 0} 212 | m_GameObject: {fileID: 519420028} 213 | m_Enabled: 1 214 | serializedVersion: 2 215 | m_ClearFlags: 2 216 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 217 | m_projectionMatrixMode: 1 218 | m_GateFitMode: 2 219 | m_FOVAxisMode: 0 220 | m_SensorSize: {x: 36, y: 24} 221 | m_LensShift: {x: 0, y: 0} 222 | m_FocalLength: 50 223 | m_NormalizedViewPortRect: 224 | serializedVersion: 2 225 | x: 0 226 | y: 0 227 | width: 1 228 | height: 1 229 | near clip plane: 0.3 230 | far clip plane: 1000 231 | field of view: 60 232 | orthographic: 1 233 | orthographic size: 5 234 | m_Depth: -1 235 | m_CullingMask: 236 | serializedVersion: 2 237 | m_Bits: 4294967295 238 | m_RenderingPath: -1 239 | m_TargetTexture: {fileID: 0} 240 | m_TargetDisplay: 0 241 | m_TargetEye: 0 242 | m_HDR: 1 243 | m_AllowMSAA: 0 244 | m_AllowDynamicResolution: 0 245 | m_ForceIntoRT: 0 246 | m_OcclusionCulling: 0 247 | m_StereoConvergence: 10 248 | m_StereoSeparation: 0.022 249 | --- !u!4 &519420032 250 | Transform: 251 | m_ObjectHideFlags: 0 252 | m_CorrespondingSourceObject: {fileID: 0} 253 | m_PrefabInstance: {fileID: 0} 254 | m_PrefabAsset: {fileID: 0} 255 | m_GameObject: {fileID: 519420028} 256 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 257 | m_LocalPosition: {x: 0, y: 0, z: -10} 258 | m_LocalScale: {x: 1, y: 1, z: 1} 259 | m_Children: [] 260 | m_Father: {fileID: 0} 261 | m_RootOrder: 0 262 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 263 | -------------------------------------------------------------------------------- /Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2cda990e2423bbf4892e6590ba056729 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aa67a4c3d08db40aca227525b99522b9 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/EventBusSystem.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b00cf2d3f448845a48a6e55ca0c6dd1d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/EventBusSystem/EventBus.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | namespace EventBusSystem 6 | { 7 | public static class EventBus 8 | { 9 | private static Dictionary> s_Subscribers 10 | = new Dictionary>(); 11 | 12 | public static void Subscribe(IGlobalSubscriber subscriber) 13 | { 14 | List subscriberTypes = EventBusHelper.GetSubscriberTypes(subscriber); 15 | foreach (Type t in subscriberTypes) 16 | { 17 | if (!s_Subscribers.ContainsKey(t)) 18 | { 19 | s_Subscribers[t] = new SubscribersList(); 20 | } 21 | s_Subscribers[t].Add(subscriber); 22 | } 23 | } 24 | 25 | public static void Unsubscribe(IGlobalSubscriber subscriber) 26 | { 27 | List subscriberTypes = EventBusHelper.GetSubscriberTypes(subscriber); 28 | foreach (Type t in subscriberTypes) 29 | { 30 | if (s_Subscribers.ContainsKey(t)) 31 | s_Subscribers[t].Remove(subscriber); 32 | } 33 | } 34 | 35 | public static void RaiseEvent(Action action) 36 | where TSubscriber : class, IGlobalSubscriber 37 | { 38 | SubscribersList subscribers = s_Subscribers[typeof(TSubscriber)]; 39 | 40 | subscribers.Executing = true; 41 | foreach (IGlobalSubscriber subscriber in subscribers.List) 42 | { 43 | try 44 | { 45 | action.Invoke(subscriber as TSubscriber); 46 | } 47 | catch (Exception e) 48 | { 49 | Debug.LogError(e); 50 | } 51 | } 52 | subscribers.Executing = false; 53 | subscribers.Cleanup(); 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /Assets/Scripts/EventBusSystem/EventBus.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b92aa587333d42b39dd6c8ea940d09c2 3 | timeCreated: 1566332169 -------------------------------------------------------------------------------- /Assets/Scripts/EventBusSystem/EventBusHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace EventBusSystem 6 | { 7 | internal static class EventBusHelper 8 | { 9 | private static Dictionary> s_CashedSubscriberTypes = 10 | new Dictionary>(); 11 | 12 | public static List GetSubscriberTypes( 13 | IGlobalSubscriber globalSubscriber) 14 | { 15 | Type type = globalSubscriber.GetType(); 16 | if (s_CashedSubscriberTypes.ContainsKey(type)) 17 | { 18 | return s_CashedSubscriberTypes[type]; 19 | } 20 | 21 | List subscriberTypes = type 22 | .GetInterfaces() 23 | .Where(t => t.GetInterfaces() 24 | .Contains(typeof(IGlobalSubscriber))) 25 | .ToList(); 26 | 27 | s_CashedSubscriberTypes[type] = subscriberTypes; 28 | return subscriberTypes; 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /Assets/Scripts/EventBusSystem/EventBusHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1663a33d9b494437af9fa062ec006f64 3 | timeCreated: 1566332384 -------------------------------------------------------------------------------- /Assets/Scripts/EventBusSystem/IGlobalSubscriber.cs: -------------------------------------------------------------------------------- 1 | namespace EventBusSystem 2 | { 3 | public interface IGlobalSubscriber 4 | { } 5 | } -------------------------------------------------------------------------------- /Assets/Scripts/EventBusSystem/IGlobalSubscriber.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 92c0bf6ffd0844cf9e58953fdd278a07 3 | timeCreated: 1566332155 -------------------------------------------------------------------------------- /Assets/Scripts/EventBusSystem/SubscribersList.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace EventBusSystem 4 | { 5 | internal class SubscribersList where TSubscriber : class 6 | { 7 | private bool m_NeedsCleanUp = false; 8 | 9 | public bool Executing; 10 | 11 | public readonly List List = new List(); 12 | 13 | public void Add(TSubscriber subscriber) 14 | { 15 | List.Add(subscriber); 16 | } 17 | 18 | public void Remove(TSubscriber subscriber) 19 | { 20 | if (Executing) 21 | { 22 | var i = List.IndexOf(subscriber); 23 | if (i >= 0) 24 | { 25 | m_NeedsCleanUp = true; 26 | List[i] = null; 27 | } 28 | } 29 | else 30 | { 31 | List.Remove(subscriber); 32 | } 33 | } 34 | 35 | public void Cleanup() 36 | { 37 | if (!m_NeedsCleanUp) 38 | { 39 | return; 40 | } 41 | 42 | List.RemoveAll(s => s == null); 43 | m_NeedsCleanUp = false; 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /Assets/Scripts/EventBusSystem/SubscribersList.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6041ad98b90e499ca99610d7f3fc7e3f 3 | timeCreated: 1602627498 -------------------------------------------------------------------------------- /Assets/Scripts/Example.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3c1366596703649898a73e0725611cf0 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/Example/IQuickSaveLoadHandler.cs: -------------------------------------------------------------------------------- 1 | using EventBusSystem; 2 | 3 | namespace Example 4 | { 5 | public interface IQuickSaveLoadHandler : IGlobalSubscriber 6 | { 7 | void HandleQuickSave(); 8 | void HandleQuickLoad(); 9 | } 10 | } -------------------------------------------------------------------------------- /Assets/Scripts/Example/IQuickSaveLoadHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d315d43aaffd4ee6a677cee7ad2bdfc2 3 | timeCreated: 1602707601 -------------------------------------------------------------------------------- /Assets/Scripts/Example/InputSystem.cs: -------------------------------------------------------------------------------- 1 | using EventBusSystem; 2 | using UnityEngine; 3 | 4 | namespace Example 5 | { 6 | public class InputSystem : MonoBehaviour 7 | { 8 | void Update() 9 | { 10 | if (Input.GetKeyDown(KeyCode.S)) 11 | { 12 | EventBus.RaiseEvent(h => h.HandleQuickSave()); 13 | } 14 | 15 | if (Input.GetKeyDown(KeyCode.L)) 16 | { 17 | EventBus.RaiseEvent(h => h.HandleQuickLoad()); 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Assets/Scripts/Example/InputSystem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bfb581d25a67c48d2a2ea99455f1b13b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Example/SaveLoadSystem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using EventBusSystem; 3 | using UnityEngine; 4 | 5 | namespace Example 6 | { 7 | public class SaveLoadSystem : MonoBehaviour, IQuickSaveLoadHandler 8 | { 9 | private void OnEnable() 10 | { 11 | EventBus.Subscribe(this); 12 | } 13 | 14 | private void OnDisable() 15 | { 16 | EventBus.Unsubscribe(this); 17 | } 18 | 19 | public void HandleQuickSave() 20 | { 21 | Debug.Log("Quick save"); 22 | } 23 | 24 | public void HandleQuickLoad() 25 | { 26 | Debug.Log("Quick load"); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Assets/Scripts/Example/SaveLoadSystem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b07a791659b8c4749848811c86e164ce 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | 3 | Copyright (C) 2021 Owlcat Games 4 | 5 | Everyone is permitted to copy and distribute verbatim or modified 6 | copies of this license document, and changing it is allowed as long 7 | as the name is changed. 8 | 9 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 10 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 11 | 12 | 0. You just DO WHAT THE FUCK YOU WANT TO. 13 | -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.ide.rider": "1.1.4" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EventBus 2 | Event system for Unity based on interfaces 3 | ## Made in [Owlcat Games](https://owlcatgames.com/) 4 | --------------------------------------------------------------------------------