From 40a4860cfcf1fa7bde0b6b6aae14a6ce8d61e4c2 Mon Sep 17 00:00:00 2001 From: Roman Zhu Date: Wed, 22 May 2019 18:36:36 +0300 Subject: [PATCH] initial commit --- .gitignore | 37 + Assets/CodegenExecutor.asset | 15 + Assets/CodegenExecutor.asset.meta | 8 + Assets/Generated.meta | 8 + Assets/Generated/Contexts.cs | 124 + Assets/Generated/Contexts.cs.meta | 11 + Assets/Generated/Events.meta | 3 + Assets/Generated/Events/Components.meta | 3 + .../Components/DestroyedListenerComponent.cs | 12 + .../DestroyedListenerComponent.cs.meta | 3 + Assets/Generated/Events/GameEventSystems.cs | 14 + .../Generated/Events/GameEventSystems.cs.meta | 3 + Assets/Generated/Events/Interfaces.meta | 3 + .../Events/Interfaces/IDestroyedListener.cs | 11 + .../Interfaces/IDestroyedListener.cs.meta | 3 + Assets/Generated/Events/Systems.meta | 3 + .../Events/Systems/DestroyedEventSystem.cs | 37 + .../Systems/DestroyedEventSystem.cs.meta | 3 + Assets/Generated/Feature.cs | 110 + Assets/Generated/Feature.cs.meta | 11 + Assets/Generated/Game.meta | 8 + Assets/Generated/Game/Components.meta | 3 + .../Game/Components/GameCharacterComponent.cs | 56 + .../Components/GameCharacterComponent.cs.meta | 3 + .../GameClientDataBufferComponent.cs | 58 + .../GameClientDataBufferComponent.cs.meta | 3 + .../Components/GameConnectionComponent.cs | 56 + .../GameConnectionComponent.cs.meta | 3 + .../Components/GameConnectionPeerComponent.cs | 56 + .../GameConnectionPeerComponent.cs.meta | 3 + .../Components/GameControlledByComponent.cs | 56 + .../GameControlledByComponent.cs.meta | 3 + .../Game/Components/GameDestroyedComponent.cs | 56 + .../Components/GameDestroyedComponent.cs.meta | 3 + .../GameDestroyedListenerComponent.cs | 85 + .../GameDestroyedListenerComponent.cs.meta | 3 + .../Game/Components/GameIdComponent.cs | 56 + .../Game/Components/GameIdComponent.cs.meta | 3 + .../GameRequiresWorldStateComponent.cs | 56 + .../GameRequiresWorldStateComponent.cs.meta | 3 + .../Game/Components/GameSyncComponent.cs | 56 + .../Game/Components/GameSyncComponent.cs.meta | 3 + .../Game/Components/GameWasSyncedComponent.cs | 56 + .../Components/GameWasSyncedComponent.cs.meta | 3 + .../Components/GameWorldStateComponent.cs | 96 + .../GameWorldStateComponent.cs.meta | 3 + Assets/Generated/Game/GameAttribute.cs | 13 + Assets/Generated/Game/GameAttribute.cs.meta | 11 + Assets/Generated/Game/GameComponentsLookup.cs | 55 + .../Game/GameComponentsLookup.cs.meta | 11 + Assets/Generated/Game/GameContext.cs | 30 + Assets/Generated/Game/GameContext.cs.meta | 11 + Assets/Generated/Game/GameEntity.cs | 10 + Assets/Generated/Game/GameEntity.cs.meta | 11 + Assets/Generated/Game/GameMatcher.cs | 26 + Assets/Generated/Game/GameMatcher.cs.meta | 11 + Assets/Generated/Game/Systems.meta | 3 + Assets/Plugins.meta | 8 + Assets/Plugins/DesperateDevs.meta | 8 + Assets/Plugins/DesperateDevs/Compile.cs | 5 + Assets/Plugins/DesperateDevs/Compile.cs.meta | 11 + .../DesperateDevs/DesperateDevs.Logging.dll | Bin 0 -> 6144 bytes .../DesperateDevs.Logging.dll.meta | 33 + .../DesperateDevs.Networking.dll | Bin 0 -> 13312 bytes .../DesperateDevs.Networking.dll.meta | 33 + .../DesperateDevs.Serialization.dll | Bin 0 -> 10752 bytes .../DesperateDevs.Serialization.dll.meta | 33 + .../DesperateDevs/DesperateDevs.Utils.dll | Bin 0 -> 19456 bytes .../DesperateDevs.Utils.dll.meta | 33 + Assets/Plugins/DesperateDevs/Editor.meta | 8 + .../Editor/DesperateDevs.Analytics.dll | Bin 0 -> 6144 bytes .../Editor/DesperateDevs.Analytics.dll.meta | 33 + ...eGeneration.CodeGenerator.Unity.Editor.dll | Bin 0 -> 16384 bytes ...ration.CodeGenerator.Unity.Editor.dll.meta | 33 + ...erateDevs.CodeGeneration.CodeGenerator.dll | Bin 0 -> 16384 bytes ...Devs.CodeGeneration.CodeGenerator.dll.meta | 33 + .../Editor/DesperateDevs.CodeGeneration.dll | Bin 0 -> 5632 bytes .../DesperateDevs.CodeGeneration.dll.meta | 33 + .../Editor/DesperateDevs.Unity.Editor.dll | Bin 0 -> 14848 bytes .../DesperateDevs.Unity.Editor.dll.meta | 33 + .../Plugins/DesperateDevs/Editor/Images.meta | 8 + .../Editor/Images/Jenny-Header.png | Bin 0 -> 479374 bytes .../Editor/Images/Jenny-Header.png.meta | 123 + .../Plugins/DesperateDevs/Editor/Plugins.meta | 8 + .../DesperateDevs.CodeGeneration.Plugins.dll | Bin 0 -> 13312 bytes ...perateDevs.CodeGeneration.Plugins.dll.meta | 33 + ...erateDevs.CodeGeneration.Unity.Plugins.dll | Bin 0 -> 8192 bytes ...Devs.CodeGeneration.Unity.Plugins.dll.meta | 33 + Assets/Plugins/Disruptor.meta | 8 + Assets/Plugins/Disruptor/RingBuffer.cs | 275 ++ Assets/Plugins/Disruptor/RingBuffer.cs.meta | 11 + Assets/Plugins/ENet.meta | 8 + Assets/Plugins/ENet/ENet.cs | 1063 ++++++++ Assets/Plugins/ENet/ENet.cs.meta | 11 + Assets/Plugins/ENet/enet.bundle | Bin 0 -> 97240 bytes Assets/Plugins/ENet/enet.bundle.meta | 87 + Assets/Plugins/ENet/enet.dll | Bin 0 -> 201494 bytes Assets/Plugins/ENet/enet.dll.meta | 100 + Assets/Plugins/ENet/libenet.so | Bin 0 -> 127778 bytes Assets/Plugins/ENet/libenet.so.meta | 100 + Assets/Plugins/Editor.meta | 8 + Assets/Plugins/Editor/JetBrains.meta | 8 + ...ins.Rider.Unity.Editor.Plugin.Repacked.dll | Bin 0 -> 1350656 bytes ...ider.Unity.Editor.Plugin.Repacked.dll.meta | 33 + Assets/Plugins/Entitas.meta | 8 + Assets/Plugins/Entitas/CHANGELOG.md | 2336 +++++++++++++++++ Assets/Plugins/Entitas/CHANGELOG.md.meta | 7 + Assets/Plugins/Entitas/Editor.meta | 8 + .../Editor/Entitas.Migration.Unity.Editor.dll | Bin 0 -> 6656 bytes .../Entitas.Migration.Unity.Editor.dll.meta | 33 + .../Entitas/Editor/Entitas.Migration.dll | Bin 0 -> 29696 bytes .../Entitas/Editor/Entitas.Migration.dll.meta | 33 + .../Entitas/Editor/Entitas.Unity.Editor.dll | Bin 0 -> 12288 bytes .../Editor/Entitas.Unity.Editor.dll.meta | 33 + .../Entitas.VisualDebugging.Unity.Editor.dll | Bin 0 -> 50688 bytes ...itas.VisualDebugging.Unity.Editor.dll.meta | 33 + Assets/Plugins/Entitas/Editor/Images.meta | 8 + .../EntitasContextErrorHierarchyIcon.png | Bin 0 -> 914 bytes .../EntitasContextErrorHierarchyIcon.png.meta | 134 + .../Images/EntitasContextHierarchyIcon.png | Bin 0 -> 1103 bytes .../EntitasContextHierarchyIcon.png.meta | 134 + .../EntitasEntityErrorHierarchyIcon.png | Bin 0 -> 918 bytes .../EntitasEntityErrorHierarchyIcon.png.meta | 123 + .../Images/EntitasEntityHierarchyIcon.png | Bin 0 -> 1083 bytes .../EntitasEntityHierarchyIcon.png.meta | 123 + .../Images/EntitasEntityLinkHierarchyIcon.png | Bin 0 -> 1091 bytes .../EntitasEntityLinkHierarchyIcon.png.meta | 123 + .../EntitasEntityLinkWarnHierarchyIcon.png | Bin 0 -> 890 bytes ...ntitasEntityLinkWarnHierarchyIcon.png.meta | 123 + .../Entitas/Editor/Images/EntitasHeader.png | Bin 0 -> 29121 bytes .../Editor/Images/EntitasHeader.png.meta | 123 + .../Images/EntitasSystemsHierarchyIcon.png | Bin 0 -> 1175 bytes .../EntitasSystemsHierarchyIcon.png.meta | 123 + .../EntitasSystemsWarnHierarchyIcon.png | Bin 0 -> 926 bytes .../EntitasSystemsWarnHierarchyIcon.png.meta | 123 + Assets/Plugins/Entitas/Editor/Plugins.meta | 8 + .../Entitas.CodeGeneration.Plugins.dll | Bin 0 -> 109056 bytes .../Entitas.CodeGeneration.Plugins.dll.meta | 33 + ...VisualDebugging.CodeGeneration.Plugins.dll | Bin 0 -> 20992 bytes ...lDebugging.CodeGeneration.Plugins.dll.meta | 33 + .../Entitas.CodeGeneration.Attributes.dll | Bin 0 -> 5120 bytes ...Entitas.CodeGeneration.Attributes.dll.meta | 33 + Assets/Plugins/Entitas/Entitas.Unity.dll | Bin 0 -> 4608 bytes Assets/Plugins/Entitas/Entitas.Unity.dll.meta | 33 + .../Entitas/Entitas.VisualDebugging.Unity.dll | Bin 0 -> 14336 bytes .../Entitas.VisualDebugging.Unity.dll.meta | 33 + Assets/Plugins/Entitas/Entitas.dll | Bin 0 -> 47104 bytes Assets/Plugins/Entitas/Entitas.dll.meta | 33 + Assets/Plugins/Entitas/Entitas.xml | 538 ++++ Assets/Plugins/Entitas/Entitas.xml.meta | 7 + Assets/Plugins/Entitas/EntitasUpgradeGuide.md | 653 +++++ .../Entitas/EntitasUpgradeGuide.md.meta | 7 + Assets/Plugins/Entitas/LICENSE.txt | 22 + Assets/Plugins/Entitas/LICENSE.txt.meta | 7 + Assets/Plugins/Entitas/README.md | 202 ++ Assets/Plugins/Entitas/README.md.meta | 7 + Assets/Plugins/Generators.dll | Bin 0 -> 65024 bytes Assets/Plugins/Generators.dll.meta | 33 + Assets/Plugins/NetStack.meta | 8 + .../NetStack/NetStack.Compression.meta | 8 + .../NetStack.Compression/BoundedRange.cs | 188 ++ .../NetStack.Compression/BoundedRange.cs.meta | 11 + .../NetStack.Compression/HalfPrecision.cs | 119 + .../HalfPrecision.cs.meta | 11 + .../NetStack.Compression/SmallestThree.cs | 195 ++ .../SmallestThree.cs.meta | 11 + .../NetStack/NetStack.Serialization.meta | 8 + .../NetStack.Serialization/BitBuffer.cs | 591 +++++ .../NetStack.Serialization/BitBuffer.cs.meta | 11 + Assets/Plugins/SpanSupport.meta | 8 + Assets/Plugins/SpanSupport/System.Buffers.dll | Bin 0 -> 28304 bytes .../SpanSupport/System.Buffers.dll.meta | 33 + Assets/Plugins/SpanSupport/System.Memory.dll | Bin 0 -> 148736 bytes .../SpanSupport/System.Memory.dll.meta | 33 + ...System.Runtime.CompilerServices.Unsafe.dll | Bin 0 -> 23600 bytes ...m.Runtime.CompilerServices.Unsafe.dll.meta | 33 + Assets/Scenes.meta | 8 + Assets/Scenes/SampleScene.unity | 387 +++ Assets/Scenes/SampleScene.unity.meta | 7 + Assets/Sources.meta | 8 + Assets/Sources/ClientFeature.cs | 13 + Assets/Sources/ClientFeature.cs.meta | 3 + Assets/Sources/Codegen.meta | 8 + Assets/Sources/Codegen/CodegenAttributes.meta | 8 + .../Codegen/CodegenAttributes/Bounds.meta | 3 + .../Bounds/BoundedFloatAttribute.cs | 19 + .../Bounds/BoundedFloatAttribute.cs.meta | 3 + .../Bounds/BoundedVector2Attribute.cs | 26 + .../Bounds/BoundedVector2Attribute.cs.meta | 3 + .../Bounds/BoundedVector3Attribute.cs | 32 + .../Bounds/BoundedVector3Attribute.cs.meta | 3 + .../CommandToClientAttribute.cs | 8 + .../CommandToClientAttribute.cs.meta | 3 + .../CommandToServerAttribute.cs | 8 + .../CommandToServerAttribute.cs.meta | 3 + .../CodegenAttributes/SerializeAttribute.cs | 8 + .../SerializeAttribute.cs.meta | 3 + .../CodegenAttributes/SyncAttribute.cs | 8 + .../CodegenAttributes/SyncAttribute.cs.meta | 11 + Assets/Sources/Codegen/CodegenExecutor.meta | 8 + .../CodegenExecutor/CodegenExecutor.cs | 682 +++++ .../CodegenExecutor/CodegenExecutor.cs.meta | 11 + Assets/Sources/CommandSchemes.meta | 3 + Assets/Sources/CommandSchemes/ICommand.cs | 7 + .../Sources/CommandSchemes/ICommand.cs.meta | 3 + Assets/Sources/CommandSchemes/ToClient.meta | 3 + .../ToClient/ChatMessageScheme.cs | 11 + .../ToClient/ChatMessageScheme.cs.meta | 3 + .../ToClient/GrantedIdScheme.cs | 10 + .../ToClient/GrantedIdScheme.cs.meta | 3 + .../ToClient/SetTickrateScheme.cs | 10 + .../ToClient/SetTickrateScheme.cs.meta | 3 + Assets/Sources/CommandSchemes/ToServer.meta | 3 + .../ToServer/ChatMessageScheme.cs | 10 + .../ToServer/ChatMessageScheme.cs.meta | 3 + .../ToServer/RequestCharacterScheme.cs | 9 + .../ToServer/RequestCharacterScheme.cs.meta | 3 + .../ToServer/SetTickrateScheme.cs | 10 + .../ToServer/SetTickrateScheme.cs.meta | 3 + Assets/Sources/Common.meta | 3 + Assets/Sources/Common/DestroyedComponent.cs | 9 + .../Sources/Common/DestroyedComponent.cs.meta | 3 + Assets/Sources/Common/IdComponent.cs | 15 + Assets/Sources/Common/IdComponent.cs.meta | 3 + Assets/Sources/CommonGeneratedFeature.cs | 8 + Assets/Sources/CommonGeneratedFeature.cs.meta | 3 + Assets/Sources/GameController.cs | 270 ++ Assets/Sources/GameController.cs.meta | 3 + Assets/Sources/Gameplay.meta | 8 + Assets/Sources/Gameplay/Cleanup.meta | 8 + .../Cleanup/DestroyDestroyedGameSystem.cs | 18 + .../DestroyDestroyedGameSystem.cs.meta | 11 + .../Gameplay/Cleanup/GameCleanupSystems.cs | 6 + .../Cleanup/GameCleanupSystems.cs.meta | 11 + Assets/Sources/Gameplay/Client.meta | 3 + .../Sources/Gameplay/ClientGameplayFeature.cs | 6 + .../Gameplay/ClientGameplayFeature.cs.meta | 3 + Assets/Sources/Gameplay/Common.meta | 3 + .../Sources/Gameplay/CommonGameplayFeature.cs | 6 + .../Gameplay/CommonGameplayFeature.cs.meta | 3 + Assets/Sources/Gameplay/Server.meta | 3 + Assets/Sources/Gameplay/Server/Character.meta | 3 + .../Gameplay/Server/Character/Character.cs | 8 + .../Server/Character/Character.cs.meta | 3 + .../Gameplay/Server/Character/ControlledBy.cs | 10 + .../Server/Character/ControlledBy.cs.meta | 3 + .../Sources/Gameplay/ServerGameplayFeature.cs | 6 + .../Gameplay/ServerGameplayFeature.cs.meta | 3 + Assets/Sources/Generated.meta | 8 + Assets/Sources/Generated/Command.meta | 8 + Assets/Sources/Generated/Command/Client.meta | 8 + .../Command/Client/ChatMessageCommand.cs | 17 + .../Command/Client/ChatMessageCommand.cs.meta | 11 + .../Command/Client/RequestCharacterCommand.cs | 14 + .../Client/RequestCharacterCommand.cs.meta | 11 + .../Command/Client/SetTickrateCommand.cs | 17 + .../Command/Client/SetTickrateCommand.cs.meta | 11 + .../Generated/Command/Compressors.meta | 8 + .../Command/Compressors/SyncCompressors.cs | 9 + .../Compressors/SyncCompressors.cs.meta | 11 + .../Sources/Generated/Command/Execution.meta | 8 + .../Execution/ClientCommandExecutor.cs | 43 + .../Execution/ClientCommandExecutor.cs.meta | 11 + .../Command/Execution/IClientHandler.cs | 8 + .../Command/Execution/IClientHandler.cs.meta | 11 + .../Command/Execution/IServerHandler.cs | 8 + .../Command/Execution/IServerHandler.cs.meta | 11 + .../Execution/ServerCommandExecutor.cs | 43 + .../Execution/ServerCommandExecutor.cs.meta | 11 + Assets/Sources/Generated/Command/Server.meta | 8 + .../Command/Server/ChatMessageCommand.cs | 20 + .../Command/Server/ChatMessageCommand.cs.meta | 11 + .../Command/Server/GrantedIdCommand.cs | 17 + .../Command/Server/GrantedIdCommand.cs.meta | 11 + .../Command/Server/SetTickrateCommand.cs | 17 + .../Command/Server/SetTickrateCommand.cs.meta | 11 + Assets/Sources/Generated/Sync.meta | 8 + Assets/Sources/Generated/Sync/Capture.meta | 8 + .../ServerCaptureChangedCharacterSystem.cs | 32 + ...erverCaptureChangedCharacterSystem.cs.meta | 11 + .../ServerCaptureChangedConnectionSystem.cs | 32 + ...rverCaptureChangedConnectionSystem.cs.meta | 11 + .../ServerCaptureChangedControlledBySystem.cs | 32 + ...erCaptureChangedControlledBySystem.cs.meta | 11 + .../Capture/ServerCaptureChangedIdSystem.cs | 32 + .../ServerCaptureChangedIdSystem.cs.meta | 11 + .../Capture/ServerCaptureChangedSyncSystem.cs | 32 + .../ServerCaptureChangedSyncSystem.cs.meta | 11 + .../ServerCaptureRemovedCharacterSystem.cs | 31 + ...erverCaptureRemovedCharacterSystem.cs.meta | 11 + .../ServerCaptureRemovedConnectionSystem.cs | 31 + ...rverCaptureRemovedConnectionSystem.cs.meta | 11 + .../ServerCaptureRemovedControlledBySystem.cs | 31 + ...erCaptureRemovedControlledBySystem.cs.meta | 11 + .../Capture/ServerCaptureRemovedIdSystem.cs | 31 + .../ServerCaptureRemovedIdSystem.cs.meta | 11 + .../Capture/ServerCaptureRemovedSyncSystem.cs | 31 + .../ServerCaptureRemovedSyncSystem.cs.meta | 11 + Assets/Sources/Generated/Sync/Components.meta | 8 + .../Generated/Sync/Components/Character.cs | 14 + .../Sync/Components/Character.cs.meta | 11 + .../Generated/Sync/Components/Connection.cs | 16 + .../Sync/Components/Connection.cs.meta | 11 + .../Generated/Sync/Components/ControlledBy.cs | 16 + .../Sync/Components/ControlledBy.cs.meta | 11 + .../Generated/Sync/Components/IdComponent.cs | 16 + .../Sync/Components/IdComponent.cs.meta | 11 + .../Sources/Generated/Sync/Components/Sync.cs | 14 + .../Generated/Sync/Components/Sync.cs.meta | 11 + .../Sources/Generated/Sync/Compressors.meta | 8 + .../Sync/Compressors/SyncCompressors.cs | 9 + .../Sync/Compressors/SyncCompressors.cs.meta | 11 + Assets/Sources/Generated/Sync/Feature.meta | 8 + .../Sync/Feature/ServerStateCaptureFeature.cs | 22 + .../Feature/ServerStateCaptureFeature.cs.meta | 11 + Assets/Sources/Generated/Sync/Utility.meta | 8 + .../Sync/Utility/PackEntityUtility.cs | 73 + .../Sync/Utility/PackEntityUtility.cs.meta | 11 + .../Sync/Utility/UnpackEntityUtility.cs | 175 ++ .../Sync/Utility/UnpackEntityUtility.cs.meta | 11 + Assets/Sources/Networking.meta | 3 + Assets/Sources/Networking/Client.meta | 3 + .../Networking/Client/ClientCommandHandler.cs | 49 + .../Client/ClientCommandHandler.cs.meta | 3 + .../Networking/Client/ClientNetworkFeature.cs | 10 + .../Client/ClientNetworkFeature.cs.meta | 3 + .../Networking/Client/ClientNetworkSystem.cs | 410 +++ .../Client/ClientNetworkSystem.cs.meta | 3 + .../Client/ClientSendPacketSystem.cs | 51 + .../Client/ClientSendPacketSystem.cs.meta | 3 + Assets/Sources/Networking/Components.meta | 3 + .../Networking/Components/ClientDataBuffer.cs | 9 + .../Components/ClientDataBuffer.cs.meta | 3 + .../Networking/Components/Connection.cs | 15 + .../Networking/Components/Connection.cs.meta | 3 + .../Networking/Components/ConnectionPeer.cs | 8 + .../Components/ConnectionPeer.cs.meta | 3 + .../Components/RequiresWorldState.cs | 6 + .../Components/RequiresWorldState.cs.meta | 3 + Assets/Sources/Networking/Components/Sync.cs | 8 + .../Networking/Components/Sync.cs.meta | 3 + .../Networking/Components/WasSynced.cs | 6 + .../Networking/Components/WasSynced.cs.meta | 3 + .../Networking/Components/WorldState.cs | 11 + .../Networking/Components/WorldState.cs.meta | 3 + .../Sources/Networking/INetworkComponent.cs | 7 + .../Networking/INetworkComponent.cs.meta | 3 + Assets/Sources/Networking/ReceivedEvent.cs | 9 + .../Sources/Networking/ReceivedEvent.cs.meta | 3 + Assets/Sources/Networking/SendData.cs | 9 + Assets/Sources/Networking/SendData.cs.meta | 3 + Assets/Sources/Networking/Server.meta | 3 + .../Networking/Server/DisconnectData.cs | 9 + .../Networking/Server/DisconnectData.cs.meta | 3 + .../Networking/Server/ServerCommandHandler.cs | 87 + .../Server/ServerCommandHandler.cs.meta | 3 + .../Networking/Server/ServerNetworkFeature.cs | 11 + .../Server/ServerNetworkFeature.cs.meta | 3 + .../Networking/Server/ServerNetworkSystem.cs | 312 +++ .../Server/ServerNetworkSystem.cs.meta | 3 + .../Server/ServerSendPacketsSystem.cs | 203 ++ .../Server/ServerSendPacketsSystem.cs.meta | 3 + .../Networking/Server/StateCapture.meta | 3 + .../ServerCaptureCreatedEntitiesSystem.cs | 38 + ...ServerCaptureCreatedEntitiesSystem.cs.meta | 11 + .../ServerCaptureRemovedEntitiesSystem.cs | 36 + ...ServerCaptureRemovedEntitiesSystem.cs.meta | 3 + .../ServerCreateWorldStateSystem.cs | 51 + .../ServerCreateWorldStateSystem.cs.meta | 3 + Assets/Sources/ServerFeature.cs | 13 + Assets/Sources/ServerFeature.cs.meta | 3 + Assets/Sources/Services.meta | 8 + Assets/Sources/Services/Service.cs | 9 + Assets/Sources/Services/Service.cs.meta | 11 + Assets/Sources/Services/Services.cs | 8 + Assets/Sources/Services/Services.cs.meta | 11 + Assets/Sources/Tools.meta | 3 + Assets/Sources/Tools/ComponentsLookup.cs | 22 + Assets/Sources/Tools/ComponentsLookup.cs.meta | 3 + Assets/Sources/Tools/Logger.cs | 56 + Assets/Sources/Tools/Logger.cs.meta | 3 + Assets/Sources/Utilities.meta | 3 + Assets/Sources/Utilities/GameObjectUtility.cs | 10 + .../Utilities/GameObjectUtility.cs.meta | 3 + Assets/Sources/View.meta | 3 + Assets/Sources/View/IView.cs | 10 + Assets/Sources/View/IView.cs.meta | 11 + Assets/Sources/View/Listeners.meta | 8 + .../Sources/View/Listeners/IEventListener.cs | 5 + .../View/Listeners/IEventListener.cs.meta | 11 + Assets/Sources/View/UnityView.cs | 25 + Assets/Sources/View/UnityView.cs.meta | 11 + Entitas.properties | 3 + .../Compressors/CompressorsGenerator.cs | 554 ++++ .../Compressors/CompressorsGenerator.tt | 36 + .../Generators/Properties/AssemblyInfo.cs | 36 + ...SchemeCommandExecutorInterfaceGenerator.cs | 461 ++++ ...SchemeCommandExecutorInterfaceGenerator.tt | 17 + .../SchemeCommandExecutorGenerator.cs | 539 ++++ .../SchemeCommandExecutorGenerator.tt | 46 + .../Scheme/Command/SchemeCommandGenerator.cs | 1545 +++++++++++ .../Scheme/Command/SchemeCommandGenerator.tt | 284 ++ .../Sync/Component/SyncComponentGenerator.cs | 1403 ++++++++++ .../Sync/Component/SyncComponentGenerator.tt | 277 ++ .../Sync/Feature/SyncFeatureGenerator.cs | 391 +++ .../Sync/Feature/SyncFeatureGenerator.tt | 23 + .../SyncChangedComponentSystemGenerator.cs | 534 ++++ .../SyncChangedComponentSystemGenerator.tt | 66 + .../SyncRemovedComponentSystemGenerator.cs | 492 ++++ .../SyncRemovedComponentSystemGenerator.tt | 48 + .../Utility/PackEntityUtilityGenerator.cs | 567 ++++ .../Utility/PackEntityUtilityGenerator.tt | 79 + .../Utility/UnpackEntityUtilityGenerator.cs | 734 ++++++ .../Utility/UnpackEntityUtilityGenerator.tt | 166 ++ .../Generators/bin/Debug/Generators.dll | Bin 0 -> 65024 bytes Hash.userproperties | 0 Jenny.properties | 52 + Packages/manifest.json | 41 + ProjectSettings/AudioManager.asset | 17 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/DynamicsManager.asset | 34 + ProjectSettings/EditorBuildSettings.asset | 8 + ProjectSettings/EditorSettings.asset | 25 + ProjectSettings/GraphicsSettings.asset | 64 + ProjectSettings/InputManager.asset | 295 +++ ProjectSettings/NavMeshAreas.asset | 91 + ProjectSettings/Physics2DSettings.asset | 56 + ProjectSettings/PresetManager.asset | 6 + ProjectSettings/ProjectSettings.asset | 645 +++++ ProjectSettings/ProjectVersion.txt | 2 + ProjectSettings/QualitySettings.asset | 231 ++ ProjectSettings/TagManager.asset | 43 + ProjectSettings/TimeManager.asset | 9 + ProjectSettings/UnityConnectSettings.asset | 34 + ProjectSettings/VFXManager.asset | 11 + ProjectSettings/XRSettings.asset | 10 + 436 files changed, 25043 insertions(+) create mode 100644 .gitignore create mode 100644 Assets/CodegenExecutor.asset create mode 100644 Assets/CodegenExecutor.asset.meta create mode 100644 Assets/Generated.meta create mode 100644 Assets/Generated/Contexts.cs create mode 100644 Assets/Generated/Contexts.cs.meta create mode 100644 Assets/Generated/Events.meta create mode 100644 Assets/Generated/Events/Components.meta create mode 100644 Assets/Generated/Events/Components/DestroyedListenerComponent.cs create mode 100644 Assets/Generated/Events/Components/DestroyedListenerComponent.cs.meta create mode 100644 Assets/Generated/Events/GameEventSystems.cs create mode 100644 Assets/Generated/Events/GameEventSystems.cs.meta create mode 100644 Assets/Generated/Events/Interfaces.meta create mode 100644 Assets/Generated/Events/Interfaces/IDestroyedListener.cs create mode 100644 Assets/Generated/Events/Interfaces/IDestroyedListener.cs.meta create mode 100644 Assets/Generated/Events/Systems.meta create mode 100644 Assets/Generated/Events/Systems/DestroyedEventSystem.cs create mode 100644 Assets/Generated/Events/Systems/DestroyedEventSystem.cs.meta create mode 100644 Assets/Generated/Feature.cs create mode 100644 Assets/Generated/Feature.cs.meta create mode 100644 Assets/Generated/Game.meta create mode 100644 Assets/Generated/Game/Components.meta create mode 100644 Assets/Generated/Game/Components/GameCharacterComponent.cs create mode 100644 Assets/Generated/Game/Components/GameCharacterComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameClientDataBufferComponent.cs create mode 100644 Assets/Generated/Game/Components/GameClientDataBufferComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameConnectionComponent.cs create mode 100644 Assets/Generated/Game/Components/GameConnectionComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameConnectionPeerComponent.cs create mode 100644 Assets/Generated/Game/Components/GameConnectionPeerComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameControlledByComponent.cs create mode 100644 Assets/Generated/Game/Components/GameControlledByComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameDestroyedComponent.cs create mode 100644 Assets/Generated/Game/Components/GameDestroyedComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameDestroyedListenerComponent.cs create mode 100644 Assets/Generated/Game/Components/GameDestroyedListenerComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameIdComponent.cs create mode 100644 Assets/Generated/Game/Components/GameIdComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameRequiresWorldStateComponent.cs create mode 100644 Assets/Generated/Game/Components/GameRequiresWorldStateComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameSyncComponent.cs create mode 100644 Assets/Generated/Game/Components/GameSyncComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameWasSyncedComponent.cs create mode 100644 Assets/Generated/Game/Components/GameWasSyncedComponent.cs.meta create mode 100644 Assets/Generated/Game/Components/GameWorldStateComponent.cs create mode 100644 Assets/Generated/Game/Components/GameWorldStateComponent.cs.meta create mode 100644 Assets/Generated/Game/GameAttribute.cs create mode 100644 Assets/Generated/Game/GameAttribute.cs.meta create mode 100644 Assets/Generated/Game/GameComponentsLookup.cs create mode 100644 Assets/Generated/Game/GameComponentsLookup.cs.meta create mode 100644 Assets/Generated/Game/GameContext.cs create mode 100644 Assets/Generated/Game/GameContext.cs.meta create mode 100644 Assets/Generated/Game/GameEntity.cs create mode 100644 Assets/Generated/Game/GameEntity.cs.meta create mode 100644 Assets/Generated/Game/GameMatcher.cs create mode 100644 Assets/Generated/Game/GameMatcher.cs.meta create mode 100644 Assets/Generated/Game/Systems.meta create mode 100644 Assets/Plugins.meta create mode 100644 Assets/Plugins/DesperateDevs.meta create mode 100644 Assets/Plugins/DesperateDevs/Compile.cs create mode 100644 Assets/Plugins/DesperateDevs/Compile.cs.meta create mode 100644 Assets/Plugins/DesperateDevs/DesperateDevs.Logging.dll create mode 100644 Assets/Plugins/DesperateDevs/DesperateDevs.Logging.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/DesperateDevs.Networking.dll create mode 100644 Assets/Plugins/DesperateDevs/DesperateDevs.Networking.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/DesperateDevs.Serialization.dll create mode 100644 Assets/Plugins/DesperateDevs/DesperateDevs.Serialization.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/DesperateDevs.Utils.dll create mode 100644 Assets/Plugins/DesperateDevs/DesperateDevs.Utils.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.Analytics.dll create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.Analytics.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.dll create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.dll create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.dll create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.Unity.Editor.dll create mode 100644 Assets/Plugins/DesperateDevs/Editor/DesperateDevs.Unity.Editor.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/Images.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/Images/Jenny-Header.png create mode 100644 Assets/Plugins/DesperateDevs/Editor/Images/Jenny-Header.png.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/Plugins.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Plugins.dll create mode 100644 Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Plugins.dll.meta create mode 100644 Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Unity.Plugins.dll create mode 100644 Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Unity.Plugins.dll.meta create mode 100644 Assets/Plugins/Disruptor.meta create mode 100644 Assets/Plugins/Disruptor/RingBuffer.cs create mode 100644 Assets/Plugins/Disruptor/RingBuffer.cs.meta create mode 100644 Assets/Plugins/ENet.meta create mode 100644 Assets/Plugins/ENet/ENet.cs create mode 100644 Assets/Plugins/ENet/ENet.cs.meta create mode 100644 Assets/Plugins/ENet/enet.bundle create mode 100644 Assets/Plugins/ENet/enet.bundle.meta create mode 100644 Assets/Plugins/ENet/enet.dll create mode 100644 Assets/Plugins/ENet/enet.dll.meta create mode 100644 Assets/Plugins/ENet/libenet.so create mode 100644 Assets/Plugins/ENet/libenet.so.meta create mode 100644 Assets/Plugins/Editor.meta create mode 100644 Assets/Plugins/Editor/JetBrains.meta create mode 100644 Assets/Plugins/Editor/JetBrains/JetBrains.Rider.Unity.Editor.Plugin.Repacked.dll create mode 100644 Assets/Plugins/Editor/JetBrains/JetBrains.Rider.Unity.Editor.Plugin.Repacked.dll.meta create mode 100644 Assets/Plugins/Entitas.meta create mode 100644 Assets/Plugins/Entitas/CHANGELOG.md create mode 100644 Assets/Plugins/Entitas/CHANGELOG.md.meta create mode 100644 Assets/Plugins/Entitas/Editor.meta create mode 100644 Assets/Plugins/Entitas/Editor/Entitas.Migration.Unity.Editor.dll create mode 100644 Assets/Plugins/Entitas/Editor/Entitas.Migration.Unity.Editor.dll.meta create mode 100644 Assets/Plugins/Entitas/Editor/Entitas.Migration.dll create mode 100644 Assets/Plugins/Entitas/Editor/Entitas.Migration.dll.meta create mode 100644 Assets/Plugins/Entitas/Editor/Entitas.Unity.Editor.dll create mode 100644 Assets/Plugins/Entitas/Editor/Entitas.Unity.Editor.dll.meta create mode 100644 Assets/Plugins/Entitas/Editor/Entitas.VisualDebugging.Unity.Editor.dll create mode 100644 Assets/Plugins/Entitas/Editor/Entitas.VisualDebugging.Unity.Editor.dll.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasContextErrorHierarchyIcon.png create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasContextErrorHierarchyIcon.png.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasContextHierarchyIcon.png create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasContextHierarchyIcon.png.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasEntityErrorHierarchyIcon.png create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasEntityErrorHierarchyIcon.png.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasEntityHierarchyIcon.png create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasEntityHierarchyIcon.png.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkHierarchyIcon.png create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkHierarchyIcon.png.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkWarnHierarchyIcon.png create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkWarnHierarchyIcon.png.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasHeader.png create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasHeader.png.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasSystemsHierarchyIcon.png create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasSystemsHierarchyIcon.png.meta create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasSystemsWarnHierarchyIcon.png create mode 100644 Assets/Plugins/Entitas/Editor/Images/EntitasSystemsWarnHierarchyIcon.png.meta create mode 100644 Assets/Plugins/Entitas/Editor/Plugins.meta create mode 100644 Assets/Plugins/Entitas/Editor/Plugins/Entitas.CodeGeneration.Plugins.dll create mode 100644 Assets/Plugins/Entitas/Editor/Plugins/Entitas.CodeGeneration.Plugins.dll.meta create mode 100644 Assets/Plugins/Entitas/Editor/Plugins/Entitas.VisualDebugging.CodeGeneration.Plugins.dll create mode 100644 Assets/Plugins/Entitas/Editor/Plugins/Entitas.VisualDebugging.CodeGeneration.Plugins.dll.meta create mode 100644 Assets/Plugins/Entitas/Entitas.CodeGeneration.Attributes.dll create mode 100644 Assets/Plugins/Entitas/Entitas.CodeGeneration.Attributes.dll.meta create mode 100644 Assets/Plugins/Entitas/Entitas.Unity.dll create mode 100644 Assets/Plugins/Entitas/Entitas.Unity.dll.meta create mode 100644 Assets/Plugins/Entitas/Entitas.VisualDebugging.Unity.dll create mode 100644 Assets/Plugins/Entitas/Entitas.VisualDebugging.Unity.dll.meta create mode 100644 Assets/Plugins/Entitas/Entitas.dll create mode 100644 Assets/Plugins/Entitas/Entitas.dll.meta create mode 100644 Assets/Plugins/Entitas/Entitas.xml create mode 100644 Assets/Plugins/Entitas/Entitas.xml.meta create mode 100644 Assets/Plugins/Entitas/EntitasUpgradeGuide.md create mode 100644 Assets/Plugins/Entitas/EntitasUpgradeGuide.md.meta create mode 100644 Assets/Plugins/Entitas/LICENSE.txt create mode 100644 Assets/Plugins/Entitas/LICENSE.txt.meta create mode 100644 Assets/Plugins/Entitas/README.md create mode 100644 Assets/Plugins/Entitas/README.md.meta create mode 100644 Assets/Plugins/Generators.dll create mode 100644 Assets/Plugins/Generators.dll.meta create mode 100644 Assets/Plugins/NetStack.meta create mode 100644 Assets/Plugins/NetStack/NetStack.Compression.meta create mode 100644 Assets/Plugins/NetStack/NetStack.Compression/BoundedRange.cs create mode 100644 Assets/Plugins/NetStack/NetStack.Compression/BoundedRange.cs.meta create mode 100644 Assets/Plugins/NetStack/NetStack.Compression/HalfPrecision.cs create mode 100644 Assets/Plugins/NetStack/NetStack.Compression/HalfPrecision.cs.meta create mode 100644 Assets/Plugins/NetStack/NetStack.Compression/SmallestThree.cs create mode 100644 Assets/Plugins/NetStack/NetStack.Compression/SmallestThree.cs.meta create mode 100644 Assets/Plugins/NetStack/NetStack.Serialization.meta create mode 100644 Assets/Plugins/NetStack/NetStack.Serialization/BitBuffer.cs create mode 100644 Assets/Plugins/NetStack/NetStack.Serialization/BitBuffer.cs.meta create mode 100644 Assets/Plugins/SpanSupport.meta create mode 100644 Assets/Plugins/SpanSupport/System.Buffers.dll create mode 100644 Assets/Plugins/SpanSupport/System.Buffers.dll.meta create mode 100644 Assets/Plugins/SpanSupport/System.Memory.dll create mode 100644 Assets/Plugins/SpanSupport/System.Memory.dll.meta create mode 100644 Assets/Plugins/SpanSupport/System.Runtime.CompilerServices.Unsafe.dll create mode 100644 Assets/Plugins/SpanSupport/System.Runtime.CompilerServices.Unsafe.dll.meta create mode 100644 Assets/Scenes.meta create mode 100644 Assets/Scenes/SampleScene.unity create mode 100644 Assets/Scenes/SampleScene.unity.meta create mode 100644 Assets/Sources.meta create mode 100644 Assets/Sources/ClientFeature.cs create mode 100644 Assets/Sources/ClientFeature.cs.meta create mode 100644 Assets/Sources/Codegen.meta create mode 100644 Assets/Sources/Codegen/CodegenAttributes.meta create mode 100644 Assets/Sources/Codegen/CodegenAttributes/Bounds.meta create mode 100644 Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedFloatAttribute.cs create mode 100644 Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedFloatAttribute.cs.meta create mode 100644 Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector2Attribute.cs create mode 100644 Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector2Attribute.cs.meta create mode 100644 Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector3Attribute.cs create mode 100644 Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector3Attribute.cs.meta create mode 100644 Assets/Sources/Codegen/CodegenAttributes/CommandToClientAttribute.cs create mode 100644 Assets/Sources/Codegen/CodegenAttributes/CommandToClientAttribute.cs.meta create mode 100644 Assets/Sources/Codegen/CodegenAttributes/CommandToServerAttribute.cs create mode 100644 Assets/Sources/Codegen/CodegenAttributes/CommandToServerAttribute.cs.meta create mode 100644 Assets/Sources/Codegen/CodegenAttributes/SerializeAttribute.cs create mode 100644 Assets/Sources/Codegen/CodegenAttributes/SerializeAttribute.cs.meta create mode 100644 Assets/Sources/Codegen/CodegenAttributes/SyncAttribute.cs create mode 100644 Assets/Sources/Codegen/CodegenAttributes/SyncAttribute.cs.meta create mode 100644 Assets/Sources/Codegen/CodegenExecutor.meta create mode 100644 Assets/Sources/Codegen/CodegenExecutor/CodegenExecutor.cs create mode 100644 Assets/Sources/Codegen/CodegenExecutor/CodegenExecutor.cs.meta create mode 100644 Assets/Sources/CommandSchemes.meta create mode 100644 Assets/Sources/CommandSchemes/ICommand.cs create mode 100644 Assets/Sources/CommandSchemes/ICommand.cs.meta create mode 100644 Assets/Sources/CommandSchemes/ToClient.meta create mode 100644 Assets/Sources/CommandSchemes/ToClient/ChatMessageScheme.cs create mode 100644 Assets/Sources/CommandSchemes/ToClient/ChatMessageScheme.cs.meta create mode 100644 Assets/Sources/CommandSchemes/ToClient/GrantedIdScheme.cs create mode 100644 Assets/Sources/CommandSchemes/ToClient/GrantedIdScheme.cs.meta create mode 100644 Assets/Sources/CommandSchemes/ToClient/SetTickrateScheme.cs create mode 100644 Assets/Sources/CommandSchemes/ToClient/SetTickrateScheme.cs.meta create mode 100644 Assets/Sources/CommandSchemes/ToServer.meta create mode 100644 Assets/Sources/CommandSchemes/ToServer/ChatMessageScheme.cs create mode 100644 Assets/Sources/CommandSchemes/ToServer/ChatMessageScheme.cs.meta create mode 100644 Assets/Sources/CommandSchemes/ToServer/RequestCharacterScheme.cs create mode 100644 Assets/Sources/CommandSchemes/ToServer/RequestCharacterScheme.cs.meta create mode 100644 Assets/Sources/CommandSchemes/ToServer/SetTickrateScheme.cs create mode 100644 Assets/Sources/CommandSchemes/ToServer/SetTickrateScheme.cs.meta create mode 100644 Assets/Sources/Common.meta create mode 100644 Assets/Sources/Common/DestroyedComponent.cs create mode 100644 Assets/Sources/Common/DestroyedComponent.cs.meta create mode 100644 Assets/Sources/Common/IdComponent.cs create mode 100644 Assets/Sources/Common/IdComponent.cs.meta create mode 100644 Assets/Sources/CommonGeneratedFeature.cs create mode 100644 Assets/Sources/CommonGeneratedFeature.cs.meta create mode 100644 Assets/Sources/GameController.cs create mode 100644 Assets/Sources/GameController.cs.meta create mode 100644 Assets/Sources/Gameplay.meta create mode 100644 Assets/Sources/Gameplay/Cleanup.meta create mode 100644 Assets/Sources/Gameplay/Cleanup/DestroyDestroyedGameSystem.cs create mode 100644 Assets/Sources/Gameplay/Cleanup/DestroyDestroyedGameSystem.cs.meta create mode 100644 Assets/Sources/Gameplay/Cleanup/GameCleanupSystems.cs create mode 100644 Assets/Sources/Gameplay/Cleanup/GameCleanupSystems.cs.meta create mode 100644 Assets/Sources/Gameplay/Client.meta create mode 100644 Assets/Sources/Gameplay/ClientGameplayFeature.cs create mode 100644 Assets/Sources/Gameplay/ClientGameplayFeature.cs.meta create mode 100644 Assets/Sources/Gameplay/Common.meta create mode 100644 Assets/Sources/Gameplay/CommonGameplayFeature.cs create mode 100644 Assets/Sources/Gameplay/CommonGameplayFeature.cs.meta create mode 100644 Assets/Sources/Gameplay/Server.meta create mode 100644 Assets/Sources/Gameplay/Server/Character.meta create mode 100644 Assets/Sources/Gameplay/Server/Character/Character.cs create mode 100644 Assets/Sources/Gameplay/Server/Character/Character.cs.meta create mode 100644 Assets/Sources/Gameplay/Server/Character/ControlledBy.cs create mode 100644 Assets/Sources/Gameplay/Server/Character/ControlledBy.cs.meta create mode 100644 Assets/Sources/Gameplay/ServerGameplayFeature.cs create mode 100644 Assets/Sources/Gameplay/ServerGameplayFeature.cs.meta create mode 100644 Assets/Sources/Generated.meta create mode 100644 Assets/Sources/Generated/Command.meta create mode 100644 Assets/Sources/Generated/Command/Client.meta create mode 100644 Assets/Sources/Generated/Command/Client/ChatMessageCommand.cs create mode 100644 Assets/Sources/Generated/Command/Client/ChatMessageCommand.cs.meta create mode 100644 Assets/Sources/Generated/Command/Client/RequestCharacterCommand.cs create mode 100644 Assets/Sources/Generated/Command/Client/RequestCharacterCommand.cs.meta create mode 100644 Assets/Sources/Generated/Command/Client/SetTickrateCommand.cs create mode 100644 Assets/Sources/Generated/Command/Client/SetTickrateCommand.cs.meta create mode 100644 Assets/Sources/Generated/Command/Compressors.meta create mode 100644 Assets/Sources/Generated/Command/Compressors/SyncCompressors.cs create mode 100644 Assets/Sources/Generated/Command/Compressors/SyncCompressors.cs.meta create mode 100644 Assets/Sources/Generated/Command/Execution.meta create mode 100644 Assets/Sources/Generated/Command/Execution/ClientCommandExecutor.cs create mode 100644 Assets/Sources/Generated/Command/Execution/ClientCommandExecutor.cs.meta create mode 100644 Assets/Sources/Generated/Command/Execution/IClientHandler.cs create mode 100644 Assets/Sources/Generated/Command/Execution/IClientHandler.cs.meta create mode 100644 Assets/Sources/Generated/Command/Execution/IServerHandler.cs create mode 100644 Assets/Sources/Generated/Command/Execution/IServerHandler.cs.meta create mode 100644 Assets/Sources/Generated/Command/Execution/ServerCommandExecutor.cs create mode 100644 Assets/Sources/Generated/Command/Execution/ServerCommandExecutor.cs.meta create mode 100644 Assets/Sources/Generated/Command/Server.meta create mode 100644 Assets/Sources/Generated/Command/Server/ChatMessageCommand.cs create mode 100644 Assets/Sources/Generated/Command/Server/ChatMessageCommand.cs.meta create mode 100644 Assets/Sources/Generated/Command/Server/GrantedIdCommand.cs create mode 100644 Assets/Sources/Generated/Command/Server/GrantedIdCommand.cs.meta create mode 100644 Assets/Sources/Generated/Command/Server/SetTickrateCommand.cs create mode 100644 Assets/Sources/Generated/Command/Server/SetTickrateCommand.cs.meta create mode 100644 Assets/Sources/Generated/Sync.meta create mode 100644 Assets/Sources/Generated/Sync/Capture.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedCharacterSystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedCharacterSystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedConnectionSystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedConnectionSystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedControlledBySystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedControlledBySystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedIdSystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedIdSystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedSyncSystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedSyncSystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedCharacterSystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedCharacterSystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedConnectionSystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedConnectionSystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedControlledBySystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedControlledBySystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedIdSystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedIdSystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedSyncSystem.cs create mode 100644 Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedSyncSystem.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Components.meta create mode 100644 Assets/Sources/Generated/Sync/Components/Character.cs create mode 100644 Assets/Sources/Generated/Sync/Components/Character.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Components/Connection.cs create mode 100644 Assets/Sources/Generated/Sync/Components/Connection.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Components/ControlledBy.cs create mode 100644 Assets/Sources/Generated/Sync/Components/ControlledBy.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Components/IdComponent.cs create mode 100644 Assets/Sources/Generated/Sync/Components/IdComponent.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Components/Sync.cs create mode 100644 Assets/Sources/Generated/Sync/Components/Sync.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Compressors.meta create mode 100644 Assets/Sources/Generated/Sync/Compressors/SyncCompressors.cs create mode 100644 Assets/Sources/Generated/Sync/Compressors/SyncCompressors.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Feature.meta create mode 100644 Assets/Sources/Generated/Sync/Feature/ServerStateCaptureFeature.cs create mode 100644 Assets/Sources/Generated/Sync/Feature/ServerStateCaptureFeature.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Utility.meta create mode 100644 Assets/Sources/Generated/Sync/Utility/PackEntityUtility.cs create mode 100644 Assets/Sources/Generated/Sync/Utility/PackEntityUtility.cs.meta create mode 100644 Assets/Sources/Generated/Sync/Utility/UnpackEntityUtility.cs create mode 100644 Assets/Sources/Generated/Sync/Utility/UnpackEntityUtility.cs.meta create mode 100644 Assets/Sources/Networking.meta create mode 100644 Assets/Sources/Networking/Client.meta create mode 100644 Assets/Sources/Networking/Client/ClientCommandHandler.cs create mode 100644 Assets/Sources/Networking/Client/ClientCommandHandler.cs.meta create mode 100644 Assets/Sources/Networking/Client/ClientNetworkFeature.cs create mode 100644 Assets/Sources/Networking/Client/ClientNetworkFeature.cs.meta create mode 100644 Assets/Sources/Networking/Client/ClientNetworkSystem.cs create mode 100644 Assets/Sources/Networking/Client/ClientNetworkSystem.cs.meta create mode 100644 Assets/Sources/Networking/Client/ClientSendPacketSystem.cs create mode 100644 Assets/Sources/Networking/Client/ClientSendPacketSystem.cs.meta create mode 100644 Assets/Sources/Networking/Components.meta create mode 100644 Assets/Sources/Networking/Components/ClientDataBuffer.cs create mode 100644 Assets/Sources/Networking/Components/ClientDataBuffer.cs.meta create mode 100644 Assets/Sources/Networking/Components/Connection.cs create mode 100644 Assets/Sources/Networking/Components/Connection.cs.meta create mode 100644 Assets/Sources/Networking/Components/ConnectionPeer.cs create mode 100644 Assets/Sources/Networking/Components/ConnectionPeer.cs.meta create mode 100644 Assets/Sources/Networking/Components/RequiresWorldState.cs create mode 100644 Assets/Sources/Networking/Components/RequiresWorldState.cs.meta create mode 100644 Assets/Sources/Networking/Components/Sync.cs create mode 100644 Assets/Sources/Networking/Components/Sync.cs.meta create mode 100644 Assets/Sources/Networking/Components/WasSynced.cs create mode 100644 Assets/Sources/Networking/Components/WasSynced.cs.meta create mode 100644 Assets/Sources/Networking/Components/WorldState.cs create mode 100644 Assets/Sources/Networking/Components/WorldState.cs.meta create mode 100644 Assets/Sources/Networking/INetworkComponent.cs create mode 100644 Assets/Sources/Networking/INetworkComponent.cs.meta create mode 100644 Assets/Sources/Networking/ReceivedEvent.cs create mode 100644 Assets/Sources/Networking/ReceivedEvent.cs.meta create mode 100644 Assets/Sources/Networking/SendData.cs create mode 100644 Assets/Sources/Networking/SendData.cs.meta create mode 100644 Assets/Sources/Networking/Server.meta create mode 100644 Assets/Sources/Networking/Server/DisconnectData.cs create mode 100644 Assets/Sources/Networking/Server/DisconnectData.cs.meta create mode 100644 Assets/Sources/Networking/Server/ServerCommandHandler.cs create mode 100644 Assets/Sources/Networking/Server/ServerCommandHandler.cs.meta create mode 100644 Assets/Sources/Networking/Server/ServerNetworkFeature.cs create mode 100644 Assets/Sources/Networking/Server/ServerNetworkFeature.cs.meta create mode 100644 Assets/Sources/Networking/Server/ServerNetworkSystem.cs create mode 100644 Assets/Sources/Networking/Server/ServerNetworkSystem.cs.meta create mode 100644 Assets/Sources/Networking/Server/ServerSendPacketsSystem.cs create mode 100644 Assets/Sources/Networking/Server/ServerSendPacketsSystem.cs.meta create mode 100644 Assets/Sources/Networking/Server/StateCapture.meta create mode 100644 Assets/Sources/Networking/Server/StateCapture/ServerCaptureCreatedEntitiesSystem.cs create mode 100644 Assets/Sources/Networking/Server/StateCapture/ServerCaptureCreatedEntitiesSystem.cs.meta create mode 100644 Assets/Sources/Networking/Server/StateCapture/ServerCaptureRemovedEntitiesSystem.cs create mode 100644 Assets/Sources/Networking/Server/StateCapture/ServerCaptureRemovedEntitiesSystem.cs.meta create mode 100644 Assets/Sources/Networking/Server/StateCapture/ServerCreateWorldStateSystem.cs create mode 100644 Assets/Sources/Networking/Server/StateCapture/ServerCreateWorldStateSystem.cs.meta create mode 100644 Assets/Sources/ServerFeature.cs create mode 100644 Assets/Sources/ServerFeature.cs.meta create mode 100644 Assets/Sources/Services.meta create mode 100644 Assets/Sources/Services/Service.cs create mode 100644 Assets/Sources/Services/Service.cs.meta create mode 100644 Assets/Sources/Services/Services.cs create mode 100644 Assets/Sources/Services/Services.cs.meta create mode 100644 Assets/Sources/Tools.meta create mode 100644 Assets/Sources/Tools/ComponentsLookup.cs create mode 100644 Assets/Sources/Tools/ComponentsLookup.cs.meta create mode 100644 Assets/Sources/Tools/Logger.cs create mode 100644 Assets/Sources/Tools/Logger.cs.meta create mode 100644 Assets/Sources/Utilities.meta create mode 100644 Assets/Sources/Utilities/GameObjectUtility.cs create mode 100644 Assets/Sources/Utilities/GameObjectUtility.cs.meta create mode 100644 Assets/Sources/View.meta create mode 100644 Assets/Sources/View/IView.cs create mode 100644 Assets/Sources/View/IView.cs.meta create mode 100644 Assets/Sources/View/Listeners.meta create mode 100644 Assets/Sources/View/Listeners/IEventListener.cs create mode 100644 Assets/Sources/View/Listeners/IEventListener.cs.meta create mode 100644 Assets/Sources/View/UnityView.cs create mode 100644 Assets/Sources/View/UnityView.cs.meta create mode 100644 Entitas.properties create mode 100644 Generators/Generators/Generators/Compressors/CompressorsGenerator.cs create mode 100644 Generators/Generators/Generators/Compressors/CompressorsGenerator.tt create mode 100644 Generators/Generators/Generators/Properties/AssemblyInfo.cs create mode 100644 Generators/Generators/Generators/Scheme/Command/Executor/Interface/SchemeCommandExecutorInterfaceGenerator.cs create mode 100644 Generators/Generators/Generators/Scheme/Command/Executor/Interface/SchemeCommandExecutorInterfaceGenerator.tt create mode 100644 Generators/Generators/Generators/Scheme/Command/Executor/SchemeCommandExecutorGenerator.cs create mode 100644 Generators/Generators/Generators/Scheme/Command/Executor/SchemeCommandExecutorGenerator.tt create mode 100644 Generators/Generators/Generators/Scheme/Command/SchemeCommandGenerator.cs create mode 100644 Generators/Generators/Generators/Scheme/Command/SchemeCommandGenerator.tt create mode 100644 Generators/Generators/Generators/Sync/Component/SyncComponentGenerator.cs create mode 100644 Generators/Generators/Generators/Sync/Component/SyncComponentGenerator.tt create mode 100644 Generators/Generators/Generators/Sync/Feature/SyncFeatureGenerator.cs create mode 100644 Generators/Generators/Generators/Sync/Feature/SyncFeatureGenerator.tt create mode 100644 Generators/Generators/Generators/Sync/Systems/SyncChangedComponentSystemGenerator.cs create mode 100644 Generators/Generators/Generators/Sync/Systems/SyncChangedComponentSystemGenerator.tt create mode 100644 Generators/Generators/Generators/Sync/Systems/SyncRemovedComponentSystemGenerator.cs create mode 100644 Generators/Generators/Generators/Sync/Systems/SyncRemovedComponentSystemGenerator.tt create mode 100644 Generators/Generators/Generators/Sync/Utility/PackEntityUtilityGenerator.cs create mode 100644 Generators/Generators/Generators/Sync/Utility/PackEntityUtilityGenerator.tt create mode 100644 Generators/Generators/Generators/Sync/Utility/UnpackEntityUtilityGenerator.cs create mode 100644 Generators/Generators/Generators/Sync/Utility/UnpackEntityUtilityGenerator.tt create mode 100644 Generators/Generators/Generators/bin/Debug/Generators.dll create mode 100644 Hash.userproperties create mode 100644 Jenny.properties create mode 100644 Packages/manifest.json create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/PresetManager.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 ProjectSettings/VFXManager.asset create mode 100644 ProjectSettings/XRSettings.asset diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..95bb254 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +[Ll]ibrary/ +[Tt]emp/ +[Oo]bj/ +[Bb]uild/ +[Bb]uilds/ +Assets/AssetStoreTools* + +# Visual Studio cache directory +.vs/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.opendb + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta + +# Unity3D Generated File On Crash Reports +sysinfo.txt + +# Builds +*.apk +*.unitypackage +.idea/ diff --git a/Assets/CodegenExecutor.asset b/Assets/CodegenExecutor.asset new file mode 100644 index 0000000..dce2c0f --- /dev/null +++ b/Assets/CodegenExecutor.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 16d40f4c171d6f647a7e84fcaaf26327, type: 3} + m_Name: CodegenExecutor + m_EditorClassIdentifier: + OutputPath: Sources/Generated diff --git a/Assets/CodegenExecutor.asset.meta b/Assets/CodegenExecutor.asset.meta new file mode 100644 index 0000000..08432ca --- /dev/null +++ b/Assets/CodegenExecutor.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cfe90b200262b1b45991edd4f790833b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated.meta b/Assets/Generated.meta new file mode 100644 index 0000000..f4875d3 --- /dev/null +++ b/Assets/Generated.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c80740628c7025e4c8a1ba02229082f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated/Contexts.cs b/Assets/Generated/Contexts.cs new file mode 100644 index 0000000..a80e8a9 --- /dev/null +++ b/Assets/Generated/Contexts.cs @@ -0,0 +1,124 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ContextsGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class Contexts : Entitas.IContexts { + + public static Contexts sharedInstance { + get { + if (_sharedInstance == null) { + _sharedInstance = new Contexts(); + } + + return _sharedInstance; + } + set { _sharedInstance = value; } + } + + static Contexts _sharedInstance; + + public GameContext game { get; set; } + + public Entitas.IContext[] allContexts { get { return new Entitas.IContext [] { game }; } } + + public Contexts() { + game = new GameContext(); + + var postConstructors = System.Linq.Enumerable.Where( + GetType().GetMethods(), + method => System.Attribute.IsDefined(method, typeof(Entitas.CodeGeneration.Attributes.PostConstructorAttribute)) + ); + + foreach (var postConstructor in postConstructors) { + postConstructor.Invoke(this, null); + } + } + + public void Reset() { + var contexts = allContexts; + for (int i = 0; i < contexts.Length; i++) { + contexts[i].Reset(); + } + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.EntityIndexGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class Contexts { + + public const string Connection = "Connection"; + public const string ControlledBy = "ControlledBy"; + public const string Id = "Id"; + + [Entitas.CodeGeneration.Attributes.PostConstructor] + public void InitializeEntityIndices() { + game.AddEntityIndex(new Entitas.PrimaryEntityIndex( + Connection, + game.GetGroup(GameMatcher.Connection), + (e, c) => ((Connection)c).Id)); + + game.AddEntityIndex(new Entitas.PrimaryEntityIndex( + ControlledBy, + game.GetGroup(GameMatcher.ControlledBy), + (e, c) => ((ControlledBy)c).Value)); + + game.AddEntityIndex(new Entitas.PrimaryEntityIndex( + Id, + game.GetGroup(GameMatcher.Id), + (e, c) => ((IdComponent)c).Value)); + } +} + +public static class ContextsExtensions { + + public static GameEntity GetEntityWithConnection(this GameContext context, ushort Id) { + return ((Entitas.PrimaryEntityIndex)context.GetEntityIndex(Contexts.Connection)).GetEntity(Id); + } + + public static GameEntity GetEntityWithControlledBy(this GameContext context, ushort Value) { + return ((Entitas.PrimaryEntityIndex)context.GetEntityIndex(Contexts.ControlledBy)).GetEntity(Value); + } + + public static GameEntity GetEntityWithId(this GameContext context, ushort Value) { + return ((Entitas.PrimaryEntityIndex)context.GetEntityIndex(Contexts.Id)).GetEntity(Value); + } +} +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.VisualDebugging.CodeGeneration.Plugins.ContextObserverGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class Contexts { + +#if (!ENTITAS_DISABLE_VISUAL_DEBUGGING && UNITY_EDITOR) + + [Entitas.CodeGeneration.Attributes.PostConstructor] + public void InitializeContextObservers() { + try { + CreateContextObserver(game); + } catch(System.Exception) { + } + } + + public void CreateContextObserver(Entitas.IContext context) { + if (UnityEngine.Application.isPlaying) { + var observer = new Entitas.VisualDebugging.Unity.ContextObserver(context); + UnityEngine.Object.DontDestroyOnLoad(observer.gameObject); + } + } + +#endif +} diff --git a/Assets/Generated/Contexts.cs.meta b/Assets/Generated/Contexts.cs.meta new file mode 100644 index 0000000..014af29 --- /dev/null +++ b/Assets/Generated/Contexts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b477ffa1c2dba4b40941c68b85814921 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated/Events.meta b/Assets/Generated/Events.meta new file mode 100644 index 0000000..8c4e34c --- /dev/null +++ b/Assets/Generated/Events.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 779317088a284ff1ba1d2b3339ab0331 +timeCreated: 1556833408 \ No newline at end of file diff --git a/Assets/Generated/Events/Components.meta b/Assets/Generated/Events/Components.meta new file mode 100644 index 0000000..6207f2a --- /dev/null +++ b/Assets/Generated/Events/Components.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8d5a79b46f4e4748aa822669026ae728 +timeCreated: 1556833408 \ No newline at end of file diff --git a/Assets/Generated/Events/Components/DestroyedListenerComponent.cs b/Assets/Generated/Events/Components/DestroyedListenerComponent.cs new file mode 100644 index 0000000..4e8c59d --- /dev/null +++ b/Assets/Generated/Events/Components/DestroyedListenerComponent.cs @@ -0,0 +1,12 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.EventListenerComponentGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +[Entitas.CodeGeneration.Attributes.DontGenerate(false)] +public sealed class DestroyedListenerComponent : Entitas.IComponent { + public System.Collections.Generic.List value; +} diff --git a/Assets/Generated/Events/Components/DestroyedListenerComponent.cs.meta b/Assets/Generated/Events/Components/DestroyedListenerComponent.cs.meta new file mode 100644 index 0000000..1ee43e6 --- /dev/null +++ b/Assets/Generated/Events/Components/DestroyedListenerComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f980e7c5350e48fcb6ca16e676d9fd4d +timeCreated: 1556833466 \ No newline at end of file diff --git a/Assets/Generated/Events/GameEventSystems.cs b/Assets/Generated/Events/GameEventSystems.cs new file mode 100644 index 0000000..cfcefee --- /dev/null +++ b/Assets/Generated/Events/GameEventSystems.cs @@ -0,0 +1,14 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.EventSystemsGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed class GameEventSystems : Feature { + + public GameEventSystems(Contexts contexts) { + Add(new DestroyedEventSystem(contexts)); // priority: 0 + } +} diff --git a/Assets/Generated/Events/GameEventSystems.cs.meta b/Assets/Generated/Events/GameEventSystems.cs.meta new file mode 100644 index 0000000..a292d00 --- /dev/null +++ b/Assets/Generated/Events/GameEventSystems.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5961e8f36b0b46fcb7afb02bb69478b6 +timeCreated: 1556833408 \ No newline at end of file diff --git a/Assets/Generated/Events/Interfaces.meta b/Assets/Generated/Events/Interfaces.meta new file mode 100644 index 0000000..ab422d7 --- /dev/null +++ b/Assets/Generated/Events/Interfaces.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3d3d9084a43b4ebe8928a272840a1ccb +timeCreated: 1556833408 \ No newline at end of file diff --git a/Assets/Generated/Events/Interfaces/IDestroyedListener.cs b/Assets/Generated/Events/Interfaces/IDestroyedListener.cs new file mode 100644 index 0000000..8d46f0d --- /dev/null +++ b/Assets/Generated/Events/Interfaces/IDestroyedListener.cs @@ -0,0 +1,11 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.EventListenertInterfaceGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public interface IDestroyedListener { + void OnDestroyed(GameEntity entity); +} diff --git a/Assets/Generated/Events/Interfaces/IDestroyedListener.cs.meta b/Assets/Generated/Events/Interfaces/IDestroyedListener.cs.meta new file mode 100644 index 0000000..16018fa --- /dev/null +++ b/Assets/Generated/Events/Interfaces/IDestroyedListener.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3954a8b58c974ffab194f1dd71033072 +timeCreated: 1556833466 \ No newline at end of file diff --git a/Assets/Generated/Events/Systems.meta b/Assets/Generated/Events/Systems.meta new file mode 100644 index 0000000..5e13c74 --- /dev/null +++ b/Assets/Generated/Events/Systems.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3f8e737659cd4d0cadee54ce117ac396 +timeCreated: 1556833408 \ No newline at end of file diff --git a/Assets/Generated/Events/Systems/DestroyedEventSystem.cs b/Assets/Generated/Events/Systems/DestroyedEventSystem.cs new file mode 100644 index 0000000..ec47836 --- /dev/null +++ b/Assets/Generated/Events/Systems/DestroyedEventSystem.cs @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.EventSystemGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed class DestroyedEventSystem : Entitas.ReactiveSystem { + + readonly System.Collections.Generic.List _listenerBuffer; + + public DestroyedEventSystem(Contexts contexts) : base(contexts.game) { + _listenerBuffer = new System.Collections.Generic.List(); + } + + protected override Entitas.ICollector GetTrigger(Entitas.IContext context) { + return Entitas.CollectorContextExtension.CreateCollector( + context, Entitas.TriggerOnEventMatcherExtension.Added(GameMatcher.Destroyed) + ); + } + + protected override bool Filter(GameEntity entity) { + return entity.isDestroyed && entity.hasDestroyedListener; + } + + protected override void Execute(System.Collections.Generic.List entities) { + foreach (var e in entities) { + + _listenerBuffer.Clear(); + _listenerBuffer.AddRange(e.destroyedListener.value); + foreach (var listener in _listenerBuffer) { + listener.OnDestroyed(e); + } + } + } +} diff --git a/Assets/Generated/Events/Systems/DestroyedEventSystem.cs.meta b/Assets/Generated/Events/Systems/DestroyedEventSystem.cs.meta new file mode 100644 index 0000000..5184357 --- /dev/null +++ b/Assets/Generated/Events/Systems/DestroyedEventSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f05154bca9f94378a5019b8ce41eb39e +timeCreated: 1556833466 \ No newline at end of file diff --git a/Assets/Generated/Feature.cs b/Assets/Generated/Feature.cs new file mode 100644 index 0000000..afa80bc --- /dev/null +++ b/Assets/Generated/Feature.cs @@ -0,0 +1,110 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.VisualDebugging.CodeGeneration.Plugins.FeatureClassGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#if (!ENTITAS_DISABLE_VISUAL_DEBUGGING && UNITY_EDITOR) + +public class Feature : Entitas.VisualDebugging.Unity.DebugSystems { + + public Feature(string name) : base(name) { + } + + public Feature() : base(true) { + var typeName = DesperateDevs.Utils.SerializationTypeExtension.ToCompilableString(GetType()); + var shortType = DesperateDevs.Utils.SerializationTypeExtension.ShortTypeName(typeName); + var readableType = DesperateDevs.Utils.StringExtension.ToSpacedCamelCase(shortType); + + initialize(readableType); + } +} + +#elif (!ENTITAS_DISABLE_DEEP_PROFILING && DEVELOPMENT_BUILD) + +public class Feature : Entitas.Systems { + + System.Collections.Generic.List _initializeSystemNames; + System.Collections.Generic.List _executeSystemNames; + System.Collections.Generic.List _cleanupSystemNames; + System.Collections.Generic.List _tearDownSystemNames; + + public Feature(string name) : this() { + } + + public Feature() { + _initializeSystemNames = new System.Collections.Generic.List(); + _executeSystemNames = new System.Collections.Generic.List(); + _cleanupSystemNames = new System.Collections.Generic.List(); + _tearDownSystemNames = new System.Collections.Generic.List(); + } + + public override Entitas.Systems Add(Entitas.ISystem system) { + var systemName = system.GetType().FullName; + + if (system is Entitas.IInitializeSystem) { + _initializeSystemNames.Add(systemName); + } + + if (system is Entitas.IExecuteSystem) { + _executeSystemNames.Add(systemName); + } + + if (system is Entitas.ICleanupSystem) { + _cleanupSystemNames.Add(systemName); + } + + if (system is Entitas.ITearDownSystem) { + _tearDownSystemNames.Add(systemName); + } + + return base.Add(system); + } + + public override void Initialize() { + for (int i = 0; i < _initializeSystems.Count; i++) { + UnityEngine.Profiling.Profiler.BeginSample(_initializeSystemNames[i]); + _initializeSystems[i].Initialize(); + UnityEngine.Profiling.Profiler.EndSample(); + } + } + + public override void Execute() { + for (int i = 0; i < _executeSystems.Count; i++) { + UnityEngine.Profiling.Profiler.BeginSample(_executeSystemNames[i]); + _executeSystems[i].Execute(); + UnityEngine.Profiling.Profiler.EndSample(); + } + } + + public override void Cleanup() { + for (int i = 0; i < _cleanupSystems.Count; i++) { + UnityEngine.Profiling.Profiler.BeginSample(_cleanupSystemNames[i]); + _cleanupSystems[i].Cleanup(); + UnityEngine.Profiling.Profiler.EndSample(); + } + } + + public override void TearDown() { + for (int i = 0; i < _tearDownSystems.Count; i++) { + UnityEngine.Profiling.Profiler.BeginSample(_tearDownSystemNames[i]); + _tearDownSystems[i].TearDown(); + UnityEngine.Profiling.Profiler.EndSample(); + } + } +} + +#else + +public class Feature : Entitas.Systems { + + public Feature(string name) { + } + + public Feature() { + } +} + +#endif diff --git a/Assets/Generated/Feature.cs.meta b/Assets/Generated/Feature.cs.meta new file mode 100644 index 0000000..825130a --- /dev/null +++ b/Assets/Generated/Feature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df0b9bce881f899489edf2ddd86f8a4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated/Game.meta b/Assets/Generated/Game.meta new file mode 100644 index 0000000..2852b3f --- /dev/null +++ b/Assets/Generated/Game.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af40b36d15416c948aeac23703c4c336 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated/Game/Components.meta b/Assets/Generated/Game/Components.meta new file mode 100644 index 0000000..b61d4d4 --- /dev/null +++ b/Assets/Generated/Game/Components.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 77a71e7e3b234c70a82750d468be57b9 +timeCreated: 1556833342 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameCharacterComponent.cs b/Assets/Generated/Game/Components/GameCharacterComponent.cs new file mode 100644 index 0000000..15764ea --- /dev/null +++ b/Assets/Generated/Game/Components/GameCharacterComponent.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + static readonly Character characterComponent = new Character(); + + public bool isCharacter { + get { return HasComponent(GameComponentsLookup.Character); } + set { + if (value != isCharacter) { + var index = GameComponentsLookup.Character; + if (value) { + var componentPool = GetComponentPool(index); + var component = componentPool.Count > 0 + ? componentPool.Pop() + : characterComponent; + + AddComponent(index, component); + } else { + RemoveComponent(index); + } + } + } + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherCharacter; + + public static Entitas.IMatcher Character { + get { + if (_matcherCharacter == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.Character); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherCharacter = matcher; + } + + return _matcherCharacter; + } + } +} diff --git a/Assets/Generated/Game/Components/GameCharacterComponent.cs.meta b/Assets/Generated/Game/Components/GameCharacterComponent.cs.meta new file mode 100644 index 0000000..418e6de --- /dev/null +++ b/Assets/Generated/Game/Components/GameCharacterComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2f8446bf22884ce0b877837b1494ad71 +timeCreated: 1558107371 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameClientDataBufferComponent.cs b/Assets/Generated/Game/Components/GameClientDataBufferComponent.cs new file mode 100644 index 0000000..164b9d1 --- /dev/null +++ b/Assets/Generated/Game/Components/GameClientDataBufferComponent.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + public ClientDataBuffer clientDataBuffer { get { return (ClientDataBuffer)GetComponent(GameComponentsLookup.ClientDataBuffer); } } + public bool hasClientDataBuffer { get { return HasComponent(GameComponentsLookup.ClientDataBuffer); } } + + public void AddClientDataBuffer(ushort newCommandCount, NetStack.Serialization.BitBuffer newValue) { + var index = GameComponentsLookup.ClientDataBuffer; + var component = (ClientDataBuffer)CreateComponent(index, typeof(ClientDataBuffer)); + component.CommandCount = newCommandCount; + component.Value = newValue; + AddComponent(index, component); + } + + public void ReplaceClientDataBuffer(ushort newCommandCount, NetStack.Serialization.BitBuffer newValue) { + var index = GameComponentsLookup.ClientDataBuffer; + var component = (ClientDataBuffer)CreateComponent(index, typeof(ClientDataBuffer)); + component.CommandCount = newCommandCount; + component.Value = newValue; + ReplaceComponent(index, component); + } + + public void RemoveClientDataBuffer() { + RemoveComponent(GameComponentsLookup.ClientDataBuffer); + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherClientDataBuffer; + + public static Entitas.IMatcher ClientDataBuffer { + get { + if (_matcherClientDataBuffer == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.ClientDataBuffer); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherClientDataBuffer = matcher; + } + + return _matcherClientDataBuffer; + } + } +} diff --git a/Assets/Generated/Game/Components/GameClientDataBufferComponent.cs.meta b/Assets/Generated/Game/Components/GameClientDataBufferComponent.cs.meta new file mode 100644 index 0000000..645d54a --- /dev/null +++ b/Assets/Generated/Game/Components/GameClientDataBufferComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cd02a16ef6dd4950aaba768c0cf12315 +timeCreated: 1557610066 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameConnectionComponent.cs b/Assets/Generated/Game/Components/GameConnectionComponent.cs new file mode 100644 index 0000000..a62659f --- /dev/null +++ b/Assets/Generated/Game/Components/GameConnectionComponent.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + public Connection connection { get { return (Connection)GetComponent(GameComponentsLookup.Connection); } } + public bool hasConnection { get { return HasComponent(GameComponentsLookup.Connection); } } + + public void AddConnection(ushort newId) { + var index = GameComponentsLookup.Connection; + var component = (Connection)CreateComponent(index, typeof(Connection)); + component.Id = newId; + AddComponent(index, component); + } + + public void ReplaceConnection(ushort newId) { + var index = GameComponentsLookup.Connection; + var component = (Connection)CreateComponent(index, typeof(Connection)); + component.Id = newId; + ReplaceComponent(index, component); + } + + public void RemoveConnection() { + RemoveComponent(GameComponentsLookup.Connection); + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherConnection; + + public static Entitas.IMatcher Connection { + get { + if (_matcherConnection == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.Connection); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherConnection = matcher; + } + + return _matcherConnection; + } + } +} diff --git a/Assets/Generated/Game/Components/GameConnectionComponent.cs.meta b/Assets/Generated/Game/Components/GameConnectionComponent.cs.meta new file mode 100644 index 0000000..b489ca6 --- /dev/null +++ b/Assets/Generated/Game/Components/GameConnectionComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fb02c5710f354db9bab550bbf79ca801 +timeCreated: 1557591816 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameConnectionPeerComponent.cs b/Assets/Generated/Game/Components/GameConnectionPeerComponent.cs new file mode 100644 index 0000000..279299a --- /dev/null +++ b/Assets/Generated/Game/Components/GameConnectionPeerComponent.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + public ConnectionPeer connectionPeer { get { return (ConnectionPeer)GetComponent(GameComponentsLookup.ConnectionPeer); } } + public bool hasConnectionPeer { get { return HasComponent(GameComponentsLookup.ConnectionPeer); } } + + public void AddConnectionPeer(ENet.Peer newValue) { + var index = GameComponentsLookup.ConnectionPeer; + var component = (ConnectionPeer)CreateComponent(index, typeof(ConnectionPeer)); + component.Value = newValue; + AddComponent(index, component); + } + + public void ReplaceConnectionPeer(ENet.Peer newValue) { + var index = GameComponentsLookup.ConnectionPeer; + var component = (ConnectionPeer)CreateComponent(index, typeof(ConnectionPeer)); + component.Value = newValue; + ReplaceComponent(index, component); + } + + public void RemoveConnectionPeer() { + RemoveComponent(GameComponentsLookup.ConnectionPeer); + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherConnectionPeer; + + public static Entitas.IMatcher ConnectionPeer { + get { + if (_matcherConnectionPeer == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.ConnectionPeer); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherConnectionPeer = matcher; + } + + return _matcherConnectionPeer; + } + } +} diff --git a/Assets/Generated/Game/Components/GameConnectionPeerComponent.cs.meta b/Assets/Generated/Game/Components/GameConnectionPeerComponent.cs.meta new file mode 100644 index 0000000..ebb8037 --- /dev/null +++ b/Assets/Generated/Game/Components/GameConnectionPeerComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ea1f873e943540c081df0989cb261f89 +timeCreated: 1557610066 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameControlledByComponent.cs b/Assets/Generated/Game/Components/GameControlledByComponent.cs new file mode 100644 index 0000000..1d6493b --- /dev/null +++ b/Assets/Generated/Game/Components/GameControlledByComponent.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + public ControlledBy controlledBy { get { return (ControlledBy)GetComponent(GameComponentsLookup.ControlledBy); } } + public bool hasControlledBy { get { return HasComponent(GameComponentsLookup.ControlledBy); } } + + public void AddControlledBy(ushort newValue) { + var index = GameComponentsLookup.ControlledBy; + var component = (ControlledBy)CreateComponent(index, typeof(ControlledBy)); + component.Value = newValue; + AddComponent(index, component); + } + + public void ReplaceControlledBy(ushort newValue) { + var index = GameComponentsLookup.ControlledBy; + var component = (ControlledBy)CreateComponent(index, typeof(ControlledBy)); + component.Value = newValue; + ReplaceComponent(index, component); + } + + public void RemoveControlledBy() { + RemoveComponent(GameComponentsLookup.ControlledBy); + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherControlledBy; + + public static Entitas.IMatcher ControlledBy { + get { + if (_matcherControlledBy == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.ControlledBy); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherControlledBy = matcher; + } + + return _matcherControlledBy; + } + } +} diff --git a/Assets/Generated/Game/Components/GameControlledByComponent.cs.meta b/Assets/Generated/Game/Components/GameControlledByComponent.cs.meta new file mode 100644 index 0000000..9a25e46 --- /dev/null +++ b/Assets/Generated/Game/Components/GameControlledByComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f47dbdf5a52d45a089c81da0582dcac2 +timeCreated: 1558107372 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameDestroyedComponent.cs b/Assets/Generated/Game/Components/GameDestroyedComponent.cs new file mode 100644 index 0000000..3c00ce8 --- /dev/null +++ b/Assets/Generated/Game/Components/GameDestroyedComponent.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + static readonly DestroyedComponent destroyedComponent = new DestroyedComponent(); + + public bool isDestroyed { + get { return HasComponent(GameComponentsLookup.Destroyed); } + set { + if (value != isDestroyed) { + var index = GameComponentsLookup.Destroyed; + if (value) { + var componentPool = GetComponentPool(index); + var component = componentPool.Count > 0 + ? componentPool.Pop() + : destroyedComponent; + + AddComponent(index, component); + } else { + RemoveComponent(index); + } + } + } + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherDestroyed; + + public static Entitas.IMatcher Destroyed { + get { + if (_matcherDestroyed == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.Destroyed); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherDestroyed = matcher; + } + + return _matcherDestroyed; + } + } +} diff --git a/Assets/Generated/Game/Components/GameDestroyedComponent.cs.meta b/Assets/Generated/Game/Components/GameDestroyedComponent.cs.meta new file mode 100644 index 0000000..4eb9c28 --- /dev/null +++ b/Assets/Generated/Game/Components/GameDestroyedComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a36e5ed35849438680a5db8af520bfab +timeCreated: 1556833466 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameDestroyedListenerComponent.cs b/Assets/Generated/Game/Components/GameDestroyedListenerComponent.cs new file mode 100644 index 0000000..cadbe6b --- /dev/null +++ b/Assets/Generated/Game/Components/GameDestroyedListenerComponent.cs @@ -0,0 +1,85 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + public DestroyedListenerComponent destroyedListener { get { return (DestroyedListenerComponent)GetComponent(GameComponentsLookup.DestroyedListener); } } + public bool hasDestroyedListener { get { return HasComponent(GameComponentsLookup.DestroyedListener); } } + + public void AddDestroyedListener(System.Collections.Generic.List newValue) { + var index = GameComponentsLookup.DestroyedListener; + var component = (DestroyedListenerComponent)CreateComponent(index, typeof(DestroyedListenerComponent)); + component.value = newValue; + AddComponent(index, component); + } + + public void ReplaceDestroyedListener(System.Collections.Generic.List newValue) { + var index = GameComponentsLookup.DestroyedListener; + var component = (DestroyedListenerComponent)CreateComponent(index, typeof(DestroyedListenerComponent)); + component.value = newValue; + ReplaceComponent(index, component); + } + + public void RemoveDestroyedListener() { + RemoveComponent(GameComponentsLookup.DestroyedListener); + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherDestroyedListener; + + public static Entitas.IMatcher DestroyedListener { + get { + if (_matcherDestroyedListener == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.DestroyedListener); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherDestroyedListener = matcher; + } + + return _matcherDestroyedListener; + } + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.EventEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + public void AddDestroyedListener(IDestroyedListener value) { + var listeners = hasDestroyedListener + ? destroyedListener.value + : new System.Collections.Generic.List(); + listeners.Add(value); + ReplaceDestroyedListener(listeners); + } + + public void RemoveDestroyedListener(IDestroyedListener value, bool removeComponentWhenEmpty = true) { + var listeners = destroyedListener.value; + listeners.Remove(value); + if (removeComponentWhenEmpty && listeners.Count == 0) { + RemoveDestroyedListener(); + } else { + ReplaceDestroyedListener(listeners); + } + } +} diff --git a/Assets/Generated/Game/Components/GameDestroyedListenerComponent.cs.meta b/Assets/Generated/Game/Components/GameDestroyedListenerComponent.cs.meta new file mode 100644 index 0000000..fa13027 --- /dev/null +++ b/Assets/Generated/Game/Components/GameDestroyedListenerComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a2c73f377e0a4cd99cebf163ba605544 +timeCreated: 1556833466 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameIdComponent.cs b/Assets/Generated/Game/Components/GameIdComponent.cs new file mode 100644 index 0000000..931e2c2 --- /dev/null +++ b/Assets/Generated/Game/Components/GameIdComponent.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + public IdComponent id { get { return (IdComponent)GetComponent(GameComponentsLookup.Id); } } + public bool hasId { get { return HasComponent(GameComponentsLookup.Id); } } + + public void AddId(ushort newValue) { + var index = GameComponentsLookup.Id; + var component = (IdComponent)CreateComponent(index, typeof(IdComponent)); + component.Value = newValue; + AddComponent(index, component); + } + + public void ReplaceId(ushort newValue) { + var index = GameComponentsLookup.Id; + var component = (IdComponent)CreateComponent(index, typeof(IdComponent)); + component.Value = newValue; + ReplaceComponent(index, component); + } + + public void RemoveId() { + RemoveComponent(GameComponentsLookup.Id); + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherId; + + public static Entitas.IMatcher Id { + get { + if (_matcherId == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.Id); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherId = matcher; + } + + return _matcherId; + } + } +} diff --git a/Assets/Generated/Game/Components/GameIdComponent.cs.meta b/Assets/Generated/Game/Components/GameIdComponent.cs.meta new file mode 100644 index 0000000..26ed875 --- /dev/null +++ b/Assets/Generated/Game/Components/GameIdComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4a0cc3635a2c44c5a871dceb2e7755b1 +timeCreated: 1556835313 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameRequiresWorldStateComponent.cs b/Assets/Generated/Game/Components/GameRequiresWorldStateComponent.cs new file mode 100644 index 0000000..aef19a8 --- /dev/null +++ b/Assets/Generated/Game/Components/GameRequiresWorldStateComponent.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + static readonly RequiresWorldState requiresWorldStateComponent = new RequiresWorldState(); + + public bool isRequiresWorldState { + get { return HasComponent(GameComponentsLookup.RequiresWorldState); } + set { + if (value != isRequiresWorldState) { + var index = GameComponentsLookup.RequiresWorldState; + if (value) { + var componentPool = GetComponentPool(index); + var component = componentPool.Count > 0 + ? componentPool.Pop() + : requiresWorldStateComponent; + + AddComponent(index, component); + } else { + RemoveComponent(index); + } + } + } + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherRequiresWorldState; + + public static Entitas.IMatcher RequiresWorldState { + get { + if (_matcherRequiresWorldState == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.RequiresWorldState); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherRequiresWorldState = matcher; + } + + return _matcherRequiresWorldState; + } + } +} diff --git a/Assets/Generated/Game/Components/GameRequiresWorldStateComponent.cs.meta b/Assets/Generated/Game/Components/GameRequiresWorldStateComponent.cs.meta new file mode 100644 index 0000000..1341e4a --- /dev/null +++ b/Assets/Generated/Game/Components/GameRequiresWorldStateComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7d5d3cbed09c428fb75d4f7cbcf37e2c +timeCreated: 1557701508 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameSyncComponent.cs b/Assets/Generated/Game/Components/GameSyncComponent.cs new file mode 100644 index 0000000..6335634 --- /dev/null +++ b/Assets/Generated/Game/Components/GameSyncComponent.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + static readonly Sync syncComponent = new Sync(); + + public bool isSync { + get { return HasComponent(GameComponentsLookup.Sync); } + set { + if (value != isSync) { + var index = GameComponentsLookup.Sync; + if (value) { + var componentPool = GetComponentPool(index); + var component = componentPool.Count > 0 + ? componentPool.Pop() + : syncComponent; + + AddComponent(index, component); + } else { + RemoveComponent(index); + } + } + } + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherSync; + + public static Entitas.IMatcher Sync { + get { + if (_matcherSync == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.Sync); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherSync = matcher; + } + + return _matcherSync; + } + } +} diff --git a/Assets/Generated/Game/Components/GameSyncComponent.cs.meta b/Assets/Generated/Game/Components/GameSyncComponent.cs.meta new file mode 100644 index 0000000..f4a9eff --- /dev/null +++ b/Assets/Generated/Game/Components/GameSyncComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d1ae1e9177494bf6ba8c684272248dda +timeCreated: 1557591816 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameWasSyncedComponent.cs b/Assets/Generated/Game/Components/GameWasSyncedComponent.cs new file mode 100644 index 0000000..bcd4de2 --- /dev/null +++ b/Assets/Generated/Game/Components/GameWasSyncedComponent.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + static readonly WasSynced wasSyncedComponent = new WasSynced(); + + public bool isWasSynced { + get { return HasComponent(GameComponentsLookup.WasSynced); } + set { + if (value != isWasSynced) { + var index = GameComponentsLookup.WasSynced; + if (value) { + var componentPool = GetComponentPool(index); + var component = componentPool.Count > 0 + ? componentPool.Pop() + : wasSyncedComponent; + + AddComponent(index, component); + } else { + RemoveComponent(index); + } + } + } + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherWasSynced; + + public static Entitas.IMatcher WasSynced { + get { + if (_matcherWasSynced == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.WasSynced); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherWasSynced = matcher; + } + + return _matcherWasSynced; + } + } +} diff --git a/Assets/Generated/Game/Components/GameWasSyncedComponent.cs.meta b/Assets/Generated/Game/Components/GameWasSyncedComponent.cs.meta new file mode 100644 index 0000000..500e4b2 --- /dev/null +++ b/Assets/Generated/Game/Components/GameWasSyncedComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b0e5939ccd384cbe962a75cb018b4e34 +timeCreated: 1557682277 \ No newline at end of file diff --git a/Assets/Generated/Game/Components/GameWorldStateComponent.cs b/Assets/Generated/Game/Components/GameWorldStateComponent.cs new file mode 100644 index 0000000..071d9ff --- /dev/null +++ b/Assets/Generated/Game/Components/GameWorldStateComponent.cs @@ -0,0 +1,96 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentContextApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameContext { + + public GameEntity worldStateEntity { get { return GetGroup(GameMatcher.WorldState).GetSingleEntity(); } } + public WorldState worldState { get { return worldStateEntity.worldState; } } + public bool hasWorldState { get { return worldStateEntity != null; } } + + public GameEntity SetWorldState(ushort newEntityCount, NetStack.Serialization.BitBuffer newBuffer) { + if (hasWorldState) { + throw new Entitas.EntitasException("Could not set WorldState!\n" + this + " already has an entity with WorldState!", + "You should check if the context already has a worldStateEntity before setting it or use context.ReplaceWorldState()."); + } + var entity = CreateEntity(); + entity.AddWorldState(newEntityCount, newBuffer); + return entity; + } + + public void ReplaceWorldState(ushort newEntityCount, NetStack.Serialization.BitBuffer newBuffer) { + var entity = worldStateEntity; + if (entity == null) { + entity = SetWorldState(newEntityCount, newBuffer); + } else { + entity.ReplaceWorldState(newEntityCount, newBuffer); + } + } + + public void RemoveWorldState() { + worldStateEntity.Destroy(); + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public partial class GameEntity { + + public WorldState worldState { get { return (WorldState)GetComponent(GameComponentsLookup.WorldState); } } + public bool hasWorldState { get { return HasComponent(GameComponentsLookup.WorldState); } } + + public void AddWorldState(ushort newEntityCount, NetStack.Serialization.BitBuffer newBuffer) { + var index = GameComponentsLookup.WorldState; + var component = (WorldState)CreateComponent(index, typeof(WorldState)); + component.EntityCount = newEntityCount; + component.Buffer = newBuffer; + AddComponent(index, component); + } + + public void ReplaceWorldState(ushort newEntityCount, NetStack.Serialization.BitBuffer newBuffer) { + var index = GameComponentsLookup.WorldState; + var component = (WorldState)CreateComponent(index, typeof(WorldState)); + component.EntityCount = newEntityCount; + component.Buffer = newBuffer; + ReplaceComponent(index, component); + } + + public void RemoveWorldState() { + RemoveComponent(GameComponentsLookup.WorldState); + } +} + +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + static Entitas.IMatcher _matcherWorldState; + + public static Entitas.IMatcher WorldState { + get { + if (_matcherWorldState == null) { + var matcher = (Entitas.Matcher)Entitas.Matcher.AllOf(GameComponentsLookup.WorldState); + matcher.componentNames = GameComponentsLookup.componentNames; + _matcherWorldState = matcher; + } + + return _matcherWorldState; + } + } +} diff --git a/Assets/Generated/Game/Components/GameWorldStateComponent.cs.meta b/Assets/Generated/Game/Components/GameWorldStateComponent.cs.meta new file mode 100644 index 0000000..111f9cf --- /dev/null +++ b/Assets/Generated/Game/Components/GameWorldStateComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b8f95dbd140449cfa717ace034f7d81d +timeCreated: 1557703029 \ No newline at end of file diff --git a/Assets/Generated/Game/GameAttribute.cs b/Assets/Generated/Game/GameAttribute.cs new file mode 100644 index 0000000..f613db0 --- /dev/null +++ b/Assets/Generated/Game/GameAttribute.cs @@ -0,0 +1,13 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ContextAttributeGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed class GameAttribute : Entitas.CodeGeneration.Attributes.ContextAttribute { + + public GameAttribute() : base("Game") { + } +} diff --git a/Assets/Generated/Game/GameAttribute.cs.meta b/Assets/Generated/Game/GameAttribute.cs.meta new file mode 100644 index 0000000..f5b21de --- /dev/null +++ b/Assets/Generated/Game/GameAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f57e353c99697184a837721f0ee12e13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated/Game/GameComponentsLookup.cs b/Assets/Generated/Game/GameComponentsLookup.cs new file mode 100644 index 0000000..93723b0 --- /dev/null +++ b/Assets/Generated/Game/GameComponentsLookup.cs @@ -0,0 +1,55 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ComponentLookupGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public static class GameComponentsLookup { + + public const int Character = 0; + public const int ClientDataBuffer = 1; + public const int Connection = 2; + public const int ConnectionPeer = 3; + public const int ControlledBy = 4; + public const int Destroyed = 5; + public const int DestroyedListener = 6; + public const int Id = 7; + public const int RequiresWorldState = 8; + public const int Sync = 9; + public const int WasSynced = 10; + public const int WorldState = 11; + + public const int TotalComponents = 12; + + public static readonly string[] componentNames = { + "Character", + "ClientDataBuffer", + "Connection", + "ConnectionPeer", + "ControlledBy", + "Destroyed", + "DestroyedListener", + "Id", + "RequiresWorldState", + "Sync", + "WasSynced", + "WorldState" + }; + + public static readonly System.Type[] componentTypes = { + typeof(Character), + typeof(ClientDataBuffer), + typeof(Connection), + typeof(ConnectionPeer), + typeof(ControlledBy), + typeof(DestroyedComponent), + typeof(DestroyedListenerComponent), + typeof(IdComponent), + typeof(RequiresWorldState), + typeof(Sync), + typeof(WasSynced), + typeof(WorldState) + }; +} diff --git a/Assets/Generated/Game/GameComponentsLookup.cs.meta b/Assets/Generated/Game/GameComponentsLookup.cs.meta new file mode 100644 index 0000000..44eb33c --- /dev/null +++ b/Assets/Generated/Game/GameComponentsLookup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7ad7b8ead6868b4eac97f4329709b56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated/Game/GameContext.cs b/Assets/Generated/Game/GameContext.cs new file mode 100644 index 0000000..ceeb5e5 --- /dev/null +++ b/Assets/Generated/Game/GameContext.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ContextGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameContext : Entitas.Context { + + public GameContext() + : base( + GameComponentsLookup.TotalComponents, + 0, + new Entitas.ContextInfo( + "Game", + GameComponentsLookup.componentNames, + GameComponentsLookup.componentTypes + ), + (entity) => + +#if (ENTITAS_FAST_AND_UNSAFE) + new Entitas.UnsafeAERC(), +#else + new Entitas.SafeAERC(entity), +#endif + () => new GameEntity() + ) { + } +} diff --git a/Assets/Generated/Game/GameContext.cs.meta b/Assets/Generated/Game/GameContext.cs.meta new file mode 100644 index 0000000..348da14 --- /dev/null +++ b/Assets/Generated/Game/GameContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad01bce7e1a52544d8070a22e7c90a47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated/Game/GameEntity.cs b/Assets/Generated/Game/GameEntity.cs new file mode 100644 index 0000000..afda5b0 --- /dev/null +++ b/Assets/Generated/Game/GameEntity.cs @@ -0,0 +1,10 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.EntityGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameEntity : Entitas.Entity { +} diff --git a/Assets/Generated/Game/GameEntity.cs.meta b/Assets/Generated/Game/GameEntity.cs.meta new file mode 100644 index 0000000..551f834 --- /dev/null +++ b/Assets/Generated/Game/GameEntity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f4ca1ebdac8a944c81a7523c37b8024 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated/Game/GameMatcher.cs b/Assets/Generated/Game/GameMatcher.cs new file mode 100644 index 0000000..4259b56 --- /dev/null +++ b/Assets/Generated/Game/GameMatcher.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGeneration.Plugins.ContextMatcherGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +public sealed partial class GameMatcher { + + public static Entitas.IAllOfMatcher AllOf(params int[] indices) { + return Entitas.Matcher.AllOf(indices); + } + + public static Entitas.IAllOfMatcher AllOf(params Entitas.IMatcher[] matchers) { + return Entitas.Matcher.AllOf(matchers); + } + + public static Entitas.IAnyOfMatcher AnyOf(params int[] indices) { + return Entitas.Matcher.AnyOf(indices); + } + + public static Entitas.IAnyOfMatcher AnyOf(params Entitas.IMatcher[] matchers) { + return Entitas.Matcher.AnyOf(matchers); + } +} diff --git a/Assets/Generated/Game/GameMatcher.cs.meta b/Assets/Generated/Game/GameMatcher.cs.meta new file mode 100644 index 0000000..090ce03 --- /dev/null +++ b/Assets/Generated/Game/GameMatcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e52cc74a6212834abd744f867ea60fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Generated/Game/Systems.meta b/Assets/Generated/Game/Systems.meta new file mode 100644 index 0000000..c2af202 --- /dev/null +++ b/Assets/Generated/Game/Systems.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 401be2b04b6844388efa5f35d4e7963f +timeCreated: 1556834250 \ No newline at end of file diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..3cab3f6 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 010971b045d5ac74b92fd4b9e5fe29f4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs.meta b/Assets/Plugins/DesperateDevs.meta new file mode 100644 index 0000000..6dfe312 --- /dev/null +++ b/Assets/Plugins/DesperateDevs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 317deb88db51d41779e0dbf6a1f16d02 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/Compile.cs b/Assets/Plugins/DesperateDevs/Compile.cs new file mode 100644 index 0000000..eeb2cff --- /dev/null +++ b/Assets/Plugins/DesperateDevs/Compile.cs @@ -0,0 +1,5 @@ +namespace DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor { + + class Compile { + } +} diff --git a/Assets/Plugins/DesperateDevs/Compile.cs.meta b/Assets/Plugins/DesperateDevs/Compile.cs.meta new file mode 100644 index 0000000..b8107db --- /dev/null +++ b/Assets/Plugins/DesperateDevs/Compile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 649f7d3f032f9e1418532660d09c3cb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/DesperateDevs.Logging.dll b/Assets/Plugins/DesperateDevs/DesperateDevs.Logging.dll new file mode 100644 index 0000000000000000000000000000000000000000..f12d12c44503457c58c7f6ee1057744568c8876c GIT binary patch literal 6144 zcmeHLeQX@n5uf+=d_G_7%lSf*i=CLYokSNWK1>ME(iEK7abjf0AvO-8X`S`m%jL-4 z?sfNUFp$UrfdoPXBucAFZ7FI675yVE2(0o^Pz4o5&?>Fkstq)4LFGfV(5k4k73pu@ z?%B?V($GIEp0%^{o0&InX5QDH2d}+{3?ho)IdOt$25)ZNnx36ZL!CJP2MKzt?&a1Q zG4OKh$iAX)mOZ!NStT=PIgVQ~$Cc?#IA+l?dxwV2lABlAhKBgc(DjZjL<7R0wVyBT zu8ww`+RO!_izo?6G?2b>0p2E_Zal0pL1hp(3pjq=ra>X+W>EKS+6nt%XZk(+VjQ8V)M*nz}x2GY(?Er0sh585a@Jlr;HEro~-A4IjD7P z-C#J;6rOpl8_{PyWxFucvF?GAeJ#N=uXPh`o(DC1gzJjNu}P|-yV{A~TRkpy`5$P^Rw~i`UF(0(d2j|ZR=6uk~;F7?b;kGg2xVMLK zA4Cl!G80D>6~rT_8J{JM#c*(zG{QVqQPUMc9%mQ}l|Q$!Fts0Rto72x(uijoI7#HU zsLPU zr{g*w(-oiQ+4kU}tcRTD8LN)F2IE5AC~v}Qh{U4{YK^%f*UOt(8mr~u*T$o@7ya&R z{bmbxrhYB*CM>l`N1HSbXa)kTxImzp%VY+dDK3pn6BlN+Txw+611>$wEt}<N3YNBcn{8}DN%V*7B#D>?i%B5^T2nZqV1b)cbtvUF!y5DipT5f_@MfyxQNdSnCRmL?sb3ULm51XQJ-fV7lze# zYzrS6vy1t1))8GTgLjm6h)yF)WlcAVCSxHD!aPb}HYQ~h-ZIoox53%@B(?l~V);VB z^bu|IH_f+d58sh2KcML|+A^)RTj>!!pgtzxRnQ?E9!dF>SgetN)(}sLHK=AIBuRQ( z>uQMgN%{uRr;+C>V$1bFp9NYC+qLp}&`IM(x{&TRUIu+%{t|uuC|(3D((|Ch^c#vs zm(r^=I(-Z5N2l+Ee02IC?zE8^qud)C=Olw4%%G%5Av7_Pwv5X!L(J`PVdNo9!kr#_*dLu;J z2y}?$Fs-0OJCArfs(YAPC>^4A#bK<(wh+z8!(`IB z5IqXiN|%J_L!dV54pAJaovsYgOGdX?NuwGaqPIk!SWVZ5x^H7QWN11-Iu_n#g1#!4 z-lO@m(=SQheSytu-~|Qr1Ksy^O}}oi&8?dMtF|8iHNsw}N+Kknts(9uXhzc@p3`aI z|LhS4+WB$1I)-YmI%+Tkc2xsvu?#eheZ+h{?KaxzJUSsS#(e$I*amvk7^Fk=FRbJ{ z=qD7jy%C5A;*?IOs-t611D1r7U*9=R_8#UmmoXZWZ6e{60v}Y5IFjACN40R@38} zlED&F({4?Z^aZM5hhlPZV$@?!1Q3cr>*OGW19B(m>$FS6a1u$JL`y)~%D^K*B`w9w z2ug!WRI3(z6KE54BGSk-T%FXOfA9~zsl1_$117I z_m7QjwsQM%C-oJT4XN!G2GpdoPt%lCWuKd;5zopgDkWEC+at zlkayX-TjI-t3uHU`TpLbUv_PJe@5}@|!BSX~!pE+^fbX3I!f~P8OJ3T+*G& zwreuLBO=hpK@|NmTiw?ekfOE`mBm&(_W;b zt5?AHfn~#uo-|#@Q$$>Fc%9SFf-?q|&D%Dy$)p{of=Qhy(U3zr;kl(nIoHV-xrEe* za5nkA@+w#fs;p(ZEYHD$+v`$~tt^k%-==a|IeF!U<(h?7RgS76l>#g{WPWe)Jl7-0 zIS8&IP&OA({R&rnZ_z3^u8&pWS7#ucLu`g%X$&iGvY1nTxF9eI*hYX{Af1|zxUdkb zVfi#x4J_0Iu|XaL=hM*mb=YR)1~1*4`t`(t#~Q`l>K6~uGvRs4sbF5YPBe)1vOV}w zS+|!g8rR>8KVS8Sqix%c_C5K^{R_9=dF00wF@=a3CW#s_jg57+VsT@uOr(;vi&M+^ z9XDxlYK2^c%Ne2-RS}E=QD7Z0p@$n8BbnO5e*lR{tw<$fri5t{-A#!beUXUO8mW5z zt4|7}g_13}X*{wDsOk4*%gc(>|XB+*l~75-wJTmQwGuGpJy|z7Q6`kOiR!VO% z)}B}eAIZ}_oU4StfeCjEO`qI@6C&J{r_0%H8=h;r@xPQHEf#^_06L0q;xW)Iv=dxE z{?oD@xF57H_^%5+9r?>g{IzjvOf@$i%Z-k3AI1*$Z1&^JMhD z$FM=yVF!G>h-(7%s$d3BuEty)xF&?JF|OSvBYqFUJ(%5Fxm{qj1C7I?mN>bsjs z`CsYogN(xUTade(I|qq=p%w0YDAkG66HR24zMeOYv2`7vJfE5%D0%P9S84XliW9RWlTj2Gw<2lz@Dg7uH=wEtn6% zx;RS342t8-vix3nqO~=6FlhQ*TcdGb`kocQoNH_H>LjY!JQrUARu`;6-Dm(sgLub; z8Z)<)Q7*&<*RUTex&)|80b7)*Mg?*MwsR$ea%Y*LQU3c4FwxWhiL6F{W#Pc z`f-k9gSxSnws$NH7u3KUsQJ7KZ0AaK7v-!*96C)G>dkgfxbhVSlo9*8e@g{WKW;7>Zy3w|-am`7P8}FD~*dlltY@6qiIBf2K zz(NiYdE_2JEzf;W<({#~J?vYY`-OZm_wSnzVZMky#=f_{5?{H#MSL5@ajq!01#Y+B zCZ2^OB8~|ZbP>2<9BY87Vj7^r0;kGrMWMXbtMbyht~e#<+L{f&(3X3s(dn`xQ_6G$ zRR)DB{k{R0LEW16YlTn3rEj+XOzHB{5F@KpjW)S4P^&&yEO;wqwMtnlFlRr8I)Fm>fCFV=F}43hChG}RdRyG+nAOojWA7j4eqka za;S7Oj=5;6D(Qr5t_$H_2VA>9H$qh1O!X)@ZAEv09)x|!Nx?o;oCv}`HEG-{Ai7#k zEo z#Joclm(K$%QoQCe7V`j8eet|o$OqbB{+IA^t%EKs?n}o}%)y{}UmE=bGQriR)!=rr zyB5&0XMv#(c|=eo-*SJwxi7u^R>dRC<#Oo}%dG|rQn5h=t@iJAV3mU{#yU&rTu-PO z20Ixj7!>uANd>qQ#m*rWraJ%??b5dy$bp`4Kpe-KZQL4!Rm!|u5s~f= zh-dpCpNCE9AxvYOc|e*D4|u4ty^_=_C$)T1B?S<3G_>y$Dx@daQ?)ND|I~gAzfc>f zqVn2+X08p!qBgL+Ev}7)e6lv)Hy`H6Mf5TDz4ev&%JnVc!)OTO({;uKQNwfoh&&8((Yp9r}~PV&TihTBLLvaRdTK9&GSIS+T12F{9MD zuEtHZWthBM^c0*jUA0kwmSgzAqOBaG@};U-6xTWFMup|8*>YRSw=3k^N`BFse`v=! zN~b~SL2(z>e5{ySu%7oM7*<&BJKKa6MH(ZM5cb?w4CvrNg>X zqT9RJL317x$!K5cFRbml+Xu^=-qG3zmTK{S^o6vz0>P4jpn=gF2Q>dl3v--iH+FS* zUD5h_=24o*c^tu~RX5x` z!t>*P!2Ce9Y9Ql|Gchh4jNME}d;2GL6Y8DRP!$@XV9<9{LBGun3a-$dI=!`5zb z75y0<5DnBww+mD1GO5?@7JFhaflfEwZ91UmOPA0A-iai1UaQxqgbK4x=e4E!QGw0f z9}DQ!+7gglY6PSNL#2Lzs%<@K$=Hc_o%3d!qy;FFdHkN)1Lyh{A8Xr!M@=y&L({ds|h zmdly+0eaqiL@cKb5_*tcvj0@HP)b6l?e*GMM3f%#q3Z#yr00F;_W@l-HF(fs{~iYv zqkbQ{Q+ok<-lZV;rvaK&5aq2SS}Q#(q4UJvuA(3M5L>;PT2`~nyJ)Xgt*xe~B=jv} z|JrD}O^rRJKZ%-n$cN5@@(TKagihNJiLZ+|)vsa7)Aknut)(3jdXWA~d`q;`DIfX{ zpbmOcQPQW3Goq7Tm(X3bBydKoqb8iL*_QiZXBQpxp&IS)#Cp0QA+8V&FSp)Oke$_@ z7aOUYA0eRq6rfEs=|e97+DvDC=-&WcNiX=&S$m$YqE{3oWnM+bS}BFb0s)L2^PzG3 zMR7GfBq0^SYv||x*!jQ((L?p^im%iDvG@ROlhAqM=x(9MC3F||f@*CG)pjuDT~ud3 zDSByMLMqnR(dJGy7RA{0^pp>^qXzrv+I2kkK+_rX4be}-5>k=qr(F{I7{%y6FveG5 z<_!1{&z!f#U=doXzbl4{5YL=#KEyH)U`^nQ=UBa7rDJpTp{06Q-&us1?@8ZTkKq#C*3^`0zox)%W2>+Ms{1V(fPMkUw?@#&~zquxju=^qR^2J7k~V zG-6efeIC{Q(S;a;)&+QXWiE{ZHn$mUVTJZiUE-x=rG+;Njs6*28oemBm->Q6rQUm` z9JWVLlcaoYk>qkMtkS#b zH|#3nbs~&5fPGG_iFcbpx>fc!$o31A)|=^%=}mDteSsdv9{XjgF*j2WMz2M?+ulYO zXt%W!PX$(Blx_n40PtyXC+5hP^dsme#0=UK#+`J8mRZNqK8=-yxlYmBw7%+o(zL#+ z&rp^2J^L)4=2${l`?2*HxLSGL)~?aNkM<`06<}QJU(kLn@Kdy(u--zOvZ}Qn?UZ;0 zHhdI27fTLnJ@iFm9;2SY+CQyp7=0cV_RvQ_->+RTH)(IvGl3qo>#O>JIYryCmpusE z>ZR{<)KN919YOyHq#YB-(DJ(1LtnK|g7Tno8tuQEzo&(@s;Wm=qy2SY!rHgB7T=2- z^~bP(gsa{L{$ZSI*)~JWQFB!j&I|jEDE8+Vbzmj0##yzCPa9}g&|b8wa3V`k2k;Ne z(Whnq8?t>_wijgEsxi$f**+}WZ^-tqWqU!keS+m5#NINf&&&3#Y@e1b8H|sqHo*Np z*&dYbyliXnT$!OW^c`fYQCq2XYJ0U?v`=bJXwPWX!a(JlsB8g9Dz?GW~z;t7&wj8qs7dDY@3#W zsuss{6a5&zwb;#VeAePrU5lRyg6Makl4|j@Q4ReeIogZbPc>s6sw%Emv97WH!gaa$ zC)w4d2MT++_&97^NOyo;TyQ-HY5bNh0R1>A!-pE!u>{``zF}HVSJO9fe-_^>v@jh+ zZGAp z6X~q%~41n|8J(vZ;(iH#m8Q zhCO%6$Bg3f9|N57;h9WkS7OScjLTt?UFaN7XC2z(xp_C~W|*5sxyGcRQeAouZOynj zhjz|n^66wEmmhR8&O{=wWcTOhvdPgrgQ?=&a#90xdolfhWZ%*m$CE`3s#Jd-*&3h0 z(4aFuGcm!Fu7n#pmUpr_OoI|iNl5VA*z05x$7C;88ux=CgP2c`r!(pNTxoOw*_T0( zbC~vda|o5{&+@G1VEe_PqFn%xG!>2l!c!9%Q<~QmDbpVsm^pOF@kY}hMg-M#-Z#mU z7a4$)xoNB{d1ug>&2{ZS0v2O;Ir*cmcbEs%Ya10BS$sR3>_mQ&GU_Iyy)}`^j3<(Z zDOuk510yQ|?g=V@mCFk^AX6+(xp8+(KY>q_amT;nA31`zmxaru_4vaT!mp zX^xizYE`(zIdQyM#99`rs&tRhY5`e<_Gg-!c9`FCQv1+AI*&CE!mzj!W+i$wRFIbx z74I+hs^SX(@TC=44VA%u9H55!$8&ivk<1sT2;~ctWnqdI=7z>{(oGspd%65>Z_qiE zz`8;s{k)D~b7uf<@y+G+InR5X%C5iJ_(1s{8Te zPc9fc?92_jUXj!(7qivHqALX^We-$pgHn<5`>b$}>*et~1{#L^bn(o?(osCT&?Jh9 z4$smUuM{KMlyi*6j(X|5qx$>Ye$PwHNf9`Kl#3cpOr)JFS&+FOu1%m9eKy z@0GifWcId@3A(yc%cb(S(0ao4=IOSp>(1RX^zn_M|LJP@1s=v?q!}?yvjb?t%WO-J z)bIxnagm$&Q&X$yE2(xR@y7^ik(vN$kqx1$n68EI2q(ghZfPMSMv*iILeUnM77E0K z*3z^jW=7hg0oxAGMAo(#mKKRZUkg;(kv3-O1!$Y3hgw>A7^HYFA2|^@0i+h0zZ-HW z8tJu`MfydgSJc&NcsIN(GJmhew|)SEP3mQ{cQMZD#D|4>NYd{1Fj??`EV|^7YDSN77bIz^=6|c1(yms;$$&7mY;i zNVGb}ZaxZZowlS_)1pPUSz;8XL_i2#oX5vxG@~QgK0GTi4Whtzj^b^A2;|>7%sq#XaM&bd^g}57p9F{C%)ab zS#otX12S!FUnCk0aLGh!xwj-1fa9_Y_hsa3xJ7h13o5#{%>@)?>WJQT9T|yun2ZE!3Jq#OEgd|O9h<*F2>2= z@<9iT$v!-jHo*2#n3|J@{J5KY{HN4g3hT%gq+gl{iMbM{^qJgrp;S{6@cn z+uw3OR)WiWg}+x-I6N_XgPF|EL^@0I>DzJSshCIKZG#N{N%S|@`;GwrUP*+%@0_n> zQNL2-z1AW;({01|z(JyW3dsa~kKo@E_tPkip&g>V=#Ahnt#<()K|8Ge>YBc0yzvgd zRbF`E4*=xF^Q=s)#0{d=AT@zqU>N&u2K&JXcBwe>4&w>zWofxz zNdkJ@cpWM=*n~r=zjH5^^f!{Gn+l)JIA8I*y-rw!UqOA%gV4@rA(q2?W=T&BwB48q zCEERR=gO7QbYssheTin;r1zn(WfH?|3 zJvs~>d>-k-uAjk&FHBL$-T|r!DRnC-r*Yz7%O_|Oyo4!(x0TWcyxEd?mcup_{AK9Z zw`H@8%O2=(Vc`tomq$j~t5S4Iap4#dT_bt=LBS`0DcG5j=cQl92iD(Qmx@52`ac6d Nz(c}suK#}#_+N^w0ssI2 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/DesperateDevs/DesperateDevs.Networking.dll.meta b/Assets/Plugins/DesperateDevs/DesperateDevs.Networking.dll.meta new file mode 100644 index 0000000..c0cb82e --- /dev/null +++ b/Assets/Plugins/DesperateDevs/DesperateDevs.Networking.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 9e1ef8545e4ada44f91db7998a60ec6a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/DesperateDevs.Serialization.dll b/Assets/Plugins/DesperateDevs/DesperateDevs.Serialization.dll new file mode 100644 index 0000000000000000000000000000000000000000..eae53c7143bad99b0834cc3c73d875e272fb16d3 GIT binary patch literal 10752 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/DesperateDevs/DesperateDevs.Utils.dll.meta b/Assets/Plugins/DesperateDevs/DesperateDevs.Utils.dll.meta new file mode 100644 index 0000000..f7e808f --- /dev/null +++ b/Assets/Plugins/DesperateDevs/DesperateDevs.Utils.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 824df2be42f737449992f3132ec8e2d6 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/Editor.meta b/Assets/Plugins/DesperateDevs/Editor.meta new file mode 100644 index 0000000..135f278 --- /dev/null +++ b/Assets/Plugins/DesperateDevs/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 079f846ebfbf36f41b987ef1deae729e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.Analytics.dll b/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.Analytics.dll new file mode 100644 index 0000000000000000000000000000000000000000..8bb0a1382eec009ab7f20016d42f53765e75ab9e GIT binary patch literal 6144 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.Analytics.dll.meta b/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.Analytics.dll.meta new file mode 100644 index 0000000..5e0adec --- /dev/null +++ b/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.Analytics.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 75896b85ae761ef4a9cce4070eed2a48 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.dll b/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.dll new file mode 100644 index 0000000000000000000000000000000000000000..c5bfb6e9145a64dcac410d53cd4508010cfaa061 GIT binary patch literal 16384 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 ac4+$7e|0(kXZYm%{`y`0n}`4R5%_OF7J5$r literal 0 HcmV?d00001 diff --git a/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.dll.meta b/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.dll.meta new file mode 100644 index 0000000..8e8764e --- /dev/null +++ b/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.Unity.Editor.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 468a8e14c587a244eb50c899de980bf5 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.dll b/Assets/Plugins/DesperateDevs/Editor/DesperateDevs.CodeGeneration.CodeGenerator.dll new file mode 100644 index 0000000000000000000000000000000000000000..783f19d53721750ac1cdd3ea857000785b61447a GIT binary patch literal 16384 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 rm-=YC8dJVkPGDE~2A2M{li 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

Lfh-2&y{N|{ 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

    WaM={DhSHBJ^?Iid1xrY}Ye*N&1bbH5w|UB;@X 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,}yHz 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⪚UTTEHj=BV!X+u>|D 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 Z`R0RAat~fao&kTJJ<(AufBfR({{^pJ-HHGJ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/DesperateDevs/Editor/Images/Jenny-Header.png.meta b/Assets/Plugins/DesperateDevs/Editor/Images/Jenny-Header.png.meta new file mode 100644 index 0000000..ca825c7 --- /dev/null +++ b/Assets/Plugins/DesperateDevs/Editor/Images/Jenny-Header.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 62c57d751cb8541c2afeeee44410ea23 +labels: +- Jenny-Header +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 0 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: dec394311a18449ed96f63646ffa6c80 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/Editor/Plugins.meta b/Assets/Plugins/DesperateDevs/Editor/Plugins.meta new file mode 100644 index 0000000..b2e8180 --- /dev/null +++ b/Assets/Plugins/DesperateDevs/Editor/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a2620ebc6e56824f94db090b3a50975 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Plugins.dll b/Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Plugins.dll new file mode 100644 index 0000000000000000000000000000000000000000..0343544606c267a77aacdbe64271824f72c9289e GIT binary patch literal 13312 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 V&AE1~|1&U&pPhbq{pLmB{{VO3h3o(T literal 0 HcmV?d00001 diff --git a/Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Plugins.dll.meta b/Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Plugins.dll.meta new file mode 100644 index 0000000..70f5378 --- /dev/null +++ b/Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Plugins.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 2241fb30c2bffbe4cbb7e737fdb1ddce +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Unity.Plugins.dll b/Assets/Plugins/DesperateDevs/Editor/Plugins/DesperateDevs.CodeGeneration.Unity.Plugins.dll new file mode 100644 index 0000000000000000000000000000000000000000..e9395b4f4339514d95d693dd1ab558d60ee69735 GIT binary patch literal 8192 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 + /// Implementation of the Disruptor pattern + /// + /// the type of item to be stored + public class RingBuffer + { + private readonly T[] _entries; + private readonly int _modMask; + private Volatile.PaddedLong _consumerCursor = new Volatile.PaddedLong(); + private Volatile.PaddedLong _producerCursor = new Volatile.PaddedLong(); + + ///

    + /// Creates a new RingBuffer with the given capacity + /// + /// The capacity of the buffer + /// Only a single thread may attempt to consume at any one time + public RingBuffer(int capacity) + { + capacity = NextPowerOfTwo(capacity); + _modMask = capacity - 1; + _entries = new T[capacity]; + } + + /// + /// The maximum number of items that can be stored + /// + public int Capacity + { + get { return _entries.Length; } + } + + public T this[long index] + { + get { unchecked { return _entries[index & _modMask]; } } + set { unchecked { _entries[index & _modMask] = value; } } + } + + /// + /// Removes an item from the buffer. + /// + /// The next available item + public T Dequeue() + { + var next = _consumerCursor.ReadAcquireFence() + 1; + while (_producerCursor.ReadAcquireFence() < next) // makes sure we read the data from _entries after we have read the producer cursor + { + Thread.SpinWait(1); + } + var result = this[next]; + _consumerCursor.WriteReleaseFence(next); // makes sure we read the data from _entries before we update the consumer cursor + return result; + } + + /// + /// Attempts to remove an items from the queue + /// + /// the items + /// True if successful + public bool TryDequeue(out T obj) + { + var next = _consumerCursor.ReadAcquireFence() + 1; + + if (_producerCursor.ReadAcquireFence() < next) + { + obj = default(T); + return false; + } + obj = Dequeue(); + return true; + } + + /// + /// Add an item to the buffer + /// + /// + public void Enqueue(T item) + { + var next = _producerCursor.ReadAcquireFence() + 1; + + long wrapPoint = next - _entries.Length; + long min = _consumerCursor.ReadAcquireFence(); + + while (wrapPoint > min) + { + min = _consumerCursor.ReadAcquireFence(); + Thread.SpinWait(1); + } + + this[next] = item; + _producerCursor.WriteReleaseFence(next); // makes sure we write the data in _entries before we update the producer cursor + } + + /// + /// The number of items in the buffer + /// + /// for indicative purposes only, may contain stale data + public int Count { get { return (int)(_producerCursor.ReadFullFence() - _consumerCursor.ReadFullFence()); } } + + private static int NextPowerOfTwo(int x) + { + var result = 2; + while (result < x) + { + result <<= 1; + } + return result; + } + + + } + public static class Volatile + { + private const int CacheLineSize = 64; + + [StructLayout(LayoutKind.Explicit, Size = CacheLineSize * 2)] + public struct PaddedLong + { + [FieldOffset(CacheLineSize)] + private long _value; + + /// + /// Create a new with the given initial value. + /// + /// Initial value + public PaddedLong(long value) + { + _value = value; + } + + /// + /// Read the value without applying any fence + /// + /// The current value + public long ReadUnfenced() + { + return _value; + } + + /// + /// Read the value applying acquire fence semantic + /// + /// The current value + public long ReadAcquireFence() + { + var value = _value; + Thread.MemoryBarrier(); + return value; + } + + /// + /// Read the value applying full fence semantic + /// + /// The current value + public long ReadFullFence() + { + Thread.MemoryBarrier(); + return _value; + } + + /// + /// Read the value applying a compiler only fence, no CPU fence is applied + /// + /// The current value + [MethodImpl(MethodImplOptions.NoOptimization)] + public long ReadCompilerOnlyFence() + { + return _value; + } + + /// + /// Write the value applying release fence semantic + /// + /// The new value + public void WriteReleaseFence(long newValue) + { + Thread.MemoryBarrier(); + _value = newValue; + } + + /// + /// Write the value applying full fence semantic + /// + /// The new value + public void WriteFullFence(long newValue) + { + Thread.MemoryBarrier(); + _value = newValue; + } + + /// + /// Write the value applying a compiler fence only, no CPU fence is applied + /// + /// The new value + [MethodImpl(MethodImplOptions.NoOptimization)] + public void WriteCompilerOnlyFence(long newValue) + { + _value = newValue; + } + + /// + /// Write without applying any fence + /// + /// The new value + public void WriteUnfenced(long newValue) + { + _value = newValue; + } + + /// + /// Atomically set the value to the given updated value if the current value equals the comparand + /// + /// The new value + /// The comparand (expected value) + /// + public bool AtomicCompareExchange(long newValue, long comparand) + { + return Interlocked.CompareExchange(ref _value, newValue, comparand) == comparand; + } + + /// + /// Atomically set the value to the given updated value + /// + /// The new value + /// The original value + public long AtomicExchange(long newValue) + { + return Interlocked.Exchange(ref _value, newValue); + } + + /// + /// Atomically add the given value to the current value and return the sum + /// + /// The value to be added + /// The sum of the current value and the given value + public long AtomicAddAndGet(long delta) + { + return Interlocked.Add(ref _value, delta); + } + + /// + /// Atomically increment the current value and return the new value + /// + /// The incremented value. + public long AtomicIncrementAndGet() + { + return Interlocked.Increment(ref _value); + } + + /// + /// Atomically increment the current value and return the new value + /// + /// The decremented value. + public long AtomicDecrementAndGet() + { + return Interlocked.Decrement(ref _value); + } + + /// + /// Returns the string representation of the current value. + /// + /// the string representation of the current value. + public override string ToString() + { + var value = ReadFullFence(); + return value.ToString(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Disruptor/RingBuffer.cs.meta b/Assets/Plugins/Disruptor/RingBuffer.cs.meta new file mode 100644 index 0000000..43559d0 --- /dev/null +++ b/Assets/Plugins/Disruptor/RingBuffer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4fc0077e999e66844bd8ffeb5ea08a46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/ENet.meta b/Assets/Plugins/ENet.meta new file mode 100644 index 0000000..d1ca8f6 --- /dev/null +++ b/Assets/Plugins/ENet.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96611547a82c86b4fbaab2e991fedcb6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/ENet/ENet.cs b/Assets/Plugins/ENet/ENet.cs new file mode 100644 index 0000000..f425663 --- /dev/null +++ b/Assets/Plugins/ENet/ENet.cs @@ -0,0 +1,1063 @@ +/* + * Managed C# wrapper for an extended version of ENet + * Copyright (c) 2013 James Bellinger + * Copyright (c) 2016 Nate Shoffner + * Copyright (c) 2018 Stanislav Denisov + * + * 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: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * 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. + */ + +using System; +using System.Runtime.InteropServices; +using System.Security; +using System.Text; + +namespace ENet { + [Flags] + public enum PacketFlags { + None = 0, + Reliable = 1 << 0, + Unsequenced = 1 << 1, + NoAllocate = 1 << 2, + UnreliableFragment = 1 << 3 + } + + public enum EventType { + None = 0, + Connect = 1, + Disconnect = 2, + Receive = 3, + Timeout = 4 + } + + public enum PeerState { + Uninitialized = -1, + Disconnected = 0, + Connecting = 1, + AcknowledgingConnect = 2, + ConnectionPending = 3, + ConnectionSucceeded = 4, + Connected = 5, + DisconnectLater = 6, + Disconnecting = 7, + AcknowledgingDisconnect = 8, + Zombie = 9 + } + + [StructLayout(LayoutKind.Sequential)] + public struct ENetAddress { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public byte[] host; + public ushort port; + public ushort scope; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ENetEvent { + public EventType type; + public IntPtr peer; + public byte channelID; + public uint data; + public IntPtr packet; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ENetCallbacks { + public AllocCallback malloc; + public FreeCallback free; + public NoMemoryCallback noMemory; + } + + public delegate IntPtr AllocCallback(IntPtr size); + public delegate void FreeCallback(IntPtr memory); + public delegate void NoMemoryCallback(); + public delegate void PacketFreeCallback(Packet packet); + + internal static class ArrayPool { + [ThreadStatic] + private static byte[] byteBuffer; + [ThreadStatic] + private static IntPtr[] pointerBuffer; + + public static byte[] GetByteBuffer() { + if (byteBuffer == null) + byteBuffer = new byte[64]; + + return byteBuffer; + } + + public static IntPtr[] GetPointerBuffer() { + if (pointerBuffer == null) + pointerBuffer = new IntPtr[Library.maxPeers]; + + return pointerBuffer; + } + } + + public struct Address { + private ENetAddress nativeAddress; + + internal ENetAddress NativeData { + get { + return nativeAddress; + } + + set { + nativeAddress = value; + } + } + + public Address(ENetAddress address) { + nativeAddress = address; + } + + public ushort Port { + get { + return nativeAddress.port; + } + + set { + nativeAddress.port = value; + } + } + + public string GetIP() { + StringBuilder ip = new StringBuilder(1024); + + if (Native.enet_address_get_host_ip(nativeAddress, ip, (IntPtr)ip.Capacity) != 0) + return String.Empty; + + return ip.ToString(); + } + + public bool SetIP(string ip) { + if (ip == null) + throw new ArgumentNullException("ip"); + + return Native.enet_address_set_host_ip(ref nativeAddress, ip) == 0; + } + + public string GetHost() { + StringBuilder hostName = new StringBuilder(1024); + + if (Native.enet_address_get_host(nativeAddress, hostName, (IntPtr)hostName.Capacity) != 0) + return String.Empty; + + return hostName.ToString(); + } + + public bool SetHost(string hostName) { + if (hostName == null) + throw new ArgumentNullException("hostName"); + + return Native.enet_address_set_host(ref nativeAddress, hostName) == 0; + } + } + + public struct Event { + private ENetEvent nativeEvent; + + internal ENetEvent NativeData { + get { + return nativeEvent; + } + + set { + nativeEvent = value; + } + } + + public Event(ENetEvent @event) { + nativeEvent = @event; + } + + public EventType Type { + get { + return nativeEvent.type; + } + } + + public Peer Peer { + get { + return new Peer(nativeEvent.peer); + } + } + + public byte ChannelID { + get { + return nativeEvent.channelID; + } + } + + public uint Data { + get { + return nativeEvent.data; + } + } + + public Packet Packet { + get { + return new Packet(nativeEvent.packet); + } + } + } + + public class Callbacks { + private ENetCallbacks nativeCallbacks; + + internal ENetCallbacks NativeData { + get { + return nativeCallbacks; + } + + set { + nativeCallbacks = value; + } + } + + public Callbacks(AllocCallback allocCallback, FreeCallback freeCallback, NoMemoryCallback noMemoryCallback) { + nativeCallbacks.malloc = allocCallback; + nativeCallbacks.free = freeCallback; + nativeCallbacks.noMemory = noMemoryCallback; + } + } + + public struct Packet : IDisposable { + private IntPtr nativePacket; + + internal IntPtr NativeData { + get { + return nativePacket; + } + + set { + nativePacket = value; + } + } + + public Packet(IntPtr packet) { + nativePacket = packet; + } + + public void Dispose() { + if (nativePacket != IntPtr.Zero) { + Native.enet_packet_dispose(nativePacket); + nativePacket = IntPtr.Zero; + } + } + + public bool IsSet { + get { + return nativePacket != IntPtr.Zero; + } + } + + public IntPtr Data { + get { + CheckCreated(); + + return Native.enet_packet_get_data(nativePacket); + } + } + + public int Length { + get { + CheckCreated(); + + return Native.enet_packet_get_length(nativePacket); + } + } + + public bool HasReferences { + get { + CheckCreated(); + + return Native.enet_packet_check_references(nativePacket) != 0; + } + } + + internal void CheckCreated() { + if (nativePacket == IntPtr.Zero) + throw new InvalidOperationException("Packet not created"); + } + + public void SetFreeCallback(IntPtr callback) { + CheckCreated(); + + Native.enet_packet_set_free_callback(nativePacket, callback); + } + + public void SetFreeCallback(PacketFreeCallback callback) { + CheckCreated(); + + Native.enet_packet_set_free_callback(nativePacket, Marshal.GetFunctionPointerForDelegate(callback)); + } + + public void Create(byte[] data) { + if (data == null) + throw new ArgumentNullException("data"); + + Create(data, data.Length); + } + + public void Create(byte[] data, int length) { + Create(data, length, PacketFlags.None); + } + + public void Create(byte[] data, PacketFlags flags) { + Create(data, data.Length, flags); + } + + public void Create(byte[] data, int length, PacketFlags flags) { + if (data == null) + throw new ArgumentNullException("data"); + + if (length < 0 || length > data.Length) + throw new ArgumentOutOfRangeException(); + + nativePacket = Native.enet_packet_create(data, (IntPtr)length, flags); + } + + public void Create(IntPtr data, int length, PacketFlags flags) { + if (data == IntPtr.Zero) + throw new ArgumentNullException("data"); + + if (length < 0) + throw new ArgumentOutOfRangeException(); + + nativePacket = Native.enet_packet_create(data, (IntPtr)length, flags); + } + + public void Create(byte[] data, int offset, int length, PacketFlags flags) { + if (data == null) + throw new ArgumentNullException("data"); + + if (offset < 0 || length < 0 || length > data.Length) + throw new ArgumentOutOfRangeException(); + + nativePacket = Native.enet_packet_create_offset(data, (IntPtr)length, (IntPtr)offset, flags); + } + + public void Create(IntPtr data, int offset, int length, PacketFlags flags) { + if (data == IntPtr.Zero) + throw new ArgumentNullException("data"); + + if (offset < 0 || length < 0) + throw new ArgumentOutOfRangeException(); + + nativePacket = Native.enet_packet_create_offset(data, (IntPtr)length, (IntPtr)offset, flags); + } + + public void CopyTo(byte[] destination) { + if (destination == null) + throw new ArgumentNullException("destination"); + + Marshal.Copy(Data, destination, 0, Length); + } + } + + public class Host : IDisposable { + private IntPtr nativeHost; + + internal IntPtr NativeData { + get { + return nativeHost; + } + + set { + nativeHost = value; + } + } + + public void Dispose() { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) { + if (nativeHost != IntPtr.Zero) { + Native.enet_host_destroy(nativeHost); + nativeHost = IntPtr.Zero; + } + } + + ~Host() { + Dispose(false); + } + + public bool IsSet { + get { + return nativeHost != IntPtr.Zero; + } + } + + public uint PeersCount { + get { + CheckCreated(); + + return Native.enet_host_get_peers_count(nativeHost); + } + } + + public uint PacketsSent { + get { + CheckCreated(); + + return Native.enet_host_get_packets_sent(nativeHost); + } + } + + public uint PacketsReceived { + get { + CheckCreated(); + + return Native.enet_host_get_packets_received(nativeHost); + } + } + + public uint BytesSent { + get { + CheckCreated(); + + return Native.enet_host_get_bytes_sent(nativeHost); + } + } + + public uint BytesReceived { + get { + CheckCreated(); + + return Native.enet_host_get_bytes_received(nativeHost); + } + } + + internal void CheckCreated() { + if (nativeHost == IntPtr.Zero) + throw new InvalidOperationException("Host not created"); + } + + private void CheckChannelLimit(int channelLimit) { + if (channelLimit < 0 || channelLimit > Library.maxChannelCount) + throw new ArgumentOutOfRangeException("channelLimit"); + } + + public void Create() { + Create(null, 1, 0); + } + + public void Create(Address? address, int peerLimit) { + Create(address, peerLimit, 0); + } + + public void Create(Address? address, int peerLimit, int channelLimit) { + Create(address, peerLimit, channelLimit, 0, 0); + } + + public void Create(int peerLimit, int channelLimit) { + Create(null, peerLimit, channelLimit, 0, 0); + } + + public void Create(int peerLimit, int channelLimit, uint incomingBandwidth, uint outgoingBandwidth) { + Create(null, peerLimit, channelLimit, incomingBandwidth, outgoingBandwidth); + } + + public void Create(Address? address, int peerLimit, int channelLimit, uint incomingBandwidth, uint outgoingBandwidth) { + if (nativeHost != IntPtr.Zero) + throw new InvalidOperationException("Host already created"); + + if (peerLimit < 0 || peerLimit > Library.maxPeers) + throw new ArgumentOutOfRangeException("peerLimit"); + + CheckChannelLimit(channelLimit); + + if (address != null) { + var nativeAddress = address.Value.NativeData; + + nativeHost = Native.enet_host_create(ref nativeAddress, (IntPtr)peerLimit, (IntPtr)channelLimit, incomingBandwidth, outgoingBandwidth); + } else { + nativeHost = Native.enet_host_create(IntPtr.Zero, (IntPtr)peerLimit, (IntPtr)channelLimit, incomingBandwidth, outgoingBandwidth); + } + + if (nativeHost == IntPtr.Zero) + throw new InvalidOperationException("Host creation call failed"); + } + + public void EnableCompression() { + CheckCreated(); + + Native.enet_host_enable_compression(nativeHost); + } + + public void PreventConnections(bool state) { + CheckCreated(); + + Native.enet_host_prevent_connections(nativeHost, (byte)(state ? 1 : 0)); + } + + public void Broadcast(byte channelID, ref Packet packet) { + CheckCreated(); + + packet.CheckCreated(); + Native.enet_host_broadcast(nativeHost, channelID, packet.NativeData); + packet.NativeData = IntPtr.Zero; + } + + public void Broadcast(byte channelID, ref Packet packet, Peer excludedPeer) { + CheckCreated(); + + packet.CheckCreated(); + Native.enet_host_broadcast_excluding(nativeHost, channelID, packet.NativeData, excludedPeer.NativeData); + packet.NativeData = IntPtr.Zero; + } + + public void Broadcast(byte channelID, ref Packet packet, Peer[] peers) { + CheckCreated(); + + packet.CheckCreated(); + + if (peers.Length > 0) { + IntPtr[] nativePeers = ArrayPool.GetPointerBuffer(); + int nativeCount = 0; + + for (int i = 0; i < peers.Length; i++) { + if (peers[i].NativeData != IntPtr.Zero) { + nativePeers[nativeCount] = peers[i].NativeData; + nativeCount++; + } + } + + Native.enet_host_broadcast_selective(nativeHost, channelID, packet.NativeData, nativePeers, (IntPtr)nativeCount); + } + + packet.NativeData = IntPtr.Zero; + } + + public int CheckEvents(out Event @event) { + CheckCreated(); + + ENetEvent nativeEvent; + + var result = Native.enet_host_check_events(nativeHost, out nativeEvent); + + if (result <= 0) { + @event = new Event(); + + return result; + } + + @event = new Event(nativeEvent); + + return result; + } + + public Peer Connect(Address address) { + return Connect(address, 0, 0); + } + + public Peer Connect(Address address, int channelLimit) { + return Connect(address, channelLimit, 0); + } + + public Peer Connect(Address address, int channelLimit, uint data) { + CheckCreated(); + CheckChannelLimit(channelLimit); + + var nativeAddress = address.NativeData; + var peer = new Peer(Native.enet_host_connect(nativeHost, ref nativeAddress, (IntPtr)channelLimit, data)); + + if (peer.NativeData == IntPtr.Zero) + throw new InvalidOperationException("Host connect call failed"); + + return peer; + } + + public int Service(int timeout, out Event @event) { + if (timeout < 0) + throw new ArgumentOutOfRangeException("timeout"); + + CheckCreated(); + + ENetEvent nativeEvent; + + var result = Native.enet_host_service(nativeHost, out nativeEvent, (uint)timeout); + + if (result <= 0) { + @event = new Event(); + + return result; + } + + @event = new Event(nativeEvent); + + return result; + } + + public void SetBandwidthLimit(uint incomingBandwidth, uint outgoingBandwidth) { + CheckCreated(); + + Native.enet_host_bandwidth_limit(nativeHost, incomingBandwidth, outgoingBandwidth); + } + + public void SetChannelLimit(int channelLimit) { + CheckCreated(); + CheckChannelLimit(channelLimit); + + Native.enet_host_channel_limit(nativeHost, (IntPtr)channelLimit); + } + + public void Flush() { + CheckCreated(); + + Native.enet_host_flush(nativeHost); + } + } + + public struct Peer { + private IntPtr nativePeer; + private uint nativeID; + + internal IntPtr NativeData { + get { + return nativePeer; + } + + set { + nativePeer = value; + } + } + + public Peer(IntPtr peer) { + nativePeer = peer; + nativeID = nativePeer != IntPtr.Zero ? Native.enet_peer_get_id(nativePeer) : 0; + } + + public bool IsSet { + get { + return nativePeer != IntPtr.Zero; + } + } + + public uint ID { + get { + return nativeID; + } + } + + public string IP { + get { + CheckCreated(); + + byte[] ip = ArrayPool.GetByteBuffer(); + + if (Native.enet_peer_get_ip(nativePeer, ip, (IntPtr)ip.Length) == 0) { + if (Encoding.ASCII.GetString(ip).Remove(7) != "::ffff:") + return Encoding.ASCII.GetString(ip, 0, ip.StringLength()); + else + return Encoding.ASCII.GetString(ip, 0, ip.StringLength()).Substring(7); + } else { + return String.Empty; + } + } + } + + public ushort Port { + get { + CheckCreated(); + + return Native.enet_peer_get_port(nativePeer); + } + } + + public uint MTU { + get { + CheckCreated(); + + return Native.enet_peer_get_mtu(nativePeer); + } + } + + public PeerState State { + get { + return nativePeer == IntPtr.Zero ? PeerState.Uninitialized : Native.enet_peer_get_state(nativePeer); + } + } + + public uint RoundTripTime { + get { + CheckCreated(); + + return Native.enet_peer_get_rtt(nativePeer); + } + } + + public uint LastSendTime { + get { + CheckCreated(); + + return Native.enet_peer_get_lastsendtime(nativePeer); + } + } + + public uint LastReceiveTime { + get { + CheckCreated(); + + return Native.enet_peer_get_lastreceivetime(nativePeer); + } + } + + public ulong PacketsSent { + get { + CheckCreated(); + + return Native.enet_peer_get_packets_sent(nativePeer); + } + } + + public ulong PacketsLost { + get { + CheckCreated(); + + return Native.enet_peer_get_packets_lost(nativePeer); + } + } + + public ulong BytesSent { + get { + CheckCreated(); + + return Native.enet_peer_get_bytes_sent(nativePeer); + } + } + + public ulong BytesReceived { + get { + CheckCreated(); + + return Native.enet_peer_get_bytes_received(nativePeer); + } + } + + public IntPtr Data { + get { + CheckCreated(); + + return Native.enet_peer_get_data(nativePeer); + } + + set { + CheckCreated(); + + Native.enet_peer_set_data(nativePeer, value); + } + } + + internal void CheckCreated() { + if (nativePeer == IntPtr.Zero) + throw new InvalidOperationException("Peer not created"); + } + + public void ConfigureThrottle(uint interval, uint acceleration, uint deceleration) { + CheckCreated(); + + Native.enet_peer_throttle_configure(nativePeer, interval, acceleration, deceleration); + } + + public bool Send(byte channelID, ref Packet packet) { + CheckCreated(); + + packet.CheckCreated(); + + return Native.enet_peer_send(nativePeer, channelID, packet.NativeData) == 0; + } + + public void Ping() { + CheckCreated(); + + Native.enet_peer_ping(nativePeer); + } + + public void PingInterval(uint interval) { + CheckCreated(); + + Native.enet_peer_ping_interval(nativePeer, interval); + } + + public void Timeout(uint timeoutLimit, uint timeoutMinimum, uint timeoutMaximum) { + CheckCreated(); + + Native.enet_peer_timeout(nativePeer, timeoutLimit, timeoutMinimum, timeoutMaximum); + } + + public void Disconnect(uint data) { + CheckCreated(); + + Native.enet_peer_disconnect(nativePeer, data); + } + + public void DisconnectNow(uint data) { + CheckCreated(); + + Native.enet_peer_disconnect_now(nativePeer, data); + } + + public void DisconnectLater(uint data) { + CheckCreated(); + + Native.enet_peer_disconnect_later(nativePeer, data); + } + + public void Reset() { + CheckCreated(); + + Native.enet_peer_reset(nativePeer); + } + } + + public static class Extensions { + public static int StringLength(this byte[] data) { + if (data == null) + throw new ArgumentNullException("data"); + + int i; + + for (i = 0; i < data.Length && data[i] != 0; i++); + + return i; + } + } + + public static class Library { + public const uint maxChannelCount = 0xFF; + public const uint maxPeers = 0xFFF; + public const uint maxPacketSize = 32 * 1024 * 1024; + public const uint throttleScale = 32; + public const uint throttleAcceleration = 2; + public const uint throttleDeceleration = 2; + public const uint throttleInterval = 5000; + public const uint timeoutLimit = 32; + public const uint timeoutMinimum = 5000; + public const uint timeoutMaximum = 30000; + public const uint version = (2 << 16) | (2 << 8) | (5); + + public static bool Initialize() { + return Native.enet_initialize() == 0; + } + + public static bool Initialize(Callbacks inits) { + return Native.enet_initialize_with_callbacks(version, inits.NativeData) == 0; + } + + public static void Deinitialize() { + Native.enet_deinitialize(); + } + + public static uint Time { + get { + return Native.enet_time_get(); + } + } + } + + [SuppressUnmanagedCodeSecurity] + internal static class Native { + #if __IOS__ || UNITY_IOS && !UNITY_EDITOR + private const string nativeLibrary = "__Internal"; + #else + private const string nativeLibrary = "enet"; + #endif + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_initialize(); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_initialize_with_callbacks(uint version, ENetCallbacks inits); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_deinitialize(); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_time_get(); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_address_set_host_ip(ref ENetAddress address, string ip); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_address_set_host(ref ENetAddress address, string hostName); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_address_get_host_ip(ENetAddress address, StringBuilder ip, IntPtr ipLength); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_address_get_host(ENetAddress address, StringBuilder hostName, IntPtr nameLength); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr enet_packet_create(byte[] data, IntPtr dataLength, PacketFlags flags); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr enet_packet_create(IntPtr data, IntPtr dataLength, PacketFlags flags); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr enet_packet_create_offset(byte[] data, IntPtr dataLength, IntPtr dataOffset, PacketFlags flags); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr enet_packet_create_offset(IntPtr data, IntPtr dataLength, IntPtr dataOffset, PacketFlags flags); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_packet_check_references(IntPtr packet); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr enet_packet_get_data(IntPtr packet); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_packet_get_length(IntPtr packet); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_packet_set_free_callback(IntPtr packet, IntPtr callback); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_packet_dispose(IntPtr packet); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr enet_host_create(ref ENetAddress address, IntPtr peerLimit, IntPtr channelLimit, uint incomingBandwidth, uint outgoingBandwidth); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr enet_host_create(IntPtr address, IntPtr peerLimit, IntPtr channelLimit, uint incomingBandwidth, uint outgoingBandwidth); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr enet_host_connect(IntPtr host, ref ENetAddress address, IntPtr channelCount, uint data); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_host_broadcast(IntPtr host, byte channelID, IntPtr packet); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_host_broadcast_excluding(IntPtr host, byte channelID, IntPtr packet, IntPtr excludedPeer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_host_broadcast_selective(IntPtr host, byte channelID, IntPtr packet, IntPtr[] peers, IntPtr peersLength); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_host_service(IntPtr host, out ENetEvent @event, uint timeout); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_host_check_events(IntPtr host, out ENetEvent @event); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_host_channel_limit(IntPtr host, IntPtr channelLimit); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_host_bandwidth_limit(IntPtr host, uint incomingBandwidth, uint outgoingBandwidth); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_host_get_peers_count(IntPtr host); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_host_get_packets_sent(IntPtr host); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_host_get_packets_received(IntPtr host); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_host_get_bytes_sent(IntPtr host); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_host_get_bytes_received(IntPtr host); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_host_flush(IntPtr host); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_host_destroy(IntPtr host); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_host_enable_compression(IntPtr host); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_host_prevent_connections(IntPtr host, byte state); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_peer_throttle_configure(IntPtr peer, uint interval, uint acceleration, uint deceleration); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_peer_get_id(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_peer_get_ip(IntPtr peer, byte[] ip, IntPtr ipLength); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern ushort enet_peer_get_port(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_peer_get_mtu(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern PeerState enet_peer_get_state(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_peer_get_rtt(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_peer_get_lastsendtime(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern uint enet_peer_get_lastreceivetime(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern ulong enet_peer_get_packets_sent(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern ulong enet_peer_get_packets_lost(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern ulong enet_peer_get_bytes_sent(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern ulong enet_peer_get_bytes_received(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern IntPtr enet_peer_get_data(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_peer_set_data(IntPtr peer, IntPtr data); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern int enet_peer_send(IntPtr peer, byte channelID, IntPtr packet); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_peer_ping(IntPtr peer); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_peer_ping_interval(IntPtr peer, uint pingInterval); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_peer_timeout(IntPtr peer, uint timeoutLimit, uint timeoutMinimum, uint timeoutMaximum); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_peer_disconnect(IntPtr peer, uint data); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_peer_disconnect_now(IntPtr peer, uint data); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_peer_disconnect_later(IntPtr peer, uint data); + + [DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)] + internal static extern void enet_peer_reset(IntPtr peer); + } +} \ No newline at end of file diff --git a/Assets/Plugins/ENet/ENet.cs.meta b/Assets/Plugins/ENet/ENet.cs.meta new file mode 100644 index 0000000..3155a71 --- /dev/null +++ b/Assets/Plugins/ENet/ENet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63f983852b846de4fb6f4b5f5c8ff2ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/ENet/enet.bundle b/Assets/Plugins/ENet/enet.bundle new file mode 100644 index 0000000000000000000000000000000000000000..fcea0f13bbf5157e9e2de4e8fe0f24ff0618fc4c GIT binary patch literal 97240 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/ENet/enet.bundle.meta b/Assets/Plugins/ENet/enet.bundle.meta new file mode 100644 index 0000000..0261662 --- /dev/null +++ b/Assets/Plugins/ENet/enet.bundle.meta @@ -0,0 +1,87 @@ +fileFormatVersion: 2 +guid: d8b22096e0cd05d438a5ce5c8c476dde +timeCreated: 1534525764 +licenseType: Pro +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': OSXIntel + second: + enabled: 0 + settings: + CPU: None + - first: + '': OSXIntel64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: x86_64 + DefaultValueInitialized: true + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Facebook: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/ENet/enet.dll b/Assets/Plugins/ENet/enet.dll new file mode 100644 index 0000000000000000000000000000000000000000..8456205a3923f2f447151dfbd9919c4493355f14 GIT binary patch literal 201494 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%0A55`j&} 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¨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 z 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

    0G2&Wg|329Av1ia`gjpO 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

    *s#N4nNF}6Q)#+5~xc9Ll2J)0@6*&{KmZeK% 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 z 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 `IAnyPositionListener` + - `OnPosition` -> `OnAnyPosition` + +## [1.10.0] - 2018-11-14 +### Changed +- Remove IContext from EntityLink.Link() method signature + +### Upgrade +- Remove IContext from EntityLink.Link() method signature + +## [1.9.2] - 2018-11-04 +### Added +- Hotfix for Unity Asset Store missing mono hosted msbuild + +## [1.9.1] - 2018-11-03 +### Added +- Fix MultiReactive system retaining entities multiple times #818 + +## [1.9.0] - 2018-11-03 +### Added +- Optimize generated code #780 + - This increases entity and component creation performance +- Optimize Visual Debugging performance #799 + - This increases the performance especially when having thousands of entities +- Generate XML documentation #792 + - This will show documentation in the IDE +- Using latest [bee](https://github.com/sschmid/bee) + +### Changed +- Context ctor signature changed. Generate to fix compiler errors. + If you don't use the [Entitas.Roslyn plugins](http://u3d.as/NuJ) from the Unity Asset Store, + you have to manually fix the affected generated context classes. E.g. `Generated/Game/GameContext.cs`, + add `() => new GameEntity()` as a last argument + +```csharp +public sealed partial class GameContext : Entitas.Context { + + public GameContext() + : base( + GameComponentsLookup.TotalComponents, + 0, + new Entitas.ContextInfo( + "Game", + GameComponentsLookup.componentNames, + GameComponentsLookup.componentTypes + ), + (entity) => + +#if (ENTITAS_FAST_AND_UNSAFE) + new Entitas.UnsafeAERC(), +#else + new Entitas.SafeAERC(entity), +#endif + () => new GameEntity() // <---------- update here + ) { + } +} +``` + +- Release retained entities when ReactiveSystem.Execute() has an exception #812 + - This fixes spamming the Unity console with error messages + +# 1.8.2 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +http://u3d.as/NuJ + +#### Entitas +⚙️ Add "@" in front of component name if it is a C# keyword #744 #756 @roygear +⚙️ Added convenience ctor to JobSystem to use all available threads on the device +⚙️ JobSystem.Execute() is now virtual + + +#### Jenny +🛠 Fixed delays when running `jenny server` +🆕 `jenny wiz` beta. Running Jenny.exe without args will automatically run `jenny wiz` +🆕 `jenny help` aka man page + +Jenny Wizard is wip. If you have feedback or feature request, please add a comment here +https://github.com/sschmid/Entitas-CSharp/issues/778 + + +# 1.8.1 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Entitas +⚙️ Add "@" in front of component name if it is a C# keyword #744 #756 @roygear +⚙️ Added convenience ctor to JobSystem to use all available threads on the device +⚙️ JobSystem.Execute() is now virtual + + +#### Jenny +🛠 Fixed delays when running `jenny server` +🆕 `jenny wiz` beta. Running Jenny.exe without args will automatically run `jenny wiz` +🆕 `jenny help` aka man page + +Jenny Wizard is wip. If you have feedback or feature request, please add a comment here +https://github.com/sschmid/Entitas-CSharp/issues/778 + + +# 1.8.0 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Entitas +⚙️ Enabled [Event] for non components #743 +⚠️ Renamed `CustomComponentNameAttribute` to `ComponentNameAttribute` + + +#### Jenny +⚙️ Added more logs to `gen` command +```csharp +Generating using /Users/sschmid/Dev/C#/Half-life3/Jenny.properties +Generating done (13220 files in 4 seconds) +``` +⚙️ Added group to ICommand to support grouped usage overview +#### Asset Store Version + + +# 1.7.0 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Visual Debugging +⚙️ StringTypeDrawer now uses EditorGUILayout.DelayedTextField + +#### Code Generator +🆕 Added CleanupAttribute +⚠️ Renamed `UniquePrefixAttribute` to `FlagPrefixAttribute` + +#### Asset Store Version +🆕 Cleanup Data Providers and Code Generators + +Instead of manually writing custom systems to remove components or destroy +entities, you can now use the new `[Cleanup]` attribute to automatically +generate `CleanupSystems` for you. + +E.g. adding the `[Cleanup]` attribute to a `DestroyedComponent` can replace +your custom `DestroyEntitySystem`. + +```csharp +[Cleanup(CleanupMode.DestroyEntity)] +public sealed class DestroyedComponent : IComponent { +} +``` + +There are currently two options: +- CleanupMode.DestroyEntity +- CleanupMode.RemoveComponent + +`CleanupMode.DestroyEntity` will generate a system that destroys all +entities which have this component. + +`CleanupMode.RemoveComponent` will generate a system that will remove +this component from all entities which have this component. + + +# 1.6.1 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Entitas +🛠 Fixed context.Reset() which doesn't remove event handlers anymore #725 +🛠 Updated EntitasStats to exclude JobSystem and Feature + +#### Jenny +🛠 Fixed Jenny dropdown UI to not show 'mixed...' anymore +⚙️ Added Jenny Server toggle to UI +⚙️ Added dry run option +⚠️ Removed EnsureStandalonePreProcessor +🆕 Added WarnIfCompilationErrorsPreProcessor + + +# 1.6.0 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### General +⚠️ Changed Entitas Asset Store package structure by separating Desperate Devs dlls into their own folder +Please run `jenny auto-import -s` or modify `Preferences.properties` to update the paths to the plugins if necessary + + +#### Entitas +🛠 Added support to remove event listeners within event callback #698 + +⚠️ Improved Entitas Event API `[Event(bool)]` #717 +Use "find and replace" to update all your EventAttribute usages +`[Event(true)]` is now `[Event(EventTarget.Self)]` +`[Event(false)]` is now `[Event(EventTarget.Any)]` + +⚙️ Added support for `[DontDrawComponent]` for all components #678 +💄 Updated comments for `group.RemoveAllEventHandlers()` #684 +🛠 Fixed check for updates + + +#### DesperateDevs +⚙️ Updated `TargetFrameworkProfilePreProcessor` #721 +🛠 Added `str.ToUnixPath()` + + +# 1.5.2 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Entitas +🛠 Fixed EventSystemsGenerator generated EventSystems per context but those systems contained EventSystems from all context + +#### DesperateDevs +🛠 Added TcpMessageParser to reliably receive separate messages from a tcp stream + + + +# 1.5.1 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### DesperateDevs +⚙️ Added better error message to EnsureStandalonePreProcessor + +When EnsureStandalonePreProcessor is activated it will prevent you from accidentally generating in Unity. +To generate in Unity make sure EnsureStandalonePreProcessor is not activated. + + +# 1.5.0 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Entitas +🆕 Added JobSystem for multi threading as a proof of concept. + +```csharp +public sealed class RotateSystem : JobSystem { + + public RotateSystem(GameContext context, int threads) : + base(context.GetGroup(GameMatcher.AllOf(GameMatcher.Rotation, GameMatcher.RotationVector)), threads) { + } + + protected override void Execute(GameEntity entity) { + entity.rotation.value = entity.rotation.value * Quaternion.Euler(entity.rotationVector.value); + } +} +``` + +Limitations: +- Don't use generated methods like Add() and Replace() +- Modify component values directly +See https://github.com/sschmid/Entitas-CSharp/issues/325#issuecomment-373961878 + +This is not a general purpose solution for all problems. It can be used to solve certain performance intense areas in your game. It can be very useful if there's a very large number of entities that have to be processed, or if the data transformation involves heavy calulations. + +⚠️ EventSystemsGenerator generates EventSystems per context now. +🛠 Removed dependency on Entitas.CodeGeneration.Plugins from Entitas.VisualDebugging.Unity.Editor #312 + +#### DesperateDevs +🆕 Added EnsureStandalonePreProcessor to prevent accidentally generating in Unity + + +# 1.4.2 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +This is a hotfix release to patch the bugs introduced by the code generator refactoring from 1.4.0. + +#### Entitas +🛠 Fixed needing to generate code twice to when event got removed #620 +⚙️ Added group.AsEnumerable() to support linq +⚙️ Added partial keyword to ComponentEntityApiInterfaceGenerator #607 +⚙️ Changed EntityLink exception to be a warning +⚙️ ComponentData can clone CodeGeneratorData + +#### Jenny +🆕 Added ValidateProjectPathPreProcessor #572 #563 + +#### DesperateDevs +⚙️ Added logger.Reset() + + +# 1.4.1 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +This is a hotfix release to patch the bugs introduced by the code generator refactoring from 1.4.0. + +#### Entitas +🛠 Fixed component name generation for EventType.Removed #631 (thanks to @hegi25) + +#### Jenny +🛠 Fixed jenny "Collection was modified; enumeration operation may not execute." #628 +🛠 Fixed jenny "Index was outside the bounds of the array." #628 + + + +# 1.4.0 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +Breaking changes are marked with ⚠️️ + +#### Entitas +🆕 Added group.GetEntities(buffer) #624 +🆕 Made group iteration alloc free #624 +⚙️ Added support for multiple events per component +⚙️ Added `removeComponentWhenEmpty` to optionally remove or keep empty listener component +🛠 Fixed accessing non existing component in generated event system for EventType.Removed +🛠 Fixed events inheriting unique attribute from component +⚠️ Removed EventType.AddedOrRemoved +💄 Refactored and simplified all code generators + +# 1.3.0 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +This update improves the new Entitas Events introduced in 1.1.0 + +Breaking changes are marked with ⚠️️ + +#### Entitas +⚙️ Added support for multiple event listeners per entity +⚙️ EventInterfaceGenerator generates correct filename matching the class name. Thanks to @c0ffeeartc +⚠️️ Renamed some generators. Please use `auto-import` to update the generator names + + +# 1.2.0 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +This update improves the new Entitas Events introduced in 1.1.0 + +Breaking changes are marked with ⚠️️ + +#### Entitas +⚙️ Added support for multiple contexts for events. Context prefix will be skipped if a component only has one context in favour of a nicer API +⚠️️ Passing sender entity as first argument in event delegate +🆕 Added new optional event types `EventType.Added`, `EventType.Removed`, `EventType.AddedOrRemoved` +🛠 Fixed typo `_listsners` in event generator Thanks to @FNGgames + + +#### Jenny +🛠 Fixed `scan` command + + +# 1.1.0 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Entitas +🆕 Added Events aka Reactive-UI #591 +⚠️ Changed `ComponentEntityInterfaceGenerator` to generate `IXyzEntity` insetad of `IXyz` to avoid name collisions with `EventInterfaceGenerator` +⚙️ Added enum support for Code Generator Attributes +⚙️ Removed `partial` keyword from ComponentGenerator +⚙️ Removed attributes from generated components + +#### Jenny +🆕 Added `Jenny-Auto-Import` scripts to reducde terminal interaction +⚙️ Added silent `-s` info to Jenny help page +⚙️ Using Console.WriteLine when prompting user input to support silent mode +⚙️ CodeGeneratorData can now be cloned + + +# 1.0.0 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Jenny +🛠 Workaround for Unity 2017.3 GUI mask bug (still shows `Mixed...` instead of `Everything` -> Unity bug) #569 + + +# 0.47.9 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Jenny +🛠 Fixed issue with Entitas.Roslyn plugin and non-components with context attibute #564 +🛠 Fixed `auto-import` not making relative search paths on Windows + +#### Other +⚙️ Included readme files in zip +⚙️ Updated CONTRIBUTING.md and updated bee 🐝 + + +# 0.47.8 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Jenny +🛠 Fixed `The given assembly name or codebase was invalid` on windows #561 + + +# 0.47.7 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Jenny +🛠 Auto-Import properly handles paths with spaces #555 + + +# 0.47.6 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Jenny +- Using correct properties file for each Unity project by saving only the filename instead of full path + + +# 0.47.5 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Entitas +- Hotfix for EntityLink throwing errors OnApplicationQuit + + +# 0.47.4 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +#### Entitas +- Hotfix for broken EntityLink (thanks to @c0ffeeartc for reporting so quickly) + + +# 0.47.3 + +As always, the Unity Asset Store version might take a few days to be processed +and accepted by Unity. Please check for updates in 2 - 4 days here: +https://www.assetstore.unity3d.com/#!/content/87638 + +See and discuss changes in [Milestone 0.47.3](https://github.com/sschmid/Entitas-CSharp/milestone/17?closed=1) + +(Finally went back to Milestone development :) Transparency FTW!) + +#### Entitas +- EntityLink will immediately throw an exception if the gameObject is destroyed but still linked to an entity #470 +- Fixed VisualDebugging Toggle in the Entitas Preferences Window #540 + +#### Jenny +- Even more support for multiple properties, see #550 + + +# 0.47.2 + +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638 + +Here's another update to improve the code generator experience. Thanks again for all your great feedback! +And thanks for going through this with me :) We're almost there! + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas +- Added migration 0.47.2 + +#### Jenny +- Added silent mode for `jenny fix` to simplify `jenny auto-import` experience. Use `-s`, e.g `jenny auto-import -s` +- Added a potential fix for `jenny client gen` command never completes #546 +- Renamed keys from `CodeGenerator.*` to `Jenny.*`. Please apply migration 0.47.2 +- Added support to run CLI from any location +- Warning when no properties found +- Removed leading "./" from added searchPaths added by `jenny auto-import` +- The Roslyn foundation moved to DesperateDevs +- Using the latest Roslyn libs + +#### Other +- Entitas project cleanup and maintenance +- Added more automation tasks to bee 🐝 + +# 0.47.1 + +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days here: https://www.assetstore.unity3d.com/#!/content/87638 + +#### Jenny +- Handling BadImageFormatException +- Not showing warnings for unresolved assemblies anymore +- Fixed closing AssemblyResolver before all plugin dependencies were loaded +- Fixed jenny server construction not complete before executing client command + + +# 0.47.0 + +#### General +- Brand new build automation workflow (bee 🐝) +- Completely automated build, sync and release flow for faster future updates (bzzz 🐝) +- Only Entitas.zip is attached to GitHub releases +- Jenny CLI is only bundled in Asset Store version +- Added Assets folder to Entitas.zip #535 +- More flexible plugin-based CLI architecture + +#### Jenny +- Unity support for multiple properties files by adding switch button to Entitas Preferences in case multiple properties files exist #536 +- Better CLI support for multiple properties files by showing a warning in case multiple properties files exist #536 +- Fixes for server / client errors (ObjectDisposedException) #529 +- Renamed key `CodeGenerator.CLI.Ignore.UnusedKeys` to `Ignore.Keys` +- `auto-import` reflects assemblies and sets plugins based on content instead of name +- `auto-import` automatically detects custom plugins in Unity project without manually setting up searchPaths +- Added visual lines to `dump` +- Renamed `ICodeGeneratorBase` to `ICodeGenerationPlugin` +- Fixed `IConfigurable` commands not getting configured +- Added minified properties support + +#### Asset Store +- Fix for NullReferenceException (Entitas.Roslyn.SymbolExtension.ToCompilableString) #534 +- Support for WrapperComponent #532 + +# 0.46.3 + +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days. + +#### Code Generation +- Added `IPreProcessor` +- Added TargetFrameworkProfilePreProcessor +- Fixed problems with Roslyn Generator and Visual Studio on Windows #503 + + +# 0.46.2 + +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days. + +#### Code Generation +- Added `IDoctor` for custom diagnosis and custom symptoms treatment :) Will help improving the + code generator setup experience that is aimimg for a one-click setup +- Implemented IDoctor for ComponentDataProvider, EntityIndexDataProvider and DebugLogPostProcessor +- Removed `isEnabledByDefault`from all plugins + +#### TCPezy +- ResolveHost returns IPv4 address to fix issue with server / client mode on windows + + +# 0.46.1 + +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days. + +#### Entitas.VisualDebugging.CodeGeneration.Plugins +- Added deep device profiling support to generated Feature class #497 + +#### Unity +- Added buttons to generate DefaultInstanceDrawer and TypeDrawer +- Added deep device profiling toggle to Entitas Preferences + +Entitas - Deep Device Profiling + + +# 0.46.0 + +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days. + +This release is a maintenance release as announced here: + +https://github.com/sschmid/Entitas-CSharp/issues/508 + +As the project got more mature the Entitas repository not only contained the ECS core but also a few other +modules like Logging, Serialization, Networking, Code Generator, Common Utils and more. +The goal of this refactoring was to extract reusable modules and increase the focus of the Entitas repository +on ECS. Reusable modules have been successfully extracted to their own standalone projects. Overall, with the +increased focus that is achieved by having standalone projects I expect the quality to raise, too. This is +generally the case when you have reusable code that is battle tested in multiple different scenarios. + +As mentioned in #508 those projects all have the `DesperateDevs` namespace. You maybe already know about +Desperate Devs because of the new YouTube channel where I will upload more and more Video on ECS, +best practices and Software Architecture. Subscribe if you don't want to miss future videos. + +https://www.youtube.com/channel/UC2q7q7tcrwWHu5GSGyt_JEQ + +As a result of this refactoring I was able to remove a lot of noise from the Entitas repository and I could +easily fix platform depended bugs without any distraction. + +entitas-desperatedevs + +Entitas will benefit from having the Desperate Devs dependencies as it enforces modularity and reusability. +Additionally, it will be possible to use awesome tools like TCPezy (DesperateDev.Networking) and Jenny (DesperateDevs.CodeGeneration) independently. + + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Obsolete notice +- Removed methods marked obsolete in 0.42.0 from April 2017 +- Blueprints are now completely removed from the zip files (sources still available) + +#### Preferences +- Showing properties name in Edit Button + +#### Jenny (aka Code Generator) +- CodeGeneratorPreferencesDrawer will keep unavailable plugins #496 +- Added Display Dialog for auto import +- Added a secret and hidden cli command, can you find it? ❤️ + +#### TCPezy (aka entitas server) +- Fixed Unhandled Exception (appeared on Windows only) #489 + +#### Other +- Changed language level of all projects to C# 4.0 +- Deleted CodeGenerator Unity Test project + + +# 0.45.1 + +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days. + +#### CodeGenerator +- Added Auto Import Button to Entitas Preferences. This will detect plugins and automatically set them in Entitas.properties + + +# 0.45.0 + +Thanks for the feedback on the new code generator so far. This update contains a lot of great improvments. +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days. + + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + + +#### Entitas +- Fixed flag components increasing the componentPool stack #445 +- Logging all retained entities in ContextStillHasRetainedEntitiesException #448 +- Added support for multiple indexed members per component #464 + +``` +public sealed class MyComponent : IComponent { + + // Multiple fields are now supported + + [EntityIndex] + public int value; + + [EntityIndex] + public int otherValue; +} + +// will generate +context.GetEntitiesWithMyValue(...); +context.GetEntitiesWithMyOtherValue(...); +``` + + +#### CodeGenerator +- Displaying more prominent popup in Unity when trying to generate with compile errors #463 + +![entitas-codegenerator-compileerrorpopup](https://user-images.githubusercontent.com/233700/32519395-e8dccbdc-c40c-11e7-8a6c-08f176b23244.png) + +- AssemblyResolver won't append dll to exe extension +- Changed code generator keys and removed default values +- Changed code generator cli keys and removed default values +- Added auto-import command. Use `entitas auto-import` to automatically populate Entitas.properties +- `entitas status` command will detect potential collisions, e.g. duplicate providers from the default plugins and the roslyn plugins +- `entitas fix` can resolve plugin collisions +- `entitas fix` command will tell you to press any key +- Removed `-a` keepAlive in favour of `entitas server` and `entitas client` +- Fixed client only sending first command to server #482 +- Default Plugins are now in folder called Entitas +- Refactored all commands and simplified many utils methods +- `Entitas.exe` now with capital E + + +#### Roslyn +- Added custom support for multi-dimensional arrays types like `int[,,]` #481 +Let me know if more types need custom support. + +#### Migration +- Added migration for 0.45.0 + + +# 0.44.0 + +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days. + +#### Unity CodeGenerator +- Added new menu item which connects to an external code generator server instance + +#### CodeGenerator CLI +- Added server command +- Added client command +- Added startCodeGenerator files for macOS and Windows + +#### Example +Start the code generator server by double clicking `startCodeGenerator` on macOS or `startCodeGenerator.bat` on Windows, or use the terminal + +``` +$ mono CodeGenerator/entitas.exe server +``` + +You can now either use the new Unity menu item `Tools/Entitas/Generate with external Code Generator` +which connects to a running server and sends the `gen` command or connect yourself like this + +``` +$ mono CodeGenerator/entitas.exe client gen +``` + +This will connect to a running server and send the `gen` command. This is useful if you want to add your own custom commands +in your IDE like Visual Studio or Rider (or others). + +Using the code generator server and client is optional but can greatly improve your workflow and +can drastically reduce the overhead of generating new files. + + +# 0.43.0 + +As always, the Unity Asset Store version might take a few days to be processed and accepted by Unity. +Please check for updates in 2 - 4 days. + +#### Breaking changes +The new code generator is part of `Entitas.Roslyn`. The Roslyn Plugins are now called `Entitas.Roslyn.CodeGeneration.Plugins`. If you already tested the new code generator beta, please update Entitas.properties +- `Entitas.Roslyn.CodeGeneration.Plugins` +- `Entitas.Roslyn.CodeGeneration.Plugins.ComponentDataProvider` +- `Entitas.Roslyn.CodeGeneration.Plugins.EntityIndexDataProvider` + +New mandatory keys have been added to Entitas.properties. You can automatically add them by running `entitas fix` + +#### CodeGenerator +- Added `ICodeGeneratorCachable` to cache and share objects between multiple plugins to avoid redundant calculations +- Using the objectCache to share the AssemblyResolver between all plugins +- Added CodeGenerator to default searchPaths +- Added Unity menu item to generate with CLI + +entitas-unity-cli + +#### CodeGenerator CLI +- Updated New command to use preferences +- Added CLIConfig with new key `Entitas.CodeGeneration.CodeGenerator.CLI.Ignore.UnusedKeys` to add keys that should be ignored when running `entitas status` or `entitas doctor`. You can automatically ignore keys by pressing `i` + +entitas-cli-ignoreunusedkeys + +- Added support for custom properties files. Each command optionally accepts a path to a properties file. This way you can have multiple different configs how to run the code generator, e.g. one with the reflection-based code generator and one with the roslyn code generator. + +```csharp +entitas gen My.properties +``` +- Pretty CLI + +#### Unity +- Added Edit Button to Entitas Preferences + +entitas-preferences-editbutton + +#### Asset Store Version +- Changed project structure. The Plugins are now called `Entitas.Roslyn.CodeGeneration.Plugins` +- Using the objectCache to share the ProjectParser between all plugins which speeds up the code generation process +- Updated all packages to latest version and downgraded all projects from .NET 4.6.1 to .NET 4.6 +- Added more dependencies to remove warnings when running `entitas doctor` or `entitas gen` + +entitas-roslyn-nowarnings + + +# 0.42.5 + +#### General +- Refactored Preferences to fully embrace Entitas.properties and User.properties + +#### CodeGenerator CLI +- Added format command +- keepAlive argument which will keep the process alive. This is very useful when using the new roslyn code generator to avoid reloading the whole parsing infrastructure. Using this argument ith roslyn results in super fast generation time + +```csharp +$ entitas gen -a +``` + + +# 0.42.4 + +#### Notes +Entitas development is back on track again and the wait is over. This is probably one of the last updates before Entitas reaches 1.0.0. +This verion has been tested successfully in combination with the new code generator that will work even when the code is not compiling. + +#### General +- Added support for User.properties. You can now either overwrite values sepcified in Entitas.properties or use placeholders + +Create a new file called User.properties and specify the keys and values that should be overwritten. +You can also specify placeholers like this `${myPlaceholder}` and specify the key either in Entitas.properties or User.properties. +see: [Match One - Entitas.properties](https://github.com/sschmid/Match-One/blob/master/Entitas.properties) +see: [Match One - User.properties](https://github.com/sschmid/Match-One/blob/master/User.properties) + +#### Entitas +- Groups are now enumerable to iterate over groups circumventing the internal caching and potentially reducing memory allocations #408 + +```csharp +foreach (var e in group) { + // Look closely: no group.GetEntities() +} +``` + +#### CodeGenerator CLI +- Added commands add, set, remove, dump + +#### VisualDebugging +- Fixed Entitas Stats not ignoring built-in MultiReactiveSystem in systems count +- VisualDebugging only lets you add components that the entity doesn't already have +- GUI fixes + +#### Other +- Properties are now formatted by default for better readability +- Ensuring dependencies in build scripts + + +# 0.42.3 + +Hotfix release for +- Fix Code Generation NullReferenceException in Unity 2017 #414 + + +# 0.42.2 + +See and discuss changes in [Milestone 0.42.2](https://github.com/sschmid/Entitas-CSharp/milestone/16) + +#### CodeGenerator +- Fix Code Generation NullReferenceException in Unity 2017 #414 +- EntityIndexGenerator is sorting entity indices +- CodeGenerator fix command runs recursively #409 +- Code Generator CLI maintenance + +#### VisualDebugging +- Update EntityDrawer to draw correct object type #399 #406 + + +# 0.42.1 + +## Top new features: +Added missing support for flag components in ComponentEntityInterfaceGenerator + +### General +- CodeGenerator CLI + Plugins are now included in zips and not deployed as separate zips + +#### CodeGenerator +- Added support for flag components in ComponentEntityInterfaceGenerator +- Removed GameState from default contexts. Defaults are now Game and Input + + +# 0.42.0 + +See and discuss changes in [Milestone 0.42.0](https://github.com/sschmid/Entitas-CSharp/milestone/15) + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +- Removed Entitas.Blueprints.Unity.* +- Changed ReactiveSystem.GetTrigger method signature +- Marked obsolete: `context.DestroyEntity(entity)`. Use `entity.Destroy()` instead +- Marked obsolete: `context.CreateCollector(matcher, event)`, use new `context.CreateCollector(triggerOnEvent)` when you need `.Removed` or `.AddedOrRemoved` (e.g. GameMatcher.View.Removed()) + +## Top new features: +- Use MultiReactiveSystem to process entities from different contexts in one system (see [Test Example](https://github.com/sschmid/Entitas-CSharp/blob/develop/Tests/Unity/VisualDebugging/Assets/Examples/VisualDebugging/Systems/SomeMultiReactiveSystem.cs)) +- Use `entity.Destroy()` instead of `context.DestroyEntity(entity)` +- Unit Testing in external console works on Windows now + +#### General +- Moved Entitas menu item under the Tools tab +- Removed Entitas.Blueprints.Unity.* from zips +- Creating new zip for code generator default plugins +- UX improvements + +#### Entitas +- Added MultiReactiveSystem to support reactive systems observing different contexts #303 +- Added TriggerOnEvent +- Renamed `entity.Destroy()` to `entity.InternalDestroy()` to reduce confusion +- Added `entity.Destroy()` instead of `context.DestroyEntity(entity)` #254 + +#### CodeGenerator +- Added ComponentEntityInterfaceGenerator #303 +- Updated ContextObserverGenerator to avoid `System.Security.SecurityException` on Windows #375 +- .ToSafeDirectory() supports empty string and “.” to specify current directory + + +# 0.41.2 + +After installing please check your Entitas.properties. Due to the addition of `IConfigurable` for code generator plugins +some keys in Entitas.properties changed. `entitas.exe doctor`, `entitas.exe status` and `entitas.exe fix` can help you +fixing any issues. A new default Entitas.properties file will be created if none is found. The default Entitas.properties +should work with Unity without modification. For reference take a look at [Match-One - Entitas.properties](https://github.com/sschmid/Match-One/blob/master/Entitas.properties) + +Exiting limitation mentioned in the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) still apply (Entitas.Blueprints.CodeGeneration.Plugins is not supported in the code generator CLI) + +## Top new features: +- UpdateCSProjPostProcessor will update your project.csproj. Generated methods are available immediately without switching to Unity and waiting for the project to be updated. This feels even better when using the new code generator (roslyn coming soon) where you don't even have to compile your project anymore - super fast feedback loops! +- Better out-of-the-box experience when starting a new Unity project. Everything will work without any manual setup. Just generate :) +- Great code generator CLI experience with helpful commands like `status` and `fix` which will let you modify Entitas.properties interactively +- Logo refinements based on magic numbers (1.618 - golden ratio) :D + +#### CodeGenerator +- Added `IConfigurable` interface to easily create customizable and configurable code generator plugins +- Fixed `ignoreNamespaces` by using the new `IConfigurable` #376 +- Added UpdateCSProjPostProcessor which updates project.csproj so you don't need to wait for Unity to update your project +- Greatly improved the code generator CLI. `status` and `fix` command will help you a lot to spot and fix problems in Entitas.properties +- Added `Compile.cs` to ensure `Assembly-CSharp.dll` in Unity +- CodeGenFile converts to unix line endings when setting fileContent #352 +- Added progress indicator to code generator CLI when running with `-v` in verbose mode +- Added multiple smaller sub configs for TargetDirectory, ContextNames, Assemblies, ProjectPath, IgnoreNamespaces +- Placeholder `${myPlaceHolder}` in properties will remain even when overwriting +- Caching AssemblyResolver + +#### VisualDebugging +- Drawing generic text labels for configurables found in Entitas.properties +- Better error handling when Entitas.properties has problems + +### General +- Refined logo. More pleasant to the eye and more readable in smaller icons + + +# 0.41.1 + +See and discuss changes in [Milestone 0.41.1](https://github.com/sschmid/Entitas-CSharp/milestone/14) + +#### CodeGenerator +- Added ContextMatcherGenerator #358 #358 @marczaku + +```csharp +// instead of +Matcher.AllOf(GameMatcher.Position, GameMatcher.View); + +// you can write +GameMatcher.AllOf(GameMatcher.Position, GameMatcher.View); +``` + +- Added option to ignore namespace in generated api + - Simply add `Entitas.CodeGeneration.Plugins.IgnoreNamespaces = true` to your Entitas.properties + - You can run `entitas status` to see if any plugins require additional keys + +``` +$ entitas status +Missing key: Entitas.CodeGeneration.Plugins.IgnoreNamespaces +``` + +- Added `IConfigurable` to support optional keys needed in Entitas.properties + +#### Other +- Added properties.ToDictionary() + + +# 0.41.0 + +See and discuss changes in [Milestone 0.41.0](https://github.com/sschmid/Entitas-CSharp/milestone/13) + +This milestone paves the way for a more customizable version of Entitas. A streamlined and modular project structure enables +deploying Entitas as Dlls which opens the door for 3rd party Addons and the extendable command line code generator. + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +- Renamed Entitas.properties config keys +- Removed context.DeactivateAndRemoveEntityIndices() +- Removed context.ClearGroups() +- New namespaces as a consequence of project restructuring + +#### General +- Project restructuring. All Entitas projects are now in Entitas.sln, including all Addons and Unity projects +- Deploying Entitas as Dlls instead of source code which has multiple benefits, e.g. + - Entitas Unity menu appears even if code doesn't compile + - Enables 3rd party Addons and Plugins + - Enables command line code generator + +#### Entitas +- Extracted Automatic Entity Reference Counting (AERC) as a strategy which can be set per context +- Better exception handling for Entitas.properties config +- Renamed config keys +- Removed context.DeactivateAndRemoveEntityIndices() +- Removed context.ClearGroups() + +#### CodeGenerator +- Added command line code generator #158 #353 + - Unsupported Plugins: Entitas.Blueprints.CodeGeneration.Plugins, Entitas.CodeGeneration.Unity.Editor +- ContextObserverGenerator puts VisualDebugging in try-catch to support Unit Testing #362 +- Added FeatureClassGenerator and removed Feature class from Entitas to support conditional compilation with `#if UNITY_EDITOR` +- Added MethodData instead of using System.Reflection.MethodInfo +- Added CleanTargetDirectoryPostProcessor + +#### VisualDebugging +- Removed Feature class +- UX improvements +- Better exception handling for Entitas.properties config + + +# 0.40.0 + +See and discuss changes in [Milestone 0.40.0](https://github.com/sschmid/Entitas-CSharp/milestone/12) + +#### Note +Please update Entitas.properties by opening Entitas Preferences. Added `assemblyPath` and `codeGeneratorAssemblyPath` +to code generator config. When not selected already, navigate to `Library/ScriptAssemblies/` in your Unity project +and select `Assembly-CSharp.dll` for the assembly and `Assembly-CSharp-Editor.dll` for the code generator assembly. + +#### Entitas.CodeGenerator +- Add ConsoleWriteLinePostProcessor #342 +- Make EntitasPreferences.CONFIG_PATH public field in order to customize the path to the config file #342 +- Add CodeGeneratorUtil to simplify creating an instance based on Entitas.properties +- Add `assemblyPath` and `codeGeneratorAssemblyPath` to code generator config + +#### Entitas.Unity.VisualDebugging +- Added SystemWarningThreshold to visualize slow systems +- Tinting slow systems red +- Systems list unfolded by default + + +# 0.39.2 + +See and discuss changes in [Milestone 0.39.2](https://github.com/sschmid/Entitas-CSharp/milestone/11) + +#### Entitas +- Optimize group update performance for component add/remove #321 +- Ignore indexed properties in PublicMemberInfo #339 +- More explicit EntityIndex.ToString() +- More explicit EntityLink.ToString() + +#### Entitas.Unity.VisualDebugging +- Automatically draw types. No TypeDrawers #327 + + +# 0.39.1 + +See and discuss changes in [Milestone 0.39.1](https://github.com/sschmid/Entitas-CSharp/milestone/10) + +#### Entitas +- Added `entityIndex.ToString()` with name #329 + +#### Entitas.CodeGenerator +- Add ContextObserverGenerator #337 +- Simplified EntityIndexGenerator getKey + +#### Entitas.Unity.VisualDebugging +- Optimize DebugSystemsInspector #338 + +#### Entitas.Unity.Blueprints +- Blueprints not persistent after changes to components. #331 + + +# 0.39.0 + +See and discuss changes in [Milestone 0.39.0](https://github.com/sschmid/Entitas-CSharp/milestone/9) + +#### Entitas +- Added `entityIndex.ToString()` with name #329 + +#### Entitas.CodeGenerator +- Add `contexts.Reset()` (#317) +- Removed ComponentDataProvider without namespace #323 +- Don't generate EntityIndex when not specified #326 +- Cache static component index lookup into local var #316 +- Review and check for namespace awareness #328 + + +# 0.38.0 + +See and discuss changes in [Milestone 0.38.0](https://github.com/sschmid/Entitas-CSharp/milestone/8) + +This seems to be the release of enhancements! Lots of useful improvments and features have been added to +increase productivity and ease of use. + +#### Breaking changes +- Removed HideInBlueprintsInspector (#270 #306) +- Changed interface `ITypeDrawer` +- Added Contexts constructor (#286) + +# Entitas +- Using ToString on subclassed components, too (#290) +- Fixed cached entity ToString() wasn’t updated when calling entity.Release() +- Fixed typo `TEntitiy` to `TEntity`(#291) + +# Entitas.Unity +- Simplified DrawTexture +- Refactored EntitasLayout + +# Entitas.CodeGenerator +- Generating Entity Indices (#75 #319) +- Added priority to ICodeGenFilePostProcessor +- Move logic to DebugLogPostProcessor to speed up code generation +- Added MergeFilesPostProcessor (#301) +- Added Contexts constructor (#286) +- Added default context (#288) +- Using MemberData instead of PublicMemberInfo in DataProviders (#280) +- Added progess report to code generator + +# Entitas.Unity.CodeGenerator +- Added cancellable progess bar when generating + +# Entitas.Unity.VisualDebugging +- Redesigned Entitas Preferences Window +- Redesigned DebugSystemsInspector +- Redesigned Type Drawers +- Added component member search (#298) +- Added search field to DictionaryTypeDrawer (#299) +- Better UX, better Buttons +- Entitaslayout.SearchTextField won’t affect GUI.change +- Fixed Hashset changes didn’t replace component +- Added `context.FindContextObserver()` for getting ContextObserver (#295) +- Added default constructor to Feature class (#293) +- Added Entitas Stats Dialog +- EntityDrawer will use pooled components +- Simplified EntityDrawer and TypeDrawers +- Removed TypeEqualityComparer (#289) +- Drawing public fields of unsupported types +- Updated code templates for TypeDrawer and DefaultInstanceCreators (#297) + +# Entitas.Unity.Migration +- Redesigned Entitas Migration Window + +# General +- Using HD header textures + + +# 0.37.0 + +See and discuss changes in [Milestone 0.37.0](https://github.com/sschmid/Entitas-CSharp/milestone/7) + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +The deed is done. Entitas went type-safe! This was a huge task and I'm happy to finally share this with you guys! +This feature makes Entitas safer and more managable in growing code bases and will eliminate certain kind of bugs. Thanks to @mstrchrstphr +for starting the conversation and proposing solutions. + +#### Entitas +- Entitas went type-safe! (#257 #266) +- Entity API doesn't return Entity anymore (e.g. e.AddComponent()) +- Fixed matchers not recalculating hash when changed +- Added EntityIndex support for multiple keys (#279 #281) +- Removed as many virtual keywords as possible + +#### Entitas.CodeGenerator +- Entitas went type-safe! (#257 #266) +- Rewrote code generator architecture (#265 #274 #275) +- ComponentsGenerator doesn't generate `e.IsMoveble(value)`. Only `e.isMoveble = value` +- ComponentsGenerator Entity API doesn't return Entity anymore (e.g. e.AddPosition()) +- Added additional ComponentGenerator which respects namespaces (#274) + +#### Entitas.Blueprints +- Entitas went type-safe! (#257 #266) + +#### Entitas.Migration +- Automatically embedding all migrations to Entitas.Migration.exe + +#### Entitas.Unity.Codegenerator +- Added sloc (Source Lines Of Code) and loc (Lines Of Code) info + +#### Entitas.Unity.VisualDebugging +- Entitas went type-safe! (#257 #266) +- Added EntityLink (#271) +- Prettier search fields that support multiple search strings + +#### Other +- New folder structure with Entitas as the core and everything else as Addons +- Complete reorganization of the project structure (more modular and easier to reason about) + + +# 0.36.0 + +See and discuss changes in [Milestone 0.36.0](https://github.com/sschmid/Entitas-CSharp/milestone/6) + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas +- Removed pool.CreateSystem() (#233 #237) +- Removed `IEnsureComponents`, `IExcludeComponents`, `ISetPools`, `ISetPool`, `IReactiveSystem`, `IMultiReactiveSystem`, `IEntityCollectorSystem` +- Changed the ReactiveSystem to be an abstract class instead of `IReactiveSystem`. You need to override `GetTrigger`, `Filter` and `Execute`. +This enables filtering entities based on component values (#234) +- Renamed the term Pool to Context (#99 #250) +- Renamed `EntityCollector` to `Collector` (#252 #253) +- Renamed `GroupEventType` to `GroupEvent` and removed the prefix `OnEntity` +- entity.ToString uses component.ToString(). Override ToString() in your components +to get a nice description, e.g. `Health(42)` (#203 #196) + +#### Entitas.CodeGenerator +- Removed OldPoolsGenerator +- Fixed code generator line ending for header + +#### Entitas.Unity.VisualDebugging +- Improved VisualDebugging performance by reusing StringBuilders +- Added support for `ICleanupSystem` and `ITearDownSystem` +- Changed SystemsMonitor.axisRounding to 1 +- Fix error when turning visual debugging on/off in Unity 5.4 or newer (#222) +- Changed default blueprint creation location (#206 #248) + +### Other +- Simplified build pipeline + + +# 0.35.0 + +See and discuss changes in [Milestone 0.35.0](https://github.com/sschmid/Entitas-CSharp/milestone/5) + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas +- Fixed adding disabled entities to groups (#192, #193) +- Removed matcher with filter (#194, #195) + +### Other +- Maintenance, cleanup and formatting +- Completely new build system to create new releases + + +# 0.34.0 + +See and discuss changes in [Milestone 0.34.0](https://github.com/sschmid/Entitas-CSharp/milestone/4) + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas +- Added api to clone entities (#178, #182) + - `pool.CloneEntity(e);` + - `entity.CopyTo(target);` + +- Added EntityIndex constructor with EqualityComparer (#170, #186) +- Rename GroupObserver to EntityCollector (#168, #188) +- Added filter condition to matchers (#165, #189) + - `Matcher.Position.Where(e => e.position.x > 10);` + +#### Entitas.Serialization.Blueprints +- Added HideInBlueprintInspectorAttribute (#185) + +#### Other +- Improved snippets +- Added Visual Studio snippets (#172) +- Added TestRunner to support test debugging (#175, #176) +- Updated build scripts (#173, #177) +- Added tests for code formatting + + +# 0.33.0 + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas +- Added pools.CreateSystem() +- Added ObjectPool and ObjectCache and updated EntitasCache to use ObjectCache (#157) +- Added entityIndex.Activate() and removing entity indices from pool (#163) +- Renamed IDeinitializeSystem to ITearDownSystem (#164) + +#### Entitas.CodeGenerator +- TypeReflectionProvider sorts pool names and ToUppercaseFirst() (#155) +- CodeGeneratorConfig doesn't add default pool anymore (#156) + +#### Other +- Added repository icon +- Added snippets (see Snippets folder) + + +# 0.32.0 + +Summer break is over! Entitas development is back on track! +Thanks all of you guys for using and contributing to Entitas. +This release is packed with improvements from all of you, thanks for that! + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### General +- Lots of maintenance, refactoring, documentation and cleanup. Checked every class and every test ;) +- Removed unused usings (#134 @thematthopkins ) +- Added script to generate docset and included it in build script (#141 @mstrchrstphr) +- Updated policy.mdpolicy to support latest Xamarin Studio +- Fixed inconsistent Line endings (#116 @ParagonFable) + +#### Entitas +- Added new `Pools` class. There is no static Pools anymore but an instance. +- Added `ISetPools` to inject the shared pools instance +- Removed `pool.CreateSystem()` and `pool.CreateSystem(Type type)` (Apply migration 0.32.0) +- Fixed `pool.CreateSystem()` not creating a ReactiveSystem for IGroupObserverSystem +- Added `EntityIndex` (#154) +- `pool.Reset()` removes all event handlers +- Fixed retain / release didn't update entity toString cache +- Added `EntitasCache` for object pooling of collections to reduce memory allocations +- Updated Entity, Matcher and Pool to use EntitasCache (less garbage :heart:) +- Added `ICleanupSystem` +- Added `IDeinitializeSystem` +- Pushing removed component to component pool after dispatching event + +#### Entitas.CodeGenerator +- Fixed ComponentIndicesGenerator with multiple pools (#124) +- CodeGeneratorConfig will add default pool +- Fixed pools order if default pool exists + +#### Entitas.Unity.CodeGenerator +- CodeGenerator Preferences is using MaskField instead of Toggles now + +#### Entitas.Unity.VisualDebugging +- Less editor repaints for DebugSystemsInspector to improve performance +- Fixed system stats (Log stats) not ignoring Feature class +- Add ITypeDrawer for doubles (#132 @bddckr) +- Added support for enum masks (#132 @bddckr) +- Adjusted foldout spacing in custom inspector (#149 @ByteSheep) + +#### Other +- Updated keys for Entitas.properties and moved files from Entitas.Unity to Entitas.Serialization.Configuration +- Moved Properties from Entitas.Unity to Entitas.Serialization + + +# 0.31.2 + +#### Entitas.CodeGenerator +- All attributes can now be used for classes, interfaces and structs + + +# 0.31.1 + +#### Entitas.CodeGenerator +- Improved component generation for classes and interfaces and added support for default pool [Pool] +- Added support to CustomComponentNameAttribute to generate multiple components with different names for one class or interface + +```csharp +// This will automatically generate PositionComponent and VelocityComponent for you +[Pool, CustomComponentName("Position", "Velocity")] +public struct IntVector2 { + public int x; + public int y; +} +``` + +- Added support for generating components for structs +- Not generating obsolete pool attributes for generated classes + + +# 0.31.0 + +#### General +- Removed obsolete code + +#### Entitas.CodeGenerator +- Generating components for attributed classes and interfaces + +```csharp +// will automatically generate SomeClassComponent for you +[Core] +public class SomeClass { + public string name; + + public SomeClass(string name) { + this.name = name; + } +} +``` + +- Added support to add empty PoolAttribute to assign component to default pool + +```csharp +// using [Pool] will also add this component to Pools.pool +[Core, Pool] +public class SomeComponent : IComponent { +} +``` + +#### Entitas.Unity.VisualDebugging +- Added IComponentDrawer which can draw the whole component +- Added EntitasEntityErrorHierarchyIcon to indicate retained entities in the hierarchy +- Added CharTypeDrawer +- Fixed components not updating in the inspector (#107) +- Improved SystemsMonitor and added average line + +![Entitas-SystemsMonitor](https://cloud.githubusercontent.com/assets/233700/15198441/a515d764-17d7-11e6-965c-83c027fa89f7.png) + +#### Entitas.Unity.Serialization.Blueprints +- Fixed finding all BinaryBlueprints even when not loaded +- Correctly saving Blueprints when setting all BinaryBlueprints +- Added BlueprintsNotFoundException +- BinaryBlueprintInspector creates new pools instead of using one of Pools.allPools +- Fixed pool not shown when entering play-mode while a blueprint was selected in the project view +- Not caching blueprints when UNITY_EDITOR to enable live edit + +# 0.30.3 + +#### Entitas.CodeGenerator +- Added support for whitespace, '-' and braces in blueprint names + +#### Entitas.Unity.Serialization.Blueprints +- Blueprints.FindAllBlueprints orders all blueprints by name +- Fixed pool not shown in hierarchy + + +# 0.30.2 + +#### Note +This release introduces Blueprints for Entitas (Beta). Update if you want to +use and play with Blueprints. [Read more...](https://github.com/sschmid/Entitas-CSharp/wiki/Blueprints-(Beta)) + +#### Entitas.CodeGenerator +- Only creating PoolObserver when Application.isPlaying +- Added BlueprintsGenerator + +#### Entitas.Unity.VisualDebugging +- Added more options for sorting systems in the inspector +- Removing event handlers from pool observer when leaving play-mode + +#### Entitas.Serialization.Blueprints +- Added Blueprints (and more) + +#### Entitas.Unity.Serialization.Blueprints +- Added BlueprintInspector (and more) + +#### Other +- Moved build scripts into a folder + + +# 0.30.1 + +#### Entitas.Unity.VisualDebugging +- Fixed GameObjectDestroyExtension.DestroyGameObject() compile time error (#91) +- Improved SystemsMonitor.Draw() to use correct available width even with scrollbars +- Tweaked drawing systems list +- Added EntitasPoolErrorHierarchyIcon to visualize when there are erros + +#### Other +- Updated build_commands.sh to generate C# project from Unity + + +# 0.30.0 + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas +- Added IGroupObserverSystem which allows ReactiveSystems to observe multiple pools +- Added pools.CreateGroupObserver() to simplify creating a GroupObserver for multiple pools + +#### Entitas.CodeGenerator +- TypeReflectionProvider ignores abstract IComponents (#88) +- Renamed ComponentsGenerator to ComponentExtensionsGenerator +- Renamed PoolAttributeGenerator to PoolAttributesGenerator + +#### Entitas.Unity +- Moved Assets/Entitas.Unity to Assets/Entitas/Unity +- Simplified folder structure in Entitas-Unity.zip + +#### Entitas.Unity.CodeGenerator +- Ignoring obsolete code generators +- Generate button changes size depending on generators list height + +#### Entitas.Unity.VisualDebugging +- Added Feature class which inherits from Systems or DebugSystems for you, so you don't have to care anymore +- Fixed MissingReferenceException occurring occasionally when stopping game (#71) +- Added support for editing entities in EditorMode (non-playing mode) +- Fixed bug when components are added on entity creation (#87) +- Added clear buttons to search textfields +- Improved DateTimeTypeDrawer +- Added new hierarchy icons for pool and systems + +#### Entitas.Migration +- Added M0300 +- Moving Entitas.Migration into Entitas/Migration/Editor when creating Entitas-Unity.zip + + +# 0.29.1 + +#### Entitas.CodeGenerator +- Added missing support for components with properties +- Updated ComponentsGenerator to use entity.CreateComponent() + +#### Entitas.Unity.CodeGenerator +- Added missing support for components with properties + + +# 0.29.0 + +#### Obsolete +Marked old PoolMetaData constructor obsolete. If you encounter compile errors please apply Migration 0.26.0, open C# project and generate again. + +#### General +- Unified Entitas sub projects into a single project +- Unified all Unity projects into a single project +- Documentation maintenance + +#### Entitas +- Removing all event handler for entity.OnEntityReleased after event got dispatched +- Printing entity in EntityIsNotDestroyedException +- Added TypeExtension.ImplementsInterface() +- Added component types to PoolMetaData +- Made all methods in Systems virtual +- Added auto generated header to generated files + +``` +//------------------------------------------------------------------------------ +// +// This code was generated by Entitas.CodeGenerator.ComponentsGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +``` + +#### Entitas.CodeGenerator +- Using pool specific componentIds lookup when generating matchers for components with multiple pools +- TypeReflectionProvider ignores interfaces + +#### Entitas.Serialization +- Added Entitas.Serialization +- Added PublicMemberInfo + +#### Entitas.Unity.CodeGenerator +- Compile errors won't block code generation anymore +- Printing total generated file count when generating + +#### Entitas.Unity.VisualDebugging +- Destroying EntityBahviour when entity got released +- Using entity component pool and providing correct previous and new component +- Added unique color for each component in EntityInspector +- Added component search field in EntityInspector + +Entitas-Component-Search + +- 'Destroy Entity' Buttons are now red +- Simplified EntityInspector and made methods static +- Unfolded components info is now shared between entities within same pool +- Added shortcuts to Entitas Preferences and Generate +- Improved TypeDrawers +- Stepper UI tweaks + +![Entitas.Unity.VisualDebugging-Systems](https://cloud.githubusercontent.com/assets/233700/13554882/9c0bd7c0-e3b3-11e5-89ec-65fa888f0a48.png) + +- Renamed 'Script Call Optimization' to 'Optimizations' +- Added EntitasEditorLayout + + +# 0.28.2 + +#### Entitas +- Added ReactiveSystem destructor to prevent memory leaks +- Added GroupObserver destructor to prevent memory leaks + +#### Entitas.Unity.VisualDebugging +- EntityInspector now supports dropping UnityEngine.Object into fields that are null + +![Entitas.Unity.VisualDebugging-DefaultInstanceCreator](https://cloud.githubusercontent.com/assets/233700/12884636/ea8c468c-ce5f-11e5-91a9-0fdf83de7252.png) + +- UI tweaks + + +# 0.28.1 + +#### Entitas.Unity +- Added "Script Call Optimization" to Entitas Preferences Window +- Added priority to IEntitasPreferencesDrawer +- Tweaked UI + +![Entitas.Unity-ScriptCallOptimization](https://cloud.githubusercontent.com/assets/233700/12832387/e893b3ec-cb99-11e5-8ccb-d3478ca0c6dc.png) + +#### Entitas.Unity.VisualDebugging +- Added toggle to Entitas Preferences to enable or disable Visual Debugging +- Tweaked UI + +![Entitas.Unity.VisualDebugging-Toggle](https://cloud.githubusercontent.com/assets/233700/12832391/ec74d2e8-cb99-11e5-87b3-f76e2e9ea58d.png) + + +# 0.28.0 + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas +- Added documentation (#55) +- Added an object pool for components (#58) +- Added pool.ClearComponentPool(index) and pool.ClearComponentPools() +- Added ENTITAS_FAST_AND_UNSAFE compiler flag. When set it will speed up e.Retain() and e.Release() (#59) + +#### Entitas.CodeGenerator +- Generated component extensions are now reusing components using a component object pool when destroying entities (#58) +- Added tests for testing the logic of generated files +- Decoupling code generation logic by adding Code Generator Intermediate Format (#62) +- Added TypeReflectionProvider +- Supporting components with namespace +- Simplified linq expressions +- Removed generated systems +- The Code Generator is not depending on Entitas anymore + +#### Entitas.CodeGenerator.TypeReflection +- Added Entitas.CodeGenerator.TypeReflection project + +#### Entitas.Unity +- Added `keys` and `values` getter to Properties + +#### Entitas.Unity.VisualDebugging +- Added system search field to DebugSystemsInspector +- UI tweaks and performance optimizations +- Fixed logging wrong system stats +- Added header image and current version label to Entitas Preferences Window + +![Entitas.Unity.Visualdebugging-preferences](https://cloud.githubusercontent.com/assets/233700/12795069/a13e5b6e-cab8-11e5-937d-870790e2bfe1.png) + +#### Entitas.Unity.Migration +- Added Entitas.Unity.Migration which provides an easy way to migrate source files +- Added header image and current version label to Entitas Migration Window + +![Entitas.Unity.Migration](https://cloud.githubusercontent.com/assets/233700/12795026/6acf24b4-cab8-11e5-90e3-98a103676d50.png) + +#### Other +- Removed redundant files and gitignored Entitas in all Unity projects (#63) +- Removed Unity projects from Entitas.sln +- Removed warnings + + +# 0.27.0 + +#### Note +If you're using Entitas with Unity, please open the Entitas preferences and make sure that all your desired code generators are activated. Due to some code generator renamings the ComponentLookupGenerator and the ComponentsGenerator are inactive. Activate them (if desired) and generate. + +#### Entitas +- Added `pool.Reset()` which clears all groups, destroys all entities and resets creationIndex + +#### Entitas.CodeGenerator +- Renamed some code generators +- Added `CustomPrefixAttribute` to support custom prefixes for flag components +``` +[CustomPrefix("flag")] +public class DestroyComponent : IComponent { +} + +// default +entity.isDestroy = true; + +// with CustomPrefixAttribute +entity.flagDestroy = true; +``` + +#### Entitas.Unity +- Added "Feedback" menu item to report bugs, request features, join the chat, read the wiki and donate + +#### Entitas.Unity.CodeGenerator +- Removing invalid code generator names from Entitas.properties + +#### Entitas.Unity.VisualDebugging +- Lots of UI tweaks +- Added toggle to sort systems by execution duration +- Added toggle to hide empty systems +- ReactiveSystems are highlighted with a white font color +- Added Clear Groups Button +- Added Entity Release Button +- Splitted systems list into initialize and execute systems and visualizing them separately +- Improved stepper UI + +#### Entitas.Migration +- All migrations now contain information about on which folder they should be applied + +``` +0.26.0 + - Deactivates code to prevent compile erros + - Use on folder, where generated files are located +``` + +#### Other +- Added Commands.GenerateProjectFiles and using it in build.sh +- Updated build.sh and build_commands.sh to include latest MigrationAssistant.exe + + +# 0.26.1 + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + + +# 0.26.0 + +#### General +- Updated projects to Unity 5.3 +- Improved all error messages and added hints +- Changed and applied policy.mdpolicy to all sources + +#### Entitas.Unity +- Moved Entitas Preferences to its own Editor Window + +![Entitas.Unity - Entitas Preferences Window](https://cloud.githubusercontent.com/assets/233700/12222689/9492611a-b7c3-11e5-880d-c4cc83c9234e.png) + +#### Other +- Added runTests.bat for running test on windows (#49) +- Updated license + + +# 0.25.0 + +#### Entitas +- Improved AERC performance +- Added group.RemoveAllEventHandlers() +- Added pool.ClearGroups() to remove all groups and remove all their event handlers +- Added pool.ResetCreationIndex() +- Throwing exception when there are retained entities and pool.DestroyAllEntities() is called +- Renamed entity.refCount to entity.retainCount + +#### Entitas.Unity.VisualDebugging +- Fixed creating entities +- Showing warning when there are retained entities + +#### Other +- Added UnityTests project with Unity Test Tools to fix a Unity specific HashSet bug + + +# 0.24.6 + +#### Entitas +- Changed entity.Retain() to accept an owner object + +#### Entitas.Unity.VisualDebugging +- Added VisualDebugging support for displaying owners of entities + +![Entitas.Unity.VisualDebugging-RefrenceCount](https://cloud.githubusercontent.com/assets/233700/11320810/0463033a-90a7-11e5-931b-5074b50d7e62.png) + + +# 0.24.5 + +#### Entitas +- Fixed dispatching group events after all groups are updated + +#### Entitas.CodeGenerator +- Supporting ENTITAS_DISABLE_VISUAL_DEBUGGING compiler flag + + +# 0.24.4 + +#### Entitas +- Added entity.componentNames. This field is set by Entitas.Unity.VisualDebugging to provide better error messages +- Added matcher.componentNames. This field is set by Entitas.Unity.CodeGenerator to provide better error messages +- entity.ToString() now removes ComponentSuffix +- Fixed typo + +#### Entitas.Unity.CodeGenerator +- ComponentExtensionsGenerator sets matcher.componentNames +- Removed generating unused using in ComponentExtensionsGenerator + +#### Other +- Added update_project_dependencies.sh +- Refactored build commands into build_commands.sh + + +# 0.24.3 + +#### Entitas +- Added systems.ActivateReactiveSystems() and systems.DeactivateReactiveSystems which should be called when you don't use systems anymore + +#### Other +- Merged shell scripts + + +# 0.24.2 + +#### General +- Renamed XyzEditor to XyzInspector +- Streamlined naming + +#### Entitas.Unity.VisualDebugging +- Simplified adding a component at runtime + +#### Other +- buildPackage.sh now creates Entitas-CSharp.zip and Entitas-Unity.zip + + +# 0.24.1 + +#### Entitas.Unity.VisualDebugging +- Added support for adding components to multiple entities at once at runtime + +![Entitas.Unity.VisualDebugging-Entity](https://cloud.githubusercontent.com/assets/233700/10293066/d4668120-6bb2-11e5-895e-cfdd25cc2e74.png) + + +# 0.24.0 + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas.Unity.CodeGenerator +- Throwing exception when attempting to generate while Unity is still compiling or assembly won't compile + +#### Entitas.Unity.VisualDebugging +- Added support for creating entities and adding components at runtime + +![Entitas.Unity.VisualDebugging-PoolObserver](https://cloud.githubusercontent.com/assets/233700/10291395/d83c3ec4-6ba9-11e5-9c1d-3e18fe2c6370.png) + +![Entitas.Unity.VisualDebugging-Entity](https://cloud.githubusercontent.com/assets/233700/10291401/e15d29be-6ba9-11e5-8fc1-87767430342c.png) + + +# 0.23.0 + +#### Breaking changes +Before updating, please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +- Gerneral + - Updated and applied policy + +#### Entitas +- Reimplemented new matcher AnyOf and NoneOf + +```csharp +Matcher.AllOf(Matcher.A, Matcher.B) + .AnyOf(Matcher.C, Matcher.D) + .NoneOf(Matcher.E, Matcher.F); + +``` + +#### Entitas.CodeGenerator +- Updated generators to work with new matchers +- PoolsGenerator generates Pools.allPools (#39) +- Code Generators convert local newline to unix newline + +#### Entitas.Unity.CodeGenerator +- Changed CodeGeneratorConfig.disabledCodeGenerators to CodeGeneratorConfig.enabledCodeGenerators + + +# 0.22.3 + +#### Entitas +- Added reactiveSystem.Clear() and systems.ClearReactiveSystems() +- Added IClearReactiveSystem. When implemented, clears reactive system after execute finished + + +# 0.22.2 + +#### Fixes +- Entitas + - GroupObserver retains entities only once + +#### Entitas.Unity.VisualDebugging +- PoolObserver now shows retained entities +- Destroying EntityBehaviour e.OnEntityReleased instead of e.OnComponentRemoved + +#### Other +- New logo + + +# 0.22.1 + +#### Entitas +- Throwing an exception when releasing an entity that is not destroyed yet (#32) + +#### Entitas.Unity.VisualDebugging +- Added hierarchy icon +- Renamed DebugSystems related classes + +#### Other +- buildPackage.sh includes HierarchyIcon.png.meta + + +# 0.22.0 + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +- Entitas + - Restored previous pool.DestroyEntity() behaviour + - IReactiveSystem and IMultiReactiveSystem changed and use `TriggerOnEvent` + - Use the command line tool `MigrationAssistant.exe` to automatically migrate IReactiveSystem + - Renamed IStartSystem.Start to IInitializeSystem.Initialize (#21) + +#### Fixes +- Entitas + - e.RemoveAllComponents() updates toString cache, even if entity has no components + +#### Entitas +- Added AERC (Automatic Entity Reference Counting) (#30, solves #25) +- Reduced gc allocations in e.RemoveAllComponents() +- Reduced gc allocations in pool.CreateEntity() and pool.DestroyEntity() +- pool.DestroyEntity() will clean suscribed event delegates of entities (#27) +- entity.ToString() will always use component type +- Streamlined and refactored tests and sources + +#### Entitas.Unity.VisualDebugging +- Improved SystemMonitorEditor graph performance (#14) + +#### Entitas.Migration +- Added M0220 (Migrates IReactiveSystem to combine trigger and eventTypes to TriggerOnEvent) +- Updated migration descriptions + +#### Other +- Removed project files +- Renamed updateDependencies.sh to updateProjects.sh +- buildPackage.sh includes EntitasUpgradeGuide.md in Entitas.zip + + +# 0.21.0 + +#### Fixes +- Entitas.Migration + - Changed target framework to .NET 3.5 to fix build errors in VisualStudio (#22) + +#### Entitas +- Changed pool.DestroyEntity(entity) behaviour + - won't trigger group.OnEntityRemoved anymore + - triggers group.OnEntityWillBeDestroyed + - removes entity from all groupObserver.collectedEntities + - ReactiveSystem doesn't pass on destroyed entities anymore +- ReactiveSystem doesn't call Execute() when filtered entities.Count == 0 + +#### Other +- Added project files (#18) + + +# 0.20.0 + +#### Breaking changes +- Entitas + - Removed all matchers except AllOfMatcher + +#### Entitas +- Added `IEnsureComponents` to optionally ensure entities passed in via ReactiveSystem have certain components +- Added `IExcludeComponents` to optionally exclude entities passed in via ReactiveSystem +- Added support for multiple PoolAttributes on components + +```csharp +[PoolA, PoolB, PoolC] +public class SomeComponent : IComponent {} +``` + +#### Entitas.Unity.CodeGenerator +- Added `disabledCodeGenerators` to CodeGeneratorConfig +- Added code generator toggles to CodeGeneratorPreferencesDrawer + +![Entitas.Unity.Codegenerator.disabledcodegenerators](https://cloud.githubusercontent.com/assets/233700/9046406/b4c6b7c2-3a2a-11e5-8624-a8988f684579.png) + +#### Entitas.Unity.VisualDebugging +- Nicer stats + + +# 0.19.1 + +#### Entitas +- GroupObserver supports observing multiple groups +- Added support for IMultiReactiveSystem +- Added internal entity._isEnabled to prevent modifying pooled entities +- Replaced internal object pool with Stack + +#### Entitas.CodeGenerator +- Fixed generated replace method, when replacing non existent component + +#### Entitas.Unity.VisualDebugging +- Drastically improved performance and memory usage by caching ToString() and reducing setting gameObject.name + + +# 0.19.0 + +#### Breaking changes +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +- Entitas + - Added new e.OnComponentReplaced and removed all *WillBeRemoved events + - Added component index and changed component to OnEntityAdded and OnEntityRemoved + - IReactiveSystem.Execute takes List instead of Entity[] + - Entitas now runs without producing garbage! + +- Entitas.CodeGenerator + - Removed support for properties in components + +- Entitas.Unity.VisualDebugging + - Replaced DebugPool with a more flexible PoolObserver + +#### Entitas +- Added group.OnEntityUpdated event with previous and new component + +#### Entitas.CodeGenerator +- ComponentExtensionsGenerator generates component object pool +- Converting newlines in generated files to Environment.NewLine (Pull request #11, thanks @movrajr) + +#### Other +- Added policy.mdpolicy + + +# 0.18.3 + +#### Entitas +- Added ReactiveSystem.Activate() and .Deactivate() + +#### Entitas.Unity.VisualDebugging +- Displaying nested systems hierarchy for DebugSystems + +![Entitas.Unity.VisualDebugging-DebugSystemsHierarchy](https://cloud.githubusercontent.com/assets/233700/8761742/6e26dd22-2d61-11e5-943b-94683b7b02ec.png) +![Entitas.Unity.VisualDebugging-DebugSystemsHierarchyEditor](https://cloud.githubusercontent.com/assets/233700/8761746/9628dbfe-2d61-11e5-9b75-570e5c538c0d.png) +- Unchecking a ReacitveSystem in VisualDebugging deactivates it + + +# 0.18.2 + +#### Entitas.CodeGenerator +- Fixed #9 + + +# 0.18.1 + +#### Entitas.CodeGenerator +- ComponentExtensionsGenerator now supports properties + + +# 0.18.0 + +#### Breaking changes +- Use the command line tool `MigrationAssistant.exe` to automatically migrate + - Changed IReactiveSystem.GetTriggeringMatcher to IReactiveSystem.trigger + - Changed IReactiveSystem.GetEventType to IReactiveSystem.eventType + +Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas.Unity +- Fixed code generation issues on Windows by converting and normalizing line endings +- Fixed EntitasCheckForUpdates.CheckForUpdates() by temporarily trusting all sources + + +# 0.17.0 + +#### Breaking changes +- Added `systemCodeGenerators` to CodeGenerator.Generate() + +```csharp +CodeGenerator.Generate(Type[] types, string[] poolNames, string dir, + IComponentCodeGenerator[] componentCodeGenerators, + ISystemCodeGenerator[] systemCodeGenerators, + IPoolCodeGenerator[] poolCodeGenerators) +``` + +#### Entitas.CodeGenerator +- Added PoolsGenerator which creates a getter for all pools + +```csharp +var pool = Pools.pool; +var metaPool = Pools.meta; +``` + +- Added SystemExtensionsGenerator + +```csharp +new Systems() + .Add(pool.CreateGameBoardSystem()) + .Add(pool.CreateCreateGameBoardCacheSystem()) + .Add(pool.CreateFallSystem()) + .Add(pool.CreateFillSystem()) + + .Add(pool.CreateProcessInputSystem()) + + .Add(pool.CreateRemoveViewSystem()) + .Add(pool.CreateAddViewSystem()) + .Add(pool.CreateRenderPositionSystem()) + + .Add(pool.CreateDestroySystem()) + .Add(pool.CreateScoreSystem()); +``` +- Added Components, Systems & Pools sub folders to generated folder + +#### Entitas.Unity +- Properties split with Environment.NewLine instead of '\n' + +#### Entitas.Unity.CodeGenerator +- Entitas preferences appends "/Generated/" to generated folder if necessary + +#### Entitas.Unity.VisualDebugging +- Using Queue for SystemsDebugEditor.systemMonitorData + + +# 0.16.0 + +#### Breaking changes +- Moved system getters from Systems to DebugSystems + +#### Entitas.Unity.CodeGenerator +- Generated ComponentIds use array instead of dictionary for component name lookup + +#### Entitas.Unity.VisualDebugging +- Added "Step manually" to DebugSystems +- Added activate / deactivate systems at runtime +- Displaying Systems.totalSystemsCount in SystemsDebugEditor +- Added SystemsMonitor visual graph + +![Entitas.Unity.VisualDebugging-DebugSystems](https://cloud.githubusercontent.com/assets/233700/8241713/3bf5e3ce-160b-11e5-8876-497bb09c04b1.png) +- Removed override DebugSystems.DestroyAllEntities() + + +# 0.15.0 + +#### Entitas +- Added entitas_version file +- Added CreateSystem(ISystem) to PoolExtensions +- Fixed typo GroupObserver.ClearCollectedEntities() + +#### Entitas.Unity +- Added "Check for updates..." menu item + +#### Entitas.Unity.VisualDebugging +- Added Stats menu item to log current components, systems and pools + + +# 0.14.0 + +#### General +- Upgraded all Unity projects to Unity 5 + +#### Entitas +- Added Systems class +- Re-combined pool extensions for creating systems to pool.CreateSystem() and removed pool.CreateStartSystem() and pool.CreateExecuteSystem() +- Fixed: Pool won't destroy entities it doesn't contain + +#### Entitas.Unity +- Properties now support multiline values and placeholder replacement with ${key} + +#### Entitas.Unity.CodeGenerator +- Added fluent api to Entity + +```csharp +pool.CreateEntity() + .IsGameBoardElement(true) + .IsMovable(true) + .AddPosition(x, y) + .AddResource(Res.Piece0) + .IsInteractive(true); +``` +- CodeGenerator takes arrays of IComponentCodeGenerator and IPoolCodeGenerator to generate files so you can easily provide your own custom code generators +- Added dialog for 'Migrate Matcher' menu item + +#### Entitas.Unity.VisualDebugging +- Added DebugSystems + +![Entitas.Unity.VisualDebugging-Systems](https://cloud.githubusercontent.com/assets/233700/7938066/ebe8b4b6-0943-11e5-9cec-ce694d624aca.png) +- Added HashSetTypeDrawer + + +# 0.13.0 + +#### Reminder +- Entitas 0.12.0 generates prefixed matchers based on the PoolAttribute and introduces some API changes. Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### General +- Split into multiple modules and seperate projects. Entitas now consists of + - Entitas + - Entitas.CodeGenerator + - Entitas.Unity + - Entitas.Unity.CodeGenerator + - Entitas.Unity.VisualDebugging + +#### Entitas.Unity +- Added IEntitasPreferencesDrawer to be able to extend the Entitas preferences panel + +#### Entitas.Unity.CodeGenerator +- Entitas preferences internal keys changed. Please check your settings in projectRoot/Entitas.properties and update keys + - Entitas.CodeGenerator.GeneratedFolderPath -> Entitas.Unity.CodeGenerator.GeneratedFolderPath + - Entitas.CodeGenerator.Pools -> Entitas.Unity.CodeGenerator.Pools + +#### Entitas.Unity.VisualDebugging +- Added support to set fields to null +- Added support to create a new instance if the value of a field is null +- Added IDefaultInstanceCreator to create default objects for unsupported types +- Added IDefaultInstanceCreator implementations for array, dictionary and string +- Added support to insert and remove elements from lists, arrays and dictionaries + +![Entitas.Unity.VisualDebugging-ITypeDrawer](https://cloud.githubusercontent.com/assets/233700/7339538/226d8028-ec72-11e4-8971-53029fb20da8.png) +- Added name property to DebugPool +- Added VisualDebuggingConfig and VisualDebuggingPreferencesDrawer + +![Entitas.Unity.VisualDebugging-Preferences](https://cloud.githubusercontent.com/assets/233700/7339599/ef454f34-ec74-11e4-9775-963f477bfb16.png) +- EntityDebugEditor can generate IDefaultInstanceCreator and ITypeDrawer implementations for unsupported types +- Fixed: handling null values +- Renamed ICustomTypeDrawer to ITypeDrawer +- Big refactoring to simplify drawing types + +#### Other +- buildPackage.sh keeps uncompressed source files in bin folder +- Added updateDependencies.sh which updates all dependencies of Entitas.Unity.CodeGenerator, Entitas.Unity.VisualDebugging and tests +- Renamed and moved files and folders to be more consistent with the new project structure + + +# 0.12.0 + +#### Important +- Entitas 0.12.0 generates prefixed matchers based on the PoolAttribute and introduces some API changes. Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas +- Added IStartSystem and pool.CreateStartSystem() extension +- Renamed pool.CreateSystem() to pool.CreateExecuteSystem() +- Added pool.CreateStartSystem() +- Added EntitasUpdater to automatically update the introduced matcher API changes + +#### Visual Debugging +- Fixed null exceptions +- Added support for multi dimensional and jagged arrays +- Removed Debug.Log + +#### Code Generator +- Added Code Generator PreferenceItem + - set generated folder path + - define multiple pools + +![Entitas.Unity.CodeGenerator-Preferences](https://cloud.githubusercontent.com/assets/233700/7296726/8d74bb5a-e9c2-11e4-8324-10a0db7191ff.png) +- Added PoolAttributeGenerator +- Generated Matcher is now prefixed based on PoolAttribute (e.g. UIMatcher) +- Generating ToString() for matchers to print component name instead of index +- IndicesLookupGenerator generates indices ordered alphabetically +- Added TypeGenerator to streamline string generation from types +- Added support for nested classes + +#### Other +- Added Properties and CodeGeneratorConfig to serialize Entitas preferences to file +- Removed warning in AbstractCompoundMatcher +- buildPackage.sh only builds when all tests are passing +- buildPackage.sh deletes meta files before creating zip archive + + +# 0.11.0 + +#### Reminder +- Entitas 0.10.0 included lots of renaming. Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) if you are on < v0.10.0 + +#### Entitas +- Added AllOfCompoundMatcher +- Added AnyOfMatcher +- Added AnyOfCompoundMatcher +- Added NoneOfMatcher +- Added NoneOfCompoundMatcher +- Updated Entitas to handle any implementation of IMatcher +- Fixed dispatching OnComponentAdded when replacing a non existing component with null +- Optimizations + +#### Visual Debugging +- Added support for custom type drawers `ICustomTypeDrawer` +- Added component folding and pooled entities count +- Added groups to PoolDebugEditor + +![Entitas.Unity.VisualDebugging-Groups](https://cloud.githubusercontent.com/assets/233700/6547980/e342b3fe-c5e9-11e4-8caa-77662a14679b.png) +- Added support for IList + +![Entitas.Unity.VisualDebugging-IList](https://cloud.githubusercontent.com/assets/233700/6547984/eecc3e3e-c5e9-11e4-98bb-700a84047abe.png) +- UI improvements + +#### Code Generator +- Fixed typeShortcuts to use type.FullName to support UnityEngine.Object (conflicted with System.Object) +- Added EntitasCodeGeneratorMenuItem + +#### Other +- Moved and renamed some folders +- Added buildPackage.sh which creates a bin/Entitas.zip with all necessary source files + + +# 0.10.0 + +#### Important +- Entitas 0.10.0 includes lots of renaming. Please follow the [Entitas upgrade guide](https://github.com/sschmid/Entitas-CSharp/blob/master/EntitasUpgradeGuide.md) + +#### Entitas +- Added empty ISystem and IExecuteSystem for more flexibility +- Added public creationIndex to Entity +- Observer is now on group not on pool +- Removed WillBeRemovedSystem and observer +- Added CreateSystem to PoolExtension +- Added fast entities count call to Pool +- Added creationIndex to entity.ToString() +- pool.CreateEntity() and pool.DestroyEntity() are now virtual + +#### Visual Debugging +- Added VisualDebugging + +#### Code Generator +- Supports enums nested in components +- Added option to [DontGenerate] to ignore generating index, too diff --git a/Assets/Plugins/Entitas/CHANGELOG.md.meta b/Assets/Plugins/Entitas/CHANGELOG.md.meta new file mode 100644 index 0000000..5e8231d --- /dev/null +++ b/Assets/Plugins/Entitas/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 00ae8a4e3a8088547a20786bf0efcc86 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor.meta b/Assets/Plugins/Entitas/Editor.meta new file mode 100644 index 0000000..1c8007b --- /dev/null +++ b/Assets/Plugins/Entitas/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a3c3e3882416e244b6a412e9b7336b4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Entitas.Migration.Unity.Editor.dll b/Assets/Plugins/Entitas/Editor/Entitas.Migration.Unity.Editor.dll new file mode 100644 index 0000000000000000000000000000000000000000..8c1e1b726c5e83998f60787dd3ef09890cb9ee3f GIT binary patch literal 6656 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Editor/Entitas.Unity.Editor.dll.meta b/Assets/Plugins/Entitas/Editor/Entitas.Unity.Editor.dll.meta new file mode 100644 index 0000000..bc2e66f --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Entitas.Unity.Editor.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: e6cecfe638be65a45889fc95a6dc564d +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Entitas.VisualDebugging.Unity.Editor.dll b/Assets/Plugins/Entitas/Editor/Entitas.VisualDebugging.Unity.Editor.dll new file mode 100644 index 0000000000000000000000000000000000000000..407deec02dcee15271cb30a0237e1afa3cce9392 GIT binary patch literal 50688 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 Vt-Z*>D!Tvx002ovPDHLkV1jWh{5=2w literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasContextHierarchyIcon.png.meta b/Assets/Plugins/Entitas/Editor/Images/EntitasContextHierarchyIcon.png.meta new file mode 100644 index 0000000..2c07b80 --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Images/EntitasContextHierarchyIcon.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: e23ad41464ef945d784cdb90d844e6c4 +labels: +- EntitasContextHierarchyIcon +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 256 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 256 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasEntityErrorHierarchyIcon.png b/Assets/Plugins/Entitas/Editor/Images/EntitasEntityErrorHierarchyIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..5869963fa1b0a9528a91dadd2660eb1b4a5e8700 GIT binary patch literal 918 zcmV;H18Mw;P)JhE>83{UM9-&*Bfu37|KC6BJGWoPcry$_XeZ08Rj&fD(=VFtLjoV`8H9 zySAbAeYR7x-JO|kn>Ielvct}F-gln&a~!0^CE!j0>khCg|K>Y@Cu5g$GOo)wkYP0g zTr_~Q75SECUnhlNPXzDCu-Frr5|t*fztUA~cm;Uk8DOu|6+SXVKzSM1wajaUd(*(V z3_Xkofv{1~v5|>?cp>&3vv49j5ciHx^f54jlgE)@!iflXr^AcE1$>g+8U-7 z7sGF@>udbHxWF%YQYx|1i;{l|yaWzx4oAWB+uNAm*$Kxww1NPiN+r~fk6}a9F+&9u z^)=HEraTYc`FZ$G12XY;V*~BFITZ*COEg93gc9eaaS11Gi+LWNoLJYW+yY10{)=hh zq6nwGqu>cibE8@f%|YcB_VzFxQ}W~PE+h*tbHFhga3@2 zY9O7ZWXL3RlY{^Jau(VQ`(ZkikU>x+H_fjuxSyKe>t2f|_H@1O83{YZFqd~!>{f+cH4U40S;~)B} zEgPvNqpfKgj;sG+;og31 zZ|%io0!$=M-h;Ln`N~c<$4m=49QX1KtPZ@Kk_~B{N{%608idlpj-}%%`=ee?07*qoM6N<$g0RJ$(*OVf literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasEntityErrorHierarchyIcon.png.meta b/Assets/Plugins/Entitas/Editor/Images/EntitasEntityErrorHierarchyIcon.png.meta new file mode 100644 index 0000000..9d18e36 --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Images/EntitasEntityErrorHierarchyIcon.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 06bc0e5b0b5124fca8f5d7dde1d012b0 +labels: +- EntitasEntityErrorHierarchyIcon +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 256 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasEntityHierarchyIcon.png b/Assets/Plugins/Entitas/Editor/Images/EntitasEntityHierarchyIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..f547db9f8850034745e67dd4f0be3d62ad096c77 GIT binary patch literal 1083 zcmV-B1jPG^P) zA^Ag)2I{m*6Z8fCEv&>562*5r=Z>Z`@7?EUBYmKb_nx`mx#yl=gfQXuWXDBo%ejD% z1p++?h8qCm0=r^CfTq)5A0qUwtT{V$U++RV=i+t(r#zYNH4STsuw;{PdkBCRs|GyK zeFHk|MuEVMf8R&I8u$kY5Z>|O!5gp>1^Cv620g3?Lb~IkDP0h^0=b>Tx8G-PW zaHecTiDP4x9gg&I+Yw(Wx(p?S1@f~Mrb&?}&Cj8|^Bvg09pD1#n9>64rk_-OBY|%E zviT__#K%K8U~62fy#s!~UnxURah#t*I-!A3A1QK1dRi(xYkXuY6Ricp8{Hlcy}k37 zN|4Fc>;&m&Qq-FW zZcSC;Tx7mTAU4Kjvx{*W{AV~g9IUM1_b-`*zkVBshR0sm3G9*)b33?`K@g@YH9b3H z5|53Ek>M6G2+$qmiC@SWObRTL1(!Zq-0>d8Orn)fHtX1g9>O6cOVt-pHxM|hqrB}6uVLNI2A80ElI1C z6cw11ZKHI3xBj700V>M}WdcY{&G1t1cil>e59fNID#0qSlEoF3%EZM@>-g}%RT+j+ z1}a^f-D=--uc0nmcjB{MgrNKGm3QBx|(gPYQzR6I%>LagPnAVeB;CZ8QT8>k19NLs?;<{OBz zl4qxM9XZ^hVblSYV}{R-O{>CLsQW(7S?z~4oXVyZt+S;yD^1I&wX7P#yX)aJ6mnRF z=0&aR1Kv>*jWM-R`FA_i}glKlgl}^FIf{Bpj+MbA>Wp z3J66YP(=tj05EgzRQLrb8a=&;&^t40d#-tV{bu-LB7$7C&@roEH3_U(5SSPO;7K3| zcQo&y2B|18XYrrg2v`kEfB@n44G&$1WE5blg9^N5Jz#mD%><#?$Qz3O52w0MU1s47 z$4cVKy!8iB9!P`bdc=4ltN_P+r84~~jlv_8ux zlpQ|;CypP5{d@9ZYHA9)d;6iG`4NnNpIG!83dL3qg@s?%=4^J8Dk`Las!JE3=4Lf) z+L$BXGcqzDZ~HbVaUF#2zJ5~Zx8ZjRBL18hdt-5^YNkc8wnGYF;a4x7m%lx29dM)O zmbAWLZ+=*zcLRfl-y(=yd$zL)o%x05C=QPyNw9#jV@Kq3%*zI;GDLNp3_mIVGbtFP=Ut?dLh*gnQAnroe#Uvu#9s(!Z znM+r~Nmo*QP(Htmj>hGMLa55zt(Ls-p^w94c^`~VOvo^BBI;>8ZBOGfL~vNm-f)qO z8=4-%11d8H3vaBu2Y2h-F*KboUM1j)nF^#Jyz}L2=xT3~!rASm?Dj*)PRMSTOP=7edq!d5Hk=Ho0=}Ch^bvy z(-o&rN(C5mEjKyg3=BfAWleULWdqZdKrxneO;aZ)W!1$Cvgd!G za_rGHBD0tgwo2Ipo%scBn*FXB5pj&Ut!~Q6i8)Iy;iADqt8aL)Qr?E^v$u>;C=7>B zjxV=b4#8$phHpD=LM*r?nS|4UCgw8#=Jom&0mW%mf_Tpe9!eLsrl?jtLL-t8vt?;ff_O4-{cf=MVuCcD<1!7Y zVasC|6N?f356VvahAfYQmQ|FPg|H;qSRW9!a?SgG(&*gOa!TH)CCUmg3qjj5DxN@4 zxKmzE^^nUdOqWt4bdgoN#tb(vky{{b(=t@x(KP2d0k002ov JPDHLkV1i+O=ac{d literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkHierarchyIcon.png.meta b/Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkHierarchyIcon.png.meta new file mode 100644 index 0000000..769808e --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkHierarchyIcon.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 9647a20347ff0494682ccccc9f1bc18d +labels: +- EntitasEntityLinkHierarchyIcon +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkWarnHierarchyIcon.png b/Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkWarnHierarchyIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..2ce3fe37d6f24de995f9656efdc7eb377d5e1986 GIT binary patch literal 890 zcmV-=1BLvFP)vsph6h*X zK7EP2tg|w2!oeE;;JF!*XAxi`5W7M=D?6u)gpoAH68_@0D3V1p3fL3(;Fc_B(HfHG zC~hE*0`}BBSe2!V_8^OGOw_W5Q$@Zd{%tQgtSpgfWmllg0v$McC8{i80_61hMhD4* zN{skfQgVR?oQuxGEpS;_3lvPBL6dm7F5@+@^$FOMAfYd`JCw~4?g>EK+uirvG?AG))1>b*1ljI!4nNz^&2_Pq=sYg2V*|qa^KhM(& zjxDcEAXhluz8CtsK?1>Kvp&PNV65awZ+LFl3h^1%T;J;~{g`%kL(FeVzn?TY$` z3ktq8rGp^(!ad;Xh3Y+%CmM?Fa}WVlf+g@~?rNIR0;xG*Wxck7jbOa@l7b;tU`{j7 zgMxWt`kCbYhcwvyIuM6kkY^TTWenHbvAkL>_`0NA=8Kv?7brGNMdp4CWElhLFa!ILlEkyK2pBE5UnEq?k%hQX$T9qHjhK;guXikx0vDWw~;AvU>U&A~rBvrT0k z_>s)=`tG9!-r`doj1MC8rxOM?ubib*Ny?9Trq&+%crID)YacNKt{etSCV?xezy~Qt zUj5%O$(dp-zbwNnLX)GB@;pp|eo-J>>WD(D(01$~Wd;ks3EX$h$Aadl<8m39cke_+eMXM&oyo~W&MiPHR|>JKlM8pVMk@` Qi~s-t07*qoM6N<$g0A9^ApigX literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkWarnHierarchyIcon.png.meta b/Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkWarnHierarchyIcon.png.meta new file mode 100644 index 0000000..b123d2d --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Images/EntitasEntityLinkWarnHierarchyIcon.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 8efbceefe59cd4553baf36a0ef025dc1 +labels: +- EntitasEntityLinkWarnHierarchyIcon +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasHeader.png b/Assets/Plugins/Entitas/Editor/Images/EntitasHeader.png new file mode 100644 index 0000000000000000000000000000000000000000..c3a6a24e129857302510074ea49c9c0c94a555c6 GIT binary patch literal 29121 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasHeader.png.meta b/Assets/Plugins/Entitas/Editor/Images/EntitasHeader.png.meta new file mode 100644 index 0000000..a93efd2 --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Images/EntitasHeader.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 65fb57b88da1f40c59682763366ab260 +labels: +- EntitasHeader +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 1 + mipBias: -100 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsHierarchyIcon.png b/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsHierarchyIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..dc761850eef1447bee3c919818d4b1b911aab844 GIT binary patch literal 1175 zcmV;I1Zew-P)o&0+3$ZDbI>y%Z)I{1_DI_Pg#V$pOP!%oY5TwuuQatpKkoI7( zU}&M98pY}fsW%bpr8h_lM|m}H3Ep%o`s)94y+AwMGw18*06#L zt?pay8Z#F->-bDLJGkMqz!T6sh$>4w5I}ss&RU#`W8VB?0y}qXM{^>97Je7px;>9V zp@3`Gr!YO6MZ6I9_LVHDUs;uaV|kpguXgTe$I(Lv^ludASeT*VvlzW}C5*&b<^>&? z+5%L88kvj9#oQCuC-r*} zM|uuwSB0U$T260rT$g=s-wz`^-TxW7-+#}yHgx7JYv|W5wQny@^d9rAU1Q<)_Z$v6 zS>=n~`Yl$2Wp^P0&E-I=#82s8s@6unKd%{9LgJ;VsR?F~F75TC&>2;bO#-Ao*n__Q zQ&sC%dt0s;&njR6JC^?%BlV(@`XI^YfTt?c6tB$J3$y1R5I~ z@rv^@-tFwrF59wX{?VouGmDQ~3~>>JSWf813<2vCAunH85MeUj!fBdOS?&yzKv~`kPc*GTzC=?d( z>+jP$% zO!YymceuAt2cZc(F?Z+h+{$YK?()mVMDsIjgk!!IHA~H{{ewb)6H8H>nH#K002ovPDHLkV1h$vGlc*E literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsHierarchyIcon.png.meta b/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsHierarchyIcon.png.meta new file mode 100644 index 0000000..7ffc050 --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsHierarchyIcon.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 0ee737a83aa9b4b56b2058b2b651ff0a +labels: +- EntitasSystemsHierarchyIcon +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 256 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsWarnHierarchyIcon.png b/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsWarnHierarchyIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd2f319fb9aca4ef63d295e6295be25ef1ff031 GIT binary patch literal 926 zcmV;P17ZA$P)TWds3 zG?5N0G^ut$MU$T2_g=5<-Mx4BO50y@xtH(Wd*A;*CtwM;h*1pU4g_ZC$-qT|-lOUx zYP2rXy95V&_=8O`O*9J#3&sgzoTHtKO@>wyV;z6-oCGQ3Gy+JChwzM+Idq4-xQZv} zL;$Jv5O!&qKyOgS31)THa6-)Y$-lj24tW>dDen%zXMsLw9z@6zqK!HGycoy)s0!?V z11eSZFviD#k+VSh5-@oYHbP8$Su)ThtAIB!`RN2K1V2WcAjz&!K{$wI)4uPAdgg5MB$+#XS*?TMGi)^@232~ChVOrx z_N{IJ+XX*Or`^^Lu=d7JW8qee6@X%Ztl-G<8iAu~n3la3rY+1VhV9^ZIsOF`WNGIh zyoCrA7^z zc(lY>Ksx9JU@g~P`)Ttx!*!nPKhrs7gH-St;ZGX@I10K*O3TVp^ZU6uP07*qoM6N<$g7Z$J A1ONa4 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsWarnHierarchyIcon.png.meta b/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsWarnHierarchyIcon.png.meta new file mode 100644 index 0000000..b2d2338 --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Images/EntitasSystemsWarnHierarchyIcon.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 8fecc08fe51ec4ba990bfd58e4ed14b5 +labels: +- EntitasSystemsWarnHierarchyIcon +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Plugins.meta b/Assets/Plugins/Entitas/Editor/Plugins.meta new file mode 100644 index 0000000..09d33e1 --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24867a2e7b4c7194b87342e3dada0a74 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Editor/Plugins/Entitas.CodeGeneration.Plugins.dll b/Assets/Plugins/Entitas/Editor/Plugins/Entitas.CodeGeneration.Plugins.dll new file mode 100644 index 0000000000000000000000000000000000000000..d58cf515d4ae1aa67758ad632fcc329985ba8796 GIT binary patch literal 109056 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Editor/Plugins/Entitas.VisualDebugging.CodeGeneration.Plugins.dll.meta b/Assets/Plugins/Entitas/Editor/Plugins/Entitas.VisualDebugging.CodeGeneration.Plugins.dll.meta new file mode 100644 index 0000000..fa770fc --- /dev/null +++ b/Assets/Plugins/Entitas/Editor/Plugins/Entitas.VisualDebugging.CodeGeneration.Plugins.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 23e0256869769d74f9c11b6c582d67db +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Entitas.CodeGeneration.Attributes.dll b/Assets/Plugins/Entitas/Entitas.CodeGeneration.Attributes.dll new file mode 100644 index 0000000000000000000000000000000000000000..127006beac81f494a542ba4e8c12091fdcab1d9f GIT binary patch literal 5120 zcmeHLU2Ggz6+Sbw-mdLryG|jAmAH)S#58WZY+FYyA<*5do#4oS_%BhL$eG=}*$kSU zS!QM(yONO+X$4XdJn_OyrHYrfv>=dDkeUY~frL~fgb*)Oio^qm7eM6+wGH1nGoBqg z5fKs(NZ~qj=6vUzd+xd4y)$z+GtYmA3?jdc^G4N<@2L$wt;MkKu0OD&rz5h^|L!0kQ=_++ke-9XYzqDw_T@asTQTNw&Z zG>_Hl2EihQUcMktWvvT%6D!eSoM> zH#U(WGuDMjorYM}G(?{?1aoPKdeRV-WyT)S_wz{Ev4^7(VK@*O{Gwdt8aG@$$ zUdBjG+jd@$Xibjm(LGBm+LoTBeLBmV)Y2cMSCKwTxAYfad4pJvie3}>vBs7@k>7w9 zDdU{XfQHB9aqWgaB)Wz{j?oQ$7!~W{dr5pfF?t`qA&g~+@ArZp027?$yAqiLdyM`e zzFx$B4d_SW>%-jG_dB2?m}5@Rw#P@57%*SX=vgG0A$iM3xIe@*- zXh!;df)PgeyhI*|(cu{F72jWCl&4WTPES%c+lTwgR(h{<^pSoR@*K@VP8!FPn2K>0F(r7n$2x?Vm91fkJYhUb^Cqv# z%LkkK0%}}M(0TCgCg>t~-%Ozly^^3hc>i94Z1DcNplitKg7=>$zASkE`404}9q6|S z3U@{J@95W0e@i0I%Z}B+Bk!$>$hUdZgF}`U6$%>IV|`P+AL)gH4z3CX16;BFgwab) z?D7G~EDb{TVRf2%fu_XrCCL5sSH*iMO3^A`4GJfd5FGGRT`nUs6mgx`*rBo>6+-TiTx%$O~1kO#xZ|{{D2IN^(y2C zREPYKUK9N$S|pas?P)^M*n%5pnxL@TPNbs&4H9F?{#yY^Q)sfd_@ZlZZF2&-!<0eFPtnnJRcaW{s)u)V&ii)D@;C14JMCD_d0$<&*SpE)EgYmO zzHe=GZ3`W&N=xw+Pi{L8a;^~FE^;RnZlG4buk z-W~nrkKaE?8B^18hDllvlz{<}pX@PpEwAUUzj$F~aQxOc`GZdxd~5K*F|q@D^lVPg z=8fzSu6|mSP4Yg*)x7IF5I9rsITm+fmxEMu(OIWxkM5 z#}C^@oX4^HRs(|}$u*t}D`mcOE63+T)}LqHWbMwjeSVBQt5wgRaGV*-cBA){QnJ<9 zd;2JI$VvRpEdRIsZ!o|oCY=9?wszJNosdg+v2z^%b~s-qdNcJ2ds82Wb%hpb6>^dm zpiSYI)-3Q8F7rmSL>&N`f-`$>z4ZOQkX~jALsUfRHKJwT&qbuZe=`wlZKZ0{8 z(Gt8CtO5KMg^2TjqV~hg9wgOJQ-~-V_U2tO{TXFxR7(EFsRo_saa5!w@e>#wFFwiB z-Z74e*b<)TZtMzTeMEO_DdEh~y$H3ABA#axO00|89q?u0Jgks!Qam=i7V;EvR`GCB zQFI2ED?Pe%E#mwY;*V!oqmE?cJ`H5#-!+fQJf_jBDWh<%Hf>0Jldd41rn%V8 zY;jH7%rpA$*ETM^&0|cSUkCh#Sn-|gb$MeB2`6>tx&mGTM7A(z2eUEn*$-Xs-)2Vt OXW*Q;e<`@1XZ|l(3$AYf literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Entitas.CodeGeneration.Attributes.dll.meta b/Assets/Plugins/Entitas/Entitas.CodeGeneration.Attributes.dll.meta new file mode 100644 index 0000000..88a52a5 --- /dev/null +++ b/Assets/Plugins/Entitas/Entitas.CodeGeneration.Attributes.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 29176174d3b6a5e419407ecf91fc7772 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Entitas.Unity.dll b/Assets/Plugins/Entitas/Entitas.Unity.dll new file mode 100644 index 0000000000000000000000000000000000000000..b2e41ecfa222aa1473e3d2eb5b96c5049b4870ba GIT binary patch literal 4608 zcmeHKU2GiH75?t*db8d%CfNWX;H0w-sWwj7E@@g?6za9Tj^oOSLu@C3hB~wB>1JSd zW|^5y<4{VF3RNB|MSZA{Kt*aRRjN=0C=wB*uT?9Rmp)WTNL7$3B&5*xwN-`tojWsL z+eFYvytLvvbM8I=KX=aA$&p7dBLg7IXL%X8%3W4X!%qem$sYLPn*+Gg|90uBntr=9 zch(8bPT;o!t8F$d&+{X*VVgnMGab*Y&&--_f6=aN+ElnVF@0iWz3_ z8%q4#9sH>0=Y!Nwnbj=}4;kB@7U5wpcuX;vGHYG%HxdM0;$_yXFucRYP@Ozy_(iZ==+{4TevPdkeXY?77_V{#d|gFXcpcZ1!7YDygE}$+`WN zYUQid2lhWegmrcaU!m%*9{_hzX|tSXqrmZ6p-4!XzE8)y=4bIsR!gpO*W~WkkRV?CSSi|G^=fi7|nm|k=ILPfe(}D3pjyC zRSu4Zmoyy1q}qxLG%$es)ewqwIYOCVsAWklhS9LBzz0s#xYYgp3fV`cSt!EV|WiuVwV%_ zeVz?m)!4K6vl8sD3HED^eWY}e-!VF3^060>`R=WVc%Q-g#LVvyc`g%X~`i|R|X zP7N*jW!$fIr|<{$HPWxELzu!fo-5dh9};fGCBl2~6T)41jg=5Olt5F%nuepyhG8_wt$)(r~8_aBpwCPO5nvrTE0H99d8-{)G!h`7TJ9AsVxW7feV{$kg)zlo{Q ziR0sFhfP0lod#NVwBT878}ptMElqeW$FniJ6h?NtGVTX9j@zzng*NJTquXj(4c8ux z*e{K4WMkrdWP73Gdp**)-|jfB6_H3y>%2aNJ^t~o7ddTP#K>wmF1_}+(|+ru6?p7M z%=vL!V!`TkT&JlGO@$A4ohTB%jt7%=G(m&W(zN3}!5m!KG{p)lI;F~@>m~^?m&kIw zn6EWf5@0G#yCYGf(v187M|{s8v(H-R9KRc+7SqDi9joQ}VdON!l$7Mfno0h4Flz_r zoTeQnbz{W50HWi*$5b%MlFu|Ax0{i^fmRQl@kV?3O12nXTokLmXM0q%qaHHj)$K3} z{3ZCEg^4G-mQ*thHclT?aecHK8V~_lqZ9BD@!gO3ZclUf@B~cmA)&=N8NlYgNUljN z=G(+gYWRf6lz@?2vC^fF)t0Dl-CVy#4-tJVGKP?+fcO&6;=O^c=Eac;*P&IHoYl5h zq6|x%g2%{{Y(heleJc5hMvJF5X*0C?IQJ&4RWQFQ&NB9BpEkbB7^EgrBZ)2c|M3Xf zquXwlRhbprqf6g;>A7cKzU{%oFaGn#9}T_oHxC&TDr+j0?<3f9M-G{R!NEbH3Ge!;pOE|voL4ec`~p%M}2RlH|EX;{`W#fxpY?jgK4F! zAnBPYwsudycVg-SCrjORk4Q7>No3o)O@+I>n>N;cL9Mm*|A)zMFuzBDi)(X}YXGV@ zp^MyMKBsEH>GU#)pEeE>?2q$oyrzyVQM~P1n9*V!Z@!Ra*KayY0^=l*{^u9-W z5_KLGty=7ZL%Qp1+Vpg1h}6CMBYBQoi`0-EX6f$qiN)*H>@~Vnj7fT0W=iWOmR`^@ zRpuT49bk8|2H2;6JyXwh_F~A66+4|ZeoV?%_18-(dxEk7r5*Ng97~mb-g|&Lzm}BF zCepGVV|Q7vcs_uYOsAzxk$6VLv$MjfB-4c7jyk?+>dRblF-~tC&Mk?sg|mzikl3cR zubG4{RS@YkR>5Q@{dYbO=sb_nmd`l4dV;ObwwI^m418Vdj4}_Ihiz8Z)l>e{^r-sz X`m8Eo#{Xv={KjWx@N+x=OBMJJ9Lgf^ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Entitas.Unity.dll.meta b/Assets/Plugins/Entitas/Entitas.Unity.dll.meta new file mode 100644 index 0000000..7795b5b --- /dev/null +++ b/Assets/Plugins/Entitas/Entitas.Unity.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 3326eba764662ea4b8e1b7fb33b61dc3 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Entitas.VisualDebugging.Unity.dll b/Assets/Plugins/Entitas/Entitas.VisualDebugging.Unity.dll new file mode 100644 index 0000000000000000000000000000000000000000..68e0de0cf9b1231d7d1a644360d19d3737978fcf GIT binary patch literal 14336 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

    YbHBf#(B<+l{GbBC&b z@zG6m37_S5;xllJ@UE9BeZ5!VmnU=xPwfT)d+7kMB%bZ<0i6WguK(8semn3V7x`Vx z{0qOom5WooM6K|804->ButROfzQwy)61&$Z_A9yCb`y2TEU01TVm( z1)p+|;+=2oGMc_GGTnHJr~lSq=R^#!L-G^ZyyYHP_i0%4Ow6&9fNVEbcTx5bWV4V? z!Bg!^H-5=d{P1sMu7*61CMU8P_?||*92y5rh-7|ucc7;WQApuFDN^jo5b!bl=`nTT z8Ds`{4)1olpgWB}!a0Hc-v#M0>9-BuOhAGoF-FHBO(+BWdm8p-ui>*s_9Z`VrvCSQ zS|f4V2U{NeoJ2fv>XHZ)qg9L(#|*zOl0I87ejk$Ka;}+z=daffU4MV&Bd}Tjj;d-? Mp7Hzp|ECE251Hthga7~l literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Entitas.VisualDebugging.Unity.dll.meta b/Assets/Plugins/Entitas/Entitas.VisualDebugging.Unity.dll.meta new file mode 100644 index 0000000..bb611a1 --- /dev/null +++ b/Assets/Plugins/Entitas/Entitas.VisualDebugging.Unity.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 7850a6d4b7295b748974488a0e220ad4 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Entitas.dll b/Assets/Plugins/Entitas/Entitas.dll new file mode 100644 index 0000000000000000000000000000000000000000..c17a248a9854e48177510f2c2890d60edc7e203d GIT binary patch literal 47104 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Entitas/Entitas.dll.meta b/Assets/Plugins/Entitas/Entitas.dll.meta new file mode 100644 index 0000000..7e2420d --- /dev/null +++ b/Assets/Plugins/Entitas/Entitas.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 2733dcb2f616a38459abbda54e2b0106 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/Entitas.xml b/Assets/Plugins/Entitas/Entitas.xml new file mode 100644 index 0000000..51d9f8f --- /dev/null +++ b/Assets/Plugins/Entitas/Entitas.xml @@ -0,0 +1,538 @@ + + + + Entitas + + + + Use context.CreateEntity() to create a new entity and + entity.Destroy() to destroy it. + You can add, replace and remove IComponent to an entity. + + + Occurs when a component gets added. + All event handlers will be removed when + the entity gets destroyed by the context. + + + Occurs when a component gets removed. + All event handlers will be removed when + the entity gets destroyed by the context. + + + Occurs when a component gets replaced. + All event handlers will be removed when + the entity gets destroyed by the context. + + + Occurs when an entity gets released and is not retained anymore. + All event handlers will be removed when + the entity gets destroyed by the context. + + + Occurs when calling entity.Destroy(). + All event handlers will be removed when + the entity gets destroyed by the context. + + + The total amount of components an entity can possibly have. + + + Each entity has its own unique creationIndex which will be set by + the context when you create the entity. + + + The context manages the state of an entity. + Active entities are enabled, destroyed entities are not. + + + componentPools is set by the context which created the entity and + is used to reuse removed components. + Removed components will be pushed to the componentPool. + Use entity.CreateComponent(index, type) to get a new or + reusable component from the componentPool. + Use entity.GetComponentPool(index) to get a componentPool for + a specific component index. + + + The contextInfo is set by the context which created the entity and + contains information about the context. + It's used to provide better error messages. + + + Automatic Entity Reference Counting (AERC) + is used internally to prevent pooling retained entities. + If you use retain manually you also have to + release it manually at some point. + + + Adds a component at the specified index. + You can only have one component at an index. + Each component type must have its own constant index. + The prefered way is to use the + generated methods from the code generator. + + + Removes a component at the specified index. + You can only remove a component at an index if it exists. + The prefered way is to use the + generated methods from the code generator. + + + Replaces an existing component at the specified index + or adds it if it doesn't exist yet. + The prefered way is to use the + generated methods from the code generator. + + + Returns a component at the specified index. + You can only get a component at an index if it exists. + The prefered way is to use the + generated methods from the code generator. + + + Returns all added components. + + + Returns all indices of added components. + + + Determines whether this entity has a component + at the specified index. + + + Determines whether this entity has components + at all the specified indices. + + + Determines whether this entity has a component + at any of the specified indices. + + + Removes all components. + + + Returns the componentPool for the specified component index. + componentPools is set by the context which created the entity and + is used to reuse removed components. + Removed components will be pushed to the componentPool. + Use entity.CreateComponent(index, type) to get a new or + reusable component from the componentPool. + + + Returns a new or reusable component from the componentPool + for the specified component index. + + + Returns a new or reusable component from the componentPool + for the specified component index. + + + Returns the number of objects that retain this entity. + + + Retains the entity. An owner can only retain the same entity once. + Retain/Release is part of AERC (Automatic Entity Reference Counting) + and is used internally to prevent pooling retained entities. + If you use retain manually you also have to + release it manually at some point. + + + Releases the entity. An owner can only release an entity + if it retains it. + Retain/Release is part of AERC (Automatic Entity Reference Counting) + and is used internally to prevent pooling retained entities. + If you use retain manually you also have to + release it manually at some point. + + + Returns a cached string to describe the entity + with the following format: + Entity_{creationIndex}(*{retainCount})({list of components}) + + + Use context.GetGroup(matcher) to get a group of entities which match + the specified matcher. Calling context.GetGroup(matcher) with the + same matcher will always return the same instance of the group. + The created group is managed by the context and will always be up to date. + It will automatically add entities that match the matcher or + remove entities as soon as they don't match the matcher anymore. + + + Occurs when an entity gets added. + + + Occurs when an entity gets removed. + + + Occurs when a component of an entity in the group gets replaced. + + + Returns the number of entities in the group. + + + Returns the matcher which was used to create this group. + + + Use context.GetGroup(matcher) to get a group of entities which match + the specified matcher. + + + This is used by the context to manage the group. + + + This is used by the context to manage the group. + + + This is used by the context to manage the group. + + + Removes all event handlers from this group. + Keep in mind that this will break reactive systems and + entity indices which rely on this group. + + + Determines whether this group has the specified entity. + + + Returns all entities which are currently in this group. + + + Fills the buffer with all entities which are currently in this group. + + + Returns the only entity in this group. It will return null + if the group is empty. It will throw an exception if the group + has more than one entity. + + + A context manages the lifecycle of entities and groups. + You can create and destroy entities and get groups of entities. + The prefered way to create a context is to use the generated methods + from the code generator, e.g. var context = new GameContext(); + + + Occurs when an entity gets created. + + + Occurs when an entity will be destroyed. + + + Occurs when an entity got destroyed. + + + Occurs when a group gets created for the first time. + + + The total amount of components an entity can possibly have. + This value is generated by the code generator, + e.g ComponentLookup.TotalComponents. + + + Returns all componentPools. componentPools is used to reuse + removed components. + Removed components will be pushed to the componentPool. + Use entity.CreateComponent(index, type) to get a new or reusable + component from the componentPool. + + + The contextInfo contains information about the context. + It's used to provide better error messages. + + + Returns the number of entities in the context. + + + Returns the number of entities in the internal ObjectPool + for entities which can be reused. + + + Returns the number of entities that are currently retained by + other objects (e.g. Group, Collector, ReactiveSystem). + + + The prefered way to create a context is to use the generated methods + from the code generator, e.g. var context = new GameContext(); + + + The prefered way to create a context is to use the generated methods + from the code generator, e.g. var context = new GameContext(); + + + Creates a new entity or gets a reusable entity from the + internal ObjectPool for entities. + + + Destroys all entities in the context. + Throws an exception if there are still retained entities. + + + Determines whether the context has the specified entity. + + + Returns all entities which are currently in the context. + + + Returns a group for the specified matcher. + Calling context.GetGroup(matcher) with the same matcher will always + return the same instance of the group. + + + Adds the IEntityIndex for the specified name. + There can only be one IEntityIndex per name. + + + Gets the IEntityIndex for the specified name. + + + Resets the creationIndex back to 0. + + + Clears the componentPool at the specified index. + + + Clears all componentPools. + + + Resets the context (destroys all entities and + resets creationIndex back to 0). + + + Removes all event handlers + OnEntityCreated, OnEntityWillBeDestroyed, + OnEntityDestroyed and OnGroupCreated + + + A JobSystem calls Execute(entities) with subsets of entities + and distributes the workload over the specified amount of threads. + Don't use the generated methods like AddXyz() and ReplaceXyz() when + writing multi-threaded code in Entitas. + + + Systems provide a convenient way to group systems. + You can add IInitializeSystem, IExecuteSystem, ICleanupSystem, + ITearDownSystem, ReactiveSystem and other nested Systems instances. + All systems will be initialized and executed based on the order + you added them. + + + Creates a new Systems instance. + + + Adds the system instance to the systems list. + + + Calls Initialize() on all IInitializeSystem and other + nested Systems instances in the order you added them. + + + Calls Execute() on all IExecuteSystem and other + nested Systems instances in the order you added them. + + + Calls Cleanup() on all ICleanupSystem and other + nested Systems instances in the order you added them. + + + Calls TearDown() on all ITearDownSystem and other + nested Systems instances in the order you added them. + + + Activates all ReactiveSystems in the systems list. + + + Deactivates all ReactiveSystems in the systems list. + This will also clear all ReactiveSystems. + This is useful when you want to soft-restart your application and + want to reuse your existing system instances. + + + Clears all ReactiveSystems in the systems list. + + + A ReactiveSystem calls Execute(entities) if there were changes based on + the specified Collector and will only pass in changed entities. + A common use-case is to react to changes, e.g. a change of the position + of an entity to update the gameObject.transform.position + of the related gameObject. + + + Specify the collector that will trigger the ReactiveSystem. + + + This will exclude all entities which don't pass the filter. + + + Activates the ReactiveSystem and starts observing changes + based on the specified Collector. + ReactiveSystem are activated by default. + + + Deactivates the ReactiveSystem. + No changes will be tracked while deactivated. + This will also clear the ReactiveSystem. + ReactiveSystem are activated by default. + + + Clears all accumulated changes. + + + Will call Execute(entities) with changed entities + if there are any. Otherwise it will not call Execute(entities). + + + Returns all entities matching the specified matcher. + + + Creates a new entity and adds copies of all + specified components to it. + If replaceExisting is true it will replace exisintg components. + + + Creates a Collector for this group. + + + A Collector can observe one or more groups from the same context + and collects changed entities based on the specified groupEvent. + + + Returns all collected entities. + Call collector.ClearCollectedEntities() + once you processed all entities. + + + Returns the number of all collected entities. + + + Creates a Collector and will collect changed entities + based on the specified groupEvent. + + + Creates a Collector and will collect changed entities + based on the specified groupEvents. + + + Activates the Collector and will start collecting + changed entities. Collectors are activated by default. + + + Deactivates the Collector. + This will also clear all collected entities. + Collectors are activated by default. + + + Returns all collected entities and casts them. + Call collector.ClearCollectedEntities() + once you processed all entities. + + + Clears all collected entities. + + + Returns the only entity in the collection. + It will throw an exception if the collection doesn't have + exactly one entity. + + + Returns the only entity in the collection. + It will throw an exception if the collection doesn't have + exactly one entity. + + + Adds copies of all specified components to the target entity. + If replaceExisting is true it will replace exisintg components. + + + Automatic Entity Reference Counting (AERC) + is used internally to prevent pooling retained entities. + If you use retain manually you also have to + release it manually at some point. + UnsafeAERC doesn't check if the entity has already been + retained or released. It's faster, but you lose the information + about the owners. + + + Automatic Entity Reference Counting (AERC) + is used internally to prevent pooling retained entities. + If you use retain manually you also have to + release it manually at some point. + SafeAERC checks if the entity has already been + retained or released. It's slower, but you keep the information + about the owners. + + + Base exception used by Entitas. + + + Implement this interface if you want to create a component which + you can add to an entity. + Optionally, you can add these attributes: + [Unique]: the code generator will generate additional methods for + the context to ensure that only one entity with this component exists. + E.g. context.isAnimating = true or context.SetResources(); + [MyContextName, MyOtherContextName]: You can make this component to be + available only in the specified contexts. + The code generator can generate these attributes for you. + More available Attributes can be found in Entitas.CodeGeneration.Attributes/Attributes. + + + Implement this interface if you want to create a system which should + execute cleanup logic after execution. + + + Implement this interface if you want to create a system which should be + executed every frame. + + + Implement this interface if you want to create a system which should be + initialized once in the beginning. + + + This is the base interface for all systems. + It's not meant to be implemented. + Use IInitializeSystem, IExecuteSystem, + ICleanupSystem or ITearDownSystem. + + + Implement this interface if you want to create a system which should + tear down once in the end. + + + Creates a Collector. + + + Creates a Collector. + + + A ReactiveSystem calls Execute(entities) if there were changes based on + the specified Collector and will only pass in changed entities. + A common use-case is to react to changes, e.g. a change of the position + of an entity to update the gameObject.transform.position + of the related gameObject. + + + Specify the collector that will trigger the ReactiveSystem. + + + This will exclude all entities which don't pass the filter. + + + Activates the ReactiveSystem and starts observing changes + based on the specified Collector. + ReactiveSystem are activated by default. + + + Deactivates the ReactiveSystem. + No changes will be tracked while deactivated. + This will also clear the ReactiveSystem. + ReactiveSystem are activated by default. + + + Clears all accumulated changes. + + + Will call Execute(entities) with changed entities + if there are any. Otherwise it will not call Execute(entities). + + + diff --git a/Assets/Plugins/Entitas/Entitas.xml.meta b/Assets/Plugins/Entitas/Entitas.xml.meta new file mode 100644 index 0000000..5c8a4d4 --- /dev/null +++ b/Assets/Plugins/Entitas/Entitas.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8e672f63cd68c5c449c21e1c3c4158e4 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/EntitasUpgradeGuide.md b/Assets/Plugins/Entitas/EntitasUpgradeGuide.md new file mode 100644 index 0000000..8919b18 --- /dev/null +++ b/Assets/Plugins/Entitas/EntitasUpgradeGuide.md @@ -0,0 +1,653 @@ +Entitas Upgrade Guide +===================== + +Entitas provides automated migration tools to help upgrading to new versions. +You can apply automatic migrations in Unity by opening the Entitas Migration Window +`Tools > Entitas > Migrate...` + +This document contains checklists for every release with breaking changes. + +Entitas 0.47.2 upgrade guide +============================ + +#### Breaking changes + +Apply Migration 0.47.2 to automatically rename the changed keys your properties files. + +The following keys changed from: + +- CodeGenerator.SearchPaths +- CodeGenerator.Plugins +- CodeGenerator.PreProcessors +- CodeGenerator.DataProviders +- CodeGenerator.CodeGenerators +- CodeGenerator.PostProcessors +- CodeGenerator.CLI.Ignore.UnusedKeys or Ignore.Keys + +to: + +- Jenny.SearchPaths +- Jenny.Plugins +- Jenny.PreProcessors +- Jenny.DataProviders +- Jenny.CodeGenerators +- Jenny.PostProcessors +- Jenny.Ignore.Keys + +--- + +Entitas 0.46.0 upgrade guide +============================ + +#### Breaking changes + +Removed methods marked obsolete in 0.42.0 from April 2017 +- `context.CreateCollector(IMatcher matcher, GroupEvent groupEvent)` +- `new Context(int totalComponents, int startCreationIndex, ContextInfo contextInfo)` +- `context.DestroyEntity(TEnity entity)` + +#### After you installed + +First, edit the file `Generated/Feature.cs` and comment or delete the lines with compiler errors. + +Then, run auto-import to use the new DesperateDevs.CodeGeneration.Plugins and generate. + +Entitas.properties can be named differently now. By default it will be called +Preferences.properties. Additionally, you can delete User.properties or rename it +to Xyz.userproperties. If this file doesn't exist, it will automatically be generated for you. +You can have multiple properties and userproperties files now, e.g. +Preferences.properties and Roslyn.properties. In Unity it will automatically find and use +the first file. When using the Code Generator CLI (called Jenny now) you can explicitly +specify files like this + +``` +// will find and use the first file +$ jenny gen + +// specify a file +$ jenny gen Roslyn.properties + +// optionally specify an other userproperties +jenny gen Roslyn.properties My.userproperties +``` + +--- + +Entitas 0.45.0 upgrade guide +============================ + +#### Breaking changes + +Use the command line tool `MigrationAssistant.exe` and apply Migration 0.45.0 to +automatically rename the changed keys in Entitas.properties + +`MigrationAssistant.exe 0.45.0 path/to/project` + +The following keys in Entitas.properties changed from: + +- Entitas.CodeGeneration.CodeGenerator.SearchPaths +- Entitas.CodeGeneration.CodeGenerator.Plugins +- Entitas.CodeGeneration.CodeGenerator.DataProviders +- Entitas.CodeGeneration.CodeGenerator.CodeGenerators +- Entitas.CodeGeneration.CodeGenerator.PostProcessors +- Entitas.CodeGeneration.CodeGenerator.CLI.Ignore.UnusedKeys + +to: + +- CodeGenerator.SearchPaths +- CodeGenerator.Plugins +- CodeGenerator.DataProviders +- CodeGenerator.CodeGenerators +- CodeGenerator.PostProcessors +- CodeGenerator.CLI.Ignore.UnusedKeys + +The default plugins are now in folder called `Entitas` instead of `Default`. Please update +the searchPaths in Entitas.properties. +`Entitas.exe` is now uppercase with capital E + +--- + +Entitas 0.42.0 upgrade guide +============================ + +#### Breaking changes +- Removed Entitas.Blueprints.Unity.* +- Changed ReactiveSystem.GetTrigger method signature +- Marked obsolete: `context.DestroyEntity(entity)`. Use `entity.Destroy()` instead +- Marked obsolete: `context.CreateCollector(matcher, event)`, use new `context.CreateCollector(triggerOnEvent)` when you need `.Removed` or `.AddedOrRemoved` (e.g. `GameMatcher.View.Removed()`) + +#### After you installed +- Removed Entitas.Blueprints.Unity.* + - Remove all Entitas.Blueprints.Unity.* related code + - Remove BinaryBlueprints from your project. Consider using extension methods as described here instead https://github.com/sschmid/Entitas-CSharp/issues/390 + - Remove from Entitas.properties: + - Entitas.Blueprints.CodeGeneration.Plugins + - Entitas.Blueprints.CodeGeneration.Plugins.BlueprintDataProvider + - Entitas.Blueprints.CodeGeneration.Plugins.BlueprintsGenerator + +- Changed ReactiveSystem.GetTrigger() method signature + - find and replace `protected override Collector` -> `protected override ICollector` + +- Generate + +- Marked obsolete: `context.DestroyEntity(entity)`. Use `entity.Destroy()` instead +- Marked obsolete: `context.CreateCollector(matcher, event)`, use new `context.CreateCollector(triggerOnEvent)` when you need `.Removed` or `.AddedOrRemoved` (e.g. `GameMatcher.View.Removed()`) + +--- + +Entitas 0.41.0 upgrade guide +============================ + +#### Breaking changes +In order to deploy Entitas as Dlls which enables 3rd party Addons and the extendable command line code generator the projects have been restructured. This restructuring has an impact on namespaces. + +#### Before you install +- You're fine - nothing to do for you :heart: + +#### After you installed +- Apply Migrations 0.41.0-1 +- Apply Migrations 0.41.0-2 +- Apply Migrations 0.41.0-3 + +These migrations should update most of the namespaces. Depending on which features of Entitas you have used there might be a chance that not all namespaces have been updated. In this case please fix the remaining namespaces manually. + +Entitas.properties keys have been updated to support the latest code generator. Please open Entitas.properties in your project root and make sure the keys are updated. Here's an example from Match One + +``` +Entitas.CodeGeneration.Project = Assembly-CSharp.csproj +Entitas.CodeGeneration.SearchPaths = Assets/Libraries/Entitas, Assets/Libraries/Entitas/Editor, /Applications/Unity/Unity.app/Contents/Managed +Entitas.CodeGeneration.Assemblies = Library/ScriptAssemblies/Assembly-CSharp.dll +Entitas.CodeGeneration.Plugins = Entitas.CodeGeneration.Plugins, Entitas.CodeGeneration.Unity.Editor, Entitas.VisualDebugging.CodeGeneration.Plugins, Entitas.Blueprints.CodeGeneration.Plugins +Entitas.CodeGeneration.DataProviders = Entitas.Blueprints.CodeGeneration.Plugins.BlueprintDataProvider, Entitas.CodeGeneration.Plugins.ComponentDataProvider, Entitas.CodeGeneration.Plugins.ContextDataProvider, Entitas.CodeGeneration.Plugins.EntityIndexDataProvider +Entitas.CodeGeneration.CodeGenerators = Entitas.Blueprints.CodeGeneration.Plugins.BlueprintsGenerator, Entitas.CodeGeneration.Plugins.ComponentContextGenerator, Entitas.CodeGeneration.Plugins.ComponentEntityGenerator, Entitas.CodeGeneration.Plugins.ComponentGenerator, Entitas.CodeGeneration.Plugins.ComponentsLookupGenerator, Entitas.CodeGeneration.Plugins.ContextAttributeGenerator, Entitas.CodeGeneration.Plugins.ContextGenerator, Entitas.CodeGeneration.Plugins.ContextsGenerator, Entitas.CodeGeneration.Plugins.EntityGenerator, Entitas.CodeGeneration.Plugins.EntityIndexGenerator, Entitas.CodeGeneration.Plugins.MatcherGenerator, Entitas.VisualDebugging.CodeGeneration.Plugins.ContextObserverGenerator, Entitas.VisualDebugging.CodeGeneration.Plugins.FeatureClassGenerator +Entitas.CodeGeneration.PostProcessors = Entitas.CodeGeneration.Plugins.AddFileHeaderPostProcessor, Entitas.CodeGeneration.Plugins.CleanTargetDirectoryPostProcessor, Entitas.CodeGeneration.Plugins.MergeFilesPostProcessor, Entitas.CodeGeneration.Plugins.NewLinePostProcessor, Entitas.CodeGeneration.Plugins.WriteToDiskPostProcessor, Entitas.CodeGeneration.Plugins.ConsoleWriteLinePostProcessor, Entitas.CodeGeneration.Unity.Editor.DebugLogPostProcessor +Entitas.CodeGeneration.TargetDirectory = Assets/Sources/ +Entitas.CodeGeneration.Contexts = Game, GameState, Input +Entitas.VisualDebugging.Unity.SystemWarningThreshold = 8 +Entitas.VisualDebugging.Unity.DefaultInstanceCreatorFolderPath = Assets/Editor/DefaultInstanceCreator/ +Entitas.VisualDebugging.Unity.TypeDrawerFolderPath = Assets/Editor/TypeDrawer/ +``` + +Explanation: +- Entitas.CodeGeneration.Project: Relative path to your project.csproj (when using Unity use `Assembly-CSharp.csproj`) +- Entitas.CodeGeneration.SearchPaths: The new code generator can be extended with 3rd party plugins. Specify all folders where plugin dlls can be found. Plugins may depend on UnityEngine or UnityEditor, if so please specify where those dlls can be found (Unity default on Mac: `/Applications/Unity/Unity.app/Contents/Managed` +- Entitas.CodeGeneration.Assemblies: One or more Dlls that contain your components +- Entitas.CodeGeneration.Plugins: One or more Code Generator Plugin Dlls or namespaces + +If all set up correctly DataProviders, CodeGenerators and PostProcessors can be set in Unity. + +The command line code generator currently doesn't support the following plugins: +- Entitas.Blueprints.CodeGeneration.Plugins (contains Blueprint DataProvider and CodeGenerator) +- Entitas.CodeGeneration.Unity.Editor (contains DebugLogPostProcessor) + +because they use Unity specific api. They will work as expected when generating from within Unity but don't work on the command line. + +To test the config for potential problems, please unzip Entitas-CodeGenerator.zip in the root folder of your project. + +--- + +### Note for Windows users +- Right-click Entitas-CodeGenerator.zip, open properties +- Check "Unblock" +- Hit Apply +- unzip + +--- + +``` +// skip mono on Windows +$ mono ./CodeGenerator/entitas.exe +Entitas Code Generator version 0.41.0 +usage: entitas new [-f] - Creates new Entitas.properties config with default values + entitas edit - Opens Entitas.properties config + entitas doctor - Checks the config for potential problems + entitas status - Lists available and unavailable plugins + entitas fix - Adds missing or removes unused keys interactively + entitas scan - Scans and prints available types found in specified assemblies + entitas dry - Simulates generating files without writing to disk + entitas gen - Generates files based on Entitas.properties + [-v] - verbose output + [-s] - silent output (errors only) +``` + +To check the config for potential problems please run +``` +$ mono ./CodeGenerator/entitas.exe doctor +``` + +The `doctor` command will show you the status and potential problems. Sometime you might get a warning like this: + +``` +- Could not resolve xyz.dll +``` + +This is just a warning. If no error is shown after running the `doctor` command, you can ignore those. All code generator plugins must be resolvable in order to be used. Use the `status` command to see available and unavailable plugins. This command helps you manage the plugins. Add or remove DataProviders, CodeGenerators or PostProcessors and check with `status` until you're happy. As usual, you can also use the Entitas Preferences Window in Unity to set up everything. + +If there are nor problems use the `gen` command to generate or use the green generate button in Unity as usual. + +--- + +Entitas 0.37.0 upgrade guide +============================ + +#### Breaking changes +Entitas went type-safe! This was a huge task and I'm happy to finally share this with you guys! +This feature makes Entitas safer and more managable in growing code bases and will eliminate certain kind of bugs. +This change breaks existing projects! It is possible to manually migrate existing projects but there is no special workflow +other than manually use find / replace to fix all compile errors. I use Entitas 0.37.0 in my current project (500+ systems) +and was able to migrate within less than two days. If you have less systems and components you should be able to migrate within one day. + +Reminder: If you're updating from versions < 0.36.0 you should update to 0.36.0 first. Be aware that existing Blueprints(Beta) are breaking +because of the renaming from `Pool` to `Context`. Existing Binary Blueprints have to be manually updated. + +If you're not sure if you should update you can wait another week. I plan to make a video to show how to upgrade existing projects. +After this you should be able to decide if you want to update or not. + +#### Before you install +- Rename `SingleEntityAttribute` to `UniqueAttribute` +- Change namespace of all attributes in CodeGenerator/Attributes to `Entitas.CodeGenerator.Api` +- Find / replace `using Entitas.CodeGenerator` to `using Entitas.CodeGenerator.Api` in all generated context attributes +- Find / replace `using Entitas.CodeGenerator;` to `using Entitas.CodeGenerator.Api;` in all generated components + +#### After you installed + +After installing Entitas 0.37.0 you most likely end up having lots of compiler errors. The 2 biggest issues are: +- Generated components +- Systems + +There migh also be other issues depending how you used Entitas before, but fixing the generated components and the systems +might already do most of the work. + +##### Problem 1 (Components): +The old generated components extend Entitas.Entity by using `partial class`. +The new version inherits Entitas.Entity to have a new entity type and to get rid of `partial class` to enable +having Entitas as a precompiled dll. + +##### Solution 1 (Components) +The goal is to update the generated components. I see 3 possible workflows to fix them: +1. Delete all components and generated components and use the EntitasLang DSL https://github.com/mzaks/ECS-Lang +2. Temporarily move all the logic (systems) out of your Unity project and delete the generated components. +After this there shouldn't be any compile errors anymore (if so, temporarily move them out if your Unity project). +Now you should be able to re-generate. After that, move all the files back to your Unity project. +3. Manually use find / replace in the generated components folder to migrate the components + +##### Problem 2 (Systems) +All reactive systems need to be updated to be type-safe. + +##### Solution 2 (Systems) +Manually use find / replace to migrate e.g. method signatures and other issues +Take a look at [Match-One AnimatePositionSystem.cs](https://github.com/sschmid/Match-One/blob/develop/Assets/Sources/Logic/View/Systems/AnimatePositionSystem.cs) +to see how the new reactive systems look like. + +##### Other issues +There might be other issues related to the type-safety. Rule of thumb: +- Every occurrences of `Entity` must be typed now, e.g. `GameEntity` +- Every occurrences of `Group` must be typed now, e.g. `IGroup` +- Every occurrences of `Context` must be typed now, e.g. `IContext` or `GameContext` if possible +- Every occurrences of `Collector` must be typed now, e.g. `Collector` +- Every occurrences of `Matcher` must be typed now, e.g. `Matcher.AllOf(...)` + +I recommend using find / replace on ceratin folders to fix those issues efficiently. + +--- + +Entitas 0.36.0 upgrade guide +============================ + +#### Breaking changes +The term `Pool` has been replaced with `Context`. This affects all classes that +contain the word pool. +`EntityCollector` has been renamed to `Collector` +`GroupEventType` has been renamed to `GroupEvent` + + +#### Before you install +- Rename `Pools.CreatePool()` to `Pools.CreateContext` +- Rename `Pool` to `Context` +- Rename `Pools` to `Contexts` +- Rename `Pools.SetAllPools()` to `Pools.SetAllContexts()` +- Rename `PoolAttribute` to `ContextAttribute` +- Rename `EntityCollector` to `Collector` +- Rename `GroupEventType` to `GroupEvent` +- Rename `GroupEventType.OnEntityAdded` to `GroupEvent.Added` +- Rename `GroupEventType.OnEntityRemoved` to `GroupEvent.Removed` +- Rename `GroupEventType.OnEntityAddedOrRemoved` to `GroupEvent.AddedOrRemoved` + +#### After you installed +- Use the command line tool `MigrationAssistant.exe` and apply Migration 0.36.0-2 +- Manually migrate all systems and fix compiler errors +- apply Migration 0.36.0-1 +- Ensure all code generator are selected and generate + +--- + +Entitas 0.35.0 upgrade guide +============================ + +#### Breaking changes +`IMatcher.Where()` has been removed. See #194 + +#### Before you install +- You're fine - nothing to do for you :heart: + +#### After you installed +- Fix all the errors where you used `matcher.Where()` + +--- + +Entitas 0.34.0 upgrade guide +============================ + +#### Breaking changes +`GroupObserver` has been renamed to `EntityCollector`. See #168 + +#### Before you install +- Rename `GroupObserver` to `EntityCollector` +- Rename `.CreateGroupObserver()` to `.CreateEntityCollector()` +- Rename `IGroupObserverSystem` to `IEntityCollectorSystem` +- Find & Replace `public EntityCollector groupObserver` with `public EntityCollector entityCollector` + +#### After you installed +- You're fine - nothing to do for you :heart: + +--- + +Entitas 0.33.0 upgrade guide +============================ + +#### Breaking changes +`IDeinitializeSystem` has been renamed to `ITearDownSystem`. See #164 + +#### Before you install +- Manually rename `IDeinitializeSystem` to `ITearDownSystem` + +#### After you installed +- You're fine - nothing to do for you :heart: + +--- + +Entitas 0.32.0 upgrade guide +============================ + +Use the command line tool `MigrationAssistant.exe` to automatically fix compile errors. +Entitas 0.32.0 introduces a new Pools class. Using the new PoolsGenerator will require +to update your existing project manually. You can still use the old Pools class in your +existing project if you want. If so, please use the OldPoolsGenerator instead of the new one. + +--- + +Entitas 0.30.0 upgrade guide +============================ + +Some code generators got renamed. Apply Migration 0.30.0 + +--- + +Entitas 0.29.0 upgrade guide +============================ + +Marked old PoolMetaData constructor obsolete. If you encounter compile errors +please apply Migration 0.26.0, open C# project and generate again. + +--- + +Entitas 0.28.0 upgrade guide +============================ + +If you're using Entitas with Unity, please open the Entitas preferences and make +sure that all your desired code generators are activated. +Due to some code generator renamings the ComponentIndicesGenerators inactive. + +The SystemsGenerator has been removed. Please use `pool.CreateSystem()` instead. + +--- + +Entitas 0.27.0 upgrade guide +============================ + +If you're using Entitas with Unity, please open the Entitas preferences and make +sure that all your desired code generators are activated. +Due to some code generator renamings the ComponentLookupGenerator and +the ComponentsGenerator are inactive. Activate them (if desired) and generate. + +--- + +Entitas 0.26.0 upgrade guide +============================ + +Use the command line tool `MigrationAssistant.exe` to automatically fix compile errors. +After that generate again. + +--- + +Entitas 0.24.0 upgrade guide +============================ + +To fix the compile errors after updating to Entitas 0.24.0, delete in `Pools.cs` + +```csharp +#if (UNITY_EDITOR) +var poolObserver = new Entitas.Unity.VisualDebugging.PoolObserver(_pool, ComponentIds.componentNames, ComponentIds.componentTypes, "Pool"); +UnityEngine.Object.DontDestroyOnLoad(poolObserver.entitiesContainer); +#endif +``` + +and generate again. + +--- + +Entitas 0.23.0 upgrade guide +============================ + +Entitas 0.23.0 changed and applied naming conventions. +Before updating to this version, follow these steps to prepare your project: + +#### Rename + + Pool.Count -> Pool.count + Group.Count -> Group.count + Properties.count -> Properties.count + +#### Find/Replace in generated folder + + ": AllOfMatcher " -> "" + ": base(new [] { index }) " -> "" + "static AllOfMatcher _matcher" -> "static IMatcher _matcher" + "public static AllOfMatcher" -> "public static IMatcher" + "new Matcher" -> "Matcher.AllOf" + +#### Delete + +In generated ...ComponentIds + + namespace Entitas { + public partial class XYZMatcher { + public Matcher(int index) { + } + + public override string ToString() { + return ComponentIds.IdToString(indices[0]); + } + } + } + +--- + +Entitas 0.22.0 upgrade guide +============================ + +Entitas 0.22.0 changed IReactiveSystem and IMultiReactiveSystem and renamed IStartSystem.Start to IInitializeSystem.Initialize. + +Use the command line tool `MigrationAssistant.exe` to automatically migrate IReactiveSystem. + +--- + +Entitas 0.19.0 upgrade guide +============================ + +Entitas 0.19.0 introduces a few breaking changes: + +Added new e.OnComponentReplaced and removed all *WillBeRemoved events. + +If you used `group.OnEntityWillBeRemoved`, you could replace it either with +```cs +_group.OnEntityRemoved += (group, entity, index, component) => { //... }; +``` +or with +```cs +_group.OnEntityUpdated += (group, entity, index, previousComponent, newComponent) => { // ...}; +``` +If your generated component extensions are not compiling, find/replace `WillRemoveComponent` with `//WillRemoveComponent` +to temporarily ignore the errors. + +IReactiveSystem.Execute takes List instead of Entity[]. Use the command line tool `MigrationAssistant.exe` to automatically migrate. + +``` +$ mono MigrationAssistant.exe +usage: +[-l] - print all available versions +[version] [path] - apply migration of version [version] to source files located at [path] + +$ mono MigrationAssistant.exe -l +0.18.0 - Migrates IReactiveSystem API +0.19.0 - Migrates IReactiveSystem.Execute + +// Example from Math-One example project, where all the systems are located in the Features folder +$ mono MigrationAssistant.exe 0.19.0 /Path/To/Project/Assets/Sources/Features +``` + +--- + +Entitas 0.18.0 upgrade guide +============================ + +Entitas 0.18.0 changes IReactiveSystem. To upgrade your source files, follow these steps +- Install Entitas 0.18.0 (which will result in compiler errors) +- Use the command line tool `MigrationAssistant.exe` to automatically migrate + +``` +$ mono MigrationAssistant.exe +usage: +[-l] - print all available versions +[version] [path] - apply migration of version [version] to source files located at [path] + +$ mono MigrationAssistant.exe -l +0.18.0 - Migrates IReactiveSystem API + +// Example from Math-One example project, where all the systems are located in the Features folder +$ mono MigrationAssistant.exe 0.18.0 /Path/To/Project/Assets/Sources/Features +``` + +--- + +Entitas 0.12.0 upgrade guide +============================ + +Entitas 0.12.0 generates prefixed matchers based on the PoolAttribute and introduces some +API changes. In your existing project with a Entitas version < 0.12.0 manually rename the +following classes and methods. + +## Before installing Entitas 0.12.0 + +#### Rename + + pool.CreateSystem() -> pool.CreateExecuteSystem() + +Now that you're prepared for integrating the latest version, delete your existing version +of Entitas, EntitasCodeGenerator and EntitasUnity. + +#### Delete + + Entitas + EntitasCodeGenerator + EntitasUnity + +## Install Entitas 0.12.0 + +#### Setup Entitas Preferences + + Open the Unity preference panel and select Entitas. Check and update the path to the folder where + the code generator will save all generated files. If you are using the PoolAttribute in your components, + add all custom pool names used in your application. Make sure that all existing custom PoolAttributes call + the base constructor with the same name as the class (without 'Attribute'). + If you are not using the PoolAttribute in your components, you can skip this process. + +```cs +using Entitas.CodeGenerator; + +public class CoreGameAttribute : PoolAttribute { + public CoreGameAttribute() : base("CoreGame") { + } +} +``` + +#### Code Generator + + Use the code generator and generate + +#### Update API + + Click the MenuItem "Entitas/Update API". All occurrences of the old Matcher will be updated + to the new version, which is prefixed based on the PoolAttribute. + +#### Delete + + Delete all custom PoolAttributes + +--- + +Entitas 0.10.0 upgrade guide +============================ + +Beside features, Entitas 0.10.0 includes lots of renaming. If your current Entitas +version is < 0.10.0, you might want to follow the next few simple renaming steps, +to speed up the integration of the latest version of Entitas. +In your existing project with a Entitas version < 0.10.0 manually rename the following +classes and methods. + +## Before installing Entitas 0.10.0 + +#### Rename + + EntityRepository -> Pool + EntityRepository.GetCollection() -> Pool.GetGroup() + + EntityCollection -> Group + EntityCollection.EntityCollectionChange -> Group.GroupChanged + + EntityRepositoryObserver -> GroupObserver + EntityRepositoryObserver.EntityCollectionEventType -> GroupObserver.GroupEventType + + IEntityMatcher -> IMatcher + IEntitySystem -> IExecuteSystem + AllOfEntityMatcher -> AllOfMatcher + EntityRepositoryAttribute -> PoolAttribute + IReactiveSubEntitySystem -> IReactiveSystem + ReactiveEntitySystem -> ReactiveSystem + +#### Delete + + EntityWillBeRemovedEntityRepositoryObserver -> DELETE + IReactiveSubEntityWillBeRemovedSystem -> DELETE + ReactiveEntityWillBeRemovedSystem -> DELETE + +Now that you're prepared for integrating the latest version, delete your existing version +of Entitas, EntitasCodeGenerator and ToolKit. + +#### Delete + + Entitas + EntitasCodeGenerator + ToolKit (unless you use classes from ToolKit. The new version of Entitas doesn't depend on ToolKit anymore) + + +## Install Entitas 0.10.0 + +#### Fix remaining issues + + IReactiveSubEntityWillBeRemovedSystem + - Consider implementing ISystem & ISetPool and use group.OnEntityWillBeRemoved += foobar; + +#### Code Generator + + Use the code generator and generate diff --git a/Assets/Plugins/Entitas/EntitasUpgradeGuide.md.meta b/Assets/Plugins/Entitas/EntitasUpgradeGuide.md.meta new file mode 100644 index 0000000..4936369 --- /dev/null +++ b/Assets/Plugins/Entitas/EntitasUpgradeGuide.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 215bbb6ffba38d64ea0e2821628dd20d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/LICENSE.txt b/Assets/Plugins/Entitas/LICENSE.txt new file mode 100644 index 0000000..97175fb --- /dev/null +++ b/Assets/Plugins/Entitas/LICENSE.txt @@ -0,0 +1,22 @@ +The MIT License + +Copyright (c) 2014 - 2018 Simon Schmid + + +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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +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. diff --git a/Assets/Plugins/Entitas/LICENSE.txt.meta b/Assets/Plugins/Entitas/LICENSE.txt.meta new file mode 100644 index 0000000..bda16dd --- /dev/null +++ b/Assets/Plugins/Entitas/LICENSE.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4dbed025e0f8f3d40ac1843618048915 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Entitas/README.md b/Assets/Plugins/Entitas/README.md new file mode 100644 index 0000000..f61bad5 --- /dev/null +++ b/Assets/Plugins/Entitas/README.md @@ -0,0 +1,202 @@ +

    + Entitas +

    + +

    + + Join the chat at https://gitter.im/sschmid/Entitas-CSharp + + Twitter Follow Me + + Twitter Follow Me + + Build Status + + Latest release +

    + +

    + Entitas is free, but powered by + + your donations + +

    + +Entitas - The Entity Component System Framework for C# and Unity +================================================================ + +Entitas is a super fast Entity Component System Framework (ECS) specifically made for C# and Unity. Internal caching and blazing fast component access makes it second to none. Several design decisions have been made to work optimal in a garbage collected environment and to go easy on the garbage collector. Entitas comes with an optional code generator which radically reduces the amount of code you have to write and [makes your code read like well written prose.][clean-coders] + +

    + + CSharp + + Unity3d + + Unite Europe 2015 + + Unite Europe 2016 + + Wooga + + Gram Games.png +

    + +--- + +### **[» Download](#download-entitas)** +### **[» Documentation][documentation]** +### **[» Ask a question][issues-new]** +### **[» Wiki and example projects][wiki]** +### **[» #madeWithEntitas][wiki-games-and-examples]** + +--- + +Video Tutorials & Unity Unite Talks +================= + +| Entitas ECS Unity Tutorial | Entitas ECS Unity Tutorial | Entity system architecture with Unity | ECS architecture with Unity by example | +|:---------------------------------:|:---------------------------------:|:--------------------------------------------------------------------:|:--------------------------------------------------------------------:| +| [![Shmup1][shmup1-thumb]][shmup1] | [![Shmup2][shmup2-thumb]][shmup2] | [![Unite 15][unite15-thumb]][unite15] | [![Unite 16][unite16-thumb]][unite16] | +| Setup & Basics | Git & Unit Tests | [» Open the slides on SlideShare: Unite Europe 2015][unite15-slides] | [» Open the slides on SlideShare: Unite Europe 2016][unite16-slides] | + + +First glimpse +============= + +The optional [code generator][wiki-code-generator] lets you write code that is super fast, safe and literally screams its intent. + +```csharp +public static GameEntity CreateRedGem(this GameContext context, Vector3 position) { + var entity = context.CreateEntity(); + entity.isGameBoardElement = true; + entity.isMovable = true; + entity.AddPosition(position); + entity.AddAsset("RedGem"); + entity.isInteractive = true; + return entity; +} +``` + +```csharp +var entities = context.GetEntities(Matcher.AllOf(GameMatcher.Position, GameMatcher.Velocity)); +foreach(var e in entities) { + var pos = e.position; + var vel = e.velocity; + e.ReplacePosition(pos.value + vel.value); +} +``` + + +Overview +======== + +Entitas is fast, light and gets rid of unnecessary complexity. There are less than a handful classes you have to know to rocket start your game or application: + +- Entity +- Context +- Group +- Entity Collector + +[Read more...][wiki-overview] + + +Code Generator +============== + +The Code Generator generates classes and methods for you, so you can focus on getting the job done. It radically reduces the amount of code you have to write and improves readability by a huge magnitude. It makes your code less error-prone while ensuring best performance. I strongly recommend using it! + +[Read more...][wiki-code-generator] + + +Unity integration +================= + +The optional Unity module integrates Entitas nicely into Unity and provides powerful editor extensions to inspect and debug contexts, groups, entities, components and systems. + +[Read more...][wiki-unity-integration] + +

    + Entitas.Unity MenuItems
    + Entitas.Unity.VisualDebugging Entity + Entitas.Unity.VisualDebugging Systems +

    + + +Entitas deep dive +================= + +[Read the wiki][wiki] or checkout the [example projects][wiki-example-projects] to see Entitas in action. These example projects illustrate how systems, groups, collectors and entities all play together seamlessly. + + +Download Entitas +================ + +Each release is published with zip files containing all source files you need. + +[Show releases][releases] + + +Thanks to +========= + +Big shout out to [@mzaks][github-mzaks], [@cloudjubei][github-cloudjubei] and [@devboy][github-devboy] for endless hours of discussion and helping making Entitas awesome! + + +Maintainer(s) +============= + +- [@sschmid][github-sschmid] | [@s_schmid][twitter-sschmid] | [@entitas_csharp][twitter-entitas_csharp] + + +Different language? +=================== + +Entitas is available in +- [C#](https://github.com/sschmid/Entitas-CSharp) +- [Swift](https://github.com/mzaks/Entitas-Swift) +- [C++](https://github.com/JuDelCo/Entitas-Cpp) +- [Objective-C](https://github.com/wooga/entitas) +- [Java](https://github.com/Rubentxu/entitas-java) +- [Python](https://github.com/Aenyhm/entitas-python) +- [Scala](https://github.com/darkoverlordofdata/entitas-scala) +- [Go](https://github.com/wooga/go-entitas) +- [F#](https://github.com/darkoverlordofdata/entitas-fsharp) +- [TypeScript](https://github.com/darkoverlordofdata/entitas-ts) +- [Kotlin](https://github.com/darkoverlordofdata/entitas-kotlin) +- [Haskell](https://github.com/mhaemmerle/entitas-haskell) +- [Erlang](https://github.com/mhaemmerle/entitas_erl) +- [Clojure](https://github.com/mhaemmerle/entitas-clj) + + +[clean-coders]: https://cleancoders.com "Clean Coders" + +[documentation]: http://sschmid.github.io/Entitas-CSharp/ "Entitas Documentation" +[wiki]: https://github.com/sschmid/Entitas-CSharp/wiki "Entitas Wiki" +[wiki-code-generator]: https://github.com/sschmid/Entitas-CSharp/wiki/Code-Generator "Wiki - Code Generator" +[wiki-overview]: https://github.com/sschmid/Entitas-CSharp/wiki/Overview "Wiki - Overview" +[wiki-unity-integration]: https://github.com/sschmid/Entitas-CSharp/wiki/Unity-integration "Wiki - Unity Integration" +[wiki-example-projects]: https://github.com/sschmid/Entitas-CSharp/wiki/Example-projects "Wiki - Example Projects" +[wiki-games-and-examples]: https://github.com/sschmid/Entitas-CSharp/wiki/Made-With-Entitas "Wiki - #madeWithEntitas" + +[shmup1-thumb]: https://raw.githubusercontent.com/sschmid/Entitas-CSharp/master/Readme/Images/Entitas-Shmup-Part-1.jpg "Video: Entitas - Shmup - Part 1" +[shmup1]: https://www.youtube.com/watch?v=L-18XRTarOM "Video: Entitas - Shmup - Part 1" +[shmup2-thumb]: https://raw.githubusercontent.com/sschmid/Entitas-CSharp/master/Readme/Images/Entitas-Shmup-Part-2.jpg "Video: Entitas - Shmup - Part 2" +[shmup2]: https://www.youtube.com/watch?v=DZpvUnj2dGI "Video: Entitas - Shmup - Part 2" +[unite15-thumb]: https://raw.githubusercontent.com/sschmid/Entitas-CSharp/master/Readme/Images/UniteEurope2015-Video.png "Video: Watch the Entitas Talk at Unite Europe 2015" +[unite15]: https://www.youtube.com/watch?v=Re5kGtxTW6E "Video: Watch the Entitas Talk at Unite Europe 2015" +[unite15-slides]: http://www.slideshare.net/sschmid/uniteeurope-2015 "SlideShare: Unite Europe 2015" +[unite16-thumb]: https://raw.githubusercontent.com/sschmid/Entitas-CSharp/master/Readme/Images/UniteEurope2016-Video.png "Video: Watch the Entitas Talk at Unite Europe 2016" +[unite16]: https://www.youtube.com/watch?v=Phx7IJ3XUzg "Video: Watch the Entitas Talk at Unite Europe 2016" +[unite16-slides]: http://www.slideshare.net/sschmid/uniteeurope-2016 "SlideShare: Unite Europe 2016" + +[releases]: https://github.com/sschmid/Entitas-CSharp/releases "Releases" +[issues-new]: https://github.com/sschmid/Entitas-CSharp/issues/new "New issue" + +[twitter-sschmid]: https://twitter.com/s_schmid "s_schmid on Twitter" +[twitter-entitas_csharp]: https://twitter.com/entitas_csharp "entitas_csharp on Twitter" + +[github-sschmid]: https://github.com/sschmid "@sschmid" +[github-mzaks]: https://github.com/mzaks "@mzaks" +[github-cloudjubei]: https://github.com/cloudjubei "@cloudjubei" +[github-devboy]: https://github.com/devboy "@devboy" diff --git a/Assets/Plugins/Entitas/README.md.meta b/Assets/Plugins/Entitas/README.md.meta new file mode 100644 index 0000000..38940fa --- /dev/null +++ b/Assets/Plugins/Entitas/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 59e907356184a344d9e1402d1c2a33a1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Generators.dll b/Assets/Plugins/Generators.dll new file mode 100644 index 0000000000000000000000000000000000000000..71c89de647bb8f1ef91ca78d93a1c8fbfca42a39 GIT binary patch literal 65024 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�+VGVYmNpcGYr-bOb{4K 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Generators.dll.meta b/Assets/Plugins/Generators.dll.meta new file mode 100644 index 0000000..c5b10b0 --- /dev/null +++ b/Assets/Plugins/Generators.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 7b096a7023b1a654fbde83161695f15d +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NetStack.meta b/Assets/Plugins/NetStack.meta new file mode 100644 index 0000000..becd6e2 --- /dev/null +++ b/Assets/Plugins/NetStack.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6aecf72e86861334386d9c8b5673bd02 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NetStack/NetStack.Compression.meta b/Assets/Plugins/NetStack/NetStack.Compression.meta new file mode 100644 index 0000000..bbb005a --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Compression.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e37f991919e66724ca83bbbe8dae2588 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NetStack/NetStack.Compression/BoundedRange.cs b/Assets/Plugins/NetStack/NetStack.Compression/BoundedRange.cs new file mode 100644 index 0000000..44d98bc --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Compression/BoundedRange.cs @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2018 Stanislav Denisov + * + * 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: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * 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. + */ + +using System; +using System.Runtime.CompilerServices; + +#if !(ENABLE_MONO || ENABLE_IL2CPP) + using System.Numerics; +#else + using UnityEngine; +#endif + +namespace NetStack.Compression { + public struct CompressedVector2 { + public uint x; + public uint y; + + public CompressedVector2(uint x, uint y) { + this.x = x; + this.y = y; + } + } + + public struct CompressedVector3 { + public uint x; + public uint y; + public uint z; + + public CompressedVector3(uint x, uint y, uint z) { + this.x = x; + this.y = y; + this.z = z; + } + } + + public struct CompressedVector4 { + public uint x; + public uint y; + public uint z; + public uint w; + + public CompressedVector4(uint x, uint y, uint z, uint w) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + } + + public static class DeBruijn { + public static readonly int[] Lookup = new int[32] { + 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, + 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 + }; + } + + public class BoundedRange { + private readonly float minValue; + private readonly float maxValue; + private readonly float precision; + private readonly int requiredBits; + private readonly uint mask; + + public BoundedRange(float minValue, float maxValue, float precision) { + this.minValue = minValue; + this.maxValue = maxValue; + this.precision = precision; + + requiredBits = Log2((uint)((maxValue - minValue) * (1.0f / precision) + 0.5f)) + 1; + mask = (uint)((1L << requiredBits) - 1); + } + + private int Log2(uint value) { + value |= value >> 1; + value |= value >> 2; + value |= value >> 4; + value |= value >> 8; + value |= value >> 16; + + return DeBruijn.Lookup[(value * 0x07C4ACDDU) >> 27]; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public uint Compress(float value) { + if (value < minValue) + value = minValue; + else if (value > maxValue) + value = maxValue; + + return (uint)((float)((value - minValue) * (1f / precision)) + 0.5f) & mask; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public float Decompress(uint data) { + float adjusted = ((float)data * precision) + minValue; + + if (adjusted < minValue) + adjusted = minValue; + else if (adjusted > maxValue) + adjusted = maxValue; + + return adjusted; + } + + public static CompressedVector2 Compress(Vector2 vector2, BoundedRange[] boundedRange) { + CompressedVector2 data = default(CompressedVector2); + + #if ENABLE_MONO || ENABLE_IL2CPP + data.x = boundedRange[0].Compress(vector2.x); + data.y = boundedRange[1].Compress(vector2.y); + #else + data.x = boundedRange[0].Compress(vector2.X); + data.y = boundedRange[1].Compress(vector2.Y); + #endif + + return data; + } + + public static CompressedVector3 Compress(Vector3 vector3, BoundedRange[] boundedRange) { + CompressedVector3 data = default(CompressedVector3); + + #if ENABLE_MONO || ENABLE_IL2CPP + data.x = boundedRange[0].Compress(vector3.x); + data.y = boundedRange[1].Compress(vector3.y); + data.z = boundedRange[2].Compress(vector3.z); + #else + data.x = boundedRange[0].Compress(vector3.X); + data.y = boundedRange[1].Compress(vector3.Y); + data.z = boundedRange[2].Compress(vector3.Z); + #endif + + return data; + } + + public static CompressedVector4 Compress(Vector4 vector4, BoundedRange[] boundedRange) { + CompressedVector4 data = default(CompressedVector4); + + #if ENABLE_MONO || ENABLE_IL2CPP + data.x = boundedRange[0].Compress(vector4.x); + data.y = boundedRange[1].Compress(vector4.y); + data.z = boundedRange[2].Compress(vector4.z); + data.w = boundedRange[3].Compress(vector4.w); + #else + data.x = boundedRange[0].Compress(vector4.X); + data.y = boundedRange[1].Compress(vector4.Y); + data.z = boundedRange[2].Compress(vector4.Z); + data.w = boundedRange[3].Compress(vector4.W); + #endif + + return data; + } + + public static Vector2 Decompress(CompressedVector2 data, BoundedRange[] boundedRange) { + return new Vector2(boundedRange[0].Decompress(data.x), boundedRange[1].Decompress(data.y)); + } + + public static Vector3 Decompress(CompressedVector3 data, BoundedRange[] boundedRange) { + return new Vector3(boundedRange[0].Decompress(data.x), boundedRange[1].Decompress(data.y), boundedRange[2].Decompress(data.z)); + } + + public static Vector4 Decompress(CompressedVector4 data, BoundedRange[] boundedRange) { + return new Vector4(boundedRange[0].Decompress(data.x), boundedRange[1].Decompress(data.y), boundedRange[2].Decompress(data.z), boundedRange[3].Decompress(data.w)); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/NetStack/NetStack.Compression/BoundedRange.cs.meta b/Assets/Plugins/NetStack/NetStack.Compression/BoundedRange.cs.meta new file mode 100644 index 0000000..1e5a170 --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Compression/BoundedRange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d395432689331dd4f883b3afe69c6e2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NetStack/NetStack.Compression/HalfPrecision.cs b/Assets/Plugins/NetStack/NetStack.Compression/HalfPrecision.cs new file mode 100644 index 0000000..8344d60 --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Compression/HalfPrecision.cs @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2018 Stanislav Denisov + * + * 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: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * 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. + */ + +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace NetStack.Compression { + public static class HalfPrecision { + [StructLayout(LayoutKind.Explicit)] + private struct Values { + [FieldOffset(0)] + public float f; + [FieldOffset(0)] + public int i; + [FieldOffset(0)] + public uint u; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public static ushort Compress(float value) { + var values = new Values { + f = value + }; + + return Compress(values.i); + } + + public static ushort Compress(int value) { + int s = (value >> 16) & 0x00008000; + int e = ((value >> 23) & 0X000000FF) - (127 - 15); + int m = value & 0X007FFFFF; + + if (e <= 0) { + if (e < -10) + return (ushort)s; + + m = m | 0x00800000; + + int t = 14 - e; + int a = (1 << (t - 1)) - 1; + int b = (m >> t) & 1; + + m = (m + a + b) >> t; + + return (ushort)(s | m); + } + + if (e == 0XFF - (127 - 15)) { + if (m == 0) + return (ushort)(s | 0X7C00); + + m >>= 13; + + return (ushort)(s | 0X7C00 | m | ((m == 0) ? 1 : 0)); + } + + m = m + 0X00000FFF + ((m >> 13) & 1); + + if ((m & 0x00800000) != 0) { + m = 0; + e++; + } + + if (e > 30) + return (ushort)(s | 0X7C00); + + return (ushort)(s | (e << 10) | (m >> 13)); + } + + public static float Decompress(ushort value) { + uint result; + uint mantissa = (uint)(value & 1023); + uint exponent = 0XFFFFFFF2; + + if ((value & -33792) == 0) { + if (mantissa != 0) { + while ((mantissa & 1024) == 0) { + exponent--; + mantissa = mantissa << 1; + } + + mantissa &= 0XFFFFFBFF; + result = ((uint)((((uint)value & 0x8000) << 16) | ((exponent + 127) << 23))) | (mantissa << 13); + } else { + result = (uint)((value & 0x8000) << 16); + } + } else { + result = ((((uint)value & 0x8000) << 16) | ((((((uint)value >> 10) & 0X1F) - 15) + 127) << 23)) | (mantissa << 13); + } + + var values = new Values { + u = result + }; + + return values.f; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/NetStack/NetStack.Compression/HalfPrecision.cs.meta b/Assets/Plugins/NetStack/NetStack.Compression/HalfPrecision.cs.meta new file mode 100644 index 0000000..4a4d825 --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Compression/HalfPrecision.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b93a7b07069f334e9a659a3443fde6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NetStack/NetStack.Compression/SmallestThree.cs b/Assets/Plugins/NetStack/NetStack.Compression/SmallestThree.cs new file mode 100644 index 0000000..84d9cb5 --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Compression/SmallestThree.cs @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2018 Stanislav Denisov + * + * 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: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * 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. + */ + +using System; + +#if !(ENABLE_MONO || ENABLE_IL2CPP) + using System.Numerics; +#else + using UnityEngine; +#endif + +namespace NetStack.Compression { + public struct CompressedQuaternion { + public byte m; + public short a; + public short b; + public short c; + + public CompressedQuaternion(byte m, short a, short b, short c) { + this.m = m; + this.a = a; + this.b = b; + this.c = c; + } + } + + public static class SmallestThree { + private const float floatPrecision = 10000f; + + public static CompressedQuaternion Compress(Quaternion quaternion) { + CompressedQuaternion data = default(CompressedQuaternion); + byte m = 0; + float maxValue = float.MinValue; + float sign = 1f; + + for (int i = 0; i <= 3; i++) { + float element = 0f; + float abs = 0f; + + switch (i) { + #if ENABLE_MONO || ENABLE_IL2CPP + case 0: + element = quaternion.x; + + break; + + case 1: + element = quaternion.y; + + break; + + case 2: + element = quaternion.z; + + break; + + case 3: + element = quaternion.w; + + break; + #else + case 0: + element = quaternion.X; + + break; + + case 1: + element = quaternion.Y; + + break; + + case 2: + element = quaternion.Z; + + break; + + case 3: + element = quaternion.W; + + break; + #endif + } + + abs = Math.Abs(element); + + if (abs > maxValue) { + sign = (element < 0) ? -1 : 1; + m = (byte)i; + maxValue = abs; + } + } + + if (Math.Abs(1f - maxValue) < Math.Max(0.000001f * Math.Max(Math.Abs(maxValue), Math.Abs(1f)), Single.Epsilon * 8)) { + data.m = (byte)(m + 4); + + return data; + } + + short a = 0; + short b = 0; + short c = 0; + + #if ENABLE_MONO || ENABLE_IL2CPP + if (m == 0) { + a = (short)(quaternion.y * sign * floatPrecision); + b = (short)(quaternion.z * sign * floatPrecision); + c = (short)(quaternion.w * sign * floatPrecision); + } else if (m == 1) { + a = (short)(quaternion.x * sign * floatPrecision); + b = (short)(quaternion.z * sign * floatPrecision); + c = (short)(quaternion.w * sign * floatPrecision); + } else if (m == 2) { + a = (short)(quaternion.x * sign * floatPrecision); + b = (short)(quaternion.y * sign * floatPrecision); + c = (short)(quaternion.w * sign * floatPrecision); + } else { + a = (short)(quaternion.x * sign * floatPrecision); + b = (short)(quaternion.y * sign * floatPrecision); + c = (short)(quaternion.z * sign * floatPrecision); + } + #else + if (m == 0) { + a = (short)(quaternion.Y * sign * floatPrecision); + b = (short)(quaternion.Z * sign * floatPrecision); + c = (short)(quaternion.W * sign * floatPrecision); + } else if (m == 1) { + a = (short)(quaternion.X * sign * floatPrecision); + b = (short)(quaternion.Z * sign * floatPrecision); + c = (short)(quaternion.W * sign * floatPrecision); + } else if (m == 2) { + a = (short)(quaternion.X * sign * floatPrecision); + b = (short)(quaternion.Y * sign * floatPrecision); + c = (short)(quaternion.W * sign * floatPrecision); + } else { + a = (short)(quaternion.X * sign * floatPrecision); + b = (short)(quaternion.Y * sign * floatPrecision); + c = (short)(quaternion.Z * sign * floatPrecision); + } + #endif + + data.m = m; + data.a = a; + data.b = b; + data.c = c; + + return data; + } + + public static Quaternion Decompress(CompressedQuaternion data) { + byte m = data.m; + + if (m >= 4 && m <= 7) { + float x = (m == 4) ? 1f : 0f; + float y = (m == 5) ? 1f : 0f; + float z = (m == 6) ? 1f : 0f; + float w = (m == 7) ? 1f : 0f; + + return new Quaternion(x, y, z, w); + } + + float a = (float)data.a / floatPrecision; + float b = (float)data.b / floatPrecision; + float c = (float)data.c / floatPrecision; + float d = (float)Math.Sqrt(1f - ((a * a) + (b * b) + (c * c))); + + if (m == 0) + return new Quaternion(d, a, b, c); + else if (m == 1) + return new Quaternion(a, d, b, c); + else if (m == 2) + return new Quaternion(a, b, d, c); + + return new Quaternion(a, b, c, d); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/NetStack/NetStack.Compression/SmallestThree.cs.meta b/Assets/Plugins/NetStack/NetStack.Compression/SmallestThree.cs.meta new file mode 100644 index 0000000..7a0a769 --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Compression/SmallestThree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aedeaaa9b9d42254a934cce0a3f5e8c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NetStack/NetStack.Serialization.meta b/Assets/Plugins/NetStack/NetStack.Serialization.meta new file mode 100644 index 0000000..bb2232c --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Serialization.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd461e76132dc874385ba95301de58eb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NetStack/NetStack.Serialization/BitBuffer.cs b/Assets/Plugins/NetStack/NetStack.Serialization/BitBuffer.cs new file mode 100644 index 0000000..72a928a --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Serialization/BitBuffer.cs @@ -0,0 +1,591 @@ +/* + * Copyright (c) 2018 Stanislav Denisov + * + * 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: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * 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. + */ + +/* + * Copyright (c) 2018 Alexander Shoulson + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +using System; +using System.Runtime.CompilerServices; +using System.Text; + +namespace NetStack.Serialization { + public class BitBuffer { + private const int defaultCapacity = 8; + private const int stringLengthMax = 512; + private const int stringLengthBits = 9; + private const int bitsASCII = 7; + private const int growFactor = 2; + private const int minGrow = 1; + private int readPosition; + private int nextPosition; + private uint[] chunks; + + public BitBuffer(int capacity = defaultCapacity) { + readPosition = 0; + nextPosition = 0; + chunks = new uint[capacity]; + } + + public int Length { + get { + return ((nextPosition - 1) >> 3) + 1; + } + } + + public bool IsFinished { + get { + return nextPosition == readPosition; + } + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public void Clear() { + readPosition = 0; + nextPosition = 0; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public void Add(int numBits, uint value) { + if (numBits < 0) + throw new ArgumentOutOfRangeException("Pushing negative bits"); + + if (numBits > 32) + throw new ArgumentOutOfRangeException("Pushing too many bits"); + + int index = nextPosition >> 5; + int used = nextPosition & 0x0000001F; + + if ((index + 1) >= chunks.Length) + ExpandArray(); + + ulong chunkMask = ((1UL << used) - 1); + ulong scratch = chunks[index] & chunkMask; + ulong result = scratch | ((ulong)value << used); + + chunks[index] = (uint)result; + chunks[index + 1] = (uint)(result >> 32); + nextPosition += numBits; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public uint Read(int numBits) { + uint result = Peek(numBits); + + readPosition += numBits; + + return result; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public uint Peek(int numBits) { + if (numBits < 0) + throw new ArgumentOutOfRangeException("Pushing negative bits"); + + if (numBits > 32) + throw new ArgumentOutOfRangeException("Pushing too many bits"); + + int index = readPosition >> 5; + int used = readPosition & 0x0000001F; + + ulong chunkMask = ((1UL << numBits) - 1) << used; + ulong scratch = (ulong)chunks[index]; + + if ((index + 1) < chunks.Length) + scratch |= (ulong)chunks[index + 1] << 32; + + ulong result = (scratch & chunkMask) >> used; + + return (uint)result; + } + + public int ToArray(byte[] data, int offset) { + Add(1, 1); + + int numChunks = (nextPosition >> 5) + 1; + int length = data.Length; + + for (int i = 0; i < numChunks; i++) { + int dataIdx = i * 4 + offset; + uint chunk = chunks[i]; + + if (dataIdx < length) + data[dataIdx] = (byte)(chunk); + + if (dataIdx + 1 < length) + data[dataIdx + 1] = (byte)(chunk >> 8); + + if (dataIdx + 2 < length) + data[dataIdx + 2] = (byte)(chunk >> 16); + + if (dataIdx + 3 < length) + data[dataIdx + 3] = (byte)(chunk >> 24); + } + + return Length; + } + + public void FromArray(byte[] data, int offset, int length) { + int numChunks = (length / 4) + 1; + + if (chunks.Length < numChunks) + chunks = new uint[numChunks]; + + for (int i = 0; i < numChunks; i++) { + int dataIdx = i * 4 + offset; + uint chunk = 0; + + if (dataIdx < length) + chunk = (uint)data[dataIdx]; + + if (dataIdx + 1 < length) + chunk = chunk | (uint)data[dataIdx + 1] << 8; + + if (dataIdx + 2 < length) + chunk = chunk | (uint)data[dataIdx + 2] << 16; + + if (dataIdx + 3 < length) + chunk = chunk | (uint)data[dataIdx + 3] << 24; + + chunks[i] = chunk; + } + + int positionInByte = FindHighestBitPosition(data[length - 1]); + + nextPosition = ((length - 1) * 8) + (positionInByte - 1); + readPosition = 0; + } + + #if NETSTACK_SPAN + public int ToSpan(ref Span data) { + Add(1, 1); + + int numChunks = (nextPosition >> 5) + 1; + int length = data.Length; + + for (int i = 0; i < numChunks; i++) { + int dataIdx = i * 4; + uint chunk = chunks[i]; + + if (dataIdx < length) + data[dataIdx] = (byte)(chunk); + + if (dataIdx + 1 < length) + data[dataIdx + 1] = (byte)(chunk >> 8); + + if (dataIdx + 2 < length) + data[dataIdx + 2] = (byte)(chunk >> 16); + + if (dataIdx + 3 < length) + data[dataIdx + 3] = (byte)(chunk >> 24); + } + + return Length; + } + + public void FromSpan(ref ReadOnlySpan data, int length) { + int numChunks = (length / 4) + 1; + + if (chunks.Length < numChunks) + chunks = new uint[numChunks]; + + for (int i = 0; i < numChunks; i++) { + int dataIdx = i * 4; + uint chunk = 0; + + if (dataIdx < length) + chunk = (uint)data[dataIdx]; + + if (dataIdx + 1 < length) + chunk = chunk | (uint)data[dataIdx + 1] << 8; + + if (dataIdx + 2 < length) + chunk = chunk | (uint)data[dataIdx + 2] << 16; + + if (dataIdx + 3 < length) + chunk = chunk | (uint)data[dataIdx + 3] << 24; + + chunks[i] = chunk; + } + + int positionInByte = FindHighestBitPosition(data[length - 1]); + + nextPosition = ((length - 1) * 8) + (positionInByte - 1); + readPosition = 0; + } + #endif + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public BitBuffer AddBool(bool value) { + Add(1, value ? 1U : 0U); + + return this; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public bool ReadBool() { + return Read(1) > 0; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public bool PeekBool() { + return Peek(1) > 0; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public BitBuffer AddByte(byte value) { + Add(8, value); + + return this; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public byte ReadByte() { + return (byte)Read(8); + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public byte PeekByte() { + return (byte)Peek(8); + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public BitBuffer AddShort(short value) { + AddInt(value); + + return this; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public short ReadShort() { + return (short)ReadInt(); + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public short PeekShort() { + return (short)PeekInt(); + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public BitBuffer AddUShort(ushort value) { + AddUInt(value); + + return this; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public ushort ReadUShort() { + return (ushort)ReadUInt(); + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public ushort PeekUShort() { + return (ushort)PeekUInt(); + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public BitBuffer AddInt(int value) { + uint zigzag = (uint)((value << 1) ^ (value >> 31)); + + AddUInt(zigzag); + + return this; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public int ReadInt() { + uint value = ReadUInt(); + int zagzig = (int)((value >> 1) ^ (-(int)(value & 1))); + + return zagzig; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public int PeekInt() { + uint value = PeekUInt(); + int zagzig = (int)((value >> 1) ^ (-(int)(value & 1))); + + return zagzig; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public BitBuffer AddUInt(uint value) { + uint buffer = 0x0u; + + do { + buffer = value & 0x7Fu; + value >>= 7; + + if (value > 0) + buffer |= 0x80u; + + Add(8, buffer); + } + + while (value > 0); + + return this; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public uint ReadUInt() { + uint buffer = 0x0u; + uint value = 0x0u; + int shift = 0; + + do { + buffer = Read(8); + + value |= (buffer & 0x7Fu) << shift; + shift += 7; + } + + while ((buffer & 0x80u) > 0); + + return value; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public uint PeekUInt() { + int tempPosition = readPosition; + uint value = ReadUInt(); + + readPosition = tempPosition; + + return value; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public BitBuffer AddLong(long value) { + AddInt((int)(value & uint.MaxValue)); + AddInt((int)(value >> 32)); + + return this; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public long ReadLong() { + int low = ReadInt(); + int high = ReadInt(); + long value = high; + + return value << 32 | (uint)low; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public long PeekLong() { + int tempPosition = readPosition; + long value = ReadLong(); + + readPosition = tempPosition; + + return value; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public BitBuffer AddULong(ulong value) { + AddUInt((uint)(value & uint.MaxValue)); + AddUInt((uint)(value >> 32)); + + return this; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public ulong ReadULong() { + uint low = ReadUInt(); + uint high = ReadUInt(); + + return (ulong)high << 32 | low; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public ulong PeekULong() { + int tempPosition = readPosition; + ulong value = ReadULong(); + + readPosition = tempPosition; + + return value; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public BitBuffer AddString(string value) { + if (value == null) + throw new ArgumentNullException("value"); + + uint length = (uint)value.Length; + + if (length > stringLengthMax) + length = (uint)stringLengthMax; + + Add(stringLengthBits, length); + + for (int i = 0; i < length; i++) { + Add(bitsASCII, ToASCII(value[i])); + } + + return this; + } + + #if NETSTACK_INLINING + [MethodImpl(256)] + #endif + public string ReadString() { + StringBuilder builder = new StringBuilder(); + uint length = Read(stringLengthBits); + + for (int i = 0; i < length; i++) { + builder.Append((char)Read(bitsASCII)); + } + + return builder.ToString(); + } + + public override string ToString() { + StringBuilder builder = new StringBuilder(); + + for (int i = chunks.Length - 1; i >= 0; i--) { + builder.Append(Convert.ToString(chunks[i], 2).PadLeft(32, '0')); + } + + StringBuilder spaced = new StringBuilder(); + + for (int i = 0; i < builder.Length; i++) { + spaced.Append(builder[i]); + + if (((i + 1) % 8) == 0) + spaced.Append(" "); + } + + return spaced.ToString(); + } + + private void ExpandArray() { + int newCapacity = (chunks.Length * growFactor) + minGrow; + uint[] newChunks = new uint[newCapacity]; + + Array.Copy(chunks, newChunks, chunks.Length); + chunks = newChunks; + } + + private static int FindHighestBitPosition(byte data) { + int shiftCount = 0; + + while (data > 0) { + data >>= 1; + shiftCount++; + } + + return shiftCount; + } + + private static byte ToASCII(char character) { + byte value = 0; + + try { + value = Convert.ToByte(character); + } + + catch (OverflowException) { + throw new Exception("Cannot convert to ASCII: " + character); + } + + if (value > 127) + throw new Exception("Cannot convert to ASCII: " + character); + + return value; + } + } +} diff --git a/Assets/Plugins/NetStack/NetStack.Serialization/BitBuffer.cs.meta b/Assets/Plugins/NetStack/NetStack.Serialization/BitBuffer.cs.meta new file mode 100644 index 0000000..6df7271 --- /dev/null +++ b/Assets/Plugins/NetStack/NetStack.Serialization/BitBuffer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0820c909f73d7334f8f93857a07b357b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SpanSupport.meta b/Assets/Plugins/SpanSupport.meta new file mode 100644 index 0000000..66b11a3 --- /dev/null +++ b/Assets/Plugins/SpanSupport.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ece87778abb51134587ac5b15c84aac3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SpanSupport/System.Buffers.dll b/Assets/Plugins/SpanSupport/System.Buffers.dll new file mode 100644 index 0000000000000000000000000000000000000000..c517a3b62cc7e190fb347c00a960311a9349b53c GIT binary patch literal 28304 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/SpanSupport/System.Buffers.dll.meta b/Assets/Plugins/SpanSupport/System.Buffers.dll.meta new file mode 100644 index 0000000..27585bf --- /dev/null +++ b/Assets/Plugins/SpanSupport/System.Buffers.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: c8e1e0ada971a584dbb2038c2b5514be +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SpanSupport/System.Memory.dll b/Assets/Plugins/SpanSupport/System.Memory.dll new file mode 100644 index 0000000000000000000000000000000000000000..3ba645bd33d30006fe51999081ba033eb2491c52 GIT binary patch literal 148736 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/SpanSupport/System.Memory.dll.meta b/Assets/Plugins/SpanSupport/System.Memory.dll.meta new file mode 100644 index 0000000..140e6bf --- /dev/null +++ b/Assets/Plugins/SpanSupport/System.Memory.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 4bfaf94ce3054c64492e06128a28e5cf +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/SpanSupport/System.Runtime.CompilerServices.Unsafe.dll b/Assets/Plugins/SpanSupport/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000000000000000000000000000000000000..3156239266db9cceede249731f00c3822e479a1f GIT binary patch literal 23600 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 OyIXQg_#$)@0sTLk9O=pc literal 0 HcmV?d00001 diff --git a/Assets/Plugins/SpanSupport/System.Runtime.CompilerServices.Unsafe.dll.meta b/Assets/Plugins/SpanSupport/System.Runtime.CompilerServices.Unsafe.dll.meta new file mode 100644 index 0000000..d0c90b0 --- /dev/null +++ b/Assets/Plugins/SpanSupport/System.Runtime.CompilerServices.Unsafe.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 09a7d47f51b5cc84685c35938efe0d94 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta new file mode 100644 index 0000000..afe9d07 --- /dev/null +++ b/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 564f3be33d670384cb22785aa1931e73 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..5f2ecc7 --- /dev/null +++ b/Assets/Scenes/SampleScene.unity @@ -0,0 +1,387 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 705507994} + m_IndirectSpecularColor: {r: 0.44657844, g: 0.49641222, b: 0.57481694, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_ExportTrainingData: 0 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &963194226 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 +--- !u!20 &963194227 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.61, y: 2.86, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1016431233 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1016431235} + - component: {fileID: 1016431234} + m_Layer: 0 + m_Name: Logger + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1016431234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016431233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9ab84c5d2ea6467a8a733e98051580b1, type: 3} + m_Name: + m_EditorClassIdentifier: + DrawCount: 15 + Messages: [] +--- !u!4 &1016431235 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016431233} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2079191269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2079191271} + - component: {fileID: 2079191270} + m_Layer: 0 + m_Name: GameController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2079191270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2079191269} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dbbbddda32854a78aa149317fbcf6c63, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetTickPerSecond: 10 + PanicStateCount: 6 + PanicCleanupTarget: 3 +--- !u!4 &2079191271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2079191269} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -8.186773, y: 4.664304, z: -5.166054} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..952bd1e --- /dev/null +++ b/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9fc0d4010bbf28b4594072e72b8655ab +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources.meta b/Assets/Sources.meta new file mode 100644 index 0000000..20d29d6 --- /dev/null +++ b/Assets/Sources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 647a2fff7110ed1459f0868cba0c4ea4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/ClientFeature.cs b/Assets/Sources/ClientFeature.cs new file mode 100644 index 0000000..697d3cd --- /dev/null +++ b/Assets/Sources/ClientFeature.cs @@ -0,0 +1,13 @@ +using Sources.Networking.Client; + +public class ClientFeature : Feature +{ + public ClientFeature(Contexts contexts, Services services) + { + Add(new CommonGameplayFeature(contexts, services)); + Add(new ClientGameplayFeature(contexts, services)); + + Add(new ClientNetworkFeature(contexts, services)); + Add(new CommonGeneratedFeature(contexts)); + } +} \ No newline at end of file diff --git a/Assets/Sources/ClientFeature.cs.meta b/Assets/Sources/ClientFeature.cs.meta new file mode 100644 index 0000000..0a3fa51 --- /dev/null +++ b/Assets/Sources/ClientFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e581e3880d1746f482aa388309b1a28c +timeCreated: 1557775317 \ No newline at end of file diff --git a/Assets/Sources/Codegen.meta b/Assets/Sources/Codegen.meta new file mode 100644 index 0000000..93bda53 --- /dev/null +++ b/Assets/Sources/Codegen.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 474e63f3db484004999f1db68f8192b1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Codegen/CodegenAttributes.meta b/Assets/Sources/Codegen/CodegenAttributes.meta new file mode 100644 index 0000000..4904059 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95b2ade0f06483246af4becf2bb48ce2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Codegen/CodegenAttributes/Bounds.meta b/Assets/Sources/Codegen/CodegenAttributes/Bounds.meta new file mode 100644 index 0000000..bb9db2b --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/Bounds.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 13d612487ae74737b0066067951208cd +timeCreated: 1558178077 \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedFloatAttribute.cs b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedFloatAttribute.cs new file mode 100644 index 0000000..89aefc2 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedFloatAttribute.cs @@ -0,0 +1,19 @@ +using System; + +namespace Codegen.CodegenAttributes.Bounds +{ + [AttributeUsage(AttributeTargets.Field)] + public class BoundedFloatAttribute : Attribute + { + public BoundedFloatAttribute(float min, float max, float precision) + { + Min = min; + Max = max; + Precision = precision; + } + + public float Min { get; } + public float Max { get; } + public float Precision { get; } + } +} \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedFloatAttribute.cs.meta b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedFloatAttribute.cs.meta new file mode 100644 index 0000000..4988eed --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedFloatAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 37e9601c26c4449787af36e8b4917941 +timeCreated: 1558177946 \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector2Attribute.cs b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector2Attribute.cs new file mode 100644 index 0000000..7fa627e --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector2Attribute.cs @@ -0,0 +1,26 @@ +using System; + +namespace Codegen.CodegenAttributes.Bounds +{ + [AttributeUsage(AttributeTargets.Field)] + public class BoundedVector2Attribute : Attribute + { + public BoundedVector2Attribute(float xMin, float xMax, float xPrecision, float yMin, float yMax, + float yPrecision) + { + XMin = xMin; + XMax = xMax; + XPrecision = xPrecision; + YMin = yMin; + YMax = yMax; + YPrecision = yPrecision; + } + + public float XMin { get; } + public float XMax { get; } + public float XPrecision { get; } + public float YMin { get; } + public float YMax { get; } + public float YPrecision { get; } + } +} \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector2Attribute.cs.meta b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector2Attribute.cs.meta new file mode 100644 index 0000000..815d4ba --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector2Attribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a35cc5e5d1fc43d7a7139c4091540522 +timeCreated: 1558178099 \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector3Attribute.cs b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector3Attribute.cs new file mode 100644 index 0000000..9363208 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector3Attribute.cs @@ -0,0 +1,32 @@ +using System; + +namespace Codegen.CodegenAttributes.Bounds +{ + [AttributeUsage(AttributeTargets.Field)] + public class BoundedVector3Attribute : Attribute + { + public BoundedVector3Attribute(float xMin, float xMax, float xPrecision, float yMin, float yMax, + float yPrecision, float zMin, float zMax, float zPrecision) + { + XMin = xMin; + XMax = xMax; + XPrecision = xPrecision; + YMin = yMin; + YMax = yMax; + YPrecision = yPrecision; + ZMin = zMin; + ZMax = zMax; + ZPrecision = zPrecision; + } + + public float XMin { get; } + public float XMax { get; } + public float XPrecision { get; } + public float YMin { get; } + public float YMax { get; } + public float YPrecision { get; } + public float ZMin { get; } + public float ZMax { get; } + public float ZPrecision { get; } + } +} \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector3Attribute.cs.meta b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector3Attribute.cs.meta new file mode 100644 index 0000000..f324c00 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/Bounds/BoundedVector3Attribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5ceca79bc9a446b88f5f6b99607cac79 +timeCreated: 1558178226 \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/CommandToClientAttribute.cs b/Assets/Sources/Codegen/CodegenAttributes/CommandToClientAttribute.cs new file mode 100644 index 0000000..b4d4442 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/CommandToClientAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace Codegen.CodegenAttributes +{ + public class CommandToClientAttribute : Attribute + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/CommandToClientAttribute.cs.meta b/Assets/Sources/Codegen/CodegenAttributes/CommandToClientAttribute.cs.meta new file mode 100644 index 0000000..d42d113 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/CommandToClientAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 01eb0db9e5ae4287af78ac1151c7626b +timeCreated: 1557597660 \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/CommandToServerAttribute.cs b/Assets/Sources/Codegen/CodegenAttributes/CommandToServerAttribute.cs new file mode 100644 index 0000000..7b2b391 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/CommandToServerAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace Codegen.CodegenAttributes +{ + public class CommandToServerAttribute : Attribute + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/CommandToServerAttribute.cs.meta b/Assets/Sources/Codegen/CodegenAttributes/CommandToServerAttribute.cs.meta new file mode 100644 index 0000000..7c89365 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/CommandToServerAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 763a971e32544f068a03a13537dd6593 +timeCreated: 1557594551 \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/SerializeAttribute.cs b/Assets/Sources/Codegen/CodegenAttributes/SerializeAttribute.cs new file mode 100644 index 0000000..cf1110d --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/SerializeAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace Codegen.CodegenAttributes +{ + public class SerializeAttribute : Attribute + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/SerializeAttribute.cs.meta b/Assets/Sources/Codegen/CodegenAttributes/SerializeAttribute.cs.meta new file mode 100644 index 0000000..ef0fe61 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/SerializeAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1760a04a9aba47dfb7e0e5679e2cac1d +timeCreated: 1557592225 \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/SyncAttribute.cs b/Assets/Sources/Codegen/CodegenAttributes/SyncAttribute.cs new file mode 100644 index 0000000..d135da3 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/SyncAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace Codegen.CodegenAttributes +{ + public class SyncAttribute : Attribute + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenAttributes/SyncAttribute.cs.meta b/Assets/Sources/Codegen/CodegenAttributes/SyncAttribute.cs.meta new file mode 100644 index 0000000..8272856 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenAttributes/SyncAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 710db9c21b538894094e13ec6c549128 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Codegen/CodegenExecutor.meta b/Assets/Sources/Codegen/CodegenExecutor.meta new file mode 100644 index 0000000..2dabc97 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenExecutor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3fc09f8ca15792b4ea300e27cf9f36c6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Codegen/CodegenExecutor/CodegenExecutor.cs b/Assets/Sources/Codegen/CodegenExecutor/CodegenExecutor.cs new file mode 100644 index 0000000..2d877e2 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenExecutor/CodegenExecutor.cs @@ -0,0 +1,682 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using Codegen.CodegenAttributes; +using Codegen.CodegenAttributes.Bounds; +using Generators.Compressors; +using Generators.Scheme.Command; +using Generators.Scheme.Command.Executor; +using Generators.Scheme.Command.Executor.Interface; +using Generators.Sync.Component; +using Generators.Sync.Feature; +using Generators.Sync.Systems; +using Generators.Sync.Utility; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +public class CodegenExecutor : ScriptableObject +{ +#if UNITY_EDITOR + public string OutputPath = "Generated"; + + [ContextMenu("Generate Sync Code")] + private void GenerateSyncCode() + { + #region collect + + var clearPath = Path.Combine(Application.dataPath, OutputPath, "Sync"); + if (Directory.Exists(clearPath)) + Directory.Delete(clearPath, true); + + ushort counter = 0; + var compressors = new List>(); + var components = new List>(); + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + foreach (var type in assembly.GetTypes()) + { + var syncAttributes = type.GetCustomAttributes(typeof(SyncAttribute), false); + + if (syncAttributes != null && syncAttributes.Length > 0) + { + var componentName = type.Name; + + var fields = type.GetFields(); + var fieldTypes = new List(); + var fieldNames = new List(); + var isEnums = new List(); + var isCompressed = new List(); + + foreach (var field in fields) + { + var compressed = false; + switch (field.FieldType.ToString()) + { + case "System.Single": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}", compressor.Min, + compressor.Max, compressor.Precision)); + compressed = true; + } + } + break; + case "UnityEngine.Vector2": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}X", compressor.XMin, + compressor.XMax, compressor.XPrecision)); + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}Y", compressor.YMin, + compressor.YMax, compressor.YPrecision)); + compressed = true; + } + } + break; + case "UnityEngine.Vector3": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}X", compressor.XMin, + compressor.XMax, compressor.XPrecision)); + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}Y", compressor.YMin, + compressor.YMax, compressor.YPrecision)); + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}Z", compressor.ZMin, + compressor.ZMax, compressor.ZPrecision)); + compressed = true; + } + } + break; + } + + isEnums.Add(field.FieldType.IsEnum); + fieldTypes.Add(field.FieldType.ToString()); + fieldNames.Add(field.Name); + isCompressed.Add(compressed); + } + + components.Add(new Tuple(componentName, counter, + fieldTypes.ToArray(), fieldNames.ToArray(), isEnums.ToArray(), isCompressed.ToArray())); + counter++; + } + else + { + var serializeAttributes = type.GetCustomAttributes(typeof(SerializeAttribute), false); + + if (serializeAttributes != null && serializeAttributes.Length > 0) + { + var componentName = type.Name; + + var fields = type.GetFields(); + var fieldTypes = new List(); + var fieldNames = new List(); + var isEnums = new List(); + var isCompressed = new List(); + + foreach (var field in fields) + { + var compressed = false; + switch (field.FieldType.ToString()) + { + case "System.Single": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}", compressor.Min, + compressor.Max, compressor.Precision)); + compressed = true; + } + } + break; + case "UnityEngine.Vector2": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}X", compressor.XMin, + compressor.XMax, compressor.XPrecision)); + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}Y", compressor.YMin, + compressor.YMax, compressor.YPrecision)); + compressed = true; + } + } + break; + case "UnityEngine.Vector3": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}X", compressor.XMin, + compressor.XMax, compressor.XPrecision)); + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}Y", compressor.YMin, + compressor.YMax, compressor.YPrecision)); + compressors.Add(new Tuple( + $"{componentName.Replace("Component", "")}{field.Name}Z", compressor.ZMin, + compressor.ZMax, compressor.ZPrecision)); + compressed = true; + } + } + break; + } + + isEnums.Add(field.FieldType.IsEnum); + fieldTypes.Add(field.FieldType.ToString()); + fieldNames.Add(field.Name); + isCompressed.Add(compressed); + } + + var componentTemplate = new SyncComponentGenerator(); + var d = new Dictionary + { + {"ComponentName", componentName}, + {"ComponentId", counter}, + {"FieldTypes", fieldTypes.ToArray()}, + {"FieldNames", fieldNames.ToArray()}, + {"IsEnums", isEnums.ToArray()}, + {"IsCompressed", isCompressed.ToArray()} + }; + + componentTemplate.Session = d; + componentTemplate.Initialize(); + var output = componentTemplate.TransformText(); + + SaveFile("Sync/Components/", $"{componentName}.cs", output); + counter++; + } + } + } + + #endregion + + #region components + + foreach (var tuple in components) + { + var componentTemplate = new SyncComponentGenerator(); + var d = new Dictionary + { + {"ComponentName", tuple.Item1}, + {"ComponentId", tuple.Item2}, + {"FieldTypes", tuple.Item3}, + {"FieldNames", tuple.Item4}, + {"IsEnums", tuple.Item5}, + {"IsCompressed", tuple.Item6} + }; + + componentTemplate.Session = d; + componentTemplate.Initialize(); + var output = componentTemplate.TransformText(); + + SaveFile("Sync/Components/", $"{tuple.Item1}.cs", output); + } + + #endregion + + #region capture removed components + + foreach (var tuple in components) + { + var componentTemplate = new SyncRemovedComponentSystemGenerator(); + var d = new Dictionary + { + {"ComponentName", tuple.Item1.Replace("Component", "")}, + {"ComponentId", tuple.Item2}, + {"IsTag", tuple.Item3.Length == 0} + }; + + componentTemplate.Session = d; + componentTemplate.Initialize(); + var output = componentTemplate.TransformText(); + + SaveFile("Sync/Capture/", $"ServerCaptureRemoved{tuple.Item1.Replace("Component", "")}System.cs", output); + } + + #endregion + + #region capture changed/added components + + foreach (var tuple in components) + { + var componentTemplate = new SyncChangedComponentSystemGenerator(); + var d = new Dictionary + { + {"ComponentName", tuple.Item1.Replace("Component", "")}, + {"ComponentId", tuple.Item2}, + {"IsTag", tuple.Item3.Length == 0} + }; + + componentTemplate.Session = d; + componentTemplate.Initialize(); + var output = componentTemplate.TransformText(); + + SaveFile("Sync/Capture/", $"ServerCaptureChanged{tuple.Item1.Replace("Component", "")}System.cs", output); + } + + #endregion + + #region pack entity utility + + { + var packUtilityTemplate = new PackEntityUtilityGenerator(); + var d = new Dictionary + { + {"ComponentNames", components.Select(x => x.Item1).ToArray()}, + {"ComponentIds", components.Select(x => x.Item2).ToArray()}, + {"IsTags", components.Select(x => x.Item3.Length == 0).ToArray()} + }; + + packUtilityTemplate.Session = d; + packUtilityTemplate.Initialize(); + var output = packUtilityTemplate.TransformText(); + + SaveFile("Sync/Utility/", "PackEntityUtility.cs", output); + } + + #endregion + + #region unpack entity utility + + { + var template = new UnpackEntityUtilityGenerator(); + var d = new Dictionary + { + {"ComponentNames", components.Select(x => x.Item1).ToArray()}, + {"ComponentIds", components.Select(x => x.Item2).ToArray()}, + {"IsTags", components.Select(x => x.Item3.Length == 0).ToArray()} + }; + + template.Session = d; + template.Initialize(); + var output = template.TransformText(); + + SaveFile("Sync/Utility/", "UnpackEntityUtility.cs", output); + } + + #endregion + + #region feature + + { + var template = new SyncFeatureGenerator(); + var d = new Dictionary + { + {"ComponentNames", components.Select(x => x.Item1.Replace("Component", "")).ToArray()} + }; + + template.Session = d; + template.Initialize(); + var output = template.TransformText(); + + SaveFile("Sync/Feature/", "ServerStateCaptureFeature.cs", output); + } + + #endregion + + #region compressors + + { + var template = new CompressorsGenerator(); + var d = new Dictionary + { + {"Prefix", "Sync"}, + {"CompressorNames", compressors.Select(x => x.Item1).ToArray()}, + {"Mins", compressors.Select(x => x.Item2).ToArray()}, + {"Maxs", compressors.Select(x => x.Item3).ToArray()}, + {"Precisions", compressors.Select(x => x.Item4).ToArray()} + }; + + template.Session = d; + template.Initialize(); + var output = template.TransformText(); + + SaveFile("Sync/Compressors/", "SyncCompressors.cs", output); + } + + #endregion + + AssetDatabase.Refresh(); + } + + [ContextMenu("Generate Command Code")] + private void GenerateCommandCode() + { + #region collect + + var clearPath = Path.Combine(Application.dataPath, OutputPath, "Command"); + if (Directory.Exists(clearPath)) + Directory.Delete(clearPath, true); + + ushort serverCounter = 0; + ushort clientCounter = 0; + var compressors = new List>(); + var serverCommands = new List>(); + var clientCommands = new List>(); + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + foreach (var type in assembly.GetTypes()) + { + var serverAttribute = type.GetCustomAttributes(typeof(CommandToServerAttribute), false); + + if (serverAttribute != null && serverAttribute.Length > 0) + { + var name = type.Name.Replace("Scheme", ""); + + var fields = type.GetFields(); + var fieldTypes = new List(); + var fieldNames = new List(); + var isEnums = new List(); + var isCompressed = new List(); + + foreach (var field in fields) + { + var compressed = false; + switch (field.FieldType.ToString()) + { + case "System.Single": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"Client{name.Replace("Component", "")}{field.Name}", compressor.Min, + compressor.Max, compressor.Precision)); + compressed = true; + } + } + break; + case "UnityEngine.Vector2": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"Client{name.Replace("Component", "")}{field.Name}X", compressor.XMin, + compressor.XMax, compressor.XPrecision)); + compressors.Add(new Tuple( + $"Client{name.Replace("Component", "")}{field.Name}Y", compressor.YMin, + compressor.YMax, compressor.YPrecision)); + compressed = true; + } + } + break; + case "UnityEngine.Vector3": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"Client{name.Replace("Component", "")}{field.Name}X", compressor.XMin, + compressor.XMax, compressor.XPrecision)); + compressors.Add(new Tuple( + $"Client{name.Replace("Component", "")}{field.Name}Y", compressor.YMin, + compressor.YMax, compressor.YPrecision)); + compressors.Add(new Tuple( + $"Client{name.Replace("Component", "")}{field.Name}Z", compressor.ZMin, + compressor.ZMax, compressor.ZPrecision)); + compressed = true; + } + } + break; + } + + isEnums.Add(field.FieldType.IsEnum); + fieldTypes.Add(field.FieldType.ToString()); + fieldNames.Add(field.Name); + isCompressed.Add(compressed); + } + + clientCommands.Add(new Tuple(name, clientCounter, + fieldTypes.ToArray(), fieldNames.ToArray(), isEnums.ToArray(), isCompressed.ToArray())); + clientCounter++; + } + + var clientAttribute = type.GetCustomAttributes(typeof(CommandToClientAttribute), false); + + if (clientAttribute != null && clientAttribute.Length > 0) + { + var name = type.Name.Replace("Scheme", ""); + + var fields = type.GetFields(); + var fieldTypes = new List(); + var fieldNames = new List(); + var isEnums = new List(); + var isCompressed = new List(); + + foreach (var field in fields) + { + var compressed = false; + switch (field.FieldType.ToString()) + { + case "System.Single": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"Server{name}{field.Name}", compressor.Min, + compressor.Max, compressor.Precision)); + compressed = true; + } + } + break; + case "UnityEngine.Vector2": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"Server{name}{field.Name}X", compressor.XMin, + compressor.XMax, compressor.XPrecision)); + compressors.Add(new Tuple( + $"Server{name}{field.Name}Y", compressor.YMin, + compressor.YMax, compressor.YPrecision)); + compressed = true; + } + } + break; + case "UnityEngine.Vector3": + { + var compressor = field.GetCustomAttribute(); + if (compressor != null) + { + compressors.Add(new Tuple( + $"Server{name}{field.Name}X", compressor.XMin, + compressor.XMax, compressor.XPrecision)); + compressors.Add(new Tuple( + $"Server{name}{field.Name}Y", compressor.YMin, + compressor.YMax, compressor.YPrecision)); + compressors.Add(new Tuple( + $"Server{name}{field.Name}Z", compressor.ZMin, + compressor.ZMax, compressor.ZPrecision)); + compressed = true; + } + } + break; + } + + isEnums.Add(field.FieldType.IsEnum); + fieldTypes.Add(field.FieldType.ToString()); + fieldNames.Add(field.Name); + isCompressed.Add(compressed); + } + + serverCommands.Add(new Tuple(name, serverCounter, + fieldTypes.ToArray(), fieldNames.ToArray(), isEnums.ToArray(), isCompressed.ToArray())); + serverCounter++; + } + } + + #endregion + + #region execution interfaces + + var serverSystem = new SchemeCommandExecutorInterfaceGenerator(); + var d = new Dictionary + { + {"Using", "Client"}, + {"Type", "Server"}, + {"SchemeNames", clientCommands.Select(x => x.Item1).ToArray()} + }; + + serverSystem.Session = d; + serverSystem.Initialize(); + var output = serverSystem.TransformText(); + + SaveFile("Command/Execution/", "IServerHandler.cs", output); + + var clientSystem = new SchemeCommandExecutorInterfaceGenerator(); + d = new Dictionary + { + {"Using", "Server"}, + {"Type", "Client"}, + {"SchemeNames", serverCommands.Select(x => x.Item1).ToArray()} + }; + + clientSystem.Session = d; + clientSystem.Initialize(); + output = clientSystem.TransformText(); + + SaveFile("Command/Execution/", "IClientHandler.cs", output); + + #endregion + + #region executors + + var serverExecutor = new SchemeCommandExecutorGenerator(); + d = new Dictionary + { + {"Using", "Client"}, + {"Type", "Server"}, + {"SchemeNames", clientCommands.Select(x => x.Item1).ToArray()}, + {"SchemeIds", clientCommands.Select(x => x.Item2).ToArray()} + }; + + serverExecutor.Session = d; + serverExecutor.Initialize(); + output = serverExecutor.TransformText(); + + SaveFile("Command/Execution/", "ServerCommandExecutor.cs", output); + + var clientExecutor = new SchemeCommandExecutorGenerator(); + d = new Dictionary + { + {"Using", "Server"}, + {"Type", "Client"}, + {"SchemeNames", serverCommands.Select(x => x.Item1).ToArray()}, + {"SchemeIds", serverCommands.Select(x => x.Item2).ToArray()} + }; + + clientExecutor.Session = d; + clientExecutor.Initialize(); + output = clientExecutor.TransformText(); + + SaveFile("Command/Execution/", "ClientCommandExecutor.cs", output); + + #endregion + + #region commands + + foreach (var tuple in serverCommands) + { + var componentTemplate = new SchemeCommandGenerator(); + d = new Dictionary + { + {"Namespace", "Server"}, + {"CommandName", tuple.Item1}, + {"CommandId", tuple.Item2}, + {"FieldTypes", tuple.Item3}, + {"FieldNames", tuple.Item4}, + {"IsEnums", tuple.Item5}, + {"IsCompressed", tuple.Item6} + }; + + componentTemplate.Session = d; + componentTemplate.Initialize(); + output = componentTemplate.TransformText(); + + SaveFile("Command/Server/", $"{tuple.Item1}Command.cs", output); + } + + foreach (var tuple in clientCommands) + { + var componentTemplate = new SchemeCommandGenerator(); + d = new Dictionary + { + {"Namespace", "Client"}, + {"CommandName", tuple.Item1}, + {"CommandId", tuple.Item2}, + {"FieldTypes", tuple.Item3}, + {"FieldNames", tuple.Item4}, + {"IsEnums", tuple.Item5}, + {"IsCompressed", tuple.Item6} + }; + + componentTemplate.Session = d; + componentTemplate.Initialize(); + output = componentTemplate.TransformText(); + + SaveFile("Command/Client/", $"{tuple.Item1}Command.cs", output); + } + + #endregion + + #region compressors + + { + var template = new CompressorsGenerator(); + d = new Dictionary + { + {"Prefix", "Command"}, + {"CompressorNames", compressors.Select(x => x.Item1).ToArray()}, + {"Mins", compressors.Select(x => x.Item2).ToArray()}, + {"Maxs", compressors.Select(x => x.Item3).ToArray()}, + {"Precisions", compressors.Select(x => x.Item4).ToArray()} + }; + + template.Session = d; + template.Initialize(); + output = template.TransformText(); + + SaveFile("Command/Compressors/", "SyncCompressors.cs", output); + } + + #endregion + + AssetDatabase.Refresh(); + } + + private void SaveFile(string directory, string fileName, string text) + { + try + { + var path = Path.Combine(Application.dataPath, OutputPath, directory); + Directory.CreateDirectory(path); + path = Path.Combine(path, fileName); + File.WriteAllText(path, text); + } + catch (Exception e) + { + Debug.LogError($"Error while saving file {name}:" + e.Message); + throw; + } + } +#endif +} \ No newline at end of file diff --git a/Assets/Sources/Codegen/CodegenExecutor/CodegenExecutor.cs.meta b/Assets/Sources/Codegen/CodegenExecutor/CodegenExecutor.cs.meta new file mode 100644 index 0000000..f6abc76 --- /dev/null +++ b/Assets/Sources/Codegen/CodegenExecutor/CodegenExecutor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16d40f4c171d6f647a7e84fcaaf26327 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/CommandSchemes.meta b/Assets/Sources/CommandSchemes.meta new file mode 100644 index 0000000..5fe8b56 --- /dev/null +++ b/Assets/Sources/CommandSchemes.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 35583590a39948738fb0e9ca84c2fae8 +timeCreated: 1557594366 \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ICommand.cs b/Assets/Sources/CommandSchemes/ICommand.cs new file mode 100644 index 0000000..7253355 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ICommand.cs @@ -0,0 +1,7 @@ +using NetStack.Serialization; + +public interface ICommand +{ + void Serialize(BitBuffer bitBuffer); + void Deserialize(BitBuffer bitBuffer); +} \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ICommand.cs.meta b/Assets/Sources/CommandSchemes/ICommand.cs.meta new file mode 100644 index 0000000..71dc59f --- /dev/null +++ b/Assets/Sources/CommandSchemes/ICommand.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f1be1272dfa84381b835c4f0a59a1870 +timeCreated: 1557598638 \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToClient.meta b/Assets/Sources/CommandSchemes/ToClient.meta new file mode 100644 index 0000000..a155dbc --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToClient.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4011258077df4954be2668a6e1c8c16d +timeCreated: 1557594392 \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToClient/ChatMessageScheme.cs b/Assets/Sources/CommandSchemes/ToClient/ChatMessageScheme.cs new file mode 100644 index 0000000..aabc328 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToClient/ChatMessageScheme.cs @@ -0,0 +1,11 @@ +using Codegen.CodegenAttributes; + +namespace Sources.CommandSchemes.ToClient +{ + [CommandToClient] + public class ChatMessageScheme + { + public string Message; + public ushort Sender; + } +} \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToClient/ChatMessageScheme.cs.meta b/Assets/Sources/CommandSchemes/ToClient/ChatMessageScheme.cs.meta new file mode 100644 index 0000000..1318962 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToClient/ChatMessageScheme.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 94a4bc6ac9d941e288b522bcb53d88ac +timeCreated: 1557599093 \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToClient/GrantedIdScheme.cs b/Assets/Sources/CommandSchemes/ToClient/GrantedIdScheme.cs new file mode 100644 index 0000000..5af1d77 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToClient/GrantedIdScheme.cs @@ -0,0 +1,10 @@ +using Codegen.CodegenAttributes; + +namespace Sources.CommandSchemes.ToClient +{ + [CommandToClient] + public class GrantedIdScheme + { + public ushort Id; + } +} \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToClient/GrantedIdScheme.cs.meta b/Assets/Sources/CommandSchemes/ToClient/GrantedIdScheme.cs.meta new file mode 100644 index 0000000..2d67f2e --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToClient/GrantedIdScheme.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e852bd7e236142e2a28151e90a9e1eb7 +timeCreated: 1557671269 \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToClient/SetTickrateScheme.cs b/Assets/Sources/CommandSchemes/ToClient/SetTickrateScheme.cs new file mode 100644 index 0000000..2ea6674 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToClient/SetTickrateScheme.cs @@ -0,0 +1,10 @@ +using Codegen.CodegenAttributes; + +namespace Sources.CommandSchemes.ToClient +{ + [CommandToClient] + public class SetTickrateScheme + { + public ushort Tickrate; + } +} \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToClient/SetTickrateScheme.cs.meta b/Assets/Sources/CommandSchemes/ToClient/SetTickrateScheme.cs.meta new file mode 100644 index 0000000..1d49ae0 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToClient/SetTickrateScheme.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2e8a4564270d4f57bc1ce346ee660205 +timeCreated: 1557922705 \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToServer.meta b/Assets/Sources/CommandSchemes/ToServer.meta new file mode 100644 index 0000000..710ff98 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToServer.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 56193667f4da4fffbda78a639b2cd32f +timeCreated: 1557594385 \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToServer/ChatMessageScheme.cs b/Assets/Sources/CommandSchemes/ToServer/ChatMessageScheme.cs new file mode 100644 index 0000000..ea4a399 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToServer/ChatMessageScheme.cs @@ -0,0 +1,10 @@ +using Codegen.CodegenAttributes; + +namespace Sources.CommandSchemes.ToServer +{ + [CommandToServer] + public class ChatMessageScheme + { + public string Message; + } +} \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToServer/ChatMessageScheme.cs.meta b/Assets/Sources/CommandSchemes/ToServer/ChatMessageScheme.cs.meta new file mode 100644 index 0000000..5fdd87e --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToServer/ChatMessageScheme.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5d578a4f6ef041108d864c7af5458ecd +timeCreated: 1557676027 \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToServer/RequestCharacterScheme.cs b/Assets/Sources/CommandSchemes/ToServer/RequestCharacterScheme.cs new file mode 100644 index 0000000..1091544 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToServer/RequestCharacterScheme.cs @@ -0,0 +1,9 @@ +using Codegen.CodegenAttributes; + +namespace Sources.CommandSchemes.ToServer +{ + [CommandToServer] + public class RequestCharacterScheme + { + } +} \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToServer/RequestCharacterScheme.cs.meta b/Assets/Sources/CommandSchemes/ToServer/RequestCharacterScheme.cs.meta new file mode 100644 index 0000000..9892b53 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToServer/RequestCharacterScheme.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f4e812ce938b43578290aeb186598d0e +timeCreated: 1558201839 \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToServer/SetTickrateScheme.cs b/Assets/Sources/CommandSchemes/ToServer/SetTickrateScheme.cs new file mode 100644 index 0000000..0b3f2f5 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToServer/SetTickrateScheme.cs @@ -0,0 +1,10 @@ +using Codegen.CodegenAttributes; + +namespace Sources.CommandSchemes.ToServer +{ + [CommandToServer] + public class SetTickrateScheme + { + public ushort Tickrate; + } +} \ No newline at end of file diff --git a/Assets/Sources/CommandSchemes/ToServer/SetTickrateScheme.cs.meta b/Assets/Sources/CommandSchemes/ToServer/SetTickrateScheme.cs.meta new file mode 100644 index 0000000..13f67d7 --- /dev/null +++ b/Assets/Sources/CommandSchemes/ToServer/SetTickrateScheme.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6fdcc79fbd1b42c9bee92a0700a36d69 +timeCreated: 1558385134 \ No newline at end of file diff --git a/Assets/Sources/Common.meta b/Assets/Sources/Common.meta new file mode 100644 index 0000000..b72e776 --- /dev/null +++ b/Assets/Sources/Common.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: eacb205581764de39af914df9ad5dd2d +timeCreated: 1556833308 \ No newline at end of file diff --git a/Assets/Sources/Common/DestroyedComponent.cs b/Assets/Sources/Common/DestroyedComponent.cs new file mode 100644 index 0000000..c3f7030 --- /dev/null +++ b/Assets/Sources/Common/DestroyedComponent.cs @@ -0,0 +1,9 @@ +using Entitas; +using Entitas.CodeGeneration.Attributes; + +[Game] +[Event(EventTarget.Self)] +[Cleanup(CleanupMode.DestroyEntity)] +public class DestroyedComponent : IComponent +{ +} \ No newline at end of file diff --git a/Assets/Sources/Common/DestroyedComponent.cs.meta b/Assets/Sources/Common/DestroyedComponent.cs.meta new file mode 100644 index 0000000..2748d13 --- /dev/null +++ b/Assets/Sources/Common/DestroyedComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 68cda93113f94ddb8d32b78c141bf027 +timeCreated: 1556833325 \ No newline at end of file diff --git a/Assets/Sources/Common/IdComponent.cs b/Assets/Sources/Common/IdComponent.cs new file mode 100644 index 0000000..5683407 --- /dev/null +++ b/Assets/Sources/Common/IdComponent.cs @@ -0,0 +1,15 @@ +using Codegen.CodegenAttributes; +using Entitas; +using Entitas.CodeGeneration.Attributes; + +[Game] +[Sync] +public partial class IdComponent : IComponent +{ + [PrimaryEntityIndex] public ushort Value; + + public IdComponent() + { + Value = ushort.MaxValue; + } +} \ No newline at end of file diff --git a/Assets/Sources/Common/IdComponent.cs.meta b/Assets/Sources/Common/IdComponent.cs.meta new file mode 100644 index 0000000..ace3520 --- /dev/null +++ b/Assets/Sources/Common/IdComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 929e1b29b0c54929af5b04cfe641591b +timeCreated: 1556835251 \ No newline at end of file diff --git a/Assets/Sources/CommonGeneratedFeature.cs b/Assets/Sources/CommonGeneratedFeature.cs new file mode 100644 index 0000000..cebb84b --- /dev/null +++ b/Assets/Sources/CommonGeneratedFeature.cs @@ -0,0 +1,8 @@ +public class CommonGeneratedFeature : Feature +{ + public CommonGeneratedFeature(Contexts contexts) + { + Add(new GameEventSystems(contexts)); + Add(new GameCleanupSystems(contexts)); + } +} \ No newline at end of file diff --git a/Assets/Sources/CommonGeneratedFeature.cs.meta b/Assets/Sources/CommonGeneratedFeature.cs.meta new file mode 100644 index 0000000..cb8f062 --- /dev/null +++ b/Assets/Sources/CommonGeneratedFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 410fcdef53cd4afca6a7005f26e7f0a2 +timeCreated: 1557759807 \ No newline at end of file diff --git a/Assets/Sources/GameController.cs b/Assets/Sources/GameController.cs new file mode 100644 index 0000000..8bf2e7e --- /dev/null +++ b/Assets/Sources/GameController.cs @@ -0,0 +1,270 @@ +using System; +using System.Collections.Generic; +using ENet; +using Entitas; +using Sources.Networking.Client; +using Sources.Networking.Server; +using UnityEngine; +using Random = UnityEngine.Random; + +public class GameController : MonoBehaviour +{ + public static GameController I; + [NonSerialized] public Mode Mode = Mode.Inactive; + + [Header("Server")] public int TargetTickPerSecond = 20; + + [Header("Client")] public int PanicStateCount = 10; + public int PanicCleanupTarget = 6; + + private IGroup _connectionsGroup; + private readonly List _connectionsBuffer = new List(ServerNetworkSystem.MaxPlayers); + + private Contexts _contexts; + + private ClientNetworkSystem _client; + private ClientFeature _clientFeature; + + private ServerNetworkSystem _server; + private ServerFeature _serverFeature; + + private int _tickCount; + private ushort _tickrate = 10; + private float _timer = 1f; + private int _totalTicksThisSecond; + + private string _ip = "192.168.1.1"; + private float _lastUpdate; + private string _message = ""; + private ushort _port = 9500; + + private int _lastId; + + private void Awake() + { + I = this; + Library.Initialize(); + + _contexts = Contexts.sharedInstance; + _connectionsGroup = _contexts.game.GetGroup(GameMatcher.Connection); + _lastUpdate = Time.realtimeSinceStartup; + } + + public void StartServer() + { + if (Mode != Mode.Inactive) + throw new ApplicationException("Can't start server if already active."); + + SetupHooks(_contexts); + + _server = new ServerNetworkSystem(_contexts); + _server.TickRate = (ushort) TargetTickPerSecond; + + var services = new Services + { + ServerSystem = _server + }; + + _serverFeature = new ServerFeature(_contexts, services); + Mode = Mode.Server; + } + + public void StartClient() + { + if (Mode != Mode.Inactive) + throw new ApplicationException("Can't start client if already active."); + + _client = new ClientNetworkSystem(_contexts); + _client.TickRate = (ushort) TargetTickPerSecond; + _client.PanicStateCount = PanicStateCount; + _client.PanicCleanupTarget = PanicCleanupTarget; + + var services = new Services + { + ClientSystem = _client + }; + + _clientFeature = new ClientFeature(_contexts, services); + Mode = Mode.Client; + } + + private void Update() + { + switch (Mode) + { + case Mode.Server: + TargetTickPerSecond = _server.TickRate; + break; + case Mode.Client: + TargetTickPerSecond = _client.TickRate; + break; + } + + while (_lastUpdate < Time.realtimeSinceStartup) + { + _lastUpdate += 1f / TargetTickPerSecond; + _tickCount++; + switch (Mode) + { + case Mode.Server: + _server.Execute(); + _serverFeature.Execute(); + _serverFeature.Cleanup(); + break; + case Mode.Client: + _client.UpdateNetwork(); + _client.Execute(); + _clientFeature.Execute(); + _clientFeature.Cleanup(); + break; + } + } + + _timer -= Time.deltaTime; + if (_timer < 0f) + { + _totalTicksThisSecond = _tickCount; + _tickCount = 0; + _timer += 1; + } + } + + private void OnGUI() + { + GUILayout.Label($"TPS {_totalTicksThisSecond}"); + switch (Mode) + { + case Mode.Inactive: + if (GUILayout.Button("Setup Server")) StartServer(); + if (GUILayout.Button("Setup Client")) StartClient(); + break; + case Mode.Server: + switch (_server.State) + { + case ServerState.Stopped: + GUILayout.Label("Server stopped"); + GUILayout.BeginHorizontal(); + _ip = GUILayout.TextField(_ip, GUILayout.Width(120)); + var tmp = + GUILayout.TextField(_port.ToString(), GUILayout.Width(60)); + if (ushort.TryParse(tmp, out var result)) _port = result; + if (GUILayout.Button("Start!")) + { + var address = new Address(); + address.Port = _port; + address.SetHost(_ip); + _server.StartServer(address); + } + + GUILayout.EndHorizontal(); + if (GUILayout.Button("localhost")) _ip = "localhost"; + break; + case ServerState.Starting: + GUILayout.Label("Server starting"); + break; + case ServerState.Working: + GUILayout.Label("Server working"); + if (GUILayout.Button("Stop!")) _server.StopServer(); + break; + case ServerState.Stopping: + GUILayout.Label("Server stopping"); + break; + } + + break; + case Mode.Client: + switch (_client.State) + { + case ClientState.Disconnected: + GUILayout.Label("Disconnected"); + GUILayout.BeginHorizontal(); + _ip = GUILayout.TextField(_ip, GUILayout.Width(120)); + var tmp = + GUILayout.TextField(_port.ToString(), GUILayout.Width(60)); + if (ushort.TryParse(tmp, out var result)) _port = result; + if (GUILayout.Button("Connect!")) + { + var address = new Address(); + address.Port = _port; + address.SetHost(_ip); + _client.Connect(address); + } + + GUILayout.EndHorizontal(); + if (GUILayout.Button("localhost")) _ip = "localhost"; + break; + case ClientState.Connecting: + GUILayout.Label("Connecting"); + if (GUILayout.Button("Cancel")) _client.EnqueueRequest(NetworkThreadRequest.CancelConnect); + break; + case ClientState.WaitingForId: + GUILayout.Label("WaitingForId"); + break; + case ClientState.Connected: + GUILayout.BeginHorizontal(); + GUILayout.Label("Connected"); + tmp = GUILayout.TextField(_tickrate.ToString(), GUILayout.Width(60)); + if (ushort.TryParse(tmp, out result)) + if (result > 0) + _tickrate = result; + + if (GUILayout.Button("Set tickRate")) + _client.EnqueueCommand(new ClientSetTickrateCommand {Tickrate = _tickrate}); + + var str = "States :"; + for (var i = 0; i < _client.StatesCount; i++) str += "#"; + GUILayout.Label(str); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + _message = GUILayout.TextField(_message, GUILayout.Width(120)); + if (GUILayout.Button("Send message")) + _client.EnqueueCommand(new ClientChatMessageCommand {Message = _message}); + if (GUILayout.Button("Request character")) + _client.EnqueueCommand(new ClientRequestCharacterCommand()); + GUILayout.EndHorizontal(); + if (GUILayout.Button("Disconnect")) _client.Disconnect(); + break; + case ClientState.Disconnecting: + GUILayout.Label("Disconnecting"); + break; + } + + break; + } + } + + private void OnDestroy() + { + switch (Mode) + { + case Mode.Server: + _server.TearDown(); + _serverFeature.TearDown(); + break; + case Mode.Client: + _client.TearDown(); + _clientFeature.TearDown(); + break; + } + + Library.Deinitialize(); + } + + private void SetupHooks(Contexts contexts) + { + contexts.Reset(); + contexts.game.OnEntityCreated += (context, entity) => + { + ((GameEntity) entity).AddId((ushort) _lastId); + _lastId++; + }; + } +} + +public enum Mode +{ + Inactive, + Server, + Client +} \ No newline at end of file diff --git a/Assets/Sources/GameController.cs.meta b/Assets/Sources/GameController.cs.meta new file mode 100644 index 0000000..3400457 --- /dev/null +++ b/Assets/Sources/GameController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dbbbddda32854a78aa149317fbcf6c63 +timeCreated: 1556835320 \ No newline at end of file diff --git a/Assets/Sources/Gameplay.meta b/Assets/Sources/Gameplay.meta new file mode 100644 index 0000000..240f751 --- /dev/null +++ b/Assets/Sources/Gameplay.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a459d548064819d4faeac7e9959bea15 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Gameplay/Cleanup.meta b/Assets/Sources/Gameplay/Cleanup.meta new file mode 100644 index 0000000..c7156d3 --- /dev/null +++ b/Assets/Sources/Gameplay/Cleanup.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a3819cbfe421ef4591ed8beade42d2f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Gameplay/Cleanup/DestroyDestroyedGameSystem.cs b/Assets/Sources/Gameplay/Cleanup/DestroyDestroyedGameSystem.cs new file mode 100644 index 0000000..76933f3 --- /dev/null +++ b/Assets/Sources/Gameplay/Cleanup/DestroyDestroyedGameSystem.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Entitas; + +public sealed class DestroyDestroyedGameSystem : ICleanupSystem { + + readonly IGroup _group; + readonly List _buffer = new List(); + + public DestroyDestroyedGameSystem(Contexts contexts) { + _group = contexts.game.GetGroup(GameMatcher.Destroyed); + } + + public void Cleanup() { + foreach (var e in _group.GetEntities(_buffer)) { + e.Destroy(); + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Gameplay/Cleanup/DestroyDestroyedGameSystem.cs.meta b/Assets/Sources/Gameplay/Cleanup/DestroyDestroyedGameSystem.cs.meta new file mode 100644 index 0000000..3b3b453 --- /dev/null +++ b/Assets/Sources/Gameplay/Cleanup/DestroyDestroyedGameSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1031de9a0e542604aa6c82fd62743636 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Gameplay/Cleanup/GameCleanupSystems.cs b/Assets/Sources/Gameplay/Cleanup/GameCleanupSystems.cs new file mode 100644 index 0000000..bfa6b25 --- /dev/null +++ b/Assets/Sources/Gameplay/Cleanup/GameCleanupSystems.cs @@ -0,0 +1,6 @@ +public sealed class GameCleanupSystems : Feature { + + public GameCleanupSystems(Contexts contexts) { + Add(new DestroyDestroyedGameSystem(contexts)); + } +} \ No newline at end of file diff --git a/Assets/Sources/Gameplay/Cleanup/GameCleanupSystems.cs.meta b/Assets/Sources/Gameplay/Cleanup/GameCleanupSystems.cs.meta new file mode 100644 index 0000000..5835dd7 --- /dev/null +++ b/Assets/Sources/Gameplay/Cleanup/GameCleanupSystems.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a98d0021cf2dc2a44961d60da2b77009 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Gameplay/Client.meta b/Assets/Sources/Gameplay/Client.meta new file mode 100644 index 0000000..bd24e41 --- /dev/null +++ b/Assets/Sources/Gameplay/Client.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ce4bd5193e9442f6bf0b0dfe28c3b1ad +timeCreated: 1557775740 \ No newline at end of file diff --git a/Assets/Sources/Gameplay/ClientGameplayFeature.cs b/Assets/Sources/Gameplay/ClientGameplayFeature.cs new file mode 100644 index 0000000..ab6b236 --- /dev/null +++ b/Assets/Sources/Gameplay/ClientGameplayFeature.cs @@ -0,0 +1,6 @@ +public class ClientGameplayFeature : Feature +{ + public ClientGameplayFeature(Contexts contexts, Services services) + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Gameplay/ClientGameplayFeature.cs.meta b/Assets/Sources/Gameplay/ClientGameplayFeature.cs.meta new file mode 100644 index 0000000..0091a09 --- /dev/null +++ b/Assets/Sources/Gameplay/ClientGameplayFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 60fe02e654cc4660b676ecd8b1c434d0 +timeCreated: 1557775928 \ No newline at end of file diff --git a/Assets/Sources/Gameplay/Common.meta b/Assets/Sources/Gameplay/Common.meta new file mode 100644 index 0000000..2149a62 --- /dev/null +++ b/Assets/Sources/Gameplay/Common.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ce47a1fe8d0c48dbbe92e88b368be477 +timeCreated: 1557775724 \ No newline at end of file diff --git a/Assets/Sources/Gameplay/CommonGameplayFeature.cs b/Assets/Sources/Gameplay/CommonGameplayFeature.cs new file mode 100644 index 0000000..77e3f51 --- /dev/null +++ b/Assets/Sources/Gameplay/CommonGameplayFeature.cs @@ -0,0 +1,6 @@ +public class CommonGameplayFeature : Feature +{ + public CommonGameplayFeature(Contexts contexts, Services services) + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Gameplay/CommonGameplayFeature.cs.meta b/Assets/Sources/Gameplay/CommonGameplayFeature.cs.meta new file mode 100644 index 0000000..f8647b2 --- /dev/null +++ b/Assets/Sources/Gameplay/CommonGameplayFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2c6135d09f474085ade568535be751c9 +timeCreated: 1557776025 \ No newline at end of file diff --git a/Assets/Sources/Gameplay/Server.meta b/Assets/Sources/Gameplay/Server.meta new file mode 100644 index 0000000..67f5249 --- /dev/null +++ b/Assets/Sources/Gameplay/Server.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 26daafa7f2094000b01d40d7886cc47b +timeCreated: 1557775731 \ No newline at end of file diff --git a/Assets/Sources/Gameplay/Server/Character.meta b/Assets/Sources/Gameplay/Server/Character.meta new file mode 100644 index 0000000..f6cded9 --- /dev/null +++ b/Assets/Sources/Gameplay/Server/Character.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: add92519f9da47a8be206bf303ae2682 +timeCreated: 1558107065 \ No newline at end of file diff --git a/Assets/Sources/Gameplay/Server/Character/Character.cs b/Assets/Sources/Gameplay/Server/Character/Character.cs new file mode 100644 index 0000000..946ebf6 --- /dev/null +++ b/Assets/Sources/Gameplay/Server/Character/Character.cs @@ -0,0 +1,8 @@ +using Codegen.CodegenAttributes; +using Entitas; + +[Game] +[Sync] +public partial class Character : IComponent +{ +} \ No newline at end of file diff --git a/Assets/Sources/Gameplay/Server/Character/Character.cs.meta b/Assets/Sources/Gameplay/Server/Character/Character.cs.meta new file mode 100644 index 0000000..d84c32b --- /dev/null +++ b/Assets/Sources/Gameplay/Server/Character/Character.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7d6250aee6fc478cbf00a4b87a2265ff +timeCreated: 1558107070 \ No newline at end of file diff --git a/Assets/Sources/Gameplay/Server/Character/ControlledBy.cs b/Assets/Sources/Gameplay/Server/Character/ControlledBy.cs new file mode 100644 index 0000000..db07e87 --- /dev/null +++ b/Assets/Sources/Gameplay/Server/Character/ControlledBy.cs @@ -0,0 +1,10 @@ +using Codegen.CodegenAttributes; +using Entitas; +using Entitas.CodeGeneration.Attributes; + +[Game] +[Sync] +public partial class ControlledBy : IComponent +{ + [PrimaryEntityIndex] public ushort Value; +} \ No newline at end of file diff --git a/Assets/Sources/Gameplay/Server/Character/ControlledBy.cs.meta b/Assets/Sources/Gameplay/Server/Character/ControlledBy.cs.meta new file mode 100644 index 0000000..3f61c5c --- /dev/null +++ b/Assets/Sources/Gameplay/Server/Character/ControlledBy.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6e64bdea8db349a5bfe64490ce656e0d +timeCreated: 1558107120 \ No newline at end of file diff --git a/Assets/Sources/Gameplay/ServerGameplayFeature.cs b/Assets/Sources/Gameplay/ServerGameplayFeature.cs new file mode 100644 index 0000000..4570ca6 --- /dev/null +++ b/Assets/Sources/Gameplay/ServerGameplayFeature.cs @@ -0,0 +1,6 @@ +public class ServerGameplayFeature : Feature +{ + public ServerGameplayFeature(Contexts contexts, Services services) + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Gameplay/ServerGameplayFeature.cs.meta b/Assets/Sources/Gameplay/ServerGameplayFeature.cs.meta new file mode 100644 index 0000000..f02dd2e --- /dev/null +++ b/Assets/Sources/Gameplay/ServerGameplayFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ed61ffd1840f4e52ba1d7b308145a0dc +timeCreated: 1557775992 \ No newline at end of file diff --git a/Assets/Sources/Generated.meta b/Assets/Sources/Generated.meta new file mode 100644 index 0000000..218e744 --- /dev/null +++ b/Assets/Sources/Generated.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b068ead1c3f5d54eb74f04148a25d08 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command.meta b/Assets/Sources/Generated/Command.meta new file mode 100644 index 0000000..77259e4 --- /dev/null +++ b/Assets/Sources/Generated/Command.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9ceef8a286f46a4b9fe205d7fd61f11 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Client.meta b/Assets/Sources/Generated/Command/Client.meta new file mode 100644 index 0000000..486f852 --- /dev/null +++ b/Assets/Sources/Generated/Command/Client.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e3d5da0ebf3dd84b9eaec269e3fbee2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Client/ChatMessageCommand.cs b/Assets/Sources/Generated/Command/Client/ChatMessageCommand.cs new file mode 100644 index 0000000..06ffe86 --- /dev/null +++ b/Assets/Sources/Generated/Command/Client/ChatMessageCommand.cs @@ -0,0 +1,17 @@ +using NetStack.Serialization; + +public struct ClientChatMessageCommand : ICommand, IClientCommand +{ + public System.String Message; + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(0); + + bitBuffer.AddString(Message); + } + + public void Deserialize(BitBuffer bitBuffer) + { + Message = bitBuffer.ReadString(); + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Client/ChatMessageCommand.cs.meta b/Assets/Sources/Generated/Command/Client/ChatMessageCommand.cs.meta new file mode 100644 index 0000000..ce91369 --- /dev/null +++ b/Assets/Sources/Generated/Command/Client/ChatMessageCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9a6c41b5ff5467479f6f8105f68393e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Client/RequestCharacterCommand.cs b/Assets/Sources/Generated/Command/Client/RequestCharacterCommand.cs new file mode 100644 index 0000000..6f9e109 --- /dev/null +++ b/Assets/Sources/Generated/Command/Client/RequestCharacterCommand.cs @@ -0,0 +1,14 @@ +using NetStack.Serialization; + +public struct ClientRequestCharacterCommand : ICommand, IClientCommand +{ + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(1); + + } + + public void Deserialize(BitBuffer bitBuffer) + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Client/RequestCharacterCommand.cs.meta b/Assets/Sources/Generated/Command/Client/RequestCharacterCommand.cs.meta new file mode 100644 index 0000000..a0b8910 --- /dev/null +++ b/Assets/Sources/Generated/Command/Client/RequestCharacterCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3bcaeb854aef90449887d074aeb6f9c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Client/SetTickrateCommand.cs b/Assets/Sources/Generated/Command/Client/SetTickrateCommand.cs new file mode 100644 index 0000000..e213981 --- /dev/null +++ b/Assets/Sources/Generated/Command/Client/SetTickrateCommand.cs @@ -0,0 +1,17 @@ +using NetStack.Serialization; + +public struct ClientSetTickrateCommand : ICommand, IClientCommand +{ + public System.UInt16 Tickrate; + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(2); + + bitBuffer.AddUShort(Tickrate); + } + + public void Deserialize(BitBuffer bitBuffer) + { + Tickrate = bitBuffer.ReadUShort(); + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Client/SetTickrateCommand.cs.meta b/Assets/Sources/Generated/Command/Client/SetTickrateCommand.cs.meta new file mode 100644 index 0000000..7016fd0 --- /dev/null +++ b/Assets/Sources/Generated/Command/Client/SetTickrateCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1caa3b54131741c45af9ebe904e37b06 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Compressors.meta b/Assets/Sources/Generated/Command/Compressors.meta new file mode 100644 index 0000000..c126871 --- /dev/null +++ b/Assets/Sources/Generated/Command/Compressors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66079a72588ae4c4683dc879c97d5e24 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Compressors/SyncCompressors.cs b/Assets/Sources/Generated/Command/Compressors/SyncCompressors.cs new file mode 100644 index 0000000..dfa4dcc --- /dev/null +++ b/Assets/Sources/Generated/Command/Compressors/SyncCompressors.cs @@ -0,0 +1,9 @@ +using NetStack.Compression; + +public static class CommandCompressors +{ + + static CommandCompressors() + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Compressors/SyncCompressors.cs.meta b/Assets/Sources/Generated/Command/Compressors/SyncCompressors.cs.meta new file mode 100644 index 0000000..690ddaa --- /dev/null +++ b/Assets/Sources/Generated/Command/Compressors/SyncCompressors.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4851cb22edcf4ba4e87310230be6ecfd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Execution.meta b/Assets/Sources/Generated/Command/Execution.meta new file mode 100644 index 0000000..0301c1b --- /dev/null +++ b/Assets/Sources/Generated/Command/Execution.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2cbb8536ae171ae4a8a7074e91c541d9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Execution/ClientCommandExecutor.cs b/Assets/Sources/Generated/Command/Execution/ClientCommandExecutor.cs new file mode 100644 index 0000000..27f18d4 --- /dev/null +++ b/Assets/Sources/Generated/Command/Execution/ClientCommandExecutor.cs @@ -0,0 +1,43 @@ +using NetStack.Serialization; +using Sources.Tools; + +public static class ClientCommandExecutor +{ + public static void Execute(IClientHandler handler, BitBuffer buffer, ushort commandCount) + { + for (int i = 0; i < commandCount; i++) + { + var commandId = buffer.ReadUShort(); + switch (commandId) + { + + case 0: + { + Logger.I.Log("ClientCommandExecutor", "Executing ServerChatMessageCommand"); + var c = new ServerChatMessageCommand(); + c.Deserialize(buffer); + handler.HandleChatMessageCommand(ref c); + break; + } + + case 1: + { + Logger.I.Log("ClientCommandExecutor", "Executing ServerGrantedIdCommand"); + var c = new ServerGrantedIdCommand(); + c.Deserialize(buffer); + handler.HandleGrantedIdCommand(ref c); + break; + } + + case 2: + { + Logger.I.Log("ClientCommandExecutor", "Executing ServerSetTickrateCommand"); + var c = new ServerSetTickrateCommand(); + c.Deserialize(buffer); + handler.HandleSetTickrateCommand(ref c); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Execution/ClientCommandExecutor.cs.meta b/Assets/Sources/Generated/Command/Execution/ClientCommandExecutor.cs.meta new file mode 100644 index 0000000..08a38dc --- /dev/null +++ b/Assets/Sources/Generated/Command/Execution/ClientCommandExecutor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae152834dfbf07a4982e3c86ba2a5f5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Execution/IClientHandler.cs b/Assets/Sources/Generated/Command/Execution/IClientHandler.cs new file mode 100644 index 0000000..33b1a8f --- /dev/null +++ b/Assets/Sources/Generated/Command/Execution/IClientHandler.cs @@ -0,0 +1,8 @@ +public interface IClientHandler +{ + void HandleChatMessageCommand(ref ServerChatMessageCommand command); + void HandleGrantedIdCommand(ref ServerGrantedIdCommand command); + void HandleSetTickrateCommand(ref ServerSetTickrateCommand command); +} + +public interface IClientCommand{} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Execution/IClientHandler.cs.meta b/Assets/Sources/Generated/Command/Execution/IClientHandler.cs.meta new file mode 100644 index 0000000..52948e3 --- /dev/null +++ b/Assets/Sources/Generated/Command/Execution/IClientHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f185a23acafaebc4889899f003aeca13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Execution/IServerHandler.cs b/Assets/Sources/Generated/Command/Execution/IServerHandler.cs new file mode 100644 index 0000000..89f4b28 --- /dev/null +++ b/Assets/Sources/Generated/Command/Execution/IServerHandler.cs @@ -0,0 +1,8 @@ +public interface IServerHandler +{ + void HandleChatMessageCommand(ref ClientChatMessageCommand command); + void HandleRequestCharacterCommand(ref ClientRequestCharacterCommand command); + void HandleSetTickrateCommand(ref ClientSetTickrateCommand command); +} + +public interface IServerCommand{} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Execution/IServerHandler.cs.meta b/Assets/Sources/Generated/Command/Execution/IServerHandler.cs.meta new file mode 100644 index 0000000..d59797e --- /dev/null +++ b/Assets/Sources/Generated/Command/Execution/IServerHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bac11dfd945caa459dcb90879e764f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Execution/ServerCommandExecutor.cs b/Assets/Sources/Generated/Command/Execution/ServerCommandExecutor.cs new file mode 100644 index 0000000..bac9c18 --- /dev/null +++ b/Assets/Sources/Generated/Command/Execution/ServerCommandExecutor.cs @@ -0,0 +1,43 @@ +using NetStack.Serialization; +using Sources.Tools; + +public static class ServerCommandExecutor +{ + public static void Execute(IServerHandler handler, BitBuffer buffer, ushort commandCount) + { + for (int i = 0; i < commandCount; i++) + { + var commandId = buffer.ReadUShort(); + switch (commandId) + { + + case 0: + { + Logger.I.Log("ServerCommandExecutor", "Executing ClientChatMessageCommand"); + var c = new ClientChatMessageCommand(); + c.Deserialize(buffer); + handler.HandleChatMessageCommand(ref c); + break; + } + + case 1: + { + Logger.I.Log("ServerCommandExecutor", "Executing ClientRequestCharacterCommand"); + var c = new ClientRequestCharacterCommand(); + c.Deserialize(buffer); + handler.HandleRequestCharacterCommand(ref c); + break; + } + + case 2: + { + Logger.I.Log("ServerCommandExecutor", "Executing ClientSetTickrateCommand"); + var c = new ClientSetTickrateCommand(); + c.Deserialize(buffer); + handler.HandleSetTickrateCommand(ref c); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Execution/ServerCommandExecutor.cs.meta b/Assets/Sources/Generated/Command/Execution/ServerCommandExecutor.cs.meta new file mode 100644 index 0000000..7cd23a8 --- /dev/null +++ b/Assets/Sources/Generated/Command/Execution/ServerCommandExecutor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b32e8bc56c359104abbe05d4946fd74d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Server.meta b/Assets/Sources/Generated/Command/Server.meta new file mode 100644 index 0000000..ad920d0 --- /dev/null +++ b/Assets/Sources/Generated/Command/Server.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a89b58cc54c3ee74fb07528eca827228 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Server/ChatMessageCommand.cs b/Assets/Sources/Generated/Command/Server/ChatMessageCommand.cs new file mode 100644 index 0000000..1a04d54 --- /dev/null +++ b/Assets/Sources/Generated/Command/Server/ChatMessageCommand.cs @@ -0,0 +1,20 @@ +using NetStack.Serialization; + +public struct ServerChatMessageCommand : ICommand, IServerCommand +{ + public System.String Message; + public System.UInt16 Sender; + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(0); + + bitBuffer.AddString(Message); + bitBuffer.AddUShort(Sender); + } + + public void Deserialize(BitBuffer bitBuffer) + { + Message = bitBuffer.ReadString(); + Sender = bitBuffer.ReadUShort(); + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Server/ChatMessageCommand.cs.meta b/Assets/Sources/Generated/Command/Server/ChatMessageCommand.cs.meta new file mode 100644 index 0000000..770926f --- /dev/null +++ b/Assets/Sources/Generated/Command/Server/ChatMessageCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5211e1d87b1728b4bb7a618fb612ed09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Server/GrantedIdCommand.cs b/Assets/Sources/Generated/Command/Server/GrantedIdCommand.cs new file mode 100644 index 0000000..499779d --- /dev/null +++ b/Assets/Sources/Generated/Command/Server/GrantedIdCommand.cs @@ -0,0 +1,17 @@ +using NetStack.Serialization; + +public struct ServerGrantedIdCommand : ICommand, IServerCommand +{ + public System.UInt16 Id; + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(1); + + bitBuffer.AddUShort(Id); + } + + public void Deserialize(BitBuffer bitBuffer) + { + Id = bitBuffer.ReadUShort(); + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Server/GrantedIdCommand.cs.meta b/Assets/Sources/Generated/Command/Server/GrantedIdCommand.cs.meta new file mode 100644 index 0000000..66bac0b --- /dev/null +++ b/Assets/Sources/Generated/Command/Server/GrantedIdCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab0d8d88cbd960f478a1c2cfc30b422d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Command/Server/SetTickrateCommand.cs b/Assets/Sources/Generated/Command/Server/SetTickrateCommand.cs new file mode 100644 index 0000000..aed523e --- /dev/null +++ b/Assets/Sources/Generated/Command/Server/SetTickrateCommand.cs @@ -0,0 +1,17 @@ +using NetStack.Serialization; + +public struct ServerSetTickrateCommand : ICommand, IServerCommand +{ + public System.UInt16 Tickrate; + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(2); + + bitBuffer.AddUShort(Tickrate); + } + + public void Deserialize(BitBuffer bitBuffer) + { + Tickrate = bitBuffer.ReadUShort(); + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Command/Server/SetTickrateCommand.cs.meta b/Assets/Sources/Generated/Command/Server/SetTickrateCommand.cs.meta new file mode 100644 index 0000000..a0843ad --- /dev/null +++ b/Assets/Sources/Generated/Command/Server/SetTickrateCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d197b5ff57fa8c49a60c25eb679973e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync.meta b/Assets/Sources/Generated/Sync.meta new file mode 100644 index 0000000..0d25511 --- /dev/null +++ b/Assets/Sources/Generated/Sync.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a051aa1e17d55d74cb8de545e492b667 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture.meta b/Assets/Sources/Generated/Sync/Capture.meta new file mode 100644 index 0000000..ba1d43c --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aef0405c7e145b84ebe7f844e8b38e11 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedCharacterSystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedCharacterSystem.cs new file mode 100644 index 0000000..f7b9069 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedCharacterSystem.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + + +public class ServerCaptureChangedCharacterSystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureChangedCharacterSystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.Character.Added()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && entity.isCharacter; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.ChangedComponents.AddUShort(e.id.Value); + _server.ChangedComponents.AddUShort(1); + _server.ChangedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedCharacterSystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedCharacterSystem.cs.meta new file mode 100644 index 0000000..15f24a3 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedCharacterSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 636d0e1ffa182b24f9cecdb486fd2fb9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedConnectionSystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedConnectionSystem.cs new file mode 100644 index 0000000..de920e9 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedConnectionSystem.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + + +public class ServerCaptureChangedConnectionSystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureChangedConnectionSystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.Connection.Added()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && entity.hasConnection; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.ChangedComponents.AddUShort(e.id.Value); + e.connection.Serialize(_server.ChangedComponents); + _server.ChangedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedConnectionSystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedConnectionSystem.cs.meta new file mode 100644 index 0000000..d6d328d --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedConnectionSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c393bad8a325ed841821b2f15b5d8e5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedControlledBySystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedControlledBySystem.cs new file mode 100644 index 0000000..ac77266 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedControlledBySystem.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + + +public class ServerCaptureChangedControlledBySystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureChangedControlledBySystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.ControlledBy.Added()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && entity.hasControlledBy; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.ChangedComponents.AddUShort(e.id.Value); + e.controlledBy.Serialize(_server.ChangedComponents); + _server.ChangedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedControlledBySystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedControlledBySystem.cs.meta new file mode 100644 index 0000000..0a857db --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedControlledBySystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff531dfa0001c0544aa1001e4ef43f78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedIdSystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedIdSystem.cs new file mode 100644 index 0000000..3112569 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedIdSystem.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + + +public class ServerCaptureChangedIdSystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureChangedIdSystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.Id.Added()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && entity.hasId; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.ChangedComponents.AddUShort(e.id.Value); + e.id.Serialize(_server.ChangedComponents); + _server.ChangedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedIdSystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedIdSystem.cs.meta new file mode 100644 index 0000000..8d33873 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedIdSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd87814bfd1322542a74e8c71be6ccd7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedSyncSystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedSyncSystem.cs new file mode 100644 index 0000000..47933f1 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedSyncSystem.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + + +public class ServerCaptureChangedSyncSystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureChangedSyncSystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.Sync.Added()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && entity.isSync; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.ChangedComponents.AddUShort(e.id.Value); + _server.ChangedComponents.AddUShort(4); + _server.ChangedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedSyncSystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedSyncSystem.cs.meta new file mode 100644 index 0000000..a6d6f07 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureChangedSyncSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c17a8b303444dca49a4b8e6903d5ab04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedCharacterSystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedCharacterSystem.cs new file mode 100644 index 0000000..78950be --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedCharacterSystem.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + +public class ServerCaptureRemovedCharacterSystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureRemovedCharacterSystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.Character.Removed()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && entity.isCharacter; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.RemovedComponents.AddUShort(e.id.Value); + _server.RemovedComponents.AddUShort(1); + _server.RemovedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedCharacterSystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedCharacterSystem.cs.meta new file mode 100644 index 0000000..a982701 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedCharacterSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 932899bd60c3eb1458bb7ccb5a8edf48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedConnectionSystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedConnectionSystem.cs new file mode 100644 index 0000000..5163a6a --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedConnectionSystem.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + +public class ServerCaptureRemovedConnectionSystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureRemovedConnectionSystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.Connection.Removed()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && !entity.hasConnection; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.RemovedComponents.AddUShort(e.id.Value); + _server.RemovedComponents.AddUShort(3); + _server.RemovedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedConnectionSystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedConnectionSystem.cs.meta new file mode 100644 index 0000000..79a4c90 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedConnectionSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f80f69ef94173441977116e7bc1b988 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedControlledBySystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedControlledBySystem.cs new file mode 100644 index 0000000..da3dbb2 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedControlledBySystem.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + +public class ServerCaptureRemovedControlledBySystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureRemovedControlledBySystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.ControlledBy.Removed()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && !entity.hasControlledBy; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.RemovedComponents.AddUShort(e.id.Value); + _server.RemovedComponents.AddUShort(2); + _server.RemovedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedControlledBySystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedControlledBySystem.cs.meta new file mode 100644 index 0000000..6ff3e9a --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedControlledBySystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9206889da990bb949a669328bcb27745 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedIdSystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedIdSystem.cs new file mode 100644 index 0000000..ac5fc3e --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedIdSystem.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + +public class ServerCaptureRemovedIdSystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureRemovedIdSystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.Id.Removed()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && !entity.hasId; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.RemovedComponents.AddUShort(e.id.Value); + _server.RemovedComponents.AddUShort(0); + _server.RemovedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedIdSystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedIdSystem.cs.meta new file mode 100644 index 0000000..879efc0 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedIdSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d64118b099d86942a62628f13633cd2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedSyncSystem.cs b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedSyncSystem.cs new file mode 100644 index 0000000..2d7d195 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedSyncSystem.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + +public class ServerCaptureRemovedSyncSystem : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureRemovedSyncSystem (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.Sync.Removed()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && entity.isWasSynced && entity.isSync; + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.RemovedComponents.AddUShort(e.id.Value); + _server.RemovedComponents.AddUShort(4); + _server.RemovedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedSyncSystem.cs.meta b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedSyncSystem.cs.meta new file mode 100644 index 0000000..02f904c --- /dev/null +++ b/Assets/Sources/Generated/Sync/Capture/ServerCaptureRemovedSyncSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c07c9a250da33b74786c75a9d208a37f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Components.meta b/Assets/Sources/Generated/Sync/Components.meta new file mode 100644 index 0000000..3c03239 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 61aef9424aa37ab4fa531201bfa1b728 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Components/Character.cs b/Assets/Sources/Generated/Sync/Components/Character.cs new file mode 100644 index 0000000..6663e1d --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/Character.cs @@ -0,0 +1,14 @@ +using NetStack.Serialization; + +public partial class Character : INetworkComponent +{ + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(1); + + } + + public void Deserialize(BitBuffer bitBuffer) + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Components/Character.cs.meta b/Assets/Sources/Generated/Sync/Components/Character.cs.meta new file mode 100644 index 0000000..2aea38e --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/Character.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 127678bdb84643c4596d592076480bf6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Components/Connection.cs b/Assets/Sources/Generated/Sync/Components/Connection.cs new file mode 100644 index 0000000..4e7ebbf --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/Connection.cs @@ -0,0 +1,16 @@ +using NetStack.Serialization; + +public partial class Connection : INetworkComponent +{ + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(3); + + bitBuffer.AddUShort(Id); + } + + public void Deserialize(BitBuffer bitBuffer) + { + Id = bitBuffer.ReadUShort(); + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Components/Connection.cs.meta b/Assets/Sources/Generated/Sync/Components/Connection.cs.meta new file mode 100644 index 0000000..6472751 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/Connection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e4f796d844b2d746988928ff7eb3834 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Components/ControlledBy.cs b/Assets/Sources/Generated/Sync/Components/ControlledBy.cs new file mode 100644 index 0000000..12e93f9 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/ControlledBy.cs @@ -0,0 +1,16 @@ +using NetStack.Serialization; + +public partial class ControlledBy : INetworkComponent +{ + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(2); + + bitBuffer.AddUShort(Value); + } + + public void Deserialize(BitBuffer bitBuffer) + { + Value = bitBuffer.ReadUShort(); + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Components/ControlledBy.cs.meta b/Assets/Sources/Generated/Sync/Components/ControlledBy.cs.meta new file mode 100644 index 0000000..9973ca5 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/ControlledBy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7ed7ca713cd617429e5845af6ed1922 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Components/IdComponent.cs b/Assets/Sources/Generated/Sync/Components/IdComponent.cs new file mode 100644 index 0000000..c766916 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/IdComponent.cs @@ -0,0 +1,16 @@ +using NetStack.Serialization; + +public partial class IdComponent : INetworkComponent +{ + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(0); + + bitBuffer.AddUShort(Value); + } + + public void Deserialize(BitBuffer bitBuffer) + { + Value = bitBuffer.ReadUShort(); + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Components/IdComponent.cs.meta b/Assets/Sources/Generated/Sync/Components/IdComponent.cs.meta new file mode 100644 index 0000000..9e978ca --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/IdComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d0654b0014bf8a44af178beafb316c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Components/Sync.cs b/Assets/Sources/Generated/Sync/Components/Sync.cs new file mode 100644 index 0000000..c93cc2f --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/Sync.cs @@ -0,0 +1,14 @@ +using NetStack.Serialization; + +public partial class Sync : INetworkComponent +{ + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(4); + + } + + public void Deserialize(BitBuffer bitBuffer) + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Components/Sync.cs.meta b/Assets/Sources/Generated/Sync/Components/Sync.cs.meta new file mode 100644 index 0000000..fdf0b9e --- /dev/null +++ b/Assets/Sources/Generated/Sync/Components/Sync.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 66939820ae6c67a4fb03a0db93006c95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Compressors.meta b/Assets/Sources/Generated/Sync/Compressors.meta new file mode 100644 index 0000000..f634b5d --- /dev/null +++ b/Assets/Sources/Generated/Sync/Compressors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f3a9b44acca2ffe41a9b8dfb4e8eabc4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Compressors/SyncCompressors.cs b/Assets/Sources/Generated/Sync/Compressors/SyncCompressors.cs new file mode 100644 index 0000000..15af4f5 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Compressors/SyncCompressors.cs @@ -0,0 +1,9 @@ +using NetStack.Compression; + +public static class SyncCompressors +{ + + static SyncCompressors() + { + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Compressors/SyncCompressors.cs.meta b/Assets/Sources/Generated/Sync/Compressors/SyncCompressors.cs.meta new file mode 100644 index 0000000..669bb04 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Compressors/SyncCompressors.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00f6375f03eaa834ea120f0b31ad8ec1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Feature.meta b/Assets/Sources/Generated/Sync/Feature.meta new file mode 100644 index 0000000..449e007 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Feature.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e9cbba561e89a449a0d8ae0e0e567b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Feature/ServerStateCaptureFeature.cs b/Assets/Sources/Generated/Sync/Feature/ServerStateCaptureFeature.cs new file mode 100644 index 0000000..9c6ec1a --- /dev/null +++ b/Assets/Sources/Generated/Sync/Feature/ServerStateCaptureFeature.cs @@ -0,0 +1,22 @@ +using Sources.Networking.Server.StateCapture; + +public class ServerStateCaptureFeature : Feature +{ + public ServerStateCaptureFeature(Contexts contexts, Services services) + { + Add(new ServerCaptureChangedIdSystem(contexts, services)); + Add(new ServerCaptureRemovedIdSystem(contexts, services)); + Add(new ServerCaptureChangedCharacterSystem(contexts, services)); + Add(new ServerCaptureRemovedCharacterSystem(contexts, services)); + Add(new ServerCaptureChangedControlledBySystem(contexts, services)); + Add(new ServerCaptureRemovedControlledBySystem(contexts, services)); + Add(new ServerCaptureChangedConnectionSystem(contexts, services)); + Add(new ServerCaptureRemovedConnectionSystem(contexts, services)); + Add(new ServerCaptureChangedSyncSystem(contexts, services)); + Add(new ServerCaptureRemovedSyncSystem(contexts, services)); + + Add(new ServerCreateWorldStateSystem(contexts)); + Add(new ServerCaptureCreatedEntitiesSystem(contexts, services)); + Add(new ServerCaptureRemovedEntitiesSystem(contexts, services)); + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Feature/ServerStateCaptureFeature.cs.meta b/Assets/Sources/Generated/Sync/Feature/ServerStateCaptureFeature.cs.meta new file mode 100644 index 0000000..42fbe42 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Feature/ServerStateCaptureFeature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5b518ef5ef748f4a98a98889c2b8aba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Utility.meta b/Assets/Sources/Generated/Sync/Utility.meta new file mode 100644 index 0000000..fbad2c9 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Utility.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fd8a42ea3ddabbf41a3e9afe3a83167f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Utility/PackEntityUtility.cs b/Assets/Sources/Generated/Sync/Utility/PackEntityUtility.cs new file mode 100644 index 0000000..2c16e6f --- /dev/null +++ b/Assets/Sources/Generated/Sync/Utility/PackEntityUtility.cs @@ -0,0 +1,73 @@ +using NetStack.Serialization; + +public static class PackEntityUtility +{ + public static void Pack(GameEntity e, BitBuffer buffer) + { + ushort counter = 0; + + var hasId = false; + if(e.hasId) + { + hasId = true; + counter++; + } + + var hasCharacter = false; + if(e.isCharacter) + { + hasCharacter = true; + counter++; + } + + var hasControlledBy = false; + if(e.hasControlledBy) + { + hasControlledBy = true; + counter++; + } + + var hasConnection = false; + if(e.hasConnection) + { + hasConnection = true; + counter++; + } + + var hasSync = false; + if(e.isSync) + { + hasSync = true; + counter++; + } + + + buffer.AddUShort(counter); + + if (hasId) + { + e.id.Serialize(buffer); + } + + if (hasCharacter) + { + buffer.AddUShort(1); + } + + if (hasControlledBy) + { + e.controlledBy.Serialize(buffer); + } + + if (hasConnection) + { + e.connection.Serialize(buffer); + } + + if (hasSync) + { + buffer.AddUShort(4); + } + + } +} diff --git a/Assets/Sources/Generated/Sync/Utility/PackEntityUtility.cs.meta b/Assets/Sources/Generated/Sync/Utility/PackEntityUtility.cs.meta new file mode 100644 index 0000000..0052c6c --- /dev/null +++ b/Assets/Sources/Generated/Sync/Utility/PackEntityUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d11314fa33b50b649882f5d3abff425d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Generated/Sync/Utility/UnpackEntityUtility.cs b/Assets/Sources/Generated/Sync/Utility/UnpackEntityUtility.cs new file mode 100644 index 0000000..d80b6c8 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Utility/UnpackEntityUtility.cs @@ -0,0 +1,175 @@ +using System.Text; +using NetStack.Serialization; +using Sources.Tools; + +public static class UnpackEntityUtility +{ + public static void CreateEntities(GameContext game, BitBuffer buffer, ushort entityCount) + { + for (int i = 0; i < entityCount; i++) + { + var addedComponents = new StringBuilder(128); + + var e = game.CreateEntity(); + + var componentsCount = buffer.ReadUShort(); + + for (int j = 0; j < componentsCount; j++) + { + var componentId = buffer.ReadUShort(); + + switch (componentId) + { + case 0: + { + addedComponents.Append(" Id "); + var lookup = GameComponentsLookup.Id; + var comp = e.CreateComponent(lookup); + comp.Deserialize(buffer); + e.AddComponent(lookup, comp); + } + break; + case 1: + { + addedComponents.Append(" Character "); + e.isCharacter = true; + } + break; + case 2: + { + addedComponents.Append(" ControlledBy "); + var lookup = GameComponentsLookup.ControlledBy; + var comp = e.CreateComponent(lookup); + comp.Deserialize(buffer); + e.AddComponent(lookup, comp); + } + break; + case 3: + { + addedComponents.Append(" Connection "); + var lookup = GameComponentsLookup.Connection; + var comp = e.CreateComponent(lookup); + comp.Deserialize(buffer); + e.AddComponent(lookup, comp); + } + break; + case 4: + { + addedComponents.Append(" Sync "); + e.isSync = true; + } + break; + } + } + Logger.I.Log("UnpackEntityUtility", $" Entity-{e.id.Value}: created - ({addedComponents})"); + } + } + + public static void ChangeComponents(GameContext game, BitBuffer buffer, ushort componentCount) + { + for (int i = 0; i < componentCount; i++) + { + var entityId = buffer.ReadUShort(); + var componentId = buffer.ReadUShort(); + var e = game.GetEntityWithId(entityId); + + switch (componentId) + { + case 0: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Changed Id component"); + var lookup = GameComponentsLookup.Id; + var comp = e.CreateComponent(lookup); + comp.Deserialize(buffer); + e.ReplaceComponent(lookup, comp); + } + break; + case 1: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Changed Character component"); + e.isCharacter = true; + } + break; + case 2: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Changed ControlledBy component"); + var lookup = GameComponentsLookup.ControlledBy; + var comp = e.CreateComponent(lookup); + comp.Deserialize(buffer); + e.ReplaceComponent(lookup, comp); + } + break; + case 3: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Changed Connection component"); + var lookup = GameComponentsLookup.Connection; + var comp = e.CreateComponent(lookup); + comp.Deserialize(buffer); + e.ReplaceComponent(lookup, comp); + } + break; + case 4: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Changed Sync component"); + e.isSync = true; + } + break; + } + } + } + + public static void RemoveComponents(GameContext game, BitBuffer buffer, ushort componentCount) + { + for (int i = 0; i < componentCount; i++) + { + var entityId = buffer.ReadUShort(); + var componentId = buffer.ReadUShort(); + var e = game.GetEntityWithId(entityId); + + switch (componentId) + { + case 0: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Removed Id component"); + e.RemoveId(); + } + break; + case 1: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Removed Character component"); + e.isCharacter = false; + } + break; + case 2: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Removed ControlledBy component"); + e.RemoveControlledBy(); + } + break; + case 3: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Removed Connection component"); + e.RemoveConnection(); + } + break; + case 4: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Removed Sync component"); + e.isSync = false; + } + break; + } + } + } + + public static void RemoveEntities(GameContext game, BitBuffer buffer, ushort entityCount) + { + for (int i = 0; i < entityCount; i++) + { + var id = buffer.ReadUShort(); + var e = game.GetEntityWithId(id); + e.isDestroyed = true; + Logger.I.Log("UnpackEntityUtility", $" Entity-{id}: is removed"); + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Generated/Sync/Utility/UnpackEntityUtility.cs.meta b/Assets/Sources/Generated/Sync/Utility/UnpackEntityUtility.cs.meta new file mode 100644 index 0000000..865ae76 --- /dev/null +++ b/Assets/Sources/Generated/Sync/Utility/UnpackEntityUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6154746269b648de8fd6f7349120d4ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Networking.meta b/Assets/Sources/Networking.meta new file mode 100644 index 0000000..777c5e5 --- /dev/null +++ b/Assets/Sources/Networking.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8628921752ea4af09fa81cf6d4a894a6 +timeCreated: 1557590894 \ No newline at end of file diff --git a/Assets/Sources/Networking/Client.meta b/Assets/Sources/Networking/Client.meta new file mode 100644 index 0000000..ece6686 --- /dev/null +++ b/Assets/Sources/Networking/Client.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3e900997d0904237bc0be96e0fe54d78 +timeCreated: 1557679839 \ No newline at end of file diff --git a/Assets/Sources/Networking/Client/ClientCommandHandler.cs b/Assets/Sources/Networking/Client/ClientCommandHandler.cs new file mode 100644 index 0000000..c725c20 --- /dev/null +++ b/Assets/Sources/Networking/Client/ClientCommandHandler.cs @@ -0,0 +1,49 @@ +using ENet; +using Sources.Tools; + +namespace Sources.Networking.Client +{ + public class ClientCommandHandler : IClientHandler + { + private readonly ClientNetworkSystem _client; + private readonly GameContext _game; + + public ClientCommandHandler(GameContext game, ClientNetworkSystem client) + { + _game = game; + _client = client; + } + + public void HandleChatMessageCommand(ref ServerChatMessageCommand command) + { + Logger.I.Log(this, $"Client-{command.Sender}: {command.Message}"); + } + + public void HandleGrantedIdCommand(ref ServerGrantedIdCommand command) + { + Logger.I.Log(this, $"Got ID - {command.Id}"); + _client.State = ClientState.Connected; + _client.ConnectionId.IsSet = true; + _client.ConnectionId.Id = command.Id; + } + + public void HandleSetTickrateCommand(ref ServerSetTickrateCommand command) + { + _client.TickRate = command.Tickrate; + } + + public void OnConnected(Peer peer) + { + Logger.I.Log(this, $"Connected to server {peer.IP} {peer.Port}, waiting for ID"); + _client.State = ClientState.WaitingForId; + _client.ServerConnection = peer; + } + + public void OnDisconnected(Peer peer) + { + Logger.I.Log(this, "Disconnected from server"); + _client.EnqueueRequest(NetworkThreadRequest.Cleanup); + _client.CleanupState(); + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Client/ClientCommandHandler.cs.meta b/Assets/Sources/Networking/Client/ClientCommandHandler.cs.meta new file mode 100644 index 0000000..06f5c0e --- /dev/null +++ b/Assets/Sources/Networking/Client/ClientCommandHandler.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 711fefb517cf44708e3d0e7c54e5a55e +timeCreated: 1557920852 \ No newline at end of file diff --git a/Assets/Sources/Networking/Client/ClientNetworkFeature.cs b/Assets/Sources/Networking/Client/ClientNetworkFeature.cs new file mode 100644 index 0000000..310d882 --- /dev/null +++ b/Assets/Sources/Networking/Client/ClientNetworkFeature.cs @@ -0,0 +1,10 @@ +namespace Sources.Networking.Client +{ + public class ClientNetworkFeature : Feature + { + public ClientNetworkFeature(Contexts contexts, Services services) + { + Add(new ClientSendPacketSystem(services)); + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Client/ClientNetworkFeature.cs.meta b/Assets/Sources/Networking/Client/ClientNetworkFeature.cs.meta new file mode 100644 index 0000000..7496322 --- /dev/null +++ b/Assets/Sources/Networking/Client/ClientNetworkFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7fc8981c089f455899ecba9292962692 +timeCreated: 1557679967 \ No newline at end of file diff --git a/Assets/Sources/Networking/Client/ClientNetworkSystem.cs b/Assets/Sources/Networking/Client/ClientNetworkSystem.cs new file mode 100644 index 0000000..40ea8ef --- /dev/null +++ b/Assets/Sources/Networking/Client/ClientNetworkSystem.cs @@ -0,0 +1,410 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Threading; +using DisruptorUnity3d; +using ENet; +using Entitas; +using NetStack.Serialization; +using Sources.Networking.Server; +using Sources.Tools; + +namespace Sources.Networking.Client +{ + public class ClientNetworkSystem : IExecuteSystem, ITearDownSystem + { + public ClientState State = ClientState.Disconnected; + public ConnectionId ConnectionId; + public Peer ServerConnection; + + public ushort TickRate = 20; + public int PanicCleanupTarget = 6; + public int PanicStateCount = 10; + + public int StatesCount => _states.Count; + + private readonly GameContext _game; + private readonly ClientCommandHandler _handler; + + private readonly Thread _networkThread; + private readonly RingBuffer _eventsToHandle = new RingBuffer(1024); + private readonly RingBuffer _sendData = new RingBuffer(64); + private readonly RingBuffer _responses = new RingBuffer(8); + private readonly RingBuffer _requests = new RingBuffer(8); + private Address _address; + + private readonly Queue _states = new Queue(124); + + private readonly IGroup _syncGroup; + private readonly List _syncBuffer = new List(ServerNetworkSystem.MaxPlayers); + + public ushort EnqueuedCommandCount; + public readonly BitBuffer ToServer = new BitBuffer(512); + + private readonly BitBuffer _fromServer = new BitBuffer(512); + + private bool _firstPacket = true; + private Host _host = new Host(); + + private readonly PacketFreeCallback _freeCallback = packet => { Marshal.FreeHGlobal(packet.Data); }; + private readonly IntPtr _cachedFreeCallback; + + public ClientNetworkSystem(Contexts contexts) + { + Logger.I.Log(this, "Created"); + + _game = contexts.game; + _host.Create(); + _handler = new ClientCommandHandler(_game, this); + ConnectionId.IsSet = false; + + _networkThread = NetworkThread(); + _networkThread.Start(); + _syncGroup = _game.GetGroup(GameMatcher.Sync); + _cachedFreeCallback = Marshal.GetFunctionPointerForDelegate(_freeCallback); + } + + public void Execute() + { + if (_states.Count > PanicStateCount) + { + //Catchup after lag + while (_states.Count > PanicCleanupTarget) + { + var state = _states.Dequeue(); + ExecuteState(state); + } + } + else if (_states.Count > 0) + { + var state = _states.Dequeue(); + ExecuteState(state); + } + } + + public void TearDown() + { + if (State == ClientState.Connected) _requests.Enqueue(NetworkThreadRequest.Disconnect); + + Thread.Sleep(20); + _networkThread.Abort(); + } + + + private Thread NetworkThread() + { + return new Thread(() => + { + while (true) + { + while (_sendData.TryDequeue(out var data)) + { + var packet = new Packet(); + packet.Create(data.Data, data.Length, PacketFlags.Reliable | PacketFlags.NoAllocate); + packet.SetFreeCallback(_cachedFreeCallback); + data.Peer.Send(0, ref packet); + } + + while (_requests.TryDequeue(out var request)) + switch (request) + { + case NetworkThreadRequest.Connect: + try + { + _host.Connect(_address, 2); + } + catch (Exception e) + { + Logger.I.Log(this, e.Message); + _host = new Host(); + _host.Create(); + _responses.Enqueue(NetworkThreadResponse.ConnectFailure); + } + + break; + case NetworkThreadRequest.Disconnect: + ServerConnection.DisconnectNow(0); + _host.Flush(); + _host.Dispose(); + _host = new Host(); + _host.Create(); + _responses.Enqueue(NetworkThreadResponse.Disconnected); + break; + case NetworkThreadRequest.Cleanup: + _host = new Host(); + _host.Create(); + break; + case NetworkThreadRequest.CancelConnect: + _host.Dispose(); + _host = new Host(); + _host.Create(); + _responses.Enqueue(NetworkThreadResponse.ConnectCancelled); + break; + } + + if (!_host.IsSet) Thread.Sleep(15); + if (_host.Service(15, out var @event) > 0) + switch (@event.Type) + { + case EventType.Connect: + case EventType.Disconnect: + case EventType.Timeout: + _eventsToHandle.Enqueue(new ReceivedEvent + {EventType = @event.Type, Peer = @event.Peer}); + break; + case EventType.Receive: + unsafe + { + var length = @event.Packet.Length; + var newPtr = Marshal.AllocHGlobal(length); + Buffer.MemoryCopy(@event.Packet.Data.ToPointer(), newPtr.ToPointer(), length, + length); + _eventsToHandle.Enqueue(new ReceivedEvent + {Data = newPtr, Peer = @event.Peer, EventType = EventType.Receive}); + } + + break; + } + } + }); + } + + public void Connect(Address address) + { + if (State != ClientState.Disconnected) return; + + Logger.I.Log(this, $"Connecting to {address.GetIP()}:{address.Port}"); + State = ClientState.Connecting; + + _address = address; + _requests.Enqueue(NetworkThreadRequest.Connect); + } + + public void Disconnect() + { + if (State != ClientState.Connected) return; + + Logger.I.Log(this, "Disconnecting"); + + State = ClientState.Disconnecting; + _requests.Enqueue(NetworkThreadRequest.Disconnect); + } + + public void EnqueueCommand(T command) where T : ICommand, IClientCommand + { + Logger.I.Log(this, $"Enqueued {command.GetType().Name}"); + + EnqueuedCommandCount++; + command.Serialize(ToServer); + } + + public void EnqueueSendData(SendData data) + { + _sendData.Enqueue(data); + } + + public void EnqueueRequest(NetworkThreadRequest request) + { + _requests.Enqueue(request); + } + + public void UpdateNetwork() + { + while (_responses.TryDequeue(out var response)) + switch (response) + { + case NetworkThreadResponse.ConnectFailure: + State = ClientState.Disconnected; + break; + case NetworkThreadResponse.Disconnected: + CleanupState(); + Logger.I.Log(this, "Disconnected"); + break; + case NetworkThreadResponse.ConnectCancelled: + CleanupState(); + Logger.I.Log(this, "Connect cancelled"); + break; + } + + if (State == ClientState.Disconnected) return; + while (_eventsToHandle.TryDequeue(out var @event)) + switch (@event.EventType) + { + case EventType.Connect: + _handler.OnConnected(@event.Peer); + break; + case EventType.Disconnect: + _handler.OnDisconnected(@event.Peer); + break; + case EventType.Receive: + _states.Enqueue(@event.Data); + break; + case EventType.Timeout: + _handler.OnDisconnected(@event.Peer); + break; + } + } + + private unsafe void ExecuteState(IntPtr state) + { + #region commands + + var commandsHeaderSpan = new ReadOnlySpan(state.ToPointer(), 2); + var commandCount = commandsHeaderSpan[0]; + var commandLength = commandsHeaderSpan[1]; + var cursor = 4; + + if (commandCount > 0) + { + var dataSpan = new ReadOnlySpan(IntPtr.Add(state, cursor).ToPointer(), + commandLength); + _fromServer.Clear(); + _fromServer.FromSpan(ref dataSpan, commandLength); + ClientCommandExecutor.Execute(_handler, _fromServer, commandCount); + cursor += commandLength; + } + + #endregion + + #region created entities + + var createdEntitiesHeaderSpan = + new ReadOnlySpan(IntPtr.Add(state, cursor).ToPointer(), 2); + var createdEntitiesCount = createdEntitiesHeaderSpan[0]; + var createdEntitiesLength = createdEntitiesHeaderSpan[1]; + cursor += 4; + + if (createdEntitiesCount > 0) + { + var dataSpan = new ReadOnlySpan(IntPtr.Add(state, cursor).ToPointer(), + createdEntitiesLength); + _fromServer.Clear(); + _fromServer.FromSpan(ref dataSpan, createdEntitiesLength); + UnpackEntityUtility.CreateEntities(_game, _fromServer, createdEntitiesCount); + cursor += createdEntitiesLength; + } + + #endregion + + if (_firstPacket) + { + _firstPacket = false; + Marshal.FreeHGlobal(state); + return; + } + + #region removed entities + + var removedEntitiesHeaderSpan = + new ReadOnlySpan(IntPtr.Add(state, cursor).ToPointer(), 2); + var removedEntitiesCount = removedEntitiesHeaderSpan[0]; + var removedEntitiesLength = removedEntitiesHeaderSpan[1]; + + cursor += 4; + + if (removedEntitiesCount > 0) + { + var dataSpan = new ReadOnlySpan(IntPtr.Add(state, cursor).ToPointer(), + removedEntitiesLength); + _fromServer.Clear(); + _fromServer.FromSpan(ref dataSpan, removedEntitiesLength); + UnpackEntityUtility.RemoveEntities(_game, _fromServer, removedEntitiesCount); + cursor += removedEntitiesLength; + } + + #endregion + + #region removed components + + var removedComponentsHeaderSpan = + new ReadOnlySpan(IntPtr.Add(state, cursor).ToPointer(), 2); + var removedComponentsCount = removedComponentsHeaderSpan[0]; + var removedComponentsLength = removedComponentsHeaderSpan[1]; + cursor += 4; + + if (removedComponentsCount > 0) + { + var dataSpan = new ReadOnlySpan(IntPtr.Add(state, cursor).ToPointer(), + removedComponentsLength); + _fromServer.Clear(); + _fromServer.FromSpan(ref dataSpan, removedComponentsLength); + UnpackEntityUtility.RemoveComponents(_game, _fromServer, removedComponentsCount); + cursor += removedComponentsLength; + } + + #endregion + + #region changed components + + var changedComponentsHeaderSpan = + new ReadOnlySpan(IntPtr.Add(state, cursor).ToPointer(), 2); + var changedComponentsCount = changedComponentsHeaderSpan[0]; + var changedComponentsLength = changedComponentsHeaderSpan[1]; + cursor += 4; + + if (changedComponentsCount > 0) + { + var dataSpan = new ReadOnlySpan(IntPtr.Add(state, cursor).ToPointer(), + changedComponentsLength); + _fromServer.Clear(); + _fromServer.FromSpan(ref dataSpan, changedComponentsLength); + UnpackEntityUtility.ChangeComponents(_game, _fromServer, changedComponentsCount); + } + + #endregion + + Marshal.FreeHGlobal(state); + } + + public void CleanupState() + { + while (_eventsToHandle.TryDequeue(out _)) + { + } + + while (_states.Count > 0) Marshal.FreeHGlobal(_states.Dequeue()); + + State = ClientState.Disconnected; + ServerConnection = new Peer(); + ConnectionId.IsSet = false; + _firstPacket = true; + + _syncGroup.GetEntities(_syncBuffer); + foreach (var e in _syncBuffer) e.isDestroyed = true; + + EnqueuedCommandCount = 0; + ToServer.Clear(); + _fromServer.Clear(); + } + } + + public enum NetworkThreadRequest + { + Connect, + CancelConnect, + Disconnect, + Cleanup + } + + public enum NetworkThreadResponse + { + ConnectCancelled, + ConnectFailure, + Disconnected + } + + public enum ClientState + { + Disconnected, + Connecting, + WaitingForId, + Connected, + Disconnecting + } + + public struct ConnectionId + { + public bool IsSet; + public ushort Id; + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Client/ClientNetworkSystem.cs.meta b/Assets/Sources/Networking/Client/ClientNetworkSystem.cs.meta new file mode 100644 index 0000000..e56e2f3 --- /dev/null +++ b/Assets/Sources/Networking/Client/ClientNetworkSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2511d306cda14fd195510160fd719bb6 +timeCreated: 1557606536 \ No newline at end of file diff --git a/Assets/Sources/Networking/Client/ClientSendPacketSystem.cs b/Assets/Sources/Networking/Client/ClientSendPacketSystem.cs new file mode 100644 index 0000000..f6d2c4d --- /dev/null +++ b/Assets/Sources/Networking/Client/ClientSendPacketSystem.cs @@ -0,0 +1,51 @@ +using System; +using System.Runtime.InteropServices; +using Entitas; + +namespace Sources.Networking.Client +{ + public class ClientSendPacketSystem : IExecuteSystem + { + private readonly ClientNetworkSystem _client; + + private readonly byte[] _data = new byte[2048]; + + public ClientSendPacketSystem(Services services) + { + _client = services.ClientSystem; + } + + public unsafe void Execute() + { + if (_client.State != ClientState.Connected) return; + + var commandLength = _client.ToServer.Length; + var commandCount = _client.EnqueuedCommandCount; + var totalLength = commandLength + 4; + + fixed (byte* destination = &_data[0]) + { + var shortsSpan = new Span(destination, 2); + shortsSpan[0] = commandCount; + shortsSpan[1] = (ushort) commandLength; + } + + if (commandCount > 0) + { + _client.ToServer.ToArray(_data, 4); + + _client.EnqueuedCommandCount = 0; + } + + var newPtr = Marshal.AllocHGlobal(totalLength); + fixed (byte* source = &_data[0]) + { + Buffer.MemoryCopy(source, newPtr.ToPointer(), totalLength, totalLength); + } + + _client.EnqueueSendData(new SendData + {Data = newPtr, Length = totalLength, Peer = _client.ServerConnection}); + _client.ToServer.Clear(); + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Client/ClientSendPacketSystem.cs.meta b/Assets/Sources/Networking/Client/ClientSendPacketSystem.cs.meta new file mode 100644 index 0000000..f1164b2 --- /dev/null +++ b/Assets/Sources/Networking/Client/ClientSendPacketSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9dbd5bafb2d242e7b93484f512438e12 +timeCreated: 1557667194 \ No newline at end of file diff --git a/Assets/Sources/Networking/Components.meta b/Assets/Sources/Networking/Components.meta new file mode 100644 index 0000000..f3ff7dc --- /dev/null +++ b/Assets/Sources/Networking/Components.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 39b1155173d149489cbc83182cb66c64 +timeCreated: 1557679891 \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/ClientDataBuffer.cs b/Assets/Sources/Networking/Components/ClientDataBuffer.cs new file mode 100644 index 0000000..d7d9c5d --- /dev/null +++ b/Assets/Sources/Networking/Components/ClientDataBuffer.cs @@ -0,0 +1,9 @@ +using Entitas; +using NetStack.Serialization; + +[Game] +public class ClientDataBuffer : IComponent +{ + public ushort CommandCount; + public BitBuffer Value; +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/ClientDataBuffer.cs.meta b/Assets/Sources/Networking/Components/ClientDataBuffer.cs.meta new file mode 100644 index 0000000..a87fc1c --- /dev/null +++ b/Assets/Sources/Networking/Components/ClientDataBuffer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c938462d022d4ab7931f92c7cbf4f1b5 +timeCreated: 1557608203 \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/Connection.cs b/Assets/Sources/Networking/Components/Connection.cs new file mode 100644 index 0000000..a4bb4da --- /dev/null +++ b/Assets/Sources/Networking/Components/Connection.cs @@ -0,0 +1,15 @@ +using Codegen.CodegenAttributes; +using Entitas; +using Entitas.CodeGeneration.Attributes; + +[Game] +[Sync] +public partial class Connection : IComponent +{ + [PrimaryEntityIndex] public ushort Id; + + public Connection() + { + Id = ushort.MaxValue; + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/Connection.cs.meta b/Assets/Sources/Networking/Components/Connection.cs.meta new file mode 100644 index 0000000..a4f382f --- /dev/null +++ b/Assets/Sources/Networking/Components/Connection.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8b1b467438dc4159b0ed0ff36224ffcd +timeCreated: 1557590914 \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/ConnectionPeer.cs b/Assets/Sources/Networking/Components/ConnectionPeer.cs new file mode 100644 index 0000000..9c3b0df --- /dev/null +++ b/Assets/Sources/Networking/Components/ConnectionPeer.cs @@ -0,0 +1,8 @@ +using ENet; +using Entitas; + +[Game] +public class ConnectionPeer : IComponent +{ + public Peer Value; +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/ConnectionPeer.cs.meta b/Assets/Sources/Networking/Components/ConnectionPeer.cs.meta new file mode 100644 index 0000000..5be0184 --- /dev/null +++ b/Assets/Sources/Networking/Components/ConnectionPeer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 88e76b210855494a86f2fcac25bc146f +timeCreated: 1557610050 \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/RequiresWorldState.cs b/Assets/Sources/Networking/Components/RequiresWorldState.cs new file mode 100644 index 0000000..86cf03c --- /dev/null +++ b/Assets/Sources/Networking/Components/RequiresWorldState.cs @@ -0,0 +1,6 @@ +using Entitas; + +[Game] +public class RequiresWorldState : IComponent +{ +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/RequiresWorldState.cs.meta b/Assets/Sources/Networking/Components/RequiresWorldState.cs.meta new file mode 100644 index 0000000..5157a3a --- /dev/null +++ b/Assets/Sources/Networking/Components/RequiresWorldState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: db0d538d4f034dc7a77e54a8f4d8eae2 +timeCreated: 1557701494 \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/Sync.cs b/Assets/Sources/Networking/Components/Sync.cs new file mode 100644 index 0000000..957801f --- /dev/null +++ b/Assets/Sources/Networking/Components/Sync.cs @@ -0,0 +1,8 @@ +using Codegen.CodegenAttributes; +using Entitas; + +[Game] +[Sync] +public partial class Sync : IComponent +{ +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/Sync.cs.meta b/Assets/Sources/Networking/Components/Sync.cs.meta new file mode 100644 index 0000000..4ee648f --- /dev/null +++ b/Assets/Sources/Networking/Components/Sync.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4e2864c387fd4813becc0be45fef02c5 +timeCreated: 1557591290 \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/WasSynced.cs b/Assets/Sources/Networking/Components/WasSynced.cs new file mode 100644 index 0000000..f3890c1 --- /dev/null +++ b/Assets/Sources/Networking/Components/WasSynced.cs @@ -0,0 +1,6 @@ +using Entitas; + +[Game] +public class WasSynced : IComponent +{ +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/WasSynced.cs.meta b/Assets/Sources/Networking/Components/WasSynced.cs.meta new file mode 100644 index 0000000..3d88c28 --- /dev/null +++ b/Assets/Sources/Networking/Components/WasSynced.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 20e41a507e0c404eb0300f3520a35f77 +timeCreated: 1557682237 \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/WorldState.cs b/Assets/Sources/Networking/Components/WorldState.cs new file mode 100644 index 0000000..4f59f2e --- /dev/null +++ b/Assets/Sources/Networking/Components/WorldState.cs @@ -0,0 +1,11 @@ +using Entitas; +using Entitas.CodeGeneration.Attributes; +using NetStack.Serialization; + +[Game] +[Unique] +public class WorldState : IComponent +{ + public ushort EntityCount; + public BitBuffer Buffer; +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Components/WorldState.cs.meta b/Assets/Sources/Networking/Components/WorldState.cs.meta new file mode 100644 index 0000000..b9a23a1 --- /dev/null +++ b/Assets/Sources/Networking/Components/WorldState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6b72351fcf8044758fd95038d367d1df +timeCreated: 1557701866 \ No newline at end of file diff --git a/Assets/Sources/Networking/INetworkComponent.cs b/Assets/Sources/Networking/INetworkComponent.cs new file mode 100644 index 0000000..4b5cd72 --- /dev/null +++ b/Assets/Sources/Networking/INetworkComponent.cs @@ -0,0 +1,7 @@ +using NetStack.Serialization; + +public interface INetworkComponent +{ + void Serialize(BitBuffer bitbuffer); + void Deserialize(BitBuffer bitBuffer); +} \ No newline at end of file diff --git a/Assets/Sources/Networking/INetworkComponent.cs.meta b/Assets/Sources/Networking/INetworkComponent.cs.meta new file mode 100644 index 0000000..9ec600a --- /dev/null +++ b/Assets/Sources/Networking/INetworkComponent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c3772c493a234b5eb82503fcc9b9ebff +timeCreated: 1557593018 \ No newline at end of file diff --git a/Assets/Sources/Networking/ReceivedEvent.cs b/Assets/Sources/Networking/ReceivedEvent.cs new file mode 100644 index 0000000..5abdc2e --- /dev/null +++ b/Assets/Sources/Networking/ReceivedEvent.cs @@ -0,0 +1,9 @@ +using System; +using ENet; + +public struct ReceivedEvent +{ + public EventType EventType; + public Peer Peer; + public IntPtr Data; +} \ No newline at end of file diff --git a/Assets/Sources/Networking/ReceivedEvent.cs.meta b/Assets/Sources/Networking/ReceivedEvent.cs.meta new file mode 100644 index 0000000..14b5a1d --- /dev/null +++ b/Assets/Sources/Networking/ReceivedEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ea1afc3b274b4649b6840ddef3df96e7 +timeCreated: 1558007850 \ No newline at end of file diff --git a/Assets/Sources/Networking/SendData.cs b/Assets/Sources/Networking/SendData.cs new file mode 100644 index 0000000..171d763 --- /dev/null +++ b/Assets/Sources/Networking/SendData.cs @@ -0,0 +1,9 @@ +using System; +using ENet; + +public struct SendData +{ + public Peer Peer; + public IntPtr Data; + public int Length; +} \ No newline at end of file diff --git a/Assets/Sources/Networking/SendData.cs.meta b/Assets/Sources/Networking/SendData.cs.meta new file mode 100644 index 0000000..bdb37d4 --- /dev/null +++ b/Assets/Sources/Networking/SendData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 281a9491ad4044a2b643bb25a4104b2a +timeCreated: 1557910591 \ No newline at end of file diff --git a/Assets/Sources/Networking/Server.meta b/Assets/Sources/Networking/Server.meta new file mode 100644 index 0000000..0ea35a3 --- /dev/null +++ b/Assets/Sources/Networking/Server.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b8edb8aff7dc465cba661cbd92a3b409 +timeCreated: 1557679843 \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/DisconnectData.cs b/Assets/Sources/Networking/Server/DisconnectData.cs new file mode 100644 index 0000000..f81b9df --- /dev/null +++ b/Assets/Sources/Networking/Server/DisconnectData.cs @@ -0,0 +1,9 @@ +using ENet; + +namespace Sources.Networking.Server +{ + public struct DisconnectData + { + public Peer Peer; + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/DisconnectData.cs.meta b/Assets/Sources/Networking/Server/DisconnectData.cs.meta new file mode 100644 index 0000000..1100401 --- /dev/null +++ b/Assets/Sources/Networking/Server/DisconnectData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1cead76930db413882646a0e89570379 +timeCreated: 1557911339 \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/ServerCommandHandler.cs b/Assets/Sources/Networking/Server/ServerCommandHandler.cs new file mode 100644 index 0000000..c7a1876 --- /dev/null +++ b/Assets/Sources/Networking/Server/ServerCommandHandler.cs @@ -0,0 +1,87 @@ +using System.Collections.Generic; +using ENet; +using Entitas; +using NetStack.Serialization; +using UnityEngine; +using Logger = Sources.Tools.Logger; + +namespace Sources.Networking.Server +{ + public class ServerCommandHandler : IServerHandler + { + private readonly List _connectionsBuffer = new List(ServerNetworkSystem.MaxPlayers); + + private readonly IGroup _connectionsGroup; + + private readonly GameContext _game; + private readonly ServerNetworkSystem _server; + public ushort CurrentClientId; + + public ServerCommandHandler(GameContext game, ServerNetworkSystem server) + { + _game = game; + _server = server; + _connectionsGroup = _game.GetGroup(GameMatcher.Connection); + } + + public void HandleChatMessageCommand(ref ClientChatMessageCommand command) + { + Logger.I.Log(this, $"Client-{CurrentClientId}: {command.Message}"); + _server.EnqueueCommandForEveryone(new ServerChatMessageCommand + {Message = command.Message, Sender = CurrentClientId}); + } + + public void HandleRequestCharacterCommand(ref ClientRequestCharacterCommand command) + { + var e = _game.GetEntityWithControlledBy(CurrentClientId); + if (e == null) + { + e = _game.CreateEntity(); + e.isSync = true; + e.AddControlledBy(CurrentClientId); + } + else + { + _server.EnqueueCommandForClient(CurrentClientId, + new ServerChatMessageCommand {Message = "You already have one.", Sender = 0}); + } + } + + public void HandleSetTickrateCommand(ref ClientSetTickrateCommand command) + { + _server.TickRate = command.Tickrate; + _server.EnqueueCommandForEveryone(new ServerSetTickrateCommand {Tickrate = command.Tickrate}); + } + + public void OnClientConnected(Peer peer) + { + Logger.I.Log(this, $"Client connected - {peer.ID}"); + + if (_connectionsGroup.count == ServerNetworkSystem.MaxPlayers) + { + _server.EnqueueDisconnectData(new DisconnectData {Peer = peer}); + return; + } + + var id = (ushort) peer.ID; + var e = _game.CreateEntity(); + e.isSync = true; + e.AddConnectionPeer(peer); + e.AddConnection(id); + e.AddClientDataBuffer(0, new BitBuffer(64)); + e.isRequiresWorldState = true; + + _server.EnqueueCommandForClient(id, new ServerGrantedIdCommand {Id = id}); + _server.EnqueueCommandForClient(id, new ServerSetTickrateCommand {Tickrate = _server.TickRate}); + } + + public void OnClientDisconnected(Peer peer) + { + Logger.I.Log(this, $"Client disconnected - {peer.ID}"); + + var e = _game.GetEntityWithConnection((ushort) peer.ID); + + if (e != null) e.isDestroyed = true; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/ServerCommandHandler.cs.meta b/Assets/Sources/Networking/Server/ServerCommandHandler.cs.meta new file mode 100644 index 0000000..732b3ac --- /dev/null +++ b/Assets/Sources/Networking/Server/ServerCommandHandler.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 54d96f5d710d41e0a56e91de18c6e62d +timeCreated: 1557921170 \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/ServerNetworkFeature.cs b/Assets/Sources/Networking/Server/ServerNetworkFeature.cs new file mode 100644 index 0000000..d6bc01d --- /dev/null +++ b/Assets/Sources/Networking/Server/ServerNetworkFeature.cs @@ -0,0 +1,11 @@ +namespace Sources.Networking.Server +{ + public class ServerNetworkFeature : Feature + { + public ServerNetworkFeature(Contexts contexts, Services services) + { + Add(new ServerStateCaptureFeature(contexts, services)); + Add(new ServerSendPacketsSystem(contexts, services)); + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/ServerNetworkFeature.cs.meta b/Assets/Sources/Networking/Server/ServerNetworkFeature.cs.meta new file mode 100644 index 0000000..e2c1180 --- /dev/null +++ b/Assets/Sources/Networking/Server/ServerNetworkFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 53dd3bb061b942f68a5865d75ccb4a53 +timeCreated: 1557680010 \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/ServerNetworkSystem.cs b/Assets/Sources/Networking/Server/ServerNetworkSystem.cs new file mode 100644 index 0000000..de4cae4 --- /dev/null +++ b/Assets/Sources/Networking/Server/ServerNetworkSystem.cs @@ -0,0 +1,312 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Threading; +using DisruptorUnity3d; +using ENet; +using Entitas; +using NetStack.Serialization; +using Sources.Tools; + +namespace Sources.Networking.Server +{ + public class ServerNetworkSystem : IExecuteSystem, ITearDownSystem + { + public const ushort MaxPlayers = 5; + public ushort TickRate = 20; + + private readonly List _connectionsBuffer = new List(MaxPlayers); + private readonly IGroup _connectionsGroup; + + + private readonly GameContext _game; + private readonly ServerCommandHandler _handler; + + //Data for clients + public ushort ChangedComponentsCount; + public readonly BitBuffer ChangedComponents = new BitBuffer(512); + public ushort CreatedEntitiesCount; + public readonly BitBuffer CreatedEntities = new BitBuffer(512); + public ushort RemovedComponentsCount; + public readonly BitBuffer RemovedComponents = new BitBuffer(512); + public ushort RemovedEntitiesCount; + public readonly BitBuffer RemovedEntities = new BitBuffer(512); + + //Data from clients + private readonly BitBuffer _fromClients = new BitBuffer(512); + + private ushort _currentPeerId; + private Host _host = new Host(); + + private readonly Thread _networkThread; + private readonly RingBuffer _eventsToHandle = new RingBuffer(1024); + private readonly RingBuffer _disconnectData = new RingBuffer(128); + private readonly RingBuffer _sendData = new RingBuffer(1024); + private readonly RingBuffer _responses = new RingBuffer(8); + private readonly RingBuffer _requests = new RingBuffer(8); + private Address _address; + + public ServerState State = ServerState.Stopped; + + private readonly PacketFreeCallback _freeCallback = packet => { Marshal.FreeHGlobal(packet.Data); }; + private readonly IntPtr _cachedFreeCallback; + + public ServerNetworkSystem(Contexts contexts) + { + Logger.I.Log(this, "Created"); + _game = contexts.game; + _handler = new ServerCommandHandler(_game, this); + + _networkThread = NetworkThread(); + _networkThread.Start(); + _connectionsGroup = _game.GetGroup(GameMatcher.Connection); + _cachedFreeCallback = Marshal.GetFunctionPointerForDelegate(_freeCallback); + } + + public void Execute() + { + while (_responses.TryDequeue(out var response)) + switch (response) + { + case NetworkThreadResponse.StartSuccess: + Logger.I.Log(this, "Server is working"); + State = ServerState.Working; + break; + case NetworkThreadResponse.StartFailure: + Logger.I.Log(this, "Server start failed"); + State = ServerState.Stopped; + break; + case NetworkThreadResponse.Stoppoed: + Logger.I.Log(this, "Server is stopped"); + ClearBuffers(); + while (_eventsToHandle.TryDequeue(out _)) + { + } + + State = ServerState.Stopped; + break; + } + + if (State != ServerState.Working) return; + while (_eventsToHandle.TryDequeue(out var @event)) + unsafe + { + switch (@event.EventType) + { + case EventType.Connect: + _handler.OnClientConnected(@event.Peer); + break; + case EventType.Disconnect: + _handler.OnClientDisconnected(@event.Peer); + break; + case EventType.Receive: + _currentPeerId = (ushort) @event.Peer.ID; + _handler.CurrentClientId = _currentPeerId; + + var e = _game.GetEntityWithConnection(_currentPeerId); + if (e == null) + { + Marshal.FreeHGlobal(@event.Data); + break; + } + + var headerSpan = new ReadOnlySpan(@event.Data.ToPointer(), 2); + var commandCount = headerSpan[0]; + var commandLength = headerSpan[1]; + + if (commandCount > 0) + { + var commandsSpan = + new ReadOnlySpan(IntPtr.Add(@event.Data, 4).ToPointer(), commandLength); + _fromClients.Clear(); + _fromClients.FromSpan(ref commandsSpan, commandLength); + ServerCommandExecutor.Execute(_handler, _fromClients, commandCount); + } + + Marshal.FreeHGlobal(@event.Data); + _currentPeerId = ushort.MaxValue; + break; + case EventType.Timeout: + _handler.OnClientDisconnected(@event.Peer); + break; + } + } + } + + public void TearDown() + { + StopServer(); + Thread.Sleep(20); + _networkThread.Abort(); + } + + private Thread NetworkThread() + { + return new Thread(() => + { + while (true) + { + while (_sendData.TryDequeue(out var data)) + { + var packet = new Packet(); + packet.Create(data.Data, data.Length, PacketFlags.Reliable | PacketFlags.NoAllocate); + packet.SetFreeCallback(_cachedFreeCallback); + data.Peer.Send(0, ref packet); + } + + while (_disconnectData.TryDequeue(out var data)) data.Peer.DisconnectNow(0); + + while (_requests.TryDequeue(out var request)) + switch (request) + { + case NetworkThreadRequest.Start: + try + { + _host.Create(_address, MaxPlayers * 2, 2); + _responses.Enqueue(NetworkThreadResponse.StartSuccess); + } + catch (Exception e) + { + Logger.I.Log(this, e.Message); + _host = new Host(); + _responses.Enqueue(NetworkThreadResponse.StartFailure); + } + + break; + case NetworkThreadRequest.Stop: + _host.Flush(); + _host.Dispose(); + _host = new Host(); + _responses.Enqueue(NetworkThreadResponse.Stoppoed); + break; + } + + if (!_host.IsSet) + { + Thread.Sleep(15); + } + else + { + if (_host.Service(15, out var @event) > 0) + switch (@event.Type) + { + case EventType.Connect: + case EventType.Disconnect: + case EventType.Timeout: + _eventsToHandle.Enqueue(new ReceivedEvent + {EventType = @event.Type, Peer = @event.Peer}); + break; + case EventType.Receive: + unsafe + { + var length = @event.Packet.Length; + var newPtr = Marshal.AllocHGlobal(length); + Buffer.MemoryCopy(@event.Packet.Data.ToPointer(), newPtr.ToPointer(), length, + length); + _eventsToHandle.Enqueue(new ReceivedEvent + {Data = newPtr, Peer = @event.Peer, EventType = EventType.Receive}); + } + + break; + } + } + } + }); + } + + public void StartServer(Address address) + { + if (State != ServerState.Stopped) return; + + Logger.I.Log(this, $"Starting server on {address.GetIP()}:{address.Port}"); + State = ServerState.Starting; + + _address = address; + _requests.Enqueue(NetworkThreadRequest.Start); + } + + public void StopServer() + { + if (State != ServerState.Working) return; + + Logger.I.Log(this, "Stopping server"); + State = ServerState.Stopping; + + _connectionsGroup.GetEntities(_connectionsBuffer); + foreach (var e in _connectionsBuffer) + { + _disconnectData.Enqueue(new DisconnectData {Peer = e.connectionPeer.Value}); + e.isDestroyed = true; + } + + _requests.Enqueue(NetworkThreadRequest.Stop); + } + + public void EnqueueCommandForEveryone(T command) where T : ICommand, IServerCommand + { + Logger.I.Log(this, $"Enqueued {command.GetType().Name} for everyone"); + + _connectionsGroup.GetEntities(_connectionsBuffer); + foreach (var e in _connectionsBuffer) + { + e.clientDataBuffer.CommandCount++; + command.Serialize(e.clientDataBuffer.Value); + } + } + + public void EnqueueCommandForClient(ushort connectionId, T command) where T : ICommand, IServerCommand + { + Logger.I.Log(this, $"Enqueued {command.GetType().Name} for {connectionId}"); + + var e = _game.GetEntityWithConnection(connectionId); + if (e != null) + { + e.clientDataBuffer.CommandCount++; + command.Serialize(e.clientDataBuffer.Value); + } + } + + public void EnqueueSendData(SendData data) + { + _sendData.Enqueue(data); + } + + public void EnqueueDisconnectData(DisconnectData data) + { + _disconnectData.Enqueue(data); + } + + public void ClearBuffers() + { + RemovedEntities.Clear(); + RemovedComponents.Clear(); + ChangedComponents.Clear(); + CreatedEntities.Clear(); + ChangedComponentsCount = 0; + CreatedEntitiesCount = 0; + RemovedComponentsCount = 0; + RemovedEntitiesCount = 0; + } + + private enum NetworkThreadRequest + { + Start, + Stop + } + + private enum NetworkThreadResponse + { + StartSuccess, + StartFailure, + Stoppoed + } + } + + public enum ServerState + { + Stopped, + Starting, + Working, + Stopping + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/ServerNetworkSystem.cs.meta b/Assets/Sources/Networking/Server/ServerNetworkSystem.cs.meta new file mode 100644 index 0000000..b0ea567 --- /dev/null +++ b/Assets/Sources/Networking/Server/ServerNetworkSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 62c549229098496db745769b9002859a +timeCreated: 1557606653 \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/ServerSendPacketsSystem.cs b/Assets/Sources/Networking/Server/ServerSendPacketsSystem.cs new file mode 100644 index 0000000..16a8500 --- /dev/null +++ b/Assets/Sources/Networking/Server/ServerSendPacketsSystem.cs @@ -0,0 +1,203 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using Entitas; + +namespace Sources.Networking.Server +{ + public class ServerSendPacketsSystem : IExecuteSystem + { + private readonly List _connectionsBuffer = new List(ServerNetworkSystem.MaxPlayers); + private readonly IGroup _connectionsGroup; + + private readonly byte[] _data = new byte[2048]; + private readonly GameContext _game; + + private readonly ServerNetworkSystem _server; + + public ServerSendPacketsSystem(Contexts contexts, Services services) + { + _game = contexts.game; + _connectionsGroup = _game.GetGroup(GameMatcher.Connection); + + _server = services.ServerSystem; + } + + public void Execute() + { + if (_server.State != ServerState.Working) return; + + var createdEntitiesLength = _server.CreatedEntities.Length; + var changedComponentsLength = _server.ChangedComponents.Length; + var removedEntitiesLength = _server.RemovedEntities.Length; + var removedComponentsLength = _server.RemovedComponents.Length; + + _connectionsGroup.GetEntities(_connectionsBuffer); + foreach (var e in _connectionsBuffer) + unsafe + { + if (e.isDestroyed) continue; + + if (e.isRequiresWorldState) + { + var cb = e.clientDataBuffer; + var commandLength = cb.Value.Length; + + var commandCount = cb.CommandCount; + fixed (byte* destination = &_data[0]) + { + var shortsSpan = new Span(destination, 2); + shortsSpan[0] = commandCount; + shortsSpan[1] = (ushort) commandLength; + } + + var offset = 4; + if (commandCount > 0) + { + cb.Value.ToArray(_data, offset); + offset += commandLength; + + cb.Value.Clear(); + cb.CommandCount = 0; + } + + fixed (byte* destination = &_data[offset]) + { + var shortsSpan = new Span(destination, 2); + shortsSpan[0] = _game.worldState.EntityCount; + shortsSpan[1] = (ushort) _game.worldState.Buffer.Length; + } + + offset += 4; + + _game.worldState.Buffer.ToArray(_data, offset); + offset += _game.worldState.Buffer.Length; + + var newPtr = Marshal.AllocHGlobal(offset); + fixed (byte* source = &_data[0]) + { + Buffer.MemoryCopy(source, newPtr.ToPointer(), offset, offset); + } + + _server.EnqueueSendData(new SendData + {Data = newPtr, Length = offset, Peer = e.connectionPeer.Value}); + e.isRequiresWorldState = false; + } + else + { + #region commands + + var cb = e.clientDataBuffer; + var commandLength = cb.Value.Length; + + var commandCount = cb.CommandCount; + fixed (byte* destination = &_data[0]) + { + var shortsSpan = new Span(destination, 2); + shortsSpan[0] = commandCount; + shortsSpan[1] = (ushort) commandLength; + } + + var offset = 4; + if (commandCount > 0) + { + cb.Value.ToArray(_data, offset); + offset += commandLength; + + cb.Value.Clear(); + cb.CommandCount = 0; + } + + #endregion + + #region created entities + + fixed (byte* destination = &_data[offset]) + { + var shortsSpan = new Span(destination, 2); + shortsSpan[0] = _server.CreatedEntitiesCount; + shortsSpan[1] = (ushort) createdEntitiesLength; + } + + offset += 4; + + if (_server.CreatedEntitiesCount > 0) + { + _server.CreatedEntities.ToArray(_data, offset); + offset += createdEntitiesLength; + } + + #endregion + + #region removed entities + + fixed (byte* destination = &_data[offset]) + { + var shortsSpan = new Span(destination, 2); + shortsSpan[0] = _server.RemovedEntitiesCount; + shortsSpan[1] = (ushort) removedEntitiesLength; + } + + offset += 4; + + if (_server.RemovedEntitiesCount > 0) + { + _server.RemovedEntities.ToArray(_data, offset); + offset += removedEntitiesLength; + } + + #endregion + + #region removed components + + fixed (byte* destination = &_data[offset]) + { + var shortsSpan = new Span(destination, 2); + shortsSpan[0] = _server.RemovedComponentsCount; + shortsSpan[1] = (ushort) removedComponentsLength; + } + + offset += 4; + + if (_server.RemovedComponentsCount > 0) + { + _server.RemovedComponents.ToArray(_data, offset); + offset += removedComponentsLength; + } + + #endregion + + #region changed components + + fixed (byte* destination = &_data[offset]) + { + var shortsSpan = new Span(destination, 2); + shortsSpan[0] = _server.ChangedComponentsCount; + shortsSpan[1] = (ushort) changedComponentsLength; + } + + offset += 4; + + if (_server.ChangedComponentsCount > 0) + { + _server.ChangedComponents.ToArray(_data, offset); + offset += changedComponentsLength; + } + + #endregion + + var newPtr = Marshal.AllocHGlobal(offset); + fixed (byte* source = &_data[0]) + { + Buffer.MemoryCopy(source, newPtr.ToPointer(), offset, offset); + } + + _server.EnqueueSendData(new SendData + {Data = newPtr, Length = offset, Peer = e.connectionPeer.Value}); + } + } + + _server.ClearBuffers(); + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/ServerSendPacketsSystem.cs.meta b/Assets/Sources/Networking/Server/ServerSendPacketsSystem.cs.meta new file mode 100644 index 0000000..0376ba9 --- /dev/null +++ b/Assets/Sources/Networking/Server/ServerSendPacketsSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b1abfc0deea34e62b32d8b8a4984f992 +timeCreated: 1557662138 \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/StateCapture.meta b/Assets/Sources/Networking/Server/StateCapture.meta new file mode 100644 index 0000000..dbe6f5d --- /dev/null +++ b/Assets/Sources/Networking/Server/StateCapture.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2219b80460e641cdbd788dd2c2531291 +timeCreated: 1557694130 \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/StateCapture/ServerCaptureCreatedEntitiesSystem.cs b/Assets/Sources/Networking/Server/StateCapture/ServerCaptureCreatedEntitiesSystem.cs new file mode 100644 index 0000000..39daeb5 --- /dev/null +++ b/Assets/Sources/Networking/Server/StateCapture/ServerCaptureCreatedEntitiesSystem.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; +using Entitas; + +namespace Sources.Networking.Server.StateCapture +{ + public class ServerCaptureCreatedEntitiesSystem : ReactiveSystem + { + private readonly ServerNetworkSystem _server; + + public ServerCaptureCreatedEntitiesSystem(Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) + { + return context.CreateCollector(GameMatcher.Sync.Added()); + } + + protected override bool Filter(GameEntity entity) + { + return !entity.isDestroyed && !entity.isWasSynced && entity.isSync; + } + + protected override void Execute(List entities) + { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) + { + PackEntityUtility.Pack(e, _server.CreatedEntities); + + e.isWasSynced = true; + _server.CreatedEntitiesCount++; + } + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/StateCapture/ServerCaptureCreatedEntitiesSystem.cs.meta b/Assets/Sources/Networking/Server/StateCapture/ServerCaptureCreatedEntitiesSystem.cs.meta new file mode 100644 index 0000000..ab8f764 --- /dev/null +++ b/Assets/Sources/Networking/Server/StateCapture/ServerCaptureCreatedEntitiesSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c9d250729f407d40962d29f5ad76942 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Networking/Server/StateCapture/ServerCaptureRemovedEntitiesSystem.cs b/Assets/Sources/Networking/Server/StateCapture/ServerCaptureRemovedEntitiesSystem.cs new file mode 100644 index 0000000..ac9a466 --- /dev/null +++ b/Assets/Sources/Networking/Server/StateCapture/ServerCaptureRemovedEntitiesSystem.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using Entitas; + +namespace Sources.Networking.Server.StateCapture +{ + public class ServerCaptureRemovedEntitiesSystem : ReactiveSystem + { + private readonly ServerNetworkSystem _server; + + public ServerCaptureRemovedEntitiesSystem(Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) + { + return context.CreateCollector(GameMatcher.Destroyed.Added()); + } + + protected override bool Filter(GameEntity entity) + { + return entity.isDestroyed && entity.isWasSynced; + } + + protected override void Execute(List entities) + { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) + { + _server.RemovedEntities.AddUShort(e.id.Value); + _server.RemovedEntitiesCount++; + } + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/StateCapture/ServerCaptureRemovedEntitiesSystem.cs.meta b/Assets/Sources/Networking/Server/StateCapture/ServerCaptureRemovedEntitiesSystem.cs.meta new file mode 100644 index 0000000..abb6d06 --- /dev/null +++ b/Assets/Sources/Networking/Server/StateCapture/ServerCaptureRemovedEntitiesSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ab22de66358b4562ab1dfacc9fd1a468 +timeCreated: 1557694166 \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/StateCapture/ServerCreateWorldStateSystem.cs b/Assets/Sources/Networking/Server/StateCapture/ServerCreateWorldStateSystem.cs new file mode 100644 index 0000000..f03642c --- /dev/null +++ b/Assets/Sources/Networking/Server/StateCapture/ServerCreateWorldStateSystem.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using Entitas; +using NetStack.Serialization; +using Sources.Tools; + +namespace Sources.Networking.Server.StateCapture +{ + public class ServerCreateWorldStateSystem : ReactiveSystem + { + private readonly BitBuffer _buffer = new BitBuffer(512); + private readonly GameContext _game; + private readonly List _syncBuffer = new List(256); + + private readonly IGroup _syncGroup; + + public ServerCreateWorldStateSystem(Contexts contexts) : base(contexts.game) + { + _game = contexts.game; + _syncGroup = _game.GetGroup(GameMatcher.Sync); + } + + protected override ICollector GetTrigger(IContext context) + { + return context.CreateCollector(GameMatcher.RequiresWorldState.Added()); + } + + protected override bool Filter(GameEntity entity) + { + return entity.isRequiresWorldState; + } + + protected override void Execute(List entities) + { + Logger.I.Log(this, "Creating world snapshot."); + + var e = _game.CreateEntity(); + e.AddWorldState(0, _buffer); + e.isDestroyed = true; + + _buffer.Clear(); + _syncGroup.GetEntities(_syncBuffer); + + foreach (var entity in _syncBuffer) + if (!entity.isDestroyed) + { + e.worldState.EntityCount++; + PackEntityUtility.Pack(entity, _buffer); + } + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Networking/Server/StateCapture/ServerCreateWorldStateSystem.cs.meta b/Assets/Sources/Networking/Server/StateCapture/ServerCreateWorldStateSystem.cs.meta new file mode 100644 index 0000000..d8c2741 --- /dev/null +++ b/Assets/Sources/Networking/Server/StateCapture/ServerCreateWorldStateSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 21521ce8d6c84b609fa1d4db6b9777fc +timeCreated: 1557702599 \ No newline at end of file diff --git a/Assets/Sources/ServerFeature.cs b/Assets/Sources/ServerFeature.cs new file mode 100644 index 0000000..d499178 --- /dev/null +++ b/Assets/Sources/ServerFeature.cs @@ -0,0 +1,13 @@ +using Sources.Networking.Server; + +public class ServerFeature : Feature +{ + public ServerFeature(Contexts contexts, Services services) + { + Add(new CommonGameplayFeature(contexts, services)); + Add(new ServerGameplayFeature(contexts, services)); + + Add(new ServerNetworkFeature(contexts, services)); + Add(new CommonGeneratedFeature(contexts)); + } +} \ No newline at end of file diff --git a/Assets/Sources/ServerFeature.cs.meta b/Assets/Sources/ServerFeature.cs.meta new file mode 100644 index 0000000..b3e68d6 --- /dev/null +++ b/Assets/Sources/ServerFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 68907c9f53fd4a678bb3e757095803f6 +timeCreated: 1557775285 \ No newline at end of file diff --git a/Assets/Sources/Services.meta b/Assets/Sources/Services.meta new file mode 100644 index 0000000..886d53e --- /dev/null +++ b/Assets/Sources/Services.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d029187714a45946815a38f821e6594 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Services/Service.cs b/Assets/Sources/Services/Service.cs new file mode 100644 index 0000000..03dc918 --- /dev/null +++ b/Assets/Sources/Services/Service.cs @@ -0,0 +1,9 @@ +public abstract class Service +{ + protected readonly Contexts _contexts; + + public Service(Contexts contexts) + { + _contexts = contexts; + } +} \ No newline at end of file diff --git a/Assets/Sources/Services/Service.cs.meta b/Assets/Sources/Services/Service.cs.meta new file mode 100644 index 0000000..9c0ac25 --- /dev/null +++ b/Assets/Sources/Services/Service.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a2bcab3e5b1b68448fb8a293d4a9048 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Services/Services.cs b/Assets/Sources/Services/Services.cs new file mode 100644 index 0000000..7237741 --- /dev/null +++ b/Assets/Sources/Services/Services.cs @@ -0,0 +1,8 @@ +using Sources.Networking.Client; +using Sources.Networking.Server; + +public class Services +{ + public ClientNetworkSystem ClientSystem; + public ServerNetworkSystem ServerSystem; +} \ No newline at end of file diff --git a/Assets/Sources/Services/Services.cs.meta b/Assets/Sources/Services/Services.cs.meta new file mode 100644 index 0000000..d63201d --- /dev/null +++ b/Assets/Sources/Services/Services.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8cdf22fabe8ee04ca2153642376c9a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/Tools.meta b/Assets/Sources/Tools.meta new file mode 100644 index 0000000..37d3647 --- /dev/null +++ b/Assets/Sources/Tools.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: da952fd18276427aae893fc936f7f5d7 +timeCreated: 1557757520 \ No newline at end of file diff --git a/Assets/Sources/Tools/ComponentsLookup.cs b/Assets/Sources/Tools/ComponentsLookup.cs new file mode 100644 index 0000000..c7073cb --- /dev/null +++ b/Assets/Sources/Tools/ComponentsLookup.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; + +namespace Sources.Tools +{ + public static class ComponentsLookup + { + private static readonly Dictionary _typeToIndex; + + static ComponentsLookup() + { + _typeToIndex = new Dictionary(GameComponentsLookup.componentTypes.Length); + for (var i = 0; i < GameComponentsLookup.componentTypes.Length; i++) + _typeToIndex.Add(GameComponentsLookup.componentTypes[i], i); + } + + public static int GetIndex(Type componentType) + { + return _typeToIndex[componentType]; + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Tools/ComponentsLookup.cs.meta b/Assets/Sources/Tools/ComponentsLookup.cs.meta new file mode 100644 index 0000000..88ad127 --- /dev/null +++ b/Assets/Sources/Tools/ComponentsLookup.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 37e2925d738d4eb0af7736a88b05e594 +timeCreated: 1558113160 \ No newline at end of file diff --git a/Assets/Sources/Tools/Logger.cs b/Assets/Sources/Tools/Logger.cs new file mode 100644 index 0000000..3d44adf --- /dev/null +++ b/Assets/Sources/Tools/Logger.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Sources.Tools +{ + public class Logger : MonoBehaviour + { + public static Logger I; + + private readonly object _locker = new object(); + + public int DrawCount = 15; + public List Messages = new List(); + + private void Awake() + { + I = this; + } + + public void Log(object caller, string message) + { + lock (_locker) + { + Messages.Add($"{caller.GetType().Name}: {message}"); + } + } + + public void Log(string caller, string message) + { + lock (_locker) + { + Messages.Add($"{caller}: {message}"); + } + } + + private void OnGUI() + { + GUILayout.Space(100); + GUILayout.BeginVertical(GUI.skin.box); + var counter = 0; + lock (_locker) + { + for (var i = Messages.Count - 1; i >= 0; i--) + { + counter++; + var message = Messages[i]; + GUILayout.Label(message); + if (counter == DrawCount) + break; + } + } + + GUILayout.EndVertical(); + } + } +} \ No newline at end of file diff --git a/Assets/Sources/Tools/Logger.cs.meta b/Assets/Sources/Tools/Logger.cs.meta new file mode 100644 index 0000000..95de2e6 --- /dev/null +++ b/Assets/Sources/Tools/Logger.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9ab84c5d2ea6467a8a733e98051580b1 +timeCreated: 1557757526 \ No newline at end of file diff --git a/Assets/Sources/Utilities.meta b/Assets/Sources/Utilities.meta new file mode 100644 index 0000000..656705f --- /dev/null +++ b/Assets/Sources/Utilities.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 268eccefd9bf46a688c7fcfe9469661b +timeCreated: 1556835578 \ No newline at end of file diff --git a/Assets/Sources/Utilities/GameObjectUtility.cs b/Assets/Sources/Utilities/GameObjectUtility.cs new file mode 100644 index 0000000..e923107 --- /dev/null +++ b/Assets/Sources/Utilities/GameObjectUtility.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +public static class GameObjectUtility +{ + public static void InitializeObject(GameObject go, GameEntity entity, bool isServer) + { + var view = go.GetComponent(); + view?.InitializeView(entity); + } +} \ No newline at end of file diff --git a/Assets/Sources/Utilities/GameObjectUtility.cs.meta b/Assets/Sources/Utilities/GameObjectUtility.cs.meta new file mode 100644 index 0000000..adaa248 --- /dev/null +++ b/Assets/Sources/Utilities/GameObjectUtility.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1917f25894a84708b48609112df6e38c +timeCreated: 1556835651 \ No newline at end of file diff --git a/Assets/Sources/View.meta b/Assets/Sources/View.meta new file mode 100644 index 0000000..2f60508 --- /dev/null +++ b/Assets/Sources/View.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d8f78974655d41458a3e720d2a562435 +timeCreated: 1556833060 \ No newline at end of file diff --git a/Assets/Sources/View/IView.cs b/Assets/Sources/View/IView.cs new file mode 100644 index 0000000..bb87d8c --- /dev/null +++ b/Assets/Sources/View/IView.cs @@ -0,0 +1,10 @@ +using Entitas; + +public interface IView +{ + void InitializeView(IEntity entity); +} +// CONGRATULATIONS! YOU FOUND THE CAT! +// )\._.,--....,'``. +// .b--. /; _.. \ _\ (`._ ,. +//`=,-,-'~~~ `----(,_..'--(,_..'`-.;.' \ No newline at end of file diff --git a/Assets/Sources/View/IView.cs.meta b/Assets/Sources/View/IView.cs.meta new file mode 100644 index 0000000..1889b09 --- /dev/null +++ b/Assets/Sources/View/IView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa9f9250015243e41b55b87b12ca75aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/View/Listeners.meta b/Assets/Sources/View/Listeners.meta new file mode 100644 index 0000000..bfae541 --- /dev/null +++ b/Assets/Sources/View/Listeners.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e5486b455899c604b80ee9f53708d8f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/View/Listeners/IEventListener.cs b/Assets/Sources/View/Listeners/IEventListener.cs new file mode 100644 index 0000000..3310cbb --- /dev/null +++ b/Assets/Sources/View/Listeners/IEventListener.cs @@ -0,0 +1,5 @@ +public interface IEventListener +{ + bool enabled { get; set; } + void RegisterListeners(GameEntity entity); +} \ No newline at end of file diff --git a/Assets/Sources/View/Listeners/IEventListener.cs.meta b/Assets/Sources/View/Listeners/IEventListener.cs.meta new file mode 100644 index 0000000..40c8a3e --- /dev/null +++ b/Assets/Sources/View/Listeners/IEventListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f9e58e7d841f974c9a93700718f790a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sources/View/UnityView.cs b/Assets/Sources/View/UnityView.cs new file mode 100644 index 0000000..88fa8f4 --- /dev/null +++ b/Assets/Sources/View/UnityView.cs @@ -0,0 +1,25 @@ +using Entitas; +using Entitas.Unity; +using UnityEngine; + +public class UnityView : MonoBehaviour, IView, IDestroyedListener +{ + private GameEntity _entity; + + public void OnDestroyed(GameEntity entity) + { +#if UNITY_EDITOR + gameObject.Unlink(); +#endif + Destroy(gameObject); + } + + public void InitializeView(IEntity entity) + { + _entity = (GameEntity) entity; + _entity.AddDestroyedListener(this); +#if UNITY_EDITOR + gameObject.Link(entity); +#endif + } +} \ No newline at end of file diff --git a/Assets/Sources/View/UnityView.cs.meta b/Assets/Sources/View/UnityView.cs.meta new file mode 100644 index 0000000..2185e72 --- /dev/null +++ b/Assets/Sources/View/UnityView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0f3c779ae94ad044b925a386acd60e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Entitas.properties b/Entitas.properties new file mode 100644 index 0000000..61dc4a2 --- /dev/null +++ b/Entitas.properties @@ -0,0 +1,3 @@ +Entitas.VisualDebugging.Unity.Editor.SystemWarningThreshold = 5 +Entitas.VisualDebugging.Unity.Editor.DefaultInstanceCreatorFolderPath = Assets/Editor/DefaultInstanceCreator +Entitas.VisualDebugging.Unity.Editor.TypeDrawerFolderPath = Assets/Editor/TypeDrawer diff --git a/Generators/Generators/Generators/Compressors/CompressorsGenerator.cs b/Generators/Generators/Generators/Compressors/CompressorsGenerator.cs new file mode 100644 index 0000000..ee9151f --- /dev/null +++ b/Generators/Generators/Generators/Compressors/CompressorsGenerator.cs @@ -0,0 +1,554 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Compressors +{ + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class CompressorsGenerator : CompressorsGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("using NetStack.Compression;\r\n\r\npublic static class "); + + #line 9 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Prefix)); + + #line default + #line hidden + this.Write("Compressors\r\n{\r\n"); + + #line 11 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + +for (int i = 0; i < Mins.Length; i++) +{ + var name = CompressorNames[i]; + + + #line default + #line hidden + this.Write("\tpublic static readonly BoundedRange "); + + #line 16 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("Compressor;\r\n\t"); + + #line 17 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + +} + + + #line default + #line hidden + this.Write(" \r\n static "); + + #line 21 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Prefix)); + + #line default + #line hidden + this.Write("Compressors()\r\n {\r\n"); + + #line 23 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + +for (int i = 0; i < Mins.Length; i++) +{ + var name = CompressorNames[i]; + var min = Mins[i]; + var max = Maxs[i]; + var precision = Precisions[i]; + + + #line default + #line hidden + this.Write("\t "); + + #line 31 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("Compressor = new BoundedRange("); + + #line 31 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(min)); + + #line default + #line hidden + this.Write(", "); + + #line 31 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(max)); + + #line default + #line hidden + this.Write(", "); + + #line 31 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(precision)); + + #line default + #line hidden + this.Write("f);\r\n\t"); + + #line 32 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + +} + + + #line default + #line hidden + this.Write(" }\r\n}"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Compressors\CompressorsGenerator.tt" + +private string _PrefixField; + +/// +/// Access the Prefix parameter of the template. +/// +private string Prefix +{ + get + { + return this._PrefixField; + } +} + +private string[] _CompressorNamesField; + +/// +/// Access the CompressorNames parameter of the template. +/// +private string[] CompressorNames +{ + get + { + return this._CompressorNamesField; + } +} + +private float[] _MinsField; + +/// +/// Access the Mins parameter of the template. +/// +private float[] Mins +{ + get + { + return this._MinsField; + } +} + +private float[] _MaxsField; + +/// +/// Access the Maxs parameter of the template. +/// +private float[] Maxs +{ + get + { + return this._MaxsField; + } +} + +private float[] _PrecisionsField; + +/// +/// Access the Precisions parameter of the template. +/// +private float[] Precisions +{ + get + { + return this._PrecisionsField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool PrefixValueAcquired = false; +if (this.Session.ContainsKey("Prefix")) +{ + this._PrefixField = ((string)(this.Session["Prefix"])); + PrefixValueAcquired = true; +} +if ((PrefixValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Prefix"); + if ((data != null)) + { + this._PrefixField = ((string)(data)); + } +} +bool CompressorNamesValueAcquired = false; +if (this.Session.ContainsKey("CompressorNames")) +{ + this._CompressorNamesField = ((string[])(this.Session["CompressorNames"])); + CompressorNamesValueAcquired = true; +} +if ((CompressorNamesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("CompressorNames"); + if ((data != null)) + { + this._CompressorNamesField = ((string[])(data)); + } +} +bool MinsValueAcquired = false; +if (this.Session.ContainsKey("Mins")) +{ + this._MinsField = ((float[])(this.Session["Mins"])); + MinsValueAcquired = true; +} +if ((MinsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Mins"); + if ((data != null)) + { + this._MinsField = ((float[])(data)); + } +} +bool MaxsValueAcquired = false; +if (this.Session.ContainsKey("Maxs")) +{ + this._MaxsField = ((float[])(this.Session["Maxs"])); + MaxsValueAcquired = true; +} +if ((MaxsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Maxs"); + if ((data != null)) + { + this._MaxsField = ((float[])(data)); + } +} +bool PrecisionsValueAcquired = false; +if (this.Session.ContainsKey("Precisions")) +{ + this._PrecisionsField = ((float[])(this.Session["Precisions"])); + PrecisionsValueAcquired = true; +} +if ((PrecisionsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Precisions"); + if ((data != null)) + { + this._PrecisionsField = ((float[])(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class CompressorsGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Compressors/CompressorsGenerator.tt b/Generators/Generators/Generators/Compressors/CompressorsGenerator.tt new file mode 100644 index 0000000..af87505 --- /dev/null +++ b/Generators/Generators/Generators/Compressors/CompressorsGenerator.tt @@ -0,0 +1,36 @@ +<#@ template language="C#" #> +<#@ parameter name="Prefix" type="System.String"#> +<#@ parameter name="CompressorNames" type="System.String[]"#> +<#@ parameter name="Mins" type="System.Single[]"#> +<#@ parameter name="Maxs" type="System.Single[]"#> +<#@ parameter name="Precisions" type="System.Single[]"#> +using NetStack.Compression; + +public static class <#=Prefix#>Compressors +{ +<# +for (int i = 0; i < Mins.Length; i++) +{ + var name = CompressorNames[i]; + #> + public static readonly BoundedRange <#=name#>Compressor; + <# +} +#> + + static <#=Prefix#>Compressors() + { +<# +for (int i = 0; i < Mins.Length; i++) +{ + var name = CompressorNames[i]; + var min = Mins[i]; + var max = Maxs[i]; + var precision = Precisions[i]; + #> + <#=name#>Compressor = new BoundedRange(<#=min#>, <#=max#>, <#=precision#>f); + <# +} +#> + } +} \ No newline at end of file diff --git a/Generators/Generators/Generators/Properties/AssemblyInfo.cs b/Generators/Generators/Generators/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..af732f9 --- /dev/null +++ b/Generators/Generators/Generators/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Generators")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Generators")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8ba1de98-20de-43e8-8276-efe4bebb8b98")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Generators/Generators/Generators/Scheme/Command/Executor/Interface/SchemeCommandExecutorInterfaceGenerator.cs b/Generators/Generators/Generators/Scheme/Command/Executor/Interface/SchemeCommandExecutorInterfaceGenerator.cs new file mode 100644 index 0000000..472b02c --- /dev/null +++ b/Generators/Generators/Generators/Scheme/Command/Executor/Interface/SchemeCommandExecutorInterfaceGenerator.cs @@ -0,0 +1,461 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Scheme.Command.Executor.Interface +{ + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\Interface\SchemeCommandExecutorInterfaceGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class SchemeCommandExecutorInterfaceGenerator : SchemeCommandExecutorInterfaceGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("public interface I"); + + #line 5 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\Interface\SchemeCommandExecutorInterfaceGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Type)); + + #line default + #line hidden + this.Write("Handler\r\n{\r\n"); + + #line 7 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\Interface\SchemeCommandExecutorInterfaceGenerator.tt" + + foreach (var name in SchemeNames) + { + + + #line default + #line hidden + this.Write("\tvoid Handle"); + + #line 11 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\Interface\SchemeCommandExecutorInterfaceGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("Command(ref "); + + #line 11 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\Interface\SchemeCommandExecutorInterfaceGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Using)); + + #line default + #line hidden + + #line 11 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\Interface\SchemeCommandExecutorInterfaceGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("Command command);\r\n"); + + #line 12 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\Interface\SchemeCommandExecutorInterfaceGenerator.tt" + + } + + + #line default + #line hidden + this.Write("}\r\n\r\npublic interface I"); + + #line 17 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\Interface\SchemeCommandExecutorInterfaceGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Type)); + + #line default + #line hidden + this.Write("Command{}"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\Interface\SchemeCommandExecutorInterfaceGenerator.tt" + +private string _UsingField; + +/// +/// Access the Using parameter of the template. +/// +private string Using +{ + get + { + return this._UsingField; + } +} + +private string _TypeField; + +/// +/// Access the Type parameter of the template. +/// +private string Type +{ + get + { + return this._TypeField; + } +} + +private string[] _SchemeNamesField; + +/// +/// Access the SchemeNames parameter of the template. +/// +private string[] SchemeNames +{ + get + { + return this._SchemeNamesField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool UsingValueAcquired = false; +if (this.Session.ContainsKey("Using")) +{ + this._UsingField = ((string)(this.Session["Using"])); + UsingValueAcquired = true; +} +if ((UsingValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Using"); + if ((data != null)) + { + this._UsingField = ((string)(data)); + } +} +bool TypeValueAcquired = false; +if (this.Session.ContainsKey("Type")) +{ + this._TypeField = ((string)(this.Session["Type"])); + TypeValueAcquired = true; +} +if ((TypeValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Type"); + if ((data != null)) + { + this._TypeField = ((string)(data)); + } +} +bool SchemeNamesValueAcquired = false; +if (this.Session.ContainsKey("SchemeNames")) +{ + this._SchemeNamesField = ((string[])(this.Session["SchemeNames"])); + SchemeNamesValueAcquired = true; +} +if ((SchemeNamesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("SchemeNames"); + if ((data != null)) + { + this._SchemeNamesField = ((string[])(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class SchemeCommandExecutorInterfaceGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Scheme/Command/Executor/Interface/SchemeCommandExecutorInterfaceGenerator.tt b/Generators/Generators/Generators/Scheme/Command/Executor/Interface/SchemeCommandExecutorInterfaceGenerator.tt new file mode 100644 index 0000000..fb3a728 --- /dev/null +++ b/Generators/Generators/Generators/Scheme/Command/Executor/Interface/SchemeCommandExecutorInterfaceGenerator.tt @@ -0,0 +1,17 @@ +<#@ template language="C#" #> +<#@ parameter name="Using" type="System.String"#> +<#@ parameter name="Type" type="System.String"#> +<#@ parameter name="SchemeNames" type="System.String[]"#> +public interface I<#=Type#>Handler +{ +<# + foreach (var name in SchemeNames) + { +#> + void Handle<#=name#>Command(ref <#=Using#><#=name#>Command command); +<# + } +#> +} + +public interface I<#=Type#>Command{} \ No newline at end of file diff --git a/Generators/Generators/Generators/Scheme/Command/Executor/SchemeCommandExecutorGenerator.cs b/Generators/Generators/Generators/Scheme/Command/Executor/SchemeCommandExecutorGenerator.cs new file mode 100644 index 0000000..7dd9a34 --- /dev/null +++ b/Generators/Generators/Generators/Scheme/Command/Executor/SchemeCommandExecutorGenerator.cs @@ -0,0 +1,539 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Scheme.Command.Executor +{ + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class SchemeCommandExecutorGenerator : SchemeCommandExecutorGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("using NetStack.Serialization;\r\nusing Sources.Tools;\r\n\r\npublic static class "); + + #line 9 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Type)); + + #line default + #line hidden + this.Write("CommandExecutor\r\n{\r\n public static void Execute(I"); + + #line 11 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Type)); + + #line default + #line hidden + this.Write("Handler handler, BitBuffer buffer, ushort commandCount)\r\n\t{\r\n\t\tfor (int i = 0; i " + + "< commandCount; i++)\r\n {\r\n var commandId = buffer.ReadUShort()" + + ";\r\n switch (commandId)\r\n {\r\n\t\t\t"); + + #line 18 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + + for (int i = 0; i < SchemeNames.Length; i++) + { + var id = SchemeIds[i]; + var name = SchemeNames[i]; + + + #line default + #line hidden + this.Write("\t\t\t\t\r\n case "); + + #line 25 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(id)); + + #line default + #line hidden + this.Write(":\r\n {\r\n"); + + #line 27 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + + if (name != "Input" && name != "InputBufferState") + { + + + #line default + #line hidden + this.Write("\t\t\t\t\tLogger.I.Log(\""); + + #line 31 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Type)); + + #line default + #line hidden + this.Write("CommandExecutor\", \"Executing "); + + #line 31 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Using)); + + #line default + #line hidden + + #line 31 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("Command\");\r\n"); + + #line 32 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + + } + + + #line default + #line hidden + this.Write(" var c = new "); + + #line 35 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Using)); + + #line default + #line hidden + + #line 35 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("Command();\r\n c.Deserialize(buffer);\r\n handl" + + "er.Handle"); + + #line 37 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("Command(ref c);\r\n break;\r\n }\r\n\t\t\t\t"); + + #line 40 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + + } + + + #line default + #line hidden + this.Write(" }\r\n }\r\n\t}\r\n}"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\Executor\SchemeCommandExecutorGenerator.tt" + +private string _UsingField; + +/// +/// Access the Using parameter of the template. +/// +private string Using +{ + get + { + return this._UsingField; + } +} + +private string _TypeField; + +/// +/// Access the Type parameter of the template. +/// +private string Type +{ + get + { + return this._TypeField; + } +} + +private ushort[] _SchemeIdsField; + +/// +/// Access the SchemeIds parameter of the template. +/// +private ushort[] SchemeIds +{ + get + { + return this._SchemeIdsField; + } +} + +private string[] _SchemeNamesField; + +/// +/// Access the SchemeNames parameter of the template. +/// +private string[] SchemeNames +{ + get + { + return this._SchemeNamesField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool UsingValueAcquired = false; +if (this.Session.ContainsKey("Using")) +{ + this._UsingField = ((string)(this.Session["Using"])); + UsingValueAcquired = true; +} +if ((UsingValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Using"); + if ((data != null)) + { + this._UsingField = ((string)(data)); + } +} +bool TypeValueAcquired = false; +if (this.Session.ContainsKey("Type")) +{ + this._TypeField = ((string)(this.Session["Type"])); + TypeValueAcquired = true; +} +if ((TypeValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Type"); + if ((data != null)) + { + this._TypeField = ((string)(data)); + } +} +bool SchemeIdsValueAcquired = false; +if (this.Session.ContainsKey("SchemeIds")) +{ + this._SchemeIdsField = ((ushort[])(this.Session["SchemeIds"])); + SchemeIdsValueAcquired = true; +} +if ((SchemeIdsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("SchemeIds"); + if ((data != null)) + { + this._SchemeIdsField = ((ushort[])(data)); + } +} +bool SchemeNamesValueAcquired = false; +if (this.Session.ContainsKey("SchemeNames")) +{ + this._SchemeNamesField = ((string[])(this.Session["SchemeNames"])); + SchemeNamesValueAcquired = true; +} +if ((SchemeNamesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("SchemeNames"); + if ((data != null)) + { + this._SchemeNamesField = ((string[])(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class SchemeCommandExecutorGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Scheme/Command/Executor/SchemeCommandExecutorGenerator.tt b/Generators/Generators/Generators/Scheme/Command/Executor/SchemeCommandExecutorGenerator.tt new file mode 100644 index 0000000..a6a475e --- /dev/null +++ b/Generators/Generators/Generators/Scheme/Command/Executor/SchemeCommandExecutorGenerator.tt @@ -0,0 +1,46 @@ +<#@ template language="C#" #> +<#@ parameter name="Using" type="System.String"#> +<#@ parameter name="Type" type="System.String"#> +<#@ parameter name="SchemeIds" type="System.UInt16[]"#> +<#@ parameter name="SchemeNames" type="System.String[]"#> +using NetStack.Serialization; +using Sources.Tools; + +public static class <#=Type#>CommandExecutor +{ + public static void Execute(I<#=Type#>Handler handler, BitBuffer buffer, ushort commandCount) + { + for (int i = 0; i < commandCount; i++) + { + var commandId = buffer.ReadUShort(); + switch (commandId) + { + <# + for (int i = 0; i < SchemeNames.Length; i++) + { + var id = SchemeIds[i]; + var name = SchemeNames[i]; + #> + + case <#=id#>: + { +<# + if (name != "Input" && name != "InputBufferState") + { +#> + Logger.I.Log("<#=Type#>CommandExecutor", "Executing <#=Using#><#=name#>Command"); +<# + } +#> + var c = new <#=Using#><#=name#>Command(); + c.Deserialize(buffer); + handler.Handle<#=name#>Command(ref c); + break; + } + <# + } + #> + } + } + } +} \ No newline at end of file diff --git a/Generators/Generators/Generators/Scheme/Command/SchemeCommandGenerator.cs b/Generators/Generators/Generators/Scheme/Command/SchemeCommandGenerator.cs new file mode 100644 index 0000000..5840c10 --- /dev/null +++ b/Generators/Generators/Generators/Scheme/Command/SchemeCommandGenerator.cs @@ -0,0 +1,1545 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Scheme.Command +{ + using System.Linq; + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class SchemeCommandGenerator : SchemeCommandGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("using NetStack.Serialization;\r\n"); + + #line 11 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + if (FieldTypes.Any(x => x == "System.Single")|| + FieldTypes.Any(x => x == "UnityEngine.Vector2")|| + FieldTypes.Any(x => x == "UnityEngine.Vector3")) + { + + + #line default + #line hidden + this.Write("using NetStack.Compression;\r\n\t"); + + #line 18 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + + + #line default + #line hidden + this.Write("\r\npublic struct "); + + #line 22 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 22 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + this.Write("Command : ICommand, I"); + + #line 22 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + this.Write("Command\r\n{\r\n"); + + #line 24 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + for (int i = 0; i < FieldTypes.Length; i++) + { + + + #line default + #line hidden + this.Write("\tpublic "); + + #line 27 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldTypes[i])); + + #line default + #line hidden + this.Write(" "); + + #line 27 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(";\r\n"); + + #line 28 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + + + #line default + #line hidden + this.Write(" public void Serialize(BitBuffer bitBuffer)\r\n\t{\r\n\t\tbitBuffer.AddUShort("); + + #line 33 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandId)); + + #line default + #line hidden + this.Write(");\r\n\r\n"); + + #line 35 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + for (int i = 0; i < FieldTypes.Length; i++) + { + if (IsEnums[i]) + { + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddByte((byte)"); + + #line 41 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(");\r\n"); + + #line 42 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + else + { + var compressed = IsCompressed[i]; + switch(FieldTypes[i]) + { + case "System.Byte": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddByte("); + + #line 51 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 52 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Int32": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddInt("); + + #line 57 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 58 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.UInt32": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddUInt("); + + #line 63 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 64 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Int64": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddLong("); + + #line 69 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 70 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.UInt64": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddULong("); + + #line 75 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(");\r\n"); + + #line 76 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Int16": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddShort("); + + #line 81 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 82 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.UInt16": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddUShort("); + + #line 87 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 88 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.String": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddString("); + + #line 93 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 94 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Boolean": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddBool("); + + #line 99 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 100 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Single": + if (compressed) + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUInt(CommandCompressors."); + + #line 107 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 107 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 107 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("Compressor.Compress("); + + #line 107 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("));\r\n"); + + #line 108 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 113 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("));\r\n"); + + #line 114 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + break; + + case "UnityEngine.Vector2": + if (compressed) + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUInt(CommandCompressors."); + + #line 122 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 122 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 122 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("XCompressor.Compress("); + + #line 122 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x));\r\n bitBuffer.AddUInt(CommandCompressors."); + + #line 123 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 123 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 123 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("YCompressor.Compress("); + + #line 123 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y));\r\n"); + + #line 124 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 129 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x));\r\n bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 130 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y));\r\n"); + + #line 131 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + break; + + case "UnityEngine.Vector3": + if (compressed) + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUInt(CommandCompressors."); + + #line 139 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 139 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 139 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("XCompressor.Compress("); + + #line 139 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x));\r\n bitBuffer.AddUInt(CommandCompressors."); + + #line 140 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 140 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 140 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("YCompressor.Compress("); + + #line 140 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y));\r\n bitBuffer.AddUInt(CommandCompressors."); + + #line 141 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 141 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 141 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("ZCompressor.Compress("); + + #line 141 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".z));\r\n"); + + #line 142 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 147 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x));\r\n bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 148 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y));\r\n bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 149 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".z));\r\n"); + + #line 150 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + break; + } + + } + } + + + #line default + #line hidden + this.Write("\t}\r\n\r\n\tpublic void Deserialize(BitBuffer bitBuffer)\r\n\t{\r\n"); + + #line 161 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + for (int i = 0; i < FieldTypes.Length; i++) + { + if (IsEnums[i]) + { + + + #line default + #line hidden + this.Write("\t\t"); + + #line 167 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = ("); + + #line 167 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldTypes[i])); + + #line default + #line hidden + this.Write(")bitBuffer.ReadByte(); \r\n"); + + #line 168 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + else + { + var compressed = IsCompressed[i]; + switch(FieldTypes[i]) + { + case "System.Byte": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 177 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadByte(); \r\n"); + + #line 178 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Int32": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 183 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadInt(); \r\n"); + + #line 184 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.UInt32": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 189 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadUInt(); \r\n"); + + #line 190 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Int64": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 195 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadLong(); \r\n"); + + #line 196 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.UInt64": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 201 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadULong();\r\n"); + + #line 202 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Int16": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 207 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadShort(); \r\n"); + + #line 208 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.UInt16": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 213 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadUShort(); \r\n"); + + #line 214 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.String": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 219 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadString();\r\n"); + + #line 220 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Boolean": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 225 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadBool(); \r\n"); + + #line 226 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + break; + + case "System.Single": + if (compressed) + { + + + #line default + #line hidden + this.Write(" "); + + #line 233 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = CommandCompressors."); + + #line 233 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 233 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 233 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("Compressor.Decompress(bitBuffer.ReadUInt());\r\n"); + + #line 234 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" "); + + #line 239 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n"); + + #line 240 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + break; + + case "UnityEngine.Vector2": + if (compressed) + { + + + #line default + #line hidden + this.Write(" "); + + #line 248 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x = CommandCompressors."); + + #line 248 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 248 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 248 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("XCompressor.Decompress(bitBuffer.ReadUInt());\r\n "); + + #line 249 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y = CommandCompressors."); + + #line 249 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 249 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 249 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("YCompressor.Decompress(bitBuffer.ReadUInt());\r\n"); + + #line 250 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" "); + + #line 255 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n "); + + #line 256 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n"); + + #line 257 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + break; + + case "UnityEngine.Vector3": + if (compressed) + { + + + #line default + #line hidden + this.Write(" "); + + #line 265 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x = CommandCompressors."); + + #line 265 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 265 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 265 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("XCompressor.Decompress(bitBuffer.ReadUInt());\r\n "); + + #line 266 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y = CommandCompressors."); + + #line 266 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 266 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 266 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("YCompressor.Decompress(bitBuffer.ReadUInt());\r\n "); + + #line 267 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".z = CommandCompressors."); + + #line 267 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Namespace)); + + #line default + #line hidden + + #line 267 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(CommandName)); + + #line default + #line hidden + + #line 267 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("ZCompressor.Decompress(bitBuffer.ReadUInt());\r\n\r\n"); + + #line 269 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" "); + + #line 274 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n "); + + #line 275 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n "); + + #line 276 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".z = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n"); + + #line 277 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + + } + break; + } + } + } + + + #line default + #line hidden + this.Write("\t}\r\n}"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Scheme\Command\SchemeCommandGenerator.tt" + +private string _NamespaceField; + +/// +/// Access the Namespace parameter of the template. +/// +private string Namespace +{ + get + { + return this._NamespaceField; + } +} + +private string _CommandNameField; + +/// +/// Access the CommandName parameter of the template. +/// +private string CommandName +{ + get + { + return this._CommandNameField; + } +} + +private ushort _CommandIdField; + +/// +/// Access the CommandId parameter of the template. +/// +private ushort CommandId +{ + get + { + return this._CommandIdField; + } +} + +private string[] _FieldTypesField; + +/// +/// Access the FieldTypes parameter of the template. +/// +private string[] FieldTypes +{ + get + { + return this._FieldTypesField; + } +} + +private string[] _FieldNamesField; + +/// +/// Access the FieldNames parameter of the template. +/// +private string[] FieldNames +{ + get + { + return this._FieldNamesField; + } +} + +private bool[] _IsEnumsField; + +/// +/// Access the IsEnums parameter of the template. +/// +private bool[] IsEnums +{ + get + { + return this._IsEnumsField; + } +} + +private bool[] _IsCompressedField; + +/// +/// Access the IsCompressed parameter of the template. +/// +private bool[] IsCompressed +{ + get + { + return this._IsCompressedField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool NamespaceValueAcquired = false; +if (this.Session.ContainsKey("Namespace")) +{ + this._NamespaceField = ((string)(this.Session["Namespace"])); + NamespaceValueAcquired = true; +} +if ((NamespaceValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Namespace"); + if ((data != null)) + { + this._NamespaceField = ((string)(data)); + } +} +bool CommandNameValueAcquired = false; +if (this.Session.ContainsKey("CommandName")) +{ + this._CommandNameField = ((string)(this.Session["CommandName"])); + CommandNameValueAcquired = true; +} +if ((CommandNameValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("CommandName"); + if ((data != null)) + { + this._CommandNameField = ((string)(data)); + } +} +bool CommandIdValueAcquired = false; +if (this.Session.ContainsKey("CommandId")) +{ + this._CommandIdField = ((ushort)(this.Session["CommandId"])); + CommandIdValueAcquired = true; +} +if ((CommandIdValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("CommandId"); + if ((data != null)) + { + this._CommandIdField = ((ushort)(data)); + } +} +bool FieldTypesValueAcquired = false; +if (this.Session.ContainsKey("FieldTypes")) +{ + this._FieldTypesField = ((string[])(this.Session["FieldTypes"])); + FieldTypesValueAcquired = true; +} +if ((FieldTypesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("FieldTypes"); + if ((data != null)) + { + this._FieldTypesField = ((string[])(data)); + } +} +bool FieldNamesValueAcquired = false; +if (this.Session.ContainsKey("FieldNames")) +{ + this._FieldNamesField = ((string[])(this.Session["FieldNames"])); + FieldNamesValueAcquired = true; +} +if ((FieldNamesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("FieldNames"); + if ((data != null)) + { + this._FieldNamesField = ((string[])(data)); + } +} +bool IsEnumsValueAcquired = false; +if (this.Session.ContainsKey("IsEnums")) +{ + this._IsEnumsField = ((bool[])(this.Session["IsEnums"])); + IsEnumsValueAcquired = true; +} +if ((IsEnumsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("IsEnums"); + if ((data != null)) + { + this._IsEnumsField = ((bool[])(data)); + } +} +bool IsCompressedValueAcquired = false; +if (this.Session.ContainsKey("IsCompressed")) +{ + this._IsCompressedField = ((bool[])(this.Session["IsCompressed"])); + IsCompressedValueAcquired = true; +} +if ((IsCompressedValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("IsCompressed"); + if ((data != null)) + { + this._IsCompressedField = ((bool[])(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class SchemeCommandGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Scheme/Command/SchemeCommandGenerator.tt b/Generators/Generators/Generators/Scheme/Command/SchemeCommandGenerator.tt new file mode 100644 index 0000000..db96d9e --- /dev/null +++ b/Generators/Generators/Generators/Scheme/Command/SchemeCommandGenerator.tt @@ -0,0 +1,284 @@ +<#@ template language="C#" #> +<#@ parameter name="Namespace" type="System.String"#> +<#@ parameter name="CommandName" type="System.String"#> +<#@ parameter name="CommandId" type="System.UInt16"#> +<#@ parameter name="FieldTypes" type="System.String[]"#> +<#@ parameter name="FieldNames" type="System.String[]"#> +<#@ parameter name="IsEnums" type="System.Boolean[]"#> +<#@ parameter name="IsCompressed" type="System.Boolean[]"#> +<#@ import namespace="System.Linq" #> +using NetStack.Serialization; +<# + if (FieldTypes.Any(x => x == "System.Single")|| + FieldTypes.Any(x => x == "UnityEngine.Vector2")|| + FieldTypes.Any(x => x == "UnityEngine.Vector3")) + { + #> +using NetStack.Compression; + <# + } +#> + +public struct <#=Namespace#><#= CommandName #>Command : ICommand, I<#=Namespace#>Command +{ +<# for (int i = 0; i < FieldTypes.Length; i++) + { +#> + public <#=FieldTypes[i]#> <#=FieldNames[i]#>; +<# + } +#> + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(<#= CommandId #>); + +<# + for (int i = 0; i < FieldTypes.Length; i++) + { + if (IsEnums[i]) + { +#> + bitBuffer.AddByte((byte)<#=FieldNames[i]#>); +<# + } + else + { + var compressed = IsCompressed[i]; + switch(FieldTypes[i]) + { + case "System.Byte": +#> + bitBuffer.AddByte(<#=FieldNames[i]#>); +<# + break; + + case "System.Int32": +#> + bitBuffer.AddInt(<#=FieldNames[i]#>); +<# + break; + + case "System.UInt32": +#> + bitBuffer.AddUInt(<#=FieldNames[i]#>); +<# + break; + + case "System.Int64": +#> + bitBuffer.AddLong(<#=FieldNames[i]#>); +<# + break; + + case "System.UInt64": +#> + bitBuffer.AddULong(<#=FieldNames[i]#>); +<# + break; + + case "System.Int16": +#> + bitBuffer.AddShort(<#=FieldNames[i]#>); +<# + break; + + case "System.UInt16": +#> + bitBuffer.AddUShort(<#=FieldNames[i]#>); +<# + break; + + case "System.String": +#> + bitBuffer.AddString(<#=FieldNames[i]#>); +<# + break; + + case "System.Boolean": +#> + bitBuffer.AddBool(<#=FieldNames[i]#>); +<# + break; + + case "System.Single": + if (compressed) + { +#> + bitBuffer.AddUInt(CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>Compressor.Compress(<#=FieldNames[i]#>)); +<# + } + else + { +#> + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>)); +<# + } + break; + + case "UnityEngine.Vector2": + if (compressed) + { +#> + bitBuffer.AddUInt(CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>XCompressor.Compress(<#=FieldNames[i]#>.x)); + bitBuffer.AddUInt(CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>YCompressor.Compress(<#=FieldNames[i]#>.y)); +<# + } + else + { +#> + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.x)); + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.y)); +<# + } + break; + + case "UnityEngine.Vector3": + if (compressed) + { +#> + bitBuffer.AddUInt(CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>XCompressor.Compress(<#=FieldNames[i]#>.x)); + bitBuffer.AddUInt(CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>YCompressor.Compress(<#=FieldNames[i]#>.y)); + bitBuffer.AddUInt(CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>ZCompressor.Compress(<#=FieldNames[i]#>.z)); +<# + } + else + { +#> + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.x)); + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.y)); + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.z)); +<# + } + break; + } + + } + } +#> } + + public void Deserialize(BitBuffer bitBuffer) + { +<# + for (int i = 0; i < FieldTypes.Length; i++) + { + if (IsEnums[i]) + { +#> + <#=FieldNames[i]#> = (<#=FieldTypes[i]#>)bitBuffer.ReadByte(); +<# + } + else + { + var compressed = IsCompressed[i]; + switch(FieldTypes[i]) + { + case "System.Byte": +#> + <#=FieldNames[i]#> = bitBuffer.ReadByte(); +<# + break; + + case "System.Int32": +#> + <#=FieldNames[i]#> = bitBuffer.ReadInt(); +<# + break; + + case "System.UInt32": +#> + <#=FieldNames[i]#> = bitBuffer.ReadUInt(); +<# + break; + + case "System.Int64": +#> + <#=FieldNames[i]#> = bitBuffer.ReadLong(); +<# + break; + + case "System.UInt64": +#> + <#=FieldNames[i]#> = bitBuffer.ReadULong(); +<# + break; + + case "System.Int16": +#> + <#=FieldNames[i]#> = bitBuffer.ReadShort(); +<# + break; + + case "System.UInt16": +#> + <#=FieldNames[i]#> = bitBuffer.ReadUShort(); +<# + break; + + case "System.String": +#> + <#=FieldNames[i]#> = bitBuffer.ReadString(); +<# + break; + + case "System.Boolean": +#> + <#=FieldNames[i]#> = bitBuffer.ReadBool(); +<# + break; + + case "System.Single": + if (compressed) + { +#> + <#=FieldNames[i]#> = CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>Compressor.Decompress(bitBuffer.ReadUInt()); +<# + } + else + { +#> + <#=FieldNames[i]#> = HalfPrecision.Decompress(bitBuffer.ReadUShort()); +<# + } + break; + + case "UnityEngine.Vector2": + if (compressed) + { +#> + <#=FieldNames[i]#>.x = CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>XCompressor.Decompress(bitBuffer.ReadUInt()); + <#=FieldNames[i]#>.y = CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>YCompressor.Decompress(bitBuffer.ReadUInt()); +<# + } + else + { +#> + <#=FieldNames[i]#>.x = HalfPrecision.Decompress(bitBuffer.ReadUShort()); + <#=FieldNames[i]#>.y = HalfPrecision.Decompress(bitBuffer.ReadUShort()); +<# + } + break; + + case "UnityEngine.Vector3": + if (compressed) + { +#> + <#=FieldNames[i]#>.x = CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>XCompressor.Decompress(bitBuffer.ReadUInt()); + <#=FieldNames[i]#>.y = CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>YCompressor.Decompress(bitBuffer.ReadUInt()); + <#=FieldNames[i]#>.z = CommandCompressors.<#=Namespace#><#= CommandName #><#=FieldNames[i]#>ZCompressor.Decompress(bitBuffer.ReadUInt()); + +<# + } + else + { +#> + <#=FieldNames[i]#>.x = HalfPrecision.Decompress(bitBuffer.ReadUShort()); + <#=FieldNames[i]#>.y = HalfPrecision.Decompress(bitBuffer.ReadUShort()); + <#=FieldNames[i]#>.z = HalfPrecision.Decompress(bitBuffer.ReadUShort()); +<# + } + break; + } + } + } +#> } +} \ No newline at end of file diff --git a/Generators/Generators/Generators/Sync/Component/SyncComponentGenerator.cs b/Generators/Generators/Generators/Sync/Component/SyncComponentGenerator.cs new file mode 100644 index 0000000..aba10ff --- /dev/null +++ b/Generators/Generators/Generators/Sync/Component/SyncComponentGenerator.cs @@ -0,0 +1,1403 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Sync.Component +{ + using System.Linq; + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class SyncComponentGenerator : SyncComponentGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("using NetStack.Serialization;\r\n"); + + #line 10 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + if (FieldTypes.Any(x => x == "System.Single")|| + FieldTypes.Any(x => x == "UnityEngine.Vector2")|| + FieldTypes.Any(x => x == "UnityEngine.Vector3")) + { + + + #line default + #line hidden + this.Write("using NetStack.Compression;\r\n\t"); + + #line 17 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + + + #line default + #line hidden + this.Write("\r\npublic partial class "); + + #line 21 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName)); + + #line default + #line hidden + this.Write(" : INetworkComponent\r\n{\r\n public void Serialize(BitBuffer bitBuffer)\r\n\t{\r\n\t\tbi" + + "tBuffer.AddUShort("); + + #line 25 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentId)); + + #line default + #line hidden + this.Write(");\r\n\r\n"); + + #line 27 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + for (int i = 0; i < FieldTypes.Length; i++) + { + if (IsEnums[i]) + { + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddByte((byte)"); + + #line 33 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(");\r\n"); + + #line 34 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + else + { + var compressed = IsCompressed[i]; + var compName = ComponentName.Replace("Component", ""); + + switch(FieldTypes[i]) + { + case "System.Byte": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddByte("); + + #line 45 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 46 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Int32": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddInt("); + + #line 51 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 52 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.UInt32": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddUInt("); + + #line 57 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 58 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Int64": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddLong("); + + #line 63 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 64 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.UInt64": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddULong("); + + #line 69 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(");\r\n"); + + #line 70 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Int16": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddShort("); + + #line 75 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 76 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.UInt16": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddUShort("); + + #line 81 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 82 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.String": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddString("); + + #line 87 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 88 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Boolean": + + + #line default + #line hidden + this.Write("\t\tbitBuffer.AddBool("); + + #line 93 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("); \r\n"); + + #line 94 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Single": + if (compressed) + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUInt(SyncCompressors."); + + #line 101 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 101 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("Compressor.Compress("); + + #line 101 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("));\r\n"); + + #line 102 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 107 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("));\r\n"); + + #line 108 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + break; + + case "UnityEngine.Vector2": + if (compressed) + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUInt(SyncCompressors."); + + #line 116 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 116 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("XCompressor.Compress("); + + #line 116 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x));\r\n bitBuffer.AddUInt(SyncCompressors."); + + #line 117 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 117 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("YCompressor.Compress("); + + #line 117 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y));\r\n"); + + #line 118 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 123 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x));\r\n bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 124 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y));\r\n"); + + #line 125 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + break; + + case "UnityEngine.Vector3": + if (compressed) + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUInt(SyncCompressors."); + + #line 133 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 133 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("XCompressor.Compress("); + + #line 133 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x));\r\n bitBuffer.AddUInt(SyncCompressors."); + + #line 134 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 134 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("YCompressor.Compress("); + + #line 134 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y));\r\n bitBuffer.AddUInt(SyncCompressors."); + + #line 135 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 135 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("ZCompressor.Compress("); + + #line 135 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".z));\r\n"); + + #line 136 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 141 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x));\r\n bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 142 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y));\r\n bitBuffer.AddUShort(HalfPrecision.Compress("); + + #line 143 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".z));\r\n"); + + #line 144 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + break; + } + } + } + + + #line default + #line hidden + this.Write("\t}\r\n\r\n\tpublic void Deserialize(BitBuffer bitBuffer)\r\n\t{\r\n"); + + #line 154 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + for (int i = 0; i < FieldTypes.Length; i++) + { + if (IsEnums[i]) + { + + + #line default + #line hidden + this.Write("\t\t"); + + #line 160 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = ("); + + #line 160 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldTypes[i])); + + #line default + #line hidden + this.Write(")bitBuffer.ReadByte(); \r\n"); + + #line 161 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + else + { + var compressed = IsCompressed[i]; + switch(FieldTypes[i]) + { + case "System.Byte": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 170 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadByte(); \r\n"); + + #line 171 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Int32": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 176 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadInt(); \r\n"); + + #line 177 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.UInt32": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 182 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadUInt(); \r\n"); + + #line 183 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Int64": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 188 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadLong(); \r\n"); + + #line 189 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.UInt64": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 194 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadULong();\r\n"); + + #line 195 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Int16": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 200 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadShort(); \r\n"); + + #line 201 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.UInt16": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 206 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadUShort(); \r\n"); + + #line 207 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.String": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 212 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadString();\r\n"); + + #line 213 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Boolean": + + + #line default + #line hidden + this.Write("\t\t"); + + #line 218 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = bitBuffer.ReadBool(); \r\n"); + + #line 219 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + break; + + case "System.Single": + if (compressed) + { + + + #line default + #line hidden + this.Write(" "); + + #line 226 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = SyncCompressors."); + + #line 226 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 226 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("Compressor.Decompress(bitBuffer.ReadUInt());\r\n"); + + #line 227 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" "); + + #line 232 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(" = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n"); + + #line 233 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + break; + + case "UnityEngine.Vector2": + if (compressed) + { + + + #line default + #line hidden + this.Write(" "); + + #line 241 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x = SyncCompressors."); + + #line 241 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 241 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("XCompressor.Decompress(bitBuffer.ReadUInt());\r\n "); + + #line 242 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y = SyncCompressors."); + + #line 242 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 242 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("YCompressor.Decompress(bitBuffer.ReadUInt());\r\n"); + + #line 243 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" "); + + #line 248 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n "); + + #line 249 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n"); + + #line 250 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + break; + + case "UnityEngine.Vector3": + if (compressed) + { + + + #line default + #line hidden + this.Write(" "); + + #line 258 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x = SyncCompressors."); + + #line 258 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 258 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("XCompressor.Decompress(bitBuffer.ReadUInt());\r\n "); + + #line 259 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y = SyncCompressors."); + + #line 259 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 259 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("YCompressor.Decompress(bitBuffer.ReadUInt());\r\n "); + + #line 260 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".z = SyncCompressors."); + + #line 260 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName.Replace("Component", ""))); + + #line default + #line hidden + + #line 260 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write("ZCompressor.Decompress(bitBuffer.ReadUInt());\r\n\r\n"); + + #line 262 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" "); + + #line 267 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".x = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n "); + + #line 268 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".y = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n "); + + #line 269 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(FieldNames[i])); + + #line default + #line hidden + this.Write(".z = HalfPrecision.Decompress(bitBuffer.ReadUShort());\r\n"); + + #line 270 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + + } + break; + } + } + } + + + #line default + #line hidden + this.Write("\t}\r\n}"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Coop-JRPG-git\Generators\Generators\Generators\Sync\Component\SyncComponentGenerator.tt" + +private string _ComponentNameField; + +/// +/// Access the ComponentName parameter of the template. +/// +private string ComponentName +{ + get + { + return this._ComponentNameField; + } +} + +private ushort _ComponentIdField; + +/// +/// Access the ComponentId parameter of the template. +/// +private ushort ComponentId +{ + get + { + return this._ComponentIdField; + } +} + +private string[] _FieldTypesField; + +/// +/// Access the FieldTypes parameter of the template. +/// +private string[] FieldTypes +{ + get + { + return this._FieldTypesField; + } +} + +private string[] _FieldNamesField; + +/// +/// Access the FieldNames parameter of the template. +/// +private string[] FieldNames +{ + get + { + return this._FieldNamesField; + } +} + +private bool[] _IsEnumsField; + +/// +/// Access the IsEnums parameter of the template. +/// +private bool[] IsEnums +{ + get + { + return this._IsEnumsField; + } +} + +private bool[] _IsCompressedField; + +/// +/// Access the IsCompressed parameter of the template. +/// +private bool[] IsCompressed +{ + get + { + return this._IsCompressedField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool ComponentNameValueAcquired = false; +if (this.Session.ContainsKey("ComponentName")) +{ + this._ComponentNameField = ((string)(this.Session["ComponentName"])); + ComponentNameValueAcquired = true; +} +if ((ComponentNameValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentName"); + if ((data != null)) + { + this._ComponentNameField = ((string)(data)); + } +} +bool ComponentIdValueAcquired = false; +if (this.Session.ContainsKey("ComponentId")) +{ + this._ComponentIdField = ((ushort)(this.Session["ComponentId"])); + ComponentIdValueAcquired = true; +} +if ((ComponentIdValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentId"); + if ((data != null)) + { + this._ComponentIdField = ((ushort)(data)); + } +} +bool FieldTypesValueAcquired = false; +if (this.Session.ContainsKey("FieldTypes")) +{ + this._FieldTypesField = ((string[])(this.Session["FieldTypes"])); + FieldTypesValueAcquired = true; +} +if ((FieldTypesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("FieldTypes"); + if ((data != null)) + { + this._FieldTypesField = ((string[])(data)); + } +} +bool FieldNamesValueAcquired = false; +if (this.Session.ContainsKey("FieldNames")) +{ + this._FieldNamesField = ((string[])(this.Session["FieldNames"])); + FieldNamesValueAcquired = true; +} +if ((FieldNamesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("FieldNames"); + if ((data != null)) + { + this._FieldNamesField = ((string[])(data)); + } +} +bool IsEnumsValueAcquired = false; +if (this.Session.ContainsKey("IsEnums")) +{ + this._IsEnumsField = ((bool[])(this.Session["IsEnums"])); + IsEnumsValueAcquired = true; +} +if ((IsEnumsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("IsEnums"); + if ((data != null)) + { + this._IsEnumsField = ((bool[])(data)); + } +} +bool IsCompressedValueAcquired = false; +if (this.Session.ContainsKey("IsCompressed")) +{ + this._IsCompressedField = ((bool[])(this.Session["IsCompressed"])); + IsCompressedValueAcquired = true; +} +if ((IsCompressedValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("IsCompressed"); + if ((data != null)) + { + this._IsCompressedField = ((bool[])(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class SyncComponentGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Sync/Component/SyncComponentGenerator.tt b/Generators/Generators/Generators/Sync/Component/SyncComponentGenerator.tt new file mode 100644 index 0000000..22807a7 --- /dev/null +++ b/Generators/Generators/Generators/Sync/Component/SyncComponentGenerator.tt @@ -0,0 +1,277 @@ +<#@ template language="C#" #> +<#@ parameter name="ComponentName" type="System.String"#> +<#@ parameter name="ComponentId" type="System.UInt16"#> +<#@ parameter name="FieldTypes" type="System.String[]"#> +<#@ parameter name="FieldNames" type="System.String[]"#> +<#@ parameter name="IsEnums" type="System.Boolean[]"#> +<#@ parameter name="IsCompressed" type="System.Boolean[]"#> +<#@ import namespace="System.Linq" #> +using NetStack.Serialization; +<# + if (FieldTypes.Any(x => x == "System.Single")|| + FieldTypes.Any(x => x == "UnityEngine.Vector2")|| + FieldTypes.Any(x => x == "UnityEngine.Vector3")) + { + #> +using NetStack.Compression; + <# + } +#> + +public partial class <#= ComponentName #> : INetworkComponent +{ + public void Serialize(BitBuffer bitBuffer) + { + bitBuffer.AddUShort(<#= ComponentId #>); + +<# + for (int i = 0; i < FieldTypes.Length; i++) + { + if (IsEnums[i]) + { +#> + bitBuffer.AddByte((byte)<#=FieldNames[i]#>); +<# + } + else + { + var compressed = IsCompressed[i]; + var compName = ComponentName.Replace("Component", ""); + + switch(FieldTypes[i]) + { + case "System.Byte": +#> + bitBuffer.AddByte(<#=FieldNames[i]#>); +<# + break; + + case "System.Int32": +#> + bitBuffer.AddInt(<#=FieldNames[i]#>); +<# + break; + + case "System.UInt32": +#> + bitBuffer.AddUInt(<#=FieldNames[i]#>); +<# + break; + + case "System.Int64": +#> + bitBuffer.AddLong(<#=FieldNames[i]#>); +<# + break; + + case "System.UInt64": +#> + bitBuffer.AddULong(<#=FieldNames[i]#>); +<# + break; + + case "System.Int16": +#> + bitBuffer.AddShort(<#=FieldNames[i]#>); +<# + break; + + case "System.UInt16": +#> + bitBuffer.AddUShort(<#=FieldNames[i]#>); +<# + break; + + case "System.String": +#> + bitBuffer.AddString(<#=FieldNames[i]#>); +<# + break; + + case "System.Boolean": +#> + bitBuffer.AddBool(<#=FieldNames[i]#>); +<# + break; + + case "System.Single": + if (compressed) + { +#> + bitBuffer.AddUInt(SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>Compressor.Compress(<#=FieldNames[i]#>)); +<# + } + else + { +#> + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>)); +<# + } + break; + + case "UnityEngine.Vector2": + if (compressed) + { +#> + bitBuffer.AddUInt(SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>XCompressor.Compress(<#=FieldNames[i]#>.x)); + bitBuffer.AddUInt(SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>YCompressor.Compress(<#=FieldNames[i]#>.y)); +<# + } + else + { +#> + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.x)); + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.y)); +<# + } + break; + + case "UnityEngine.Vector3": + if (compressed) + { +#> + bitBuffer.AddUInt(SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>XCompressor.Compress(<#=FieldNames[i]#>.x)); + bitBuffer.AddUInt(SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>YCompressor.Compress(<#=FieldNames[i]#>.y)); + bitBuffer.AddUInt(SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>ZCompressor.Compress(<#=FieldNames[i]#>.z)); +<# + } + else + { +#> + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.x)); + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.y)); + bitBuffer.AddUShort(HalfPrecision.Compress(<#=FieldNames[i]#>.z)); +<# + } + break; + } + } + } +#> } + + public void Deserialize(BitBuffer bitBuffer) + { +<# + for (int i = 0; i < FieldTypes.Length; i++) + { + if (IsEnums[i]) + { +#> + <#=FieldNames[i]#> = (<#=FieldTypes[i]#>)bitBuffer.ReadByte(); +<# + } + else + { + var compressed = IsCompressed[i]; + switch(FieldTypes[i]) + { + case "System.Byte": +#> + <#=FieldNames[i]#> = bitBuffer.ReadByte(); +<# + break; + + case "System.Int32": +#> + <#=FieldNames[i]#> = bitBuffer.ReadInt(); +<# + break; + + case "System.UInt32": +#> + <#=FieldNames[i]#> = bitBuffer.ReadUInt(); +<# + break; + + case "System.Int64": +#> + <#=FieldNames[i]#> = bitBuffer.ReadLong(); +<# + break; + + case "System.UInt64": +#> + <#=FieldNames[i]#> = bitBuffer.ReadULong(); +<# + break; + + case "System.Int16": +#> + <#=FieldNames[i]#> = bitBuffer.ReadShort(); +<# + break; + + case "System.UInt16": +#> + <#=FieldNames[i]#> = bitBuffer.ReadUShort(); +<# + break; + + case "System.String": +#> + <#=FieldNames[i]#> = bitBuffer.ReadString(); +<# + break; + + case "System.Boolean": +#> + <#=FieldNames[i]#> = bitBuffer.ReadBool(); +<# + break; + + case "System.Single": + if (compressed) + { +#> + <#=FieldNames[i]#> = SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>Compressor.Decompress(bitBuffer.ReadUInt()); +<# + } + else + { +#> + <#=FieldNames[i]#> = HalfPrecision.Decompress(bitBuffer.ReadUShort()); +<# + } + break; + + case "UnityEngine.Vector2": + if (compressed) + { +#> + <#=FieldNames[i]#>.x = SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>XCompressor.Decompress(bitBuffer.ReadUInt()); + <#=FieldNames[i]#>.y = SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>YCompressor.Decompress(bitBuffer.ReadUInt()); +<# + } + else + { +#> + <#=FieldNames[i]#>.x = HalfPrecision.Decompress(bitBuffer.ReadUShort()); + <#=FieldNames[i]#>.y = HalfPrecision.Decompress(bitBuffer.ReadUShort()); +<# + } + break; + + case "UnityEngine.Vector3": + if (compressed) + { +#> + <#=FieldNames[i]#>.x = SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>XCompressor.Decompress(bitBuffer.ReadUInt()); + <#=FieldNames[i]#>.y = SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>YCompressor.Decompress(bitBuffer.ReadUInt()); + <#=FieldNames[i]#>.z = SyncCompressors.<#=ComponentName.Replace("Component", "")#><#=FieldNames[i]#>ZCompressor.Decompress(bitBuffer.ReadUInt()); + +<# + } + else + { +#> + <#=FieldNames[i]#>.x = HalfPrecision.Decompress(bitBuffer.ReadUShort()); + <#=FieldNames[i]#>.y = HalfPrecision.Decompress(bitBuffer.ReadUShort()); + <#=FieldNames[i]#>.z = HalfPrecision.Decompress(bitBuffer.ReadUShort()); +<# + } + break; + } + } + } +#> } +} \ No newline at end of file diff --git a/Generators/Generators/Generators/Sync/Feature/SyncFeatureGenerator.cs b/Generators/Generators/Generators/Sync/Feature/SyncFeatureGenerator.cs new file mode 100644 index 0000000..43cdf22 --- /dev/null +++ b/Generators/Generators/Generators/Sync/Feature/SyncFeatureGenerator.cs @@ -0,0 +1,391 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Sync.Feature +{ + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Feature\SyncFeatureGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class SyncFeatureGenerator : SyncFeatureGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("using Sources.Networking.Server.StateCapture;\r\n\r\npublic class ServerStateCaptureF" + + "eature : Feature\r\n{\r\n public ServerStateCaptureFeature(Contexts contexts, Ser" + + "vices services)\r\n {\r\n"); + + #line 9 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Feature\SyncFeatureGenerator.tt" + + foreach (var name in ComponentNames) + { + + + #line default + #line hidden + this.Write(" Add(new ServerCaptureChanged"); + + #line 13 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Feature\SyncFeatureGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("System(contexts, services));\r\n Add(new ServerCaptureRemoved"); + + #line 14 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Feature\SyncFeatureGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("System(contexts, services));\r\n"); + + #line 15 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Feature\SyncFeatureGenerator.tt" + + } + + + #line default + #line hidden + this.Write("\r\n\t Add(new ServerCreateWorldStateSystem(contexts));\r\n Add(new ServerCa" + + "ptureCreatedEntitiesSystem(contexts, services));\r\n Add(new ServerCaptureR" + + "emovedEntitiesSystem(contexts, services));\r\n\t}\r\n}"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Feature\SyncFeatureGenerator.tt" + +private string[] _ComponentNamesField; + +/// +/// Access the ComponentNames parameter of the template. +/// +private string[] ComponentNames +{ + get + { + return this._ComponentNamesField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool ComponentNamesValueAcquired = false; +if (this.Session.ContainsKey("ComponentNames")) +{ + this._ComponentNamesField = ((string[])(this.Session["ComponentNames"])); + ComponentNamesValueAcquired = true; +} +if ((ComponentNamesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentNames"); + if ((data != null)) + { + this._ComponentNamesField = ((string[])(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class SyncFeatureGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Sync/Feature/SyncFeatureGenerator.tt b/Generators/Generators/Generators/Sync/Feature/SyncFeatureGenerator.tt new file mode 100644 index 0000000..1a5d329 --- /dev/null +++ b/Generators/Generators/Generators/Sync/Feature/SyncFeatureGenerator.tt @@ -0,0 +1,23 @@ +<#@ template language="C#" #> +<#@ parameter name="ComponentNames" type="System.String[]"#> +using Sources.Networking.Server.StateCapture; + +public class ServerStateCaptureFeature : Feature +{ + public ServerStateCaptureFeature(Contexts contexts, Services services) + { +<# + foreach (var name in ComponentNames) + { +#> + Add(new ServerCaptureChanged<#=name#>System(contexts, services)); + Add(new ServerCaptureRemoved<#=name#>System(contexts, services)); +<# + } +#> + + Add(new ServerCreateWorldStateSystem(contexts)); + Add(new ServerCaptureCreatedEntitiesSystem(contexts, services)); + Add(new ServerCaptureRemovedEntitiesSystem(contexts, services)); + } +} \ No newline at end of file diff --git a/Generators/Generators/Generators/Sync/Systems/SyncChangedComponentSystemGenerator.cs b/Generators/Generators/Generators/Sync/Systems/SyncChangedComponentSystemGenerator.cs new file mode 100644 index 0000000..b066f8d --- /dev/null +++ b/Generators/Generators/Generators/Sync/Systems/SyncChangedComponentSystemGenerator.cs @@ -0,0 +1,534 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Sync.Systems +{ + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class SyncChangedComponentSystemGenerator : SyncChangedComponentSystemGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("using System.Collections.Generic;\r\nusing Entitas;\r\nusing Sources.Networking.Serve" + + "r;\r\n\r\n"); + + #line 9 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + + var name = ComponentName.Replace("Component", ""); + var firstLowerName = char.ToLowerInvariant(name[0]) + name.Substring(1); + + + #line default + #line hidden + this.Write("\r\npublic class ServerCaptureChanged"); + + #line 14 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("System : ReactiveSystem\r\n{\r\n\tprivate readonly ServerNetworkSystem _se" + + "rver;\r\n\tpublic ServerCaptureChanged"); + + #line 17 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("System (Contexts contexts, Services services) : base(contexts.game)\r\n\t{\r\n\t\t_serve" + + "r = services.ServerSystem;\r\n\t}\r\n\t\t\r\n\tprotected override ICollector G" + + "etTrigger(IContext context) {\r\n\t\treturn context.CreateCollector(Game" + + "Matcher."); + + #line 23 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(".Added());\r\n\t}\r\n\t\t\r\n\tprotected override bool Filter(GameEntity entity)\r\n\t{\r\n"); + + #line 28 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + + if (IsTag) + { + + + #line default + #line hidden + this.Write(" return !entity.isDestroyed && entity.isWasSynced && entity.is"); + + #line 32 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(";\r\n"); + + #line 33 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" return !entity.isDestroyed && entity.isWasSynced && entity.has"); + + #line 38 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(";\r\n"); + + #line 39 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + + } + + + #line default + #line hidden + this.Write("\t}\r\n\r\n\tprotected override void Execute(List entities) {\r\n\t\tif (_serve" + + "r.State != ServerState.Working) return;\r\n\r\n\t\tforeach (var e in entities) {\r\n\t\t " + + " _server.ChangedComponents.AddUShort(e.id.Value);\r\n"); + + #line 49 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + + if (IsTag) + { + + + #line default + #line hidden + this.Write(" _server.ChangedComponents.AddUShort("); + + #line 53 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentId)); + + #line default + #line hidden + this.Write(");\r\n"); + + #line 54 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" e."); + + #line 59 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(firstLowerName)); + + #line default + #line hidden + this.Write(".Serialize(_server.ChangedComponents);\r\n"); + + #line 60 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + + } + + + #line default + #line hidden + this.Write("\t\t\t_server.ChangedComponentsCount++;\r\n\t\t}\r\n\t}\r\n}"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncChangedComponentSystemGenerator.tt" + +private string _ComponentNameField; + +/// +/// Access the ComponentName parameter of the template. +/// +private string ComponentName +{ + get + { + return this._ComponentNameField; + } +} + +private ushort _ComponentIdField; + +/// +/// Access the ComponentId parameter of the template. +/// +private ushort ComponentId +{ + get + { + return this._ComponentIdField; + } +} + +private bool _IsTagField; + +/// +/// Access the IsTag parameter of the template. +/// +private bool IsTag +{ + get + { + return this._IsTagField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool ComponentNameValueAcquired = false; +if (this.Session.ContainsKey("ComponentName")) +{ + this._ComponentNameField = ((string)(this.Session["ComponentName"])); + ComponentNameValueAcquired = true; +} +if ((ComponentNameValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentName"); + if ((data != null)) + { + this._ComponentNameField = ((string)(data)); + } +} +bool ComponentIdValueAcquired = false; +if (this.Session.ContainsKey("ComponentId")) +{ + this._ComponentIdField = ((ushort)(this.Session["ComponentId"])); + ComponentIdValueAcquired = true; +} +if ((ComponentIdValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentId"); + if ((data != null)) + { + this._ComponentIdField = ((ushort)(data)); + } +} +bool IsTagValueAcquired = false; +if (this.Session.ContainsKey("IsTag")) +{ + this._IsTagField = ((bool)(this.Session["IsTag"])); + IsTagValueAcquired = true; +} +if ((IsTagValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("IsTag"); + if ((data != null)) + { + this._IsTagField = ((bool)(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class SyncChangedComponentSystemGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Sync/Systems/SyncChangedComponentSystemGenerator.tt b/Generators/Generators/Generators/Sync/Systems/SyncChangedComponentSystemGenerator.tt new file mode 100644 index 0000000..3765a6b --- /dev/null +++ b/Generators/Generators/Generators/Sync/Systems/SyncChangedComponentSystemGenerator.tt @@ -0,0 +1,66 @@ +<#@ template language="C#" #> +<#@ parameter name="ComponentName" type="System.String"#> +<#@ parameter name="ComponentId" type="System.UInt16"#> +<#@ parameter name="IsTag" type="System.Boolean"#> +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + +<# + var name = ComponentName.Replace("Component", ""); + var firstLowerName = char.ToLowerInvariant(name[0]) + name.Substring(1); +#> + +public class ServerCaptureChanged<#=name#>System : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureChanged<#=name#>System (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.<#=name#>.Added()); + } + + protected override bool Filter(GameEntity entity) + { +<# + if (IsTag) + { +#> + return !entity.isDestroyed && entity.isWasSynced && entity.is<#=name#>; +<# + } + else + { +#> + return !entity.isDestroyed && entity.isWasSynced && entity.has<#=name#>; +<# + } +#> + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.ChangedComponents.AddUShort(e.id.Value); +<# + if (IsTag) + { +#> + _server.ChangedComponents.AddUShort(<#=ComponentId#>); +<# + } + else + { +#> + e.<#=firstLowerName#>.Serialize(_server.ChangedComponents); +<# + } +#> + _server.ChangedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Generators/Generators/Generators/Sync/Systems/SyncRemovedComponentSystemGenerator.cs b/Generators/Generators/Generators/Sync/Systems/SyncRemovedComponentSystemGenerator.cs new file mode 100644 index 0000000..687167d --- /dev/null +++ b/Generators/Generators/Generators/Sync/Systems/SyncRemovedComponentSystemGenerator.cs @@ -0,0 +1,492 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Sync.Systems +{ + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class SyncRemovedComponentSystemGenerator : SyncRemovedComponentSystemGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("using System.Collections.Generic;\r\nusing Entitas;\r\nusing Sources.Networking.Serve" + + "r;\r\n\r\npublic class ServerCaptureRemoved"); + + #line 9 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName)); + + #line default + #line hidden + this.Write("System : ReactiveSystem\r\n{\r\n\tprivate readonly ServerNetworkSystem _se" + + "rver;\r\n\tpublic ServerCaptureRemoved"); + + #line 12 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName)); + + #line default + #line hidden + this.Write("System (Contexts contexts, Services services) : base(contexts.game)\r\n\t{\r\n\t\t_serve" + + "r = services.ServerSystem;\r\n\t}\r\n\t\t\r\n\tprotected override ICollector G" + + "etTrigger(IContext context) {\r\n\t\treturn context.CreateCollector(Game" + + "Matcher."); + + #line 18 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName)); + + #line default + #line hidden + this.Write(".Removed());\r\n\t}\r\n\t\t\r\n\tprotected override bool Filter(GameEntity entity)\r\n\t{\r\n"); + + #line 23 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + + if (IsTag) + { + + + #line default + #line hidden + this.Write("\t\treturn !entity.isDestroyed && entity.isWasSynced && entity.is"); + + #line 27 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName)); + + #line default + #line hidden + this.Write(";\r\n"); + + #line 28 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" return !entity.isDestroyed && entity.isWasSynced && !entity.has"); + + #line 33 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentName)); + + #line default + #line hidden + this.Write(";\r\n"); + + #line 34 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + + } + + + #line default + #line hidden + this.Write(@" } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.RemovedComponents.AddUShort(e.id.Value); + _server.RemovedComponents.AddUShort("); + + #line 44 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(ComponentId)); + + #line default + #line hidden + this.Write(");\r\n\t\t _server.RemovedComponentsCount++;\r\n\t\t}\r\n\t}\r\n}"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Entitas-Sync\Generators\Generators\Generators\Sync\Systems\SyncRemovedComponentSystemGenerator.tt" + +private string _ComponentNameField; + +/// +/// Access the ComponentName parameter of the template. +/// +private string ComponentName +{ + get + { + return this._ComponentNameField; + } +} + +private ushort _ComponentIdField; + +/// +/// Access the ComponentId parameter of the template. +/// +private ushort ComponentId +{ + get + { + return this._ComponentIdField; + } +} + +private bool _IsTagField; + +/// +/// Access the IsTag parameter of the template. +/// +private bool IsTag +{ + get + { + return this._IsTagField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool ComponentNameValueAcquired = false; +if (this.Session.ContainsKey("ComponentName")) +{ + this._ComponentNameField = ((string)(this.Session["ComponentName"])); + ComponentNameValueAcquired = true; +} +if ((ComponentNameValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentName"); + if ((data != null)) + { + this._ComponentNameField = ((string)(data)); + } +} +bool ComponentIdValueAcquired = false; +if (this.Session.ContainsKey("ComponentId")) +{ + this._ComponentIdField = ((ushort)(this.Session["ComponentId"])); + ComponentIdValueAcquired = true; +} +if ((ComponentIdValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentId"); + if ((data != null)) + { + this._ComponentIdField = ((ushort)(data)); + } +} +bool IsTagValueAcquired = false; +if (this.Session.ContainsKey("IsTag")) +{ + this._IsTagField = ((bool)(this.Session["IsTag"])); + IsTagValueAcquired = true; +} +if ((IsTagValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("IsTag"); + if ((data != null)) + { + this._IsTagField = ((bool)(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class SyncRemovedComponentSystemGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Sync/Systems/SyncRemovedComponentSystemGenerator.tt b/Generators/Generators/Generators/Sync/Systems/SyncRemovedComponentSystemGenerator.tt new file mode 100644 index 0000000..31908aa --- /dev/null +++ b/Generators/Generators/Generators/Sync/Systems/SyncRemovedComponentSystemGenerator.tt @@ -0,0 +1,48 @@ +<#@ template language="C#" #> +<#@ parameter name="ComponentName" type="System.String"#> +<#@ parameter name="ComponentId" type="System.UInt16"#> +<#@ parameter name="IsTag" type="System.Boolean"#> +using System.Collections.Generic; +using Entitas; +using Sources.Networking.Server; + +public class ServerCaptureRemoved<#=ComponentName#>System : ReactiveSystem +{ + private readonly ServerNetworkSystem _server; + public ServerCaptureRemoved<#=ComponentName#>System (Contexts contexts, Services services) : base(contexts.game) + { + _server = services.ServerSystem; + } + + protected override ICollector GetTrigger(IContext context) { + return context.CreateCollector(GameMatcher.<#=ComponentName#>.Removed()); + } + + protected override bool Filter(GameEntity entity) + { +<# + if (IsTag) + { +#> + return !entity.isDestroyed && entity.isWasSynced && entity.is<#=ComponentName#>; +<# + } + else + { +#> + return !entity.isDestroyed && entity.isWasSynced && !entity.has<#=ComponentName#>; +<# + } +#> + } + + protected override void Execute(List entities) { + if (_server.State != ServerState.Working) return; + + foreach (var e in entities) { + _server.RemovedComponents.AddUShort(e.id.Value); + _server.RemovedComponents.AddUShort(<#=ComponentId#>); + _server.RemovedComponentsCount++; + } + } +} \ No newline at end of file diff --git a/Generators/Generators/Generators/Sync/Utility/PackEntityUtilityGenerator.cs b/Generators/Generators/Generators/Sync/Utility/PackEntityUtilityGenerator.cs new file mode 100644 index 0000000..41c2228 --- /dev/null +++ b/Generators/Generators/Generators/Sync/Utility/PackEntityUtilityGenerator.cs @@ -0,0 +1,567 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Sync.Utility +{ + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class PackEntityUtilityGenerator : PackEntityUtilityGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("using NetStack.Serialization;\r\n\r\npublic static class PackEntityUtility\r\n{\r\n pu" + + "blic static void Pack(GameEntity e, BitBuffer buffer)\r\n {\r\n\t\tushort counter =" + + " 0;\r\n\r\n"); + + #line 13 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + +for (int i = 0; i < ComponentNames.Length; i++) +{ + var name = ComponentNames[i].Replace("Component", ""); + var isTag = IsTags[i]; + + + + #line default + #line hidden + this.Write("\t\tvar has"); + + #line 20 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(" = false;\r\n"); + + #line 21 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + + + if (isTag) + { + + + #line default + #line hidden + this.Write(" if(e.is"); + + #line 26 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(")\r\n"); + + #line 27 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" if(e.has"); + + #line 32 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(")\r\n"); + + #line 33 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + + } + + + #line default + #line hidden + this.Write("\t\t{\r\n\t\t\thas"); + + #line 37 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(" = true;\r\n\t\t\tcounter++;\r\n\t\t}\r\n\r\n\t"); + + #line 41 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + +} + + + #line default + #line hidden + this.Write("\r\n\t\tbuffer.AddUShort(counter);\r\n\r\n"); + + #line 47 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + +for (int i = 0; i < ComponentNames.Length; i++) +{ + var name = ComponentNames[i].Replace("Component", ""); + var firstLowerName = char.ToLowerInvariant(name[0]) + name.Substring(1); + var id = ComponentIds[i]; + var isTag = IsTags[i]; + + + + #line default + #line hidden + this.Write(" if (has"); + + #line 56 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(")\r\n {\r\n"); + + #line 58 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + + + if (isTag) + { + + + #line default + #line hidden + this.Write(" buffer.AddUShort("); + + #line 63 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(id)); + + #line default + #line hidden + this.Write(");\r\n"); + + #line 64 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + + } + else + { + + + #line default + #line hidden + this.Write(" e."); + + #line 69 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(firstLowerName)); + + #line default + #line hidden + this.Write(".Serialize(buffer);\r\n"); + + #line 70 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + + } + + + #line default + #line hidden + this.Write(" }\r\n\r\n\t"); + + #line 75 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + +} + + + #line default + #line hidden + this.Write("\t}\r\n}\r\n"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\PackEntityUtilityGenerator.tt" + +private string[] _ComponentNamesField; + +/// +/// Access the ComponentNames parameter of the template. +/// +private string[] ComponentNames +{ + get + { + return this._ComponentNamesField; + } +} + +private ushort[] _ComponentIdsField; + +/// +/// Access the ComponentIds parameter of the template. +/// +private ushort[] ComponentIds +{ + get + { + return this._ComponentIdsField; + } +} + +private bool[] _IsTagsField; + +/// +/// Access the IsTags parameter of the template. +/// +private bool[] IsTags +{ + get + { + return this._IsTagsField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool ComponentNamesValueAcquired = false; +if (this.Session.ContainsKey("ComponentNames")) +{ + this._ComponentNamesField = ((string[])(this.Session["ComponentNames"])); + ComponentNamesValueAcquired = true; +} +if ((ComponentNamesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentNames"); + if ((data != null)) + { + this._ComponentNamesField = ((string[])(data)); + } +} +bool ComponentIdsValueAcquired = false; +if (this.Session.ContainsKey("ComponentIds")) +{ + this._ComponentIdsField = ((ushort[])(this.Session["ComponentIds"])); + ComponentIdsValueAcquired = true; +} +if ((ComponentIdsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentIds"); + if ((data != null)) + { + this._ComponentIdsField = ((ushort[])(data)); + } +} +bool IsTagsValueAcquired = false; +if (this.Session.ContainsKey("IsTags")) +{ + this._IsTagsField = ((bool[])(this.Session["IsTags"])); + IsTagsValueAcquired = true; +} +if ((IsTagsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("IsTags"); + if ((data != null)) + { + this._IsTagsField = ((bool[])(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class PackEntityUtilityGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Sync/Utility/PackEntityUtilityGenerator.tt b/Generators/Generators/Generators/Sync/Utility/PackEntityUtilityGenerator.tt new file mode 100644 index 0000000..0375488 --- /dev/null +++ b/Generators/Generators/Generators/Sync/Utility/PackEntityUtilityGenerator.tt @@ -0,0 +1,79 @@ +<#@ template language="C#" #> +<#@ parameter name="ComponentNames" type="System.String[]"#> +<#@ parameter name="ComponentIds" type="System.UInt16[]"#> +<#@ parameter name="IsTags" type="System.Boolean[]"#> +using NetStack.Serialization; + +public static class PackEntityUtility +{ + public static void Pack(GameEntity e, BitBuffer buffer) + { + ushort counter = 0; + +<# +for (int i = 0; i < ComponentNames.Length; i++) +{ + var name = ComponentNames[i].Replace("Component", ""); + var isTag = IsTags[i]; + +#> + var has<#=name#> = false; +<# + + if (isTag) + { +#> + if(e.is<#=name#>) +<# + } + else + { +#> + if(e.has<#=name#>) +<# + } + #> + { + has<#=name#> = true; + counter++; + } + + <# +} +#> + + buffer.AddUShort(counter); + +<# +for (int i = 0; i < ComponentNames.Length; i++) +{ + var name = ComponentNames[i].Replace("Component", ""); + var firstLowerName = char.ToLowerInvariant(name[0]) + name.Substring(1); + var id = ComponentIds[i]; + var isTag = IsTags[i]; + +#> + if (has<#=name#>) + { +<# + + if (isTag) + { +#> + buffer.AddUShort(<#=id#>); +<# + } + else + { +#> + e.<#=firstLowerName#>.Serialize(buffer); +<# + } + #> + } + + <# +} +#> + } +} diff --git a/Generators/Generators/Generators/Sync/Utility/UnpackEntityUtilityGenerator.cs b/Generators/Generators/Generators/Sync/Utility/UnpackEntityUtilityGenerator.cs new file mode 100644 index 0000000..04b30e2 --- /dev/null +++ b/Generators/Generators/Generators/Sync/Utility/UnpackEntityUtilityGenerator.cs @@ -0,0 +1,734 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 15.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Generators.Sync.Utility +{ + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public partial class UnpackEntityUtilityGenerator : UnpackEntityUtilityGeneratorBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write(@"using System.Text; +using NetStack.Serialization; +using Sources.Tools; + +public static class UnpackEntityUtility +{ + public static void CreateEntities(GameContext game, BitBuffer buffer, ushort entityCount) + { + for (int i = 0; i < entityCount; i++) + { + var addedComponents = new StringBuilder(128); + + var e = game.CreateEntity(); + + var componentsCount = buffer.ReadUShort(); + + for (int j = 0; j < componentsCount; j++) + { + var componentId = buffer.ReadUShort(); + + switch (componentId) + { +"); + + #line 27 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +for (int i = 0; i < ComponentNames.Length; i++) +{ + var id = ComponentIds[i]; + var fullName = ComponentNames[i]; + var name = ComponentNames[i].Replace("Component", ""); + var isTag = IsTags[i]; + + + #line default + #line hidden + this.Write(" case "); + + #line 35 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(id)); + + #line default + #line hidden + this.Write(":\r\n\t\t\t\t\t{\r\n\t\t\t\t\t addedComponents.Append(\" "); + + #line 37 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(" \");\r\n"); + + #line 38 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +if (isTag) +{ + + + #line default + #line hidden + this.Write(" e.is"); + + #line 42 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(" = true;\r\n"); + + #line 43 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +} +else +{ + + + #line default + #line hidden + this.Write(" var lookup = GameComponentsLookup."); + + #line 48 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(";\r\n\t\t\t\t\t\tvar comp = e.CreateComponent<"); + + #line 49 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(fullName)); + + #line default + #line hidden + this.Write(">(lookup);\r\n\t\t\t\t\t\tcomp.Deserialize(buffer);\r\n\t\t\t\t\t\te.AddComponent(lookup, comp);\r" + + "\n"); + + #line 52 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +} + + + #line default + #line hidden + this.Write("\t\t\t\t\t}\r\n\t\t\t\t\t break;\r\n"); + + #line 57 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +} + + + #line default + #line hidden + this.Write(@" } + } + Logger.I.Log(""UnpackEntityUtility"", $"" Entity-{e.id.Value}: created - ({addedComponents})""); + } + } + + public static void ChangeComponents(GameContext game, BitBuffer buffer, ushort componentCount) + { + for (int i = 0; i < componentCount; i++) + { + var entityId = buffer.ReadUShort(); + var componentId = buffer.ReadUShort(); + var e = game.GetEntityWithId(entityId); + + switch (componentId) + { +"); + + #line 76 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +for (int i = 0; i < ComponentNames.Length; i++) +{ + var id = ComponentIds[i]; + var fullName = ComponentNames[i]; + var name = ComponentNames[i].Replace("Component", ""); + var isTag = IsTags[i]; + + + #line default + #line hidden + this.Write(" case "); + + #line 84 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(id)); + + #line default + #line hidden + this.Write(":\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tLogger.I.Log(\"UnpackEntityUtility\", $\" Entity-{entityId}: Change" + + "d "); + + #line 86 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(" component\");\r\n"); + + #line 87 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +if (isTag) +{ + + + #line default + #line hidden + this.Write(" e.is"); + + #line 91 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(" = true;\r\n"); + + #line 92 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +} +else +{ + + + #line default + #line hidden + this.Write(" var lookup = GameComponentsLookup."); + + #line 97 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(";\r\n\t\t\t\t\t\tvar comp = e.CreateComponent<"); + + #line 98 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(fullName)); + + #line default + #line hidden + this.Write(">(lookup);\r\n\t\t\t\t comp.Deserialize(buffer);\r\n\t\t\t\t e.ReplaceComponent" + + "(lookup, comp);\r\n"); + + #line 101 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +} + + + #line default + #line hidden + this.Write("\t\t\t\t\t}\r\n\t\t\t\t\t break;\r\n"); + + #line 106 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +} + + + #line default + #line hidden + this.Write(@" } + } + } + + public static void RemoveComponents(GameContext game, BitBuffer buffer, ushort componentCount) + { + for (int i = 0; i < componentCount; i++) + { + var entityId = buffer.ReadUShort(); + var componentId = buffer.ReadUShort(); + var e = game.GetEntityWithId(entityId); + + switch (componentId) + { +"); + + #line 123 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +for (int i = 0; i < ComponentNames.Length; i++) +{ + var id = ComponentIds[i]; + var name = ComponentNames[i].Replace("Component", ""); + var isTag = IsTags[i]; + + + #line default + #line hidden + this.Write(" case "); + + #line 130 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(id)); + + #line default + #line hidden + this.Write(":\r\n\t\t\t\t\t{\r\n\t\t\t\t\t Logger.I.Log(\"UnpackEntityUtility\", $\" Entity-{entityId}: Rem" + + "oved "); + + #line 132 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(" component\");\r\n"); + + #line 133 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +if (isTag) +{ + + + #line default + #line hidden + this.Write(" e.is"); + + #line 137 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write(" = false;\r\n"); + + #line 138 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +} +else +{ + + + #line default + #line hidden + this.Write(" e.Remove"); + + #line 143 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(name)); + + #line default + #line hidden + this.Write("();\r\n"); + + #line 144 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +} + + + #line default + #line hidden + this.Write("\t\t\t\t\t}\r\n\t\t\t\t\t break;\r\n"); + + #line 149 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +} + + + #line default + #line hidden + this.Write(@" } + } + } + + public static void RemoveEntities(GameContext game, BitBuffer buffer, ushort entityCount) + { + for (int i = 0; i < entityCount; i++) + { + var id = buffer.ReadUShort(); + var e = game.GetEntityWithId(id); + e.isDestroyed = true; + Logger.I.Log(""UnpackEntityUtility"", $"" Entity-{id}: is removed""); + } + } +}"); + return this.GenerationEnvironment.ToString(); + } + + #line 1 "C:\UnityProjects\Coop-JRPG\Generators\Generators\Generators\Sync\Utility\UnpackEntityUtilityGenerator.tt" + +private string[] _ComponentNamesField; + +/// +/// Access the ComponentNames parameter of the template. +/// +private string[] ComponentNames +{ + get + { + return this._ComponentNamesField; + } +} + +private ushort[] _ComponentIdsField; + +/// +/// Access the ComponentIds parameter of the template. +/// +private ushort[] ComponentIds +{ + get + { + return this._ComponentIdsField; + } +} + +private bool[] _IsTagsField; + +/// +/// Access the IsTags parameter of the template. +/// +private bool[] IsTags +{ + get + { + return this._IsTagsField; + } +} + + +/// +/// Initialize the template +/// +public virtual void Initialize() +{ + if ((this.Errors.HasErrors == false)) + { +bool ComponentNamesValueAcquired = false; +if (this.Session.ContainsKey("ComponentNames")) +{ + this._ComponentNamesField = ((string[])(this.Session["ComponentNames"])); + ComponentNamesValueAcquired = true; +} +if ((ComponentNamesValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentNames"); + if ((data != null)) + { + this._ComponentNamesField = ((string[])(data)); + } +} +bool ComponentIdsValueAcquired = false; +if (this.Session.ContainsKey("ComponentIds")) +{ + this._ComponentIdsField = ((ushort[])(this.Session["ComponentIds"])); + ComponentIdsValueAcquired = true; +} +if ((ComponentIdsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("ComponentIds"); + if ((data != null)) + { + this._ComponentIdsField = ((ushort[])(data)); + } +} +bool IsTagsValueAcquired = false; +if (this.Session.ContainsKey("IsTags")) +{ + this._IsTagsField = ((bool[])(this.Session["IsTags"])); + IsTagsValueAcquired = true; +} +if ((IsTagsValueAcquired == false)) +{ + object data = global::System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("IsTags"); + if ((data != null)) + { + this._IsTagsField = ((bool[])(data)); + } +} + + + } +} + + + + #line default + #line hidden + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "15.0.0.0")] + public class UnpackEntityUtilityGeneratorBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Generators/Generators/Generators/Sync/Utility/UnpackEntityUtilityGenerator.tt b/Generators/Generators/Generators/Sync/Utility/UnpackEntityUtilityGenerator.tt new file mode 100644 index 0000000..6f45d40 --- /dev/null +++ b/Generators/Generators/Generators/Sync/Utility/UnpackEntityUtilityGenerator.tt @@ -0,0 +1,166 @@ +<#@ template language="C#" #> +<#@ parameter name="ComponentNames" type="System.String[]"#> +<#@ parameter name="ComponentIds" type="System.UInt16[]"#> +<#@ parameter name="IsTags" type="System.Boolean[]"#> +using System.Text; +using NetStack.Serialization; +using Sources.Tools; + +public static class UnpackEntityUtility +{ + public static void CreateEntities(GameContext game, BitBuffer buffer, ushort entityCount) + { + for (int i = 0; i < entityCount; i++) + { + var addedComponents = new StringBuilder(128); + + var e = game.CreateEntity(); + + var componentsCount = buffer.ReadUShort(); + + for (int j = 0; j < componentsCount; j++) + { + var componentId = buffer.ReadUShort(); + + switch (componentId) + { +<# +for (int i = 0; i < ComponentNames.Length; i++) +{ + var id = ComponentIds[i]; + var fullName = ComponentNames[i]; + var name = ComponentNames[i].Replace("Component", ""); + var isTag = IsTags[i]; +#> + case <#=id#>: + { + addedComponents.Append(" <#=name#> "); +<# +if (isTag) +{ +#> + e.is<#=name#> = true; +<# +} +else +{ +#> + var lookup = GameComponentsLookup.<#=name#>; + var comp = e.CreateComponent<<#=fullName#>>(lookup); + comp.Deserialize(buffer); + e.AddComponent(lookup, comp); +<# +} +#> + } + break; +<# +} +#> + } + } + Logger.I.Log("UnpackEntityUtility", $" Entity-{e.id.Value}: created - ({addedComponents})"); + } + } + + public static void ChangeComponents(GameContext game, BitBuffer buffer, ushort componentCount) + { + for (int i = 0; i < componentCount; i++) + { + var entityId = buffer.ReadUShort(); + var componentId = buffer.ReadUShort(); + var e = game.GetEntityWithId(entityId); + + switch (componentId) + { +<# +for (int i = 0; i < ComponentNames.Length; i++) +{ + var id = ComponentIds[i]; + var fullName = ComponentNames[i]; + var name = ComponentNames[i].Replace("Component", ""); + var isTag = IsTags[i]; +#> + case <#=id#>: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Changed <#=name#> component"); +<# +if (isTag) +{ +#> + e.is<#=name#> = true; +<# +} +else +{ +#> + var lookup = GameComponentsLookup.<#=name#>; + var comp = e.CreateComponent<<#=fullName#>>(lookup); + comp.Deserialize(buffer); + e.ReplaceComponent(lookup, comp); +<# +} +#> + } + break; +<# +} +#> + } + } + } + + public static void RemoveComponents(GameContext game, BitBuffer buffer, ushort componentCount) + { + for (int i = 0; i < componentCount; i++) + { + var entityId = buffer.ReadUShort(); + var componentId = buffer.ReadUShort(); + var e = game.GetEntityWithId(entityId); + + switch (componentId) + { +<# +for (int i = 0; i < ComponentNames.Length; i++) +{ + var id = ComponentIds[i]; + var name = ComponentNames[i].Replace("Component", ""); + var isTag = IsTags[i]; +#> + case <#=id#>: + { + Logger.I.Log("UnpackEntityUtility", $" Entity-{entityId}: Removed <#=name#> component"); +<# +if (isTag) +{ +#> + e.is<#=name#> = false; +<# +} +else +{ +#> + e.Remove<#=name#>(); +<# +} +#> + } + break; +<# +} +#> + } + } + } + + public static void RemoveEntities(GameContext game, BitBuffer buffer, ushort entityCount) + { + for (int i = 0; i < entityCount; i++) + { + var id = buffer.ReadUShort(); + var e = game.GetEntityWithId(id); + e.isDestroyed = true; + Logger.I.Log("UnpackEntityUtility", $" Entity-{id}: is removed"); + } + } +} \ No newline at end of file diff --git a/Generators/Generators/Generators/bin/Debug/Generators.dll b/Generators/Generators/Generators/bin/Debug/Generators.dll new file mode 100644 index 0000000000000000000000000000000000000000..71c89de647bb8f1ef91ca78d93a1c8fbfca42a39 GIT binary patch literal 65024 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�+VGVYmNpcGYr-bOb{4K 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 literal 0 HcmV?d00001 diff --git a/Hash.userproperties b/Hash.userproperties new file mode 100644 index 0000000..e69de29 diff --git a/Jenny.properties b/Jenny.properties new file mode 100644 index 0000000..39d050d --- /dev/null +++ b/Jenny.properties @@ -0,0 +1,52 @@ +Jenny.SearchPaths = Assets\Plugins\DesperateDevs\Editor\Plugins, \ + Assets\Plugins\Entitas\Editor\Plugins + +Jenny.Plugins = DesperateDevs.CodeGeneration.Plugins, \ + DesperateDevs.CodeGeneration.Unity.Plugins, \ + Entitas.CodeGeneration.Plugins, \ + Entitas.VisualDebugging.CodeGeneration.Plugins + +Jenny.PreProcessors = DesperateDevs.CodeGeneration.Plugins.ValidateProjectPathPreProcessor, \ + DesperateDevs.CodeGeneration.Unity.Plugins.WarnIfCompilationErrorsPreProcessor, \ + DesperateDevs.CodeGeneration.Plugins.TargetFrameworkProfilePreProcessor + +Jenny.DataProviders = Entitas.CodeGeneration.Plugins.ComponentDataProvider, \ + Entitas.CodeGeneration.Plugins.ContextDataProvider, \ + Entitas.CodeGeneration.Plugins.EntityIndexDataProvider + +Jenny.CodeGenerators = Entitas.CodeGeneration.Plugins.ComponentContextApiGenerator, \ + Entitas.CodeGeneration.Plugins.ComponentEntityApiGenerator, \ + Entitas.CodeGeneration.Plugins.ComponentEntityApiInterfaceGenerator, \ + Entitas.CodeGeneration.Plugins.ComponentGenerator, \ + Entitas.CodeGeneration.Plugins.ComponentLookupGenerator, \ + Entitas.CodeGeneration.Plugins.ComponentMatcherApiGenerator, \ + Entitas.CodeGeneration.Plugins.ContextAttributeGenerator, \ + Entitas.CodeGeneration.Plugins.ContextGenerator, \ + Entitas.CodeGeneration.Plugins.ContextMatcherGenerator, \ + Entitas.CodeGeneration.Plugins.ContextsGenerator, \ + Entitas.CodeGeneration.Plugins.EntityGenerator, \ + Entitas.CodeGeneration.Plugins.EntityIndexGenerator, \ + Entitas.CodeGeneration.Plugins.EventEntityApiGenerator, \ + Entitas.CodeGeneration.Plugins.EventListenerComponentGenerator, \ + Entitas.CodeGeneration.Plugins.EventListenertInterfaceGenerator, \ + Entitas.CodeGeneration.Plugins.EventSystemGenerator, \ + Entitas.CodeGeneration.Plugins.EventSystemsGenerator, \ + Entitas.VisualDebugging.CodeGeneration.Plugins.ContextObserverGenerator, \ + Entitas.VisualDebugging.CodeGeneration.Plugins.FeatureClassGenerator + +Jenny.PostProcessors = DesperateDevs.CodeGeneration.Plugins.AddFileHeaderPostProcessor, \ + DesperateDevs.CodeGeneration.Plugins.CleanTargetDirectoryPostProcessor, \ + DesperateDevs.CodeGeneration.Plugins.MergeFilesPostProcessor, \ + DesperateDevs.CodeGeneration.Plugins.NewLinePostProcessor, \ + DesperateDevs.CodeGeneration.Plugins.UpdateCSProjPostProcessor, \ + DesperateDevs.CodeGeneration.Plugins.WriteToDiskPostProcessor, \ + DesperateDevs.CodeGeneration.Plugins.ConsoleWriteLinePostProcessor, \ + DesperateDevs.CodeGeneration.Unity.Plugins.DebugLogPostProcessor + +Jenny.Server.Port = 3333 +Jenny.Client.Host = localhost +DesperateDevs.CodeGeneration.Plugins.ProjectPath = Assembly-CSharp.csproj +Entitas.CodeGeneration.Plugins.Assemblies = Library/ScriptAssemblies/Assembly-CSharp.dll +Entitas.CodeGeneration.Plugins.Contexts = Game +Entitas.CodeGeneration.Plugins.IgnoreNamespaces = false +DesperateDevs.CodeGeneration.Plugins.TargetDirectory = Assets diff --git a/Packages/manifest.json b/Packages/manifest.json new file mode 100644 index 0000000..324d1ed --- /dev/null +++ b/Packages/manifest.json @@ -0,0 +1,41 @@ +{ + "dependencies": { + "com.unity.ads": "2.0.8", + "com.unity.analytics": "3.3.2", + "com.unity.collab-proxy": "1.2.16", + "com.unity.package-manager-ui": "2.1.2", + "com.unity.purchasing": "2.0.6", + "com.unity.textmeshpro": "2.0.0", + "com.unity.timeline": "1.0.0", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..4f31e74 --- /dev/null +++ b/ProjectSettings/AudioManager.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..cdc1f3e --- /dev/null +++ b/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0 + m_ClothInterCollisionStiffness: 0 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_DefaultMaxAngluarSpeed: 7 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..0147887 --- /dev/null +++ b/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: [] + m_configObjects: {} diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..96c6ed5 --- /dev/null +++ b/ProjectSettings/EditorSettings.asset @@ -0,0 +1,25 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + m_ExternalVersionControlSupport: Hidden Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 2 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp + m_ProjectGenerationRootNamespace: + m_CollabEditorSettings: + inProgressEnabled: 1 + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..f3874f6 --- /dev/null +++ b/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,64 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..4198911 --- /dev/null +++ b/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 0 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 1 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ProjectSettings/PresetManager.asset b/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..636a595 --- /dev/null +++ b/ProjectSettings/PresetManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + m_DefaultList: [] diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..d8bbeb0 --- /dev/null +++ b/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,645 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 16 + productGUID: 28fba416b7246d24f9f5f47fb5a6fa4d + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: Entitas-Sync-Framework + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosAppInBackgroundBehavior: 0 + displayResolutionDialog: 1 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidBlitType: 0 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + graphicsJobs: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + graphicsJobMode: 0 + fullscreenMode: 3 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 0 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + vulkanEnableSetSRGBWrite: 0 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleVersion: 0.1 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + cardboard: + depthFormat: 0 + enableTransitionView: 0 + daydream: + depthFormat: 0 + useSustainedPerformanceMode: 0 + enableVideoLayer: 0 + useProtectedVideoMemory: 0 + minimumSupportedHeadTracking: 0 + maximumSupportedHeadTracking: 1 + hololens: + depthFormat: 1 + depthBufferSharingEnabled: 1 + lumin: + depthFormat: 0 + frameTiming: 2 + enableGLCache: 0 + glCacheMaxBlobSize: 524288 + glCacheMaxFileSize: 8388608 + oculus: + sharedDepthBuffer: 1 + dashSupport: 1 + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + protectGraphicsMemory: 0 + enableFrameTimingStats: 0 + useHDRDisplay: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: {} + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 16 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 1 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: 9.0 + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 9.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + iPhoneSplashScreen: {fileID: 0} + iPhoneHighResSplashScreen: {fileID: 0} + iPhoneTallHighResSplashScreen: {fileID: 0} + iPhone47inSplashScreen: {fileID: 0} + iPhone55inPortraitSplashScreen: {fileID: 0} + iPhone55inLandscapeSplashScreen: {fileID: 0} + iPhone58inPortraitSplashScreen: {fileID: 0} + iPhone58inLandscapeSplashScreen: {fileID: 0} + iPadPortraitSplashScreen: {fileID: 0} + iPadHighResPortraitSplashScreen: {fileID: 0} + iPadLandscapeSplashScreen: {fileID: 0} + iPadHighResLandscapeSplashScreen: {fileID: 0} + iPhone65inPortraitSplashScreen: {fileID: 0} + iPhone65inLandscapeSplashScreen: {fileID: 0} + iPhone61inPortraitSplashScreen: {fileID: 0} + iPhone61inLandscapeSplashScreen: {fileID: 0} + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSUseLaunchScreenStoryboard: 0 + iOSLaunchScreenCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + iOSRenderExtraFrameOnPause: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.3d@2.3.1 + templateDefaultScene: Assets/Scenes/SampleScene.unity + AndroidTargetArchitectures: 1 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: '{inproject}: ' + AndroidKeyaliasName: + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + resolutionDialogBanner: {fileID: 0} + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: [] + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: AndroidPlayer + m_APIs: 150000000b000000 + m_Automatic: 0 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 0 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR + m_BuildTargetEnableVuforiaSettings: [] + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: [] + m_BuildTargetGroupLightmapSettings: [] + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchTouchScreenUsage: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 3 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchPlayerConnectionEnabled: 1 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + spritePackerPolicy: + webGLMemorySize: 16 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLWasmStreaming: 0 + scriptingDefineSymbols: + 1: ODIN_INSPECTOR;NETSTACK_SPAN + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + managedStrippingLevel: {} + incrementalIl2cppBuild: {} + allowUnsafeCode: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 0 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: + Standalone: 6 + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: Template_3D + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: Template_3D + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + xboxOneScriptCompiler: 1 + XboxOneOverrideIdentityName: + vrEditorSettings: + daydream: + daydreamIconForeground: {fileID: 0} + daydreamIconBackground: {fileID: 0} + cloudServicesEnabled: + UNet: 1 + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + facebookSdkVersion: 7.9.4 + facebookAppId: + facebookCookies: 1 + facebookLogging: 1 + facebookStatus: 1 + facebookXfbml: 0 + facebookFrictionlessRequests: 1 + apiCompatibilityLevel: 6 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + projectName: + organizationId: + cloudEnabled: 0 + enableNativePlatformBackendsForNewInputSystem: 0 + disableOldInputManagerSupport: 0 + legacyClampBlendShapeWeights: 1 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..241ebd0 --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2019.1.0f2 +m_EditorVersionWithRevision: 2019.1.0f2 (292b93d75a2c) diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..ed26313 --- /dev/null +++ b/ProjectSettings/QualitySettings.asset @@ -0,0 +1,231 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Lumin: 5 + Nintendo 3DS: 5 + Nintendo Switch: 5 + PS4: 5 + PSP2: 2 + Standalone: 5 + WebGL: 3 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..1c92a78 --- /dev/null +++ b/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..c3ae9a0 --- /dev/null +++ b/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 1 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..6e0eaca --- /dev/null +++ b/ProjectSettings/VFXManager.asset @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/ProjectSettings/XRSettings.asset b/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000..482590c --- /dev/null +++ b/ProjectSettings/XRSettings.asset @@ -0,0 +1,10 @@ +{ + "m_SettingKeys": [ + "VR Device Disabled", + "VR Device User Alert" + ], + "m_SettingValues": [ + "False", + "False" + ] +} \ No newline at end of file

    mM$F?BYZYK4<%-ZrMA1%4Qn5tvx*8d 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