├── .gitignore
├── LICENSE
├── README.md
├── documentation
└── images
│ ├── data_driven_message.png
│ ├── editor_stats.png
│ ├── manifest_example.png
│ ├── message_entity.png
│ ├── repository_card.png
│ ├── systems_execution_order.png
│ ├── title_logo.png
│ └── use_case_ui.png
└── src
└── ecs-messages
├── .idea
└── .idea.ecs-messages
│ └── .idea
│ ├── .gitignore
│ ├── encodings.xml
│ ├── indexLayout.xml
│ └── vcs.xml
├── Assembly-CSharp.csproj.DotSettings
├── Assets
├── Package.meta
├── Package
│ ├── Editor.meta
│ ├── Editor
│ │ ├── ECSMessages.Editor.asmdef
│ │ ├── ECSMessages.Editor.asmdef.meta
│ │ ├── StatsWindow.meta
│ │ └── StatsWindow
│ │ │ ├── MessagesStatsWindow.cs
│ │ │ └── MessagesStatsWindow.cs.meta
│ ├── Runtime.meta
│ ├── Runtime
│ │ ├── Components.meta
│ │ ├── Components
│ │ │ ├── IMessageComponent.cs
│ │ │ ├── IMessageComponent.cs.meta
│ │ │ ├── Meta.meta
│ │ │ ├── Meta
│ │ │ │ ├── MessageEditorData.cs
│ │ │ │ ├── MessageEditorData.cs.meta
│ │ │ │ ├── MessageLifetimeOneFrameTag.cs
│ │ │ │ ├── MessageLifetimeOneFrameTag.cs.meta
│ │ │ │ ├── MessageLifetimeTimeInterval.cs
│ │ │ │ ├── MessageLifetimeTimeInterval.cs.meta
│ │ │ │ ├── MessageLifetimeUnlimitedTag.cs
│ │ │ │ ├── MessageLifetimeUnlimitedTag.cs.meta
│ │ │ │ ├── MessageTag.cs
│ │ │ │ └── MessageTag.cs.meta
│ │ │ ├── RemoveCommands.meta
│ │ │ └── RemoveCommands
│ │ │ │ ├── RemoveMessagesByComponentCommand.cs
│ │ │ │ └── RemoveMessagesByComponentCommand.cs.meta
│ │ ├── ECSMessages.asmdef
│ │ ├── ECSMessages.asmdef.meta
│ │ ├── Service.meta
│ │ ├── Service
│ │ │ ├── MessageBroadcaster.cs
│ │ │ ├── MessageBroadcaster.cs.meta
│ │ │ ├── MessageBroadcasterWorldsMap.cs
│ │ │ ├── MessageBroadcasterWorldsMap.cs.meta
│ │ │ ├── MessageBuilder.cs
│ │ │ ├── MessageBuilder.cs.meta
│ │ │ ├── MessageBuilder.cs~
│ │ │ ├── MessageLifetime.cs
│ │ │ ├── MessageLifetime.cs.meta
│ │ │ ├── RandomKey.cs
│ │ │ ├── RandomKey.cs.meta
│ │ │ ├── WorldsCollectionExtensions.cs
│ │ │ └── WorldsCollectionExtensions.cs.meta
│ │ ├── SystemGroups.meta
│ │ ├── SystemGroups
│ │ │ ├── MessagesSystemGroup.cs
│ │ │ └── MessagesSystemGroup.cs.meta
│ │ ├── Systems.meta
│ │ └── Systems
│ │ │ ├── MessagesDateTimeSystem.cs
│ │ │ ├── MessagesDateTimeSystem.cs.meta
│ │ │ ├── MessagesOneFrameLifetimeRemoveSystem.cs
│ │ │ ├── MessagesOneFrameLifetimeRemoveSystem.cs.meta
│ │ │ ├── MessagesRemoveByComponentCommandListenerSystem.cs
│ │ │ ├── MessagesRemoveByComponentCommandListenerSystem.cs.meta
│ │ │ ├── MessagesTimeIntervalLifetimeRemoveSystem.cs
│ │ │ ├── MessagesTimeIntervalLifetimeRemoveSystem.cs.meta
│ │ │ ├── MessagesTimeIntervalLifetimeTimerSystem.cs
│ │ │ └── MessagesTimeIntervalLifetimeTimerSystem.cs.meta
│ ├── Samples~
│ │ ├── SystemToSystemExample.meta
│ │ ├── SystemToSystemExample
│ │ │ ├── CodeBase.meta
│ │ │ ├── CodeBase
│ │ │ │ ├── CountdownAnalyticsTrackingSystem.cs
│ │ │ │ ├── CountdownAnalyticsTrackingSystem.cs.meta
│ │ │ │ ├── CountdownData.cs
│ │ │ │ ├── CountdownData.cs.meta
│ │ │ │ ├── CountdownEndAnalyticsEvent.cs
│ │ │ │ ├── CountdownEndAnalyticsEvent.cs.meta
│ │ │ │ ├── CountdownSystem.cs
│ │ │ │ ├── CountdownSystem.cs.meta
│ │ │ │ ├── SystemsExampleBootstrap.cs
│ │ │ │ └── SystemsExampleBootstrap.cs.meta
│ │ │ ├── SystemToSystem.unity
│ │ │ └── SystemToSystem.unity.meta
│ │ ├── UserInterfaceExample.meta
│ │ └── UserInterfaceExample
│ │ │ ├── CodeBase.meta
│ │ │ ├── CodeBase
│ │ │ ├── PauseGameButton.cs
│ │ │ ├── PauseGameButton.cs.meta
│ │ │ ├── PauseGameCommand.cs
│ │ │ ├── PauseGameCommand.cs.meta
│ │ │ ├── PauseGameSystem.cs
│ │ │ ├── PauseGameSystem.cs.meta
│ │ │ ├── StartGameButton.cs
│ │ │ ├── StartGameButton.cs.meta
│ │ │ ├── StartGameCommand.cs
│ │ │ ├── StartGameCommand.cs.meta
│ │ │ ├── StartGameSystem.cs
│ │ │ ├── StartGameSystem.cs.meta
│ │ │ ├── UIExampleBootstrap.cs
│ │ │ └── UIExampleBootstrap.cs.meta
│ │ │ ├── UI.unity
│ │ │ └── UI.unity.meta
│ ├── Tests.meta
│ ├── Tests
│ │ ├── Runtime.meta
│ │ └── Runtime
│ │ │ ├── ECSMessages.Tests.asmdef
│ │ │ ├── ECSMessages.Tests.asmdef.meta
│ │ │ ├── OneFrameMessagesTests.cs
│ │ │ ├── OneFrameMessagesTests.cs.meta
│ │ │ ├── PostAPIMessagesTests.cs
│ │ │ ├── PostAPIMessagesTests.cs.meta
│ │ │ ├── RemoveAPIMessagesTests.cs
│ │ │ ├── RemoveAPIMessagesTests.cs.meta
│ │ │ ├── TestContentData.cs
│ │ │ ├── TestContentData.cs.meta
│ │ │ ├── TestUtils.cs
│ │ │ ├── TestUtils.cs.meta
│ │ │ ├── TimeIntervalMessagesTests.cs
│ │ │ ├── TimeIntervalMessagesTests.cs.meta
│ │ │ ├── UnlimitedMessagesTests.cs
│ │ │ └── UnlimitedMessagesTests.cs.meta
│ ├── package.json
│ └── package.json.meta
├── Samples.meta
├── Samples
│ ├── SystemToSystemExample.meta
│ ├── SystemToSystemExample
│ │ ├── CodeBase.meta
│ │ ├── CodeBase
│ │ │ ├── CountdownAnalyticsTrackingSystem.cs
│ │ │ ├── CountdownAnalyticsTrackingSystem.cs.meta
│ │ │ ├── CountdownData.cs
│ │ │ ├── CountdownData.cs.meta
│ │ │ ├── CountdownEndAnalyticsEvent.cs
│ │ │ ├── CountdownEndAnalyticsEvent.cs.meta
│ │ │ ├── CountdownSystem.cs
│ │ │ ├── CountdownSystem.cs.meta
│ │ │ ├── SystemsExampleBootstrap.cs
│ │ │ └── SystemsExampleBootstrap.cs.meta
│ │ ├── SystemToSystem.unity
│ │ └── SystemToSystem.unity.meta
│ ├── UserInterfaceExample.meta
│ └── UserInterfaceExample
│ │ ├── CodeBase.meta
│ │ ├── CodeBase
│ │ ├── PauseGameButton.cs
│ │ ├── PauseGameButton.cs.meta
│ │ ├── PauseGameCommand.cs
│ │ ├── PauseGameCommand.cs.meta
│ │ ├── PauseGameSystem.cs
│ │ ├── PauseGameSystem.cs.meta
│ │ ├── StartGameButton.cs
│ │ ├── StartGameButton.cs.meta
│ │ ├── StartGameCommand.cs
│ │ ├── StartGameCommand.cs.meta
│ │ ├── StartGameSystem.cs
│ │ ├── StartGameSystem.cs.meta
│ │ ├── UIExampleBootstrap.cs
│ │ └── UIExampleBootstrap.cs.meta
│ │ ├── UI.unity
│ │ └── UI.unity.meta
├── TextMesh Pro.meta
├── TextMesh Pro
│ ├── Documentation.meta
│ ├── Documentation
│ │ ├── TextMesh Pro User Guide 2016.pdf
│ │ └── TextMesh Pro User Guide 2016.pdf.meta
│ ├── Fonts.meta
│ ├── Fonts
│ │ ├── LiberationSans - OFL.txt
│ │ ├── LiberationSans - OFL.txt.meta
│ │ ├── LiberationSans.ttf
│ │ └── LiberationSans.ttf.meta
│ ├── Resources.meta
│ ├── Resources
│ │ ├── Fonts & Materials.meta
│ │ ├── Fonts & Materials
│ │ │ ├── LiberationSans SDF - Drop Shadow.mat
│ │ │ ├── LiberationSans SDF - Drop Shadow.mat.meta
│ │ │ ├── LiberationSans SDF - Fallback.asset
│ │ │ ├── LiberationSans SDF - Fallback.asset.meta
│ │ │ ├── LiberationSans SDF - Outline.mat
│ │ │ ├── LiberationSans SDF - Outline.mat.meta
│ │ │ ├── LiberationSans SDF.asset
│ │ │ └── LiberationSans SDF.asset.meta
│ │ ├── LineBreaking Following Characters.txt
│ │ ├── LineBreaking Following Characters.txt.meta
│ │ ├── LineBreaking Leading Characters.txt
│ │ ├── LineBreaking Leading Characters.txt.meta
│ │ ├── Sprite Assets.meta
│ │ ├── Sprite Assets
│ │ │ ├── EmojiOne.asset
│ │ │ └── EmojiOne.asset.meta
│ │ ├── Style Sheets.meta
│ │ ├── Style Sheets
│ │ │ ├── Default Style Sheet.asset
│ │ │ └── Default Style Sheet.asset.meta
│ │ ├── TMP Settings.asset
│ │ └── TMP Settings.asset.meta
│ ├── Shaders.meta
│ ├── Shaders
│ │ ├── TMP_Bitmap-Custom-Atlas.shader
│ │ ├── TMP_Bitmap-Custom-Atlas.shader.meta
│ │ ├── TMP_Bitmap-Mobile.shader
│ │ ├── TMP_Bitmap-Mobile.shader.meta
│ │ ├── TMP_Bitmap.shader
│ │ ├── TMP_Bitmap.shader.meta
│ │ ├── TMP_SDF Overlay.shader
│ │ ├── TMP_SDF Overlay.shader.meta
│ │ ├── TMP_SDF SSD.shader
│ │ ├── TMP_SDF SSD.shader.meta
│ │ ├── TMP_SDF-Mobile Masking.shader
│ │ ├── TMP_SDF-Mobile Masking.shader.meta
│ │ ├── TMP_SDF-Mobile Overlay.shader
│ │ ├── TMP_SDF-Mobile Overlay.shader.meta
│ │ ├── TMP_SDF-Mobile SSD.shader
│ │ ├── TMP_SDF-Mobile SSD.shader.meta
│ │ ├── TMP_SDF-Mobile.shader
│ │ ├── TMP_SDF-Mobile.shader.meta
│ │ ├── TMP_SDF-Surface-Mobile.shader
│ │ ├── TMP_SDF-Surface-Mobile.shader.meta
│ │ ├── TMP_SDF-Surface.shader
│ │ ├── TMP_SDF-Surface.shader.meta
│ │ ├── TMP_SDF.shader
│ │ ├── TMP_SDF.shader.meta
│ │ ├── TMP_Sprite.shader
│ │ ├── TMP_Sprite.shader.meta
│ │ ├── TMPro.cginc
│ │ ├── TMPro.cginc.meta
│ │ ├── TMPro_Mobile.cginc
│ │ ├── TMPro_Mobile.cginc.meta
│ │ ├── TMPro_Properties.cginc
│ │ ├── TMPro_Properties.cginc.meta
│ │ ├── TMPro_Surface.cginc
│ │ └── TMPro_Surface.cginc.meta
│ ├── Sprites.meta
│ └── Sprites
│ │ ├── EmojiOne Attribution.txt
│ │ ├── EmojiOne Attribution.txt.meta
│ │ ├── EmojiOne.json
│ │ ├── EmojiOne.json.meta
│ │ ├── EmojiOne.png
│ │ └── EmojiOne.png.meta
├── WorldsTestEnvironment.meta
└── WorldsTestEnvironment
│ ├── ECSMessages.WorldsTestEnvironment.asmdef
│ ├── ECSMessages.WorldsTestEnvironment.asmdef.meta
│ ├── Editor.meta
│ ├── Editor
│ ├── ECSMessages.Editor.WorldsTestEnvironment.asmdef
│ ├── ECSMessages.Editor.WorldsTestEnvironment.asmdef.meta
│ ├── WorldsTestEnvironmentWindow.cs
│ └── WorldsTestEnvironmentWindow.cs.meta
│ ├── ExampleWorldBootstrap.cs
│ ├── ExampleWorldBootstrap.cs.meta
│ ├── Scenes.meta
│ ├── Scenes
│ ├── SampleScene.unity
│ └── SampleScene.unity.meta
│ ├── ServiceBootstrap.cs
│ └── ServiceBootstrap.cs.meta
├── CortexDeveloper.Editor.Messages.csproj.DotSettings
├── CortexDeveloper.Messages.csproj.DotSettings
├── ECSMassages.Examples.csproj.DotSettings
├── ECSMessages.Editor.WorldsTestEnvironment.csproj.DotSettings
├── ECSMessages.Editor.csproj.DotSettings
├── ECSMessages.Examples.Editor.csproj.DotSettings
├── ECSMessages.Tests.csproj.DotSettings
├── ECSMessages.csproj.DotSettings
├── Packages
├── manifest.json
└── packages-lock.json
├── ProjectSettings
├── AudioManager.asset
├── ClusterInputManager.asset
├── DynamicsManager.asset
├── EditorBuildSettings.asset
├── EditorSettings.asset
├── EntitiesClientSettings.asset
├── GraphicsSettings.asset
├── InputManager.asset
├── MemorySettings.asset
├── NavMeshAreas.asset
├── PackageManagerSettings.asset
├── Packages
│ └── com.unity.testtools.codecoverage
│ │ └── Settings.json
├── Physics2DSettings.asset
├── PresetManager.asset
├── ProjectSettings.asset
├── ProjectVersion.txt
├── QualitySettings.asset
├── SceneTemplateSettings.json
├── TagManager.asset
├── TimeManager.asset
├── TimelineSettings.asset
├── UnityConnectSettings.asset
├── VFXManager.asset
├── VersionControlSettings.asset
└── XRSettings.asset
└── mono_crash.20af87a9ee.0.json
/.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 | **/[Uu]serSettings/
13 |
14 | # Asset meta data should only be ignored when the corresponding asset is also ignored
15 | !/[Aa]ssets/**/*.meta
16 |
17 | # Uncomment this line if you wish to ignore the asset store tools plugin
18 | # /[Aa]ssets/AssetStoreTools*
19 |
20 | # Autogenerated Jetbrains Rider plugin
21 | [Aa]ssets/Plugins/Editor/JetBrains*
22 |
23 | # Visual Studio cache directory
24 | .vs/
25 |
26 | # Gradle cache directory
27 | .gradle/
28 |
29 | # Autogenerated VS/MD/Consulo solution and project files
30 | ExportedObj/
31 | .consulo/
32 | *.csproj
33 | *.unityproj
34 | *.sln
35 | *.suo
36 | *.tmp
37 | *.user
38 | *.userprefs
39 | *.pidb
40 | *.booproj
41 | *.svd
42 | *.pdb
43 | *.mdb
44 | *.opendb
45 | *.VC.db
46 |
47 | # Unity3D generated meta files
48 | *.pidb.meta
49 | *.pdb.meta
50 | *.mdb.meta
51 |
52 | # Unity3D generated file on crash reports
53 | sysinfo.txt
54 |
55 | # Builds
56 | *.apk
57 | *.unitypackage
58 |
59 | # Crashlytics generated file
60 | crashlytics-build.properties
61 |
62 | # Other
63 | **/*.index
64 | .DS_Store
65 | *.dwlt
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Oleksandr Skorniakov
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 |
--------------------------------------------------------------------------------
/documentation/images/data_driven_message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CortexDeveloper/ecs-messages/66a13892747d33c20efa0f08ae5991bb904b7802/documentation/images/data_driven_message.png
--------------------------------------------------------------------------------
/documentation/images/editor_stats.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CortexDeveloper/ecs-messages/66a13892747d33c20efa0f08ae5991bb904b7802/documentation/images/editor_stats.png
--------------------------------------------------------------------------------
/documentation/images/manifest_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CortexDeveloper/ecs-messages/66a13892747d33c20efa0f08ae5991bb904b7802/documentation/images/manifest_example.png
--------------------------------------------------------------------------------
/documentation/images/message_entity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CortexDeveloper/ecs-messages/66a13892747d33c20efa0f08ae5991bb904b7802/documentation/images/message_entity.png
--------------------------------------------------------------------------------
/documentation/images/repository_card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CortexDeveloper/ecs-messages/66a13892747d33c20efa0f08ae5991bb904b7802/documentation/images/repository_card.png
--------------------------------------------------------------------------------
/documentation/images/systems_execution_order.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CortexDeveloper/ecs-messages/66a13892747d33c20efa0f08ae5991bb904b7802/documentation/images/systems_execution_order.png
--------------------------------------------------------------------------------
/documentation/images/title_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CortexDeveloper/ecs-messages/66a13892747d33c20efa0f08ae5991bb904b7802/documentation/images/title_logo.png
--------------------------------------------------------------------------------
/documentation/images/use_case_ui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CortexDeveloper/ecs-messages/66a13892747d33c20efa0f08ae5991bb904b7802/documentation/images/use_case_ui.png
--------------------------------------------------------------------------------
/src/ecs-messages/.idea/.idea.ecs-messages/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Rider ignored files
5 | /modules.xml
6 | /.idea.ecs-messages.iml
7 | /contentModel.xml
8 | /projectSettingsUpdater.xml
9 | # Editor-based HTTP Client requests
10 | /httpRequests/
11 | # Datasource local storage ignored files
12 | /dataSources/
13 | /dataSources.local.xml
14 |
--------------------------------------------------------------------------------
/src/ecs-messages/.idea/.idea.ecs-messages/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/ecs-messages/.idea/.idea.ecs-messages/.idea/indexLayout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/ecs-messages/.idea/.idea.ecs-messages/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assembly-CSharp.csproj.DotSettings:
--------------------------------------------------------------------------------
1 |
2 | True
3 | True
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 529342f79580245c98d5b35f920f9cfe
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Editor.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 767e191869dc046138d7428226c950fe
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Editor/ECSMessages.Editor.asmdef:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ECSMessages.Editor",
3 | "rootNamespace": "CortexDeveloper.ECSMessages.Editor",
4 | "references": [
5 | "GUID:734d92eba21c94caba915361bd5ac177",
6 | "GUID:e0cd26848372d4e5c891c569017e11f1",
7 | "GUID:2665a8d13d1b3f18800f46e256720795",
8 | "GUID:fee70387a0a31498cac3cfa203ac57f5"
9 | ],
10 | "includePlatforms": [
11 | "Editor"
12 | ],
13 | "excludePlatforms": [],
14 | "allowUnsafeCode": false,
15 | "overrideReferences": false,
16 | "precompiledReferences": [],
17 | "autoReferenced": true,
18 | "defineConstraints": [],
19 | "versionDefines": [],
20 | "noEngineReferences": false
21 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Editor/ECSMessages.Editor.asmdef.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: dc0226ee0e2ef4435b612c92b6aeba43
3 | AssemblyDefinitionImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Editor/StatsWindow.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9991a1d28e87c4aa9af5deb1f537134a
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Editor/StatsWindow/MessagesStatsWindow.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Linq;
3 | using CortexDeveloper.ECSMessages.Components.Meta;
4 | using CortexDeveloper.ECSMessages.Service;
5 | using Unity.Entities;
6 | using UnityEditor;
7 | using UnityEngine;
8 |
9 | namespace CortexDeveloper.ECSMessages.Editor.StatsWindow
10 | {
11 | public class MessagesStatsWindow : EditorWindow
12 | {
13 | private int _selectedTab;
14 |
15 | private List _worldsList = new();
16 |
17 | private int _selectedWorld;
18 | private World SelectedWorld => World.All.GetWorldWithName(_worldsList[_selectedWorld]);
19 |
20 | private bool _enableStats;
21 |
22 | private static EndSimulationEntityCommandBufferSystem GetEcbSystemInWorld(World world) =>
23 | world.GetOrCreateSystemManaged();
24 |
25 |
26 | [MenuItem("ECSMessages/Stats")]
27 | public static void Init()
28 | {
29 | MessagesStatsWindow statsWindow = (MessagesStatsWindow)GetWindow(typeof(MessagesStatsWindow), false, "Message Broadcaster Stats");
30 |
31 | statsWindow.Show();
32 | }
33 |
34 | public void OnGUI()
35 | {
36 | if (!Application.isPlaying)
37 | {
38 | EditorGUILayout.HelpBox("Works only in Play Mode. Enter Play Mode to access broadcaster API.", MessageType.Warning);
39 |
40 | return;
41 | }
42 |
43 | DrawParams();
44 |
45 | if (!_enableStats)
46 | return;
47 |
48 | DrawStats();
49 | Repaint();
50 | }
51 |
52 | private void DrawParams()
53 | {
54 | _worldsList.Clear();
55 |
56 | for (int i = 0; i < World.All.Count; i++)
57 | _worldsList.Add(default);
58 |
59 | int j = 0;
60 | foreach (World world in World.All)
61 | {
62 | if (j < World.All.Count)
63 | _worldsList[j] = world.Name;
64 | else
65 | break;
66 |
67 | j++;
68 | }
69 |
70 | _worldsList = _worldsList.Where(w => !w.Contains("LoadingWorld")).ToList();
71 | _selectedWorld = EditorGUILayout.Popup("World", _selectedWorld, _worldsList.ToArray());
72 |
73 | _enableStats = EditorGUILayout.Toggle("Enable Stats", _enableStats);
74 | }
75 |
76 | private void DrawStats()
77 | {
78 | EditorGUILayout.Space(10f);
79 | DrawMessagesStats();
80 | EditorGUILayout.Space(25f);
81 | DrawRemoveAPI();
82 | }
83 |
84 | private void DrawMessagesStats()
85 | {
86 | EditorGUILayout.LabelField($"All Messages: {SelectedWorld.EntityManager.CreateEntityQuery(new ComponentType(typeof(MessageTag))).CalculateEntityCount()}");
87 | EditorGUILayout.Space(10f);
88 |
89 | EditorGUILayout.LabelField($"OneFrame: {SelectedWorld.EntityManager.CreateEntityQuery(new ComponentType(typeof(MessageLifetimeOneFrameTag))).CalculateEntityCount()}");
90 | EditorGUILayout.LabelField($"TimeInterval: {SelectedWorld.EntityManager.CreateEntityQuery(new ComponentType(typeof(MessageLifetimeTimeInterval))).CalculateEntityCount()}");
91 | EditorGUILayout.LabelField($"Unlimited: {SelectedWorld.EntityManager.CreateEntityQuery(new ComponentType(typeof(MessageLifetimeUnlimitedTag))).CalculateEntityCount()}");
92 |
93 | }
94 |
95 | private void DrawRemoveAPI()
96 | {
97 | if (GUILayout.Button("Remove All Messages"))
98 | MessageBroadcaster.RemoveAllMessagesWith(GetEcbSystemInWorld(SelectedWorld).EntityManager);
99 |
100 | if (GUILayout.Button("Remove OneFrame Messages"))
101 | MessageBroadcaster.RemoveAllMessagesWith(GetEcbSystemInWorld(SelectedWorld).EntityManager);
102 |
103 | if (GUILayout.Button("Remove TimeInterval Messages"))
104 | MessageBroadcaster.RemoveAllMessagesWith(GetEcbSystemInWorld(SelectedWorld).EntityManager);
105 |
106 | if (GUILayout.Button("Remove Unlimited Messages"))
107 | MessageBroadcaster.RemoveAllMessagesWith(GetEcbSystemInWorld(SelectedWorld).EntityManager);
108 | }
109 | }
110 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Editor/StatsWindow/MessagesStatsWindow.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: dc276e167cca47078e229c0ffe9353f0
3 | timeCreated: 1658864883
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 06d8c64de515046f1b7029f056c86e3a
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2628b87577ceb41debf093f34b6a57ed
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/IMessageComponent.cs:
--------------------------------------------------------------------------------
1 | namespace CortexDeveloper.ECSMessages.Components
2 | {
3 | public interface IMessageComponent { }
4 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/IMessageComponent.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 386adbc167404758ab2e6eab9e222319
3 | timeCreated: 1663511427
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6df186e995e44d9f9f5f36cd92271c31
3 | timeCreated: 1659990019
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageEditorData.cs:
--------------------------------------------------------------------------------
1 | using Unity.Collections;
2 | using Unity.Entities;
3 |
4 | namespace CortexDeveloper.ECSMessages.Components.Meta
5 | {
6 | public struct MessageEditorData : IComponentData
7 | {
8 | public int Id;
9 | public FixedString32Bytes CreationTime;
10 | }
11 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageEditorData.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ed443d37b7484d72a557432aa8f1f848
3 | timeCreated: 1661192139
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageLifetimeOneFrameTag.cs:
--------------------------------------------------------------------------------
1 | using Unity.Entities;
2 |
3 | namespace CortexDeveloper.ECSMessages.Components.Meta
4 | {
5 | public struct MessageLifetimeOneFrameTag : IComponentData { }
6 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageLifetimeOneFrameTag.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7b87f9b9d8424a3f89be5c4253abcc3b
3 | timeCreated: 1658864402
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageLifetimeTimeInterval.cs:
--------------------------------------------------------------------------------
1 | using Unity.Entities;
2 |
3 | namespace CortexDeveloper.ECSMessages.Components.Meta
4 | {
5 | public struct MessageLifetimeTimeInterval : IComponentData
6 | {
7 | public float LifetimeLeft;
8 | }
9 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageLifetimeTimeInterval.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4ab73fb13be845c98c5cc85fb3eeddc7
3 | timeCreated: 1658864406
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageLifetimeUnlimitedTag.cs:
--------------------------------------------------------------------------------
1 | using Unity.Entities;
2 |
3 | namespace CortexDeveloper.ECSMessages.Components.Meta
4 | {
5 | public struct MessageLifetimeUnlimitedTag : IComponentData { }
6 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageLifetimeUnlimitedTag.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0fdc636b3eb14a968652a70a068ca91b
3 | timeCreated: 1658864411
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageTag.cs:
--------------------------------------------------------------------------------
1 | using Unity.Entities;
2 |
3 | namespace CortexDeveloper.ECSMessages.Components.Meta
4 | {
5 | public struct MessageTag : IComponentData { }
6 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/Meta/MessageTag.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0d2804b1ee0a49edb85c87824dec504f
3 | timeCreated: 1659814306
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/RemoveCommands.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: fd6bdff0b4a64691931610bb49de6729
3 | timeCreated: 1659990051
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/RemoveCommands/RemoveMessagesByComponentCommand.cs:
--------------------------------------------------------------------------------
1 | using Unity.Entities;
2 |
3 | namespace CortexDeveloper.ECSMessages.Components.RemoveCommands
4 | {
5 | internal struct RemoveMessagesByComponentCommand : IComponentData, IMessageComponent
6 | {
7 | public ComponentType ComponentType;
8 | }
9 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Components/RemoveCommands/RemoveMessagesByComponentCommand.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: db3c6db7747d4c30a6c66d268383ebeb
3 | timeCreated: 1659104758
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/ECSMessages.asmdef:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ECSMessages",
3 | "rootNamespace": "CortexDeveloper.ECSMessages",
4 | "references": [
5 | "GUID:734d92eba21c94caba915361bd5ac177",
6 | "GUID:e0cd26848372d4e5c891c569017e11f1",
7 | "GUID:2665a8d13d1b3f18800f46e256720795",
8 | "GUID:d8b63aba1907145bea998dd612889d6b"
9 | ],
10 | "includePlatforms": [],
11 | "excludePlatforms": [],
12 | "allowUnsafeCode": false,
13 | "overrideReferences": false,
14 | "precompiledReferences": [],
15 | "autoReferenced": true,
16 | "defineConstraints": [],
17 | "versionDefines": [],
18 | "noEngineReferences": false
19 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/ECSMessages.asmdef.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: fee70387a0a31498cac3cfa203ac57f5
3 | AssemblyDefinitionImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f935ed275ba1f47bc8085ecb59e74b88
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/MessageBroadcaster.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using CortexDeveloper.ECSMessages.Components.RemoveCommands;
3 | using CortexDeveloper.ECSMessages.SystemGroups;
4 | using CortexDeveloper.ECSMessages.Systems;
5 | using Unity.Burst;
6 | using Unity.Collections;
7 | using Unity.Entities;
8 | using Random = Unity.Mathematics.Random;
9 |
10 | namespace CortexDeveloper.ECSMessages.Service
11 | {
12 | public static class MessageBroadcaster
13 | {
14 | internal static readonly SharedStatic RandomGen = SharedStatic.GetOrCreate();
15 |
16 | ///
17 | /// Call this method in your entry-point to initialize ECSMessages in chosen world.
18 | ///
19 | /// World where systems would be initialized.
20 | /// Parent system group for internal service system.
21 | /// Seed for Unity.Mathematics.random.
22 | /// Exception would be thrown if you're trying to initialize service in already initialized world.
23 | public static void InitializeInWorld(World world, ComponentSystemGroup parentSystemGroup, uint randomSeed = 1)
24 | {
25 | if (MessageBroadcasterWorldsMap.InitializedWorldStates.ContainsKey(world))
26 | throw new Exception($"World {world.Name} has already been initialized.");
27 |
28 | MessageBroadcasterWorldsMap.InitializedWorldStates.Add(world, parentSystemGroup);
29 |
30 | if (RandomGen.Data.state == 0)
31 | RandomGen.Data.InitState(randomSeed);
32 |
33 | MessagesSystemGroup messagesSystemGroup = world.CreateSystemManaged();
34 | parentSystemGroup.AddSystemToUpdateList(messagesSystemGroup);
35 |
36 | messagesSystemGroup.AddSystemToUpdateList(world.CreateSystem());
37 | messagesSystemGroup.AddSystemToUpdateList(world.CreateSystem());
38 | messagesSystemGroup.AddSystemToUpdateList(world.CreateSystem());
39 | messagesSystemGroup.AddSystemToUpdateList(world.CreateSystem());
40 |
41 | #if UNITY_EDITOR
42 | messagesSystemGroup.AddSystemToUpdateList(world.CreateSystem());
43 | #endif
44 | }
45 |
46 | ///
47 | /// Disposes ECSMessages service in given world.
48 | ///
49 | /// World where systems would be initialized.
50 | /// Exception would be thrown if you're trying to dispose service in world where it wasn't initialized.
51 | public static void DisposeFromWorld(World world)
52 | {
53 | if (!MessageBroadcasterWorldsMap.InitializedWorldStates.ContainsKey(world))
54 | throw new Exception($"World {world.Name} has not initialized yet.");
55 |
56 | ComponentSystemGroup parentSystemGroup = (ComponentSystemGroup)world.GetExistingSystemManaged(MessageBroadcasterWorldsMap.InitializedWorldStates[world].GetType());
57 | MessagesSystemGroup messagesSystemGroup = world.GetExistingSystemManaged();
58 | parentSystemGroup.RemoveSystemFromUpdateList(messagesSystemGroup);
59 | world.DestroySystemManaged(messagesSystemGroup);
60 |
61 | MessageBroadcasterWorldsMap.InitializedWorldStates.Remove(world);
62 | }
63 |
64 | ///
65 | /// Start point for service calls chain.
66 | ///
67 | /// Special struct which stores message settings and provides API to build calls chain.
68 | public static MessageBuilder PrepareMessage() =>
69 | new();
70 |
71 | ///
72 | /// Start point for service calls chain.
73 | ///
74 | /// Name for entity-message in editor.
75 | ///
76 | public static MessageBuilder PrepareMessage(FixedString64Bytes messageEntityName) =>
77 | new() { Name = messageEntityName };
78 |
79 | ///
80 | /// Removes all messages with T component.
81 | ///
82 | /// EntityManager from needed world.
83 | /// Component must implement IMessageComponent interface.
84 | public static void RemoveAllMessagesWith(EntityManager entityManager) where T : struct, IComponentData =>
85 | PrepareMessage().AliveForOneFrame().PostImmediate(entityManager, new RemoveMessagesByComponentCommand { ComponentType = new ComponentType(typeof(T)) });
86 | }
87 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/MessageBroadcaster.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7254be9c2b5243ec835e00f492bf9f8b
3 | timeCreated: 1658863081
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/MessageBroadcasterWorldsMap.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using Unity.Entities;
3 |
4 | namespace CortexDeveloper.ECSMessages.Service
5 | {
6 | internal static class MessageBroadcasterWorldsMap
7 | {
8 | internal static readonly Dictionary InitializedWorldStates = new();
9 | }
10 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/MessageBroadcasterWorldsMap.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d04a626d0a2f422890b7c30aa3be0472
3 | timeCreated: 1683455266
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/MessageBuilder.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: cf9a7827641c413f813b94bcddf0ea3e
3 | timeCreated: 1659015659
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/MessageBuilder.cs~:
--------------------------------------------------------------------------------
1 | using CortexDeveloper.ECSMessages.Components;
2 | using CortexDeveloper.ECSMessages.Components.Meta;
3 | using CortexDeveloper.ECSMessages.Systems;
4 | using Unity.Collections;
5 | using Unity.Entities;
6 |
7 | namespace CortexDeveloper.ECSMessages.Service
8 | {
9 | public struct MessageBuilder
10 | {
11 | internal FixedString64Bytes Name;
12 | internal MessageLifetime Lifetime;
13 | internal float LifetimeSeconds;
14 |
15 | ///
16 | /// Sets lifetime to OneFrame type.
17 | ///
18 | /// Special struct which stores message settings and provides API to build calls chain.
19 | public MessageBuilder AliveForOneFrame()
20 | {
21 | Lifetime = MessageLifetime.OneFrame;
22 |
23 | return this;
24 | }
25 |
26 | ///
27 | /// Sets lifetime to TimeInterval type.
28 | ///
29 | ///
30 | /// Special struct which stores message settings and provides API to build calls chain.
31 | public MessageBuilder AliveForSeconds(float seconds)
32 | {
33 | Lifetime = MessageLifetime.TimeInterval;
34 | LifetimeSeconds = seconds;
35 |
36 | return this;
37 | }
38 |
39 | public MessageBuilder AliveForUnlimitedTime()
40 | {
41 | Lifetime = MessageLifetime.Unlimited;
42 |
43 | return this;
44 | }
45 |
46 | ///
47 | /// Creates entity-message by scheduling it to ECB. Burst is supported.
48 | ///
49 | /// ECB from needed world.
50 | /// Message content.
51 | /// Component must implement IMessageComponent interface.
52 | public void Post(EntityCommandBuffer ecb, T component) where T : unmanaged, IComponentData, IMessageComponent
53 | {
54 | Entity messageEntity = ecb.CreateEntity();
55 |
56 | #if UNITY_EDITOR
57 | ecb.SetName(messageEntity, Name);
58 | ecb.AddComponent(messageEntity, new MessageEditorData
59 | {
60 | Id = MessageBroadcaster.RandomGen.Data.NextInt(0, int.MaxValue),
61 | CreationTime = MessagesDateTimeSystem.TimeAsString.Data
62 | });
63 | #endif
64 |
65 | ecb.AddComponent(messageEntity, new MessageTag());
66 |
67 | if (Lifetime == MessageLifetime.OneFrame)
68 | ecb.AddComponent(messageEntity, new MessageLifetimeOneFrameTag());
69 | else if (Lifetime == MessageLifetime.TimeInterval)
70 | ecb.AddComponent(messageEntity, new MessageLifetimeTimeInterval { LifetimeLeft = LifetimeSeconds });
71 | else if (Lifetime == MessageLifetime.Unlimited)
72 | ecb.AddComponent(messageEntity, new MessageLifetimeUnlimitedTag());
73 |
74 | ecb.AddComponent(messageEntity, component);
75 | }
76 |
77 | ///
78 | /// Immediately creates entity-message. Burst not supported.
79 | ///
80 | /// EntityManger from needed world.
81 | /// Message content.
82 | /// Component must implement IMessageComponent interface.
83 | /// Message entity.
84 | public Entity PostImmediate(EntityManager entityManager, T component) where T : unmanaged, IComponentData, IMessageComponent
85 | {
86 | Entity messageEntity = entityManager.CreateEntity();
87 | EntityCommandBuffer ecb = new(Allocator.Temp);
88 |
89 | #if UNITY_EDITOR
90 | ecb.SetName(messageEntity, Name);
91 | ecb.AddComponent(messageEntity, new MessageEditorData
92 | {
93 | Id = MessageBroadcaster.RandomGen.Data.NextInt(0, int.MaxValue),
94 | CreationTime = MessagesDateTimeSystem.TimeAsString.Data
95 | });
96 | #endif
97 |
98 | ecb.AddComponent(messageEntity, new MessageTag());
99 |
100 | if (Lifetime == MessageLifetime.OneFrame)
101 | ecb.AddComponent(messageEntity, new MessageLifetimeOneFrameTag());
102 | else if (Lifetime == MessageLifetime.TimeInterval)
103 | ecb.AddComponent(messageEntity, new MessageLifetimeTimeInterval { LifetimeLeft = LifetimeSeconds });
104 | else if (Lifetime == MessageLifetime.Unlimited)
105 | ecb.AddComponent(messageEntity, new MessageLifetimeUnlimitedTag());
106 |
107 | ecb.AddComponent(messageEntity, component);
108 |
109 | ecb.Playback(entityManager);
110 | ecb.Dispose();
111 |
112 | return messageEntity;
113 | }
114 | }
115 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/MessageLifetime.cs:
--------------------------------------------------------------------------------
1 | namespace CortexDeveloper.ECSMessages.Service
2 | {
3 | public enum MessageLifetime
4 | {
5 | Unlimited,
6 | OneFrame,
7 | TimeInterval
8 | }
9 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/MessageLifetime.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 364868b665d7422eb637256977a36834
3 | timeCreated: 1658864017
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/RandomKey.cs:
--------------------------------------------------------------------------------
1 | namespace CortexDeveloper.ECSMessages.Service
2 | {
3 | internal abstract class RandomKey { }
4 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/RandomKey.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 229de5aa884f4a0eb1905f86d05fe929
3 | timeCreated: 1670255020
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/WorldsCollectionExtensions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Unity.Entities;
3 |
4 | namespace CortexDeveloper.ECSMessages.Service
5 | {
6 | public static class WorldsCollectionExtensions
7 | {
8 | ///
9 | /// Returns an instance of world with given name.
10 | ///
11 | /// List of worlds stored in special collection.
12 | /// Name of needed world.
13 | /// World instance.
14 | /// If there is no world with given name this method will throw an exception.
15 | public static World GetWorldWithName(this World.NoAllocReadOnlyCollection worlds, string worldName)
16 | {
17 | foreach (World world in worlds)
18 | {
19 | if (world.Name == worldName)
20 | return world;
21 | }
22 |
23 | throw new Exception($"World with name {worldName} was not found.");
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Service/WorldsCollectionExtensions.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f5dc57648b9b4f78acd5270aa37d5cef
3 | timeCreated: 1669237702
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/SystemGroups.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4cb06dec5b64438f9ad594863bfd1949
3 | timeCreated: 1659381153
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/SystemGroups/MessagesSystemGroup.cs:
--------------------------------------------------------------------------------
1 | using Unity.Entities;
2 |
3 | namespace CortexDeveloper.ECSMessages.SystemGroups
4 | {
5 | [DisableAutoCreation]
6 | public partial class MessagesSystemGroup : ComponentSystemGroup { }
7 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/SystemGroups/MessagesSystemGroup.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0924534d962d425382e707edc6f8d084
3 | timeCreated: 1659381089
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ef8ad9ce00aa048938014f2694d96d8e
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesDateTimeSystem.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Unity.Burst;
3 | using Unity.Collections;
4 | using Unity.Entities;
5 |
6 | namespace CortexDeveloper.ECSMessages.Systems
7 | {
8 | [DisableAutoCreation]
9 | public partial struct MessagesDateTimeSystem : ISystem
10 | {
11 | public static readonly SharedStatic TimeAsString =
12 | SharedStatic.GetOrCreate();
13 |
14 | public void OnUpdate(ref SystemState state) =>
15 | TimeAsString.Data = DateTime.Now.ToString("hh:mm:ss");
16 | }
17 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesDateTimeSystem.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0eba12ebb3ad45e49744c66c67c9b063
3 | timeCreated: 1663093611
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesOneFrameLifetimeRemoveSystem.cs:
--------------------------------------------------------------------------------
1 | using CortexDeveloper.ECSMessages.Components.Meta;
2 | using Unity.Burst;
3 | using Unity.Collections;
4 | using Unity.Entities;
5 |
6 | namespace CortexDeveloper.ECSMessages.Systems
7 | {
8 | [DisableAutoCreation]
9 | [BurstCompile]
10 | public partial struct MessagesOneFrameLifetimeRemoveSystem : ISystem
11 | {
12 | [BurstCompile]
13 | public void OnUpdate(ref SystemState state)
14 | {
15 | EntityCommandBuffer ecb = new(Allocator.TempJob);
16 |
17 | new DestroyOneFrameMessagesJob
18 | {
19 | ECB = ecb
20 | }.Schedule();
21 |
22 | state.Dependency.Complete();
23 |
24 | ecb.Playback(state.EntityManager);
25 | ecb.Dispose();
26 | }
27 | }
28 |
29 | [BurstCompile]
30 | internal partial struct DestroyOneFrameMessagesJob : IJobEntity
31 | {
32 | public EntityCommandBuffer ECB;
33 |
34 | public void Execute(Entity entity, in MessageTag messageTag, in MessageLifetimeOneFrameTag oneFrameTag)
35 | {
36 | ECB.DestroyEntity(entity);
37 | }
38 | }
39 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesOneFrameLifetimeRemoveSystem.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7e4f4b10061349499e0611d2d503e244
3 | timeCreated: 1658865774
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesRemoveByComponentCommandListenerSystem.cs:
--------------------------------------------------------------------------------
1 | using CortexDeveloper.ECSMessages.Components.Meta;
2 | using CortexDeveloper.ECSMessages.Components.RemoveCommands;
3 | using Unity.Collections;
4 | using Unity.Entities;
5 |
6 | namespace CortexDeveloper.ECSMessages.Systems
7 | {
8 | [UpdateBefore(typeof(MessagesOneFrameLifetimeRemoveSystem))]
9 | [DisableAutoCreation]
10 | public partial struct MessagesRemoveByComponentCommandListenerSystem : ISystem
11 | {
12 | private EntityQuery _removeByComponentCommandQuery;
13 |
14 | public void OnCreate(ref SystemState state)
15 | {
16 | _removeByComponentCommandQuery = state.GetEntityQuery(
17 | ComponentType.ReadOnly(),
18 | ComponentType.ReadOnly());
19 | }
20 |
21 | public void OnUpdate(ref SystemState state)
22 | {
23 | EntityCommandBuffer ecb = new(Allocator.Temp);
24 | NativeArray commands =
25 | _removeByComponentCommandQuery.ToComponentDataArray(Allocator.Temp);
26 |
27 | foreach (RemoveMessagesByComponentCommand command in commands)
28 | {
29 | EntityQuery destroyQuery = GetMessagesQueryWith(ref state, command.ComponentType);
30 | NativeArray messageEntities = destroyQuery.ToEntityArray(Allocator.Temp);
31 |
32 | foreach (Entity messageEntity in messageEntities)
33 | ecb.DestroyEntity(messageEntity);
34 |
35 | messageEntities.Dispose();
36 | }
37 |
38 | ecb.Playback(state.EntityManager);
39 | ecb.Dispose();
40 | commands.Dispose();
41 | }
42 |
43 | private EntityQuery GetMessagesQueryWith(ref SystemState state, ComponentType componentType) =>
44 | componentType.TypeIndex == ComponentType.ReadOnly().TypeIndex
45 | ? state.GetEntityQuery(ComponentType.ReadOnly())
46 | : state.GetEntityQuery(ComponentType.ReadOnly(), componentType);
47 | }
48 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesRemoveByComponentCommandListenerSystem.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2253d609e23b43a2a8a6d9b4c90d5742
3 | timeCreated: 1659104769
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesTimeIntervalLifetimeRemoveSystem.cs:
--------------------------------------------------------------------------------
1 | using CortexDeveloper.ECSMessages.Components.Meta;
2 | using Unity.Burst;
3 | using Unity.Collections;
4 | using Unity.Entities;
5 |
6 | namespace CortexDeveloper.ECSMessages.Systems
7 | {
8 | [DisableAutoCreation]
9 | [BurstCompile]
10 | public partial struct MessagesTimeIntervalLifetimeRemoveSystem : ISystem
11 | {
12 | [BurstCompile]
13 | public void OnUpdate(ref SystemState state)
14 | {
15 | EntityCommandBuffer ecb = new(Allocator.TempJob);
16 |
17 | new DestroyTimeIntervalMessagesJob
18 | {
19 | ECB = ecb
20 | }.Schedule();
21 |
22 | state.Dependency.Complete();
23 |
24 | ecb.Playback(state.EntityManager);
25 | ecb.Dispose();
26 | }
27 | }
28 |
29 | [BurstCompile]
30 | internal partial struct DestroyTimeIntervalMessagesJob : IJobEntity
31 | {
32 | public EntityCommandBuffer ECB;
33 |
34 | public void Execute(Entity entity, in MessageTag messageTag, in MessageLifetimeTimeInterval timeInterval)
35 | {
36 | if (timeInterval.LifetimeLeft <= 0)
37 | ECB.DestroyEntity(entity);
38 | }
39 | }
40 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesTimeIntervalLifetimeRemoveSystem.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 576e4ecfab0141cc9aa82f5546ba768b
3 | timeCreated: 1659821462
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesTimeIntervalLifetimeTimerSystem.cs:
--------------------------------------------------------------------------------
1 | using CortexDeveloper.ECSMessages.Components.Meta;
2 | using Unity.Burst;
3 | using Unity.Entities;
4 |
5 | namespace CortexDeveloper.ECSMessages.Systems
6 | {
7 | [DisableAutoCreation]
8 | [BurstCompile]
9 | public partial struct MessagesTimeIntervalLifetimeTimerSystem : ISystem
10 | {
11 | [BurstCompile]
12 | public void OnUpdate(ref SystemState state)
13 | {
14 | float deltaTime = SystemAPI.Time.DeltaTime;
15 |
16 | new UpdateLifetimeLeftJob
17 | {
18 | DeltaTime = deltaTime
19 | }.ScheduleParallel();
20 | }
21 | }
22 |
23 | [BurstCompile]
24 | internal partial struct UpdateLifetimeLeftJob : IJobEntity
25 | {
26 | public float DeltaTime;
27 |
28 | public void Execute(ref MessageLifetimeTimeInterval timeInterval, in MessageTag messageTag) =>
29 | timeInterval.LifetimeLeft -= DeltaTime;
30 | }
31 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Runtime/Systems/MessagesTimeIntervalLifetimeTimerSystem.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 327f76780d51461d9033b4713b19bb13
3 | timeCreated: 1659022666
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6e935a628043386439f430f71e574046
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 347005eb15f034b439707981e4fc841f
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/CountdownAnalyticsTrackingSystem.cs:
--------------------------------------------------------------------------------
1 | using Unity.Entities;
2 | using UnityEngine;
3 |
4 | namespace Samples.SystemToSystemExample
5 | {
6 | [DisableAutoCreation]
7 | public partial struct CountdownAnalyticsTrackingSystem : ISystem
8 | {
9 | public void OnCreate(ref SystemState state)
10 | {
11 | state.RequireForUpdate();
12 | }
13 |
14 | public void OnUpdate(ref SystemState state)
15 | {
16 | new SendCountdownAnalyticsJob().Schedule();
17 | }
18 | }
19 |
20 | public partial struct SendCountdownAnalyticsJob : IJobEntity
21 | {
22 | public void Execute(in CountdownEndAnalyticsEvent countDownEvent)
23 | {
24 | Debug.Log($"Send countdown analytics. Circles passed: {countDownEvent.CirclesPassed}");
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/CountdownAnalyticsTrackingSystem.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 078f460492d745439bf9f340bc70f6c1
3 | timeCreated: 1683413156
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/CountdownData.cs:
--------------------------------------------------------------------------------
1 | using Unity.Entities;
2 |
3 | namespace Samples.SystemToSystemExample
4 | {
5 | public struct CountdownData : IComponentData
6 | {
7 | public float StartValue;
8 | public float CurrentValue;
9 | public int CirclesCount;
10 | }
11 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/CountdownData.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 173e8e5c29ad41fba7ed609a60c2b71d
3 | timeCreated: 1683412048
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/CountdownEndAnalyticsEvent.cs:
--------------------------------------------------------------------------------
1 | using CortexDeveloper.ECSMessages.Components;
2 | using Unity.Entities;
3 |
4 | namespace Samples.SystemToSystemExample
5 | {
6 | public struct CountdownEndAnalyticsEvent : IComponentData, IMessageComponent
7 | {
8 | public int CirclesPassed;
9 | }
10 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/CountdownEndAnalyticsEvent.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 77041527693a48a591b7d54905016cae
3 | timeCreated: 1683412951
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/CountdownSystem.cs:
--------------------------------------------------------------------------------
1 | using CortexDeveloper.ECSMessages.Service;
2 | using Unity.Burst;
3 | using Unity.Collections;
4 | using Unity.Entities;
5 |
6 | namespace Samples.SystemToSystemExample
7 | {
8 | [DisableAutoCreation]
9 | [BurstCompile]
10 | public partial struct CountdownSystem : ISystem
11 | {
12 | [BurstCompile]
13 | public void OnCreate(ref SystemState state)
14 | {
15 | float startValue = 5;
16 |
17 | state.EntityManager.CreateSingleton(
18 | new CountdownData
19 | {
20 | StartValue = startValue,
21 | CurrentValue = startValue
22 | });
23 | }
24 |
25 | [BurstCompile]
26 | public void OnUpdate(ref SystemState state)
27 | {
28 | EntityManager entityManager = state.EntityManager;
29 | EntityCommandBuffer ecb = new(Allocator.TempJob);
30 | float deltaTime = SystemAPI.Time.DeltaTime;
31 |
32 | UpdateCountdownJob job = new()
33 | {
34 | ECB = ecb,
35 | DeltaTime = deltaTime
36 | };
37 |
38 | job.Schedule();
39 | state.Dependency.Complete();
40 |
41 | ecb.Playback(entityManager);
42 | ecb.Dispose();
43 | }
44 | }
45 |
46 | [BurstCompile]
47 | public partial struct UpdateCountdownJob : IJobEntity
48 | {
49 | public EntityCommandBuffer ECB;
50 | public float DeltaTime;
51 |
52 | public void Execute(ref CountdownData countdown)
53 | {
54 | countdown.CurrentValue -= DeltaTime;
55 |
56 | if (countdown.CurrentValue <= 0f)
57 | {
58 | countdown.CurrentValue = countdown.StartValue;
59 | countdown.CirclesCount++;
60 |
61 | MessageBroadcaster
62 | .PrepareMessage()
63 | .AliveForOneFrame()
64 | .Post(ECB, new CountdownEndAnalyticsEvent { CirclesPassed = countdown.CirclesCount });
65 | }
66 | }
67 | }
68 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/CountdownSystem.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 83ed9e57c455468a845826e83e22849a
3 | timeCreated: 1683411939
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/SystemsExampleBootstrap.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using CortexDeveloper.ECSMessages.Service;
3 | using Unity.Entities;
4 | using UnityEngine;
5 |
6 | namespace Samples.SystemToSystemExample
7 | {
8 | public class SystemsExampleBootstrap : MonoBehaviour
9 | {
10 | private static World _world;
11 | private SimulationSystemGroup _simulationSystemGroup;
12 | private LateSimulationSystemGroup _lateSimulationSystemGroup;
13 |
14 | private void Awake()
15 | {
16 | InitializeMessageBroadcaster();
17 | CreateExampleSystems();
18 | }
19 |
20 | private void OnDestroy()
21 | {
22 | if (!_world.IsCreated)
23 | return;
24 |
25 | DisposeMessageBroadcaster();
26 | RemoveExampleSystem();
27 | }
28 |
29 | private void InitializeMessageBroadcaster()
30 | {
31 | _world = World.DefaultGameObjectInjectionWorld;
32 | _simulationSystemGroup = _world.GetOrCreateSystemManaged();
33 | _lateSimulationSystemGroup = _world.GetOrCreateSystemManaged();
34 |
35 | MessageBroadcaster.InitializeInWorld(_world, _lateSimulationSystemGroup);
36 | }
37 |
38 | private void DisposeMessageBroadcaster()
39 | {
40 | MessageBroadcaster.DisposeFromWorld(_world);
41 | }
42 |
43 | private void CreateExampleSystems()
44 | {
45 | _simulationSystemGroup.AddSystemToUpdateList(_world.CreateSystem());
46 | _simulationSystemGroup.AddSystemToUpdateList(_world.CreateSystem());
47 | }
48 |
49 | private void RemoveExampleSystem()
50 | {
51 | _simulationSystemGroup.RemoveSystemFromUpdateList(_world.GetExistingSystem());
52 | _simulationSystemGroup.RemoveSystemFromUpdateList(_world.GetExistingSystem());
53 | }
54 | }
55 | }
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/CodeBase/SystemsExampleBootstrap.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a8ce7796466d48d7b3f81c4bdad54737
3 | timeCreated: 1683407406
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/SystemToSystemExample/SystemToSystem.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 09c157961c4f0fe47b0f9ae1915e8b37
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/UserInterfaceExample.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2d2f723d565e3a9478bc351bd22dc3ec
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/UserInterfaceExample/CodeBase.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: fb89291b8a41e9045bae272068df6eb5
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/ecs-messages/Assets/Package/Samples~/UserInterfaceExample/CodeBase/PauseGameButton.cs:
--------------------------------------------------------------------------------
1 | using CortexDeveloper.ECSMessages.Service;
2 | using Unity.Entities;
3 | using UnityEngine;
4 | using UnityEngine.UI;
5 |
6 | namespace Samples.UserInterfaceExample
7 | {
8 | [RequireComponent(typeof(Button))]
9 | public class PauseGameButton : MonoBehaviour
10 | {
11 | private Button _button;
12 |
13 | private void Awake()
14 | {
15 | _button = GetComponent